From be3289c09a14db3307decb88632b3e5c5d41b85d Mon Sep 17 00:00:00 2001 From: 3dJan <56254096+3dJan@users.noreply.github.com> Date: Sat, 9 Nov 2024 17:44:32 +0100 Subject: [PATCH] 3djan/merge implicit (#394) * Fix default filter attribute * Rename linear to linearcolor * Always write ScalarFieldFromImage3D-channel * Fix fieldid vs scalar/vector3d-fieldid * Implement RemoveProperty * Implement RemoveBoundary and RemoveColor * Add test for properties * Fix some iterators * Add tests for iterators * Add composite volumetric data * Replace "Red", "Green",... with "R", "G", ... * Using file globbing for gathering source files, removing unused *.cpp files * Adding generateWrapper-script for linux64 * [lib3mf.xml] Introducing ImplicitNode and InplicitAddition * [genertateWrapperAndBindingsLinux64.sh] Creating implementation stubs in Source/API and Include/API, I am just to lazy to copy manually * Updating year and version * ModelReaderNode for implicit node * Introducing addition node * [lib3mf.xml] Removing ImplicitAdditon. Introducing a class for each node type is to much effort. Adding dynamic inputs and outputs to the base node type, and introducing an enum with the node types. This also allows the user to choose between modeling the node types as classes or to choose a dynamic approach. * [lib3mf.xml] Adding node types * Introducing a resource Function that wraps an Implicit Function * Adding install step for cmake config * ImplicitFunction is now a resource * [CMakeLists.txt] Disabling optimization for gcc in debug * AddFunction works * [lib3mf_implicitfunction] Avoiding dynamic casting of underlying resource * Adding NMR_Model prefix to all implicit classes * Moving methods for writing implicit functions to NMR_ModelWriterNode_Implicit * Write out functions to resource section * Adding reader for implicit function * [.gitignore] Ignoring TestOutput * [API] Replacing the Accessor by an Iterator to be consistent with the ResourceIterator * Extending the model for implicit nodes,ports etc. * Reading node elements of a function * Adding input and output ports automatically * Reading input ports * Adding SetupWriteReadx.3mf to .gitignore * Input ports with references can be written and read back again * Writing function inputs and outputs * Reading inputs and outputs of a function * Throw on incompatible port types * Introducing FindInput/FindOutput * Constants can be written and read back * Reading and writing constvec * Reading and writing constMat * Untracking and deleting 3mf files generate by tests * Adding missing #include and some static casts for 32 bit platforms * Replacing std::make_unique to be c++11 compatible * Should now compile on 32 bit platforms * Missed another cast * Replacing cast to wrong type * [github action] Use ubuntu-latest runner rather than 18.04 * [CMakeLists.txt] VS2022 failed to compile lib3mf because compile options meant for the c++ compiler were passed to the resource compiler * [CMakeLists.txt] Using generator expressions only for ninja * [CMakeLists.txt] target_compile_definitions -> target_compile_options * [CMakeLists.txt] Adding buildcache support * [implicit] Updating naming of inputs and outputs * [implicit] Correcting case of some node names * Adding ScalarFieldFunction and Vector3DFieldFunction * Writng the new function based fields, but Seg Fault in ImplicitSphere test * [Volumetric tests] Check if the output directory already exists * [.gitifnore] Adding .vs * Adding CMakeSettings for legacy visual studio versions * Adding decomposevector-node for implicit graph * [Volumetric test] New gyroid test, fixing some issues on the way * Update lib3mf.xml * Restructure Function-classes, add 'tag' * Fix CMakeLists (potentially) * [NMR_ModelImplicitNode.h] Adding missing argument name * Removing extra qualification * Removing another unnessary qualification * [build.yml] macos-10.15 -> macos-11 * [build.yml] Using macos-11 runner for deploy-macos * Introducing Resource Node, that allows to set a resource id that than can be used as input for the mesh node * [implicit] Introducing port type for resource id * [implicit] point -> pos to make nameing more consistent * [implicit] Resources are now set by setting a Resource * [implicit] Resources are now set by setting a Resource part II * Adding .clang-format * [Volumetric tests] Exporting implicit model with a sub function * Removing faulty call to base class constructor that is already called automatically * Adding test for loading a 3d image * Updating test file * Adding debug config * Introducing NMR_ModelFunctionFromImage3D * Implementing lib3mf_functionformimage3d * Adding reader for FunctionFromImage3D * Adding writer for FunctionsFromImage3D * Writing test file for FunctionFromImage3D * Fixing integration test for functionFromImage3D * Comparing functionsFromImage3D. Tests fails, api for accessing functions has to be changed * Extending test and fixing writing/reading of resource ids * Breaking change: Dropping Fields in favor of Functions. Tests are WIP * Replacing Fields with Functions * [NMR_ModelImplicitFunction] addLink now also resolves output ports * [volumetric tests] Disabling broken tests, new tests requiered * [Volumetric tests] Updating compare functions and fixing issue with wrong resource ids * [volumetric tests] Adding volume data elements * Readding Transform for VolumeData elements (boundary, color, property) * [volumetric tests] CreateImplicitWithFunctionFromImage3D writes Transformation * [volumetric tests] Adding more tests * [volumetirc tests] Using cube instead of pyramid to make it easier to validate the test results * [functionfromimage3d writer] Using ModelResourceId for image3dID * formatting * [ModelFunctionFromImage3D] Fetching resource in getter rather than getter * [volumetric test] setting boundary threshold * [NodeTypes] NodeTypeMap considers port types and multiple combinations * [ImplicitNodeTypes] Adding nodes and types according to spec * [implicit] Adding per node type validation * Adding OutputName to all volume data elements * outputname -> channelname to be consistent with old spec * Implementing ChannelName into volumedata reader * Adding missing channel attribute to writer * [implicit] Adding clamp * [implicit] Using optionalclass for FindOutput and FindInput * [implicit] Implementing removeNode * [implicit] Adding clear method to implicit functions * [lib3mf.xml] Introducing MinFeatureSize and MeshBBoxOnly * Writing and reading minfeaturesize and meshbboxonly * [lib3mf_model] Introducing mergeFunctions * Replacing resourceids during merging of functions * Introducing MergeFromModel * [volumetric] Adding test for merging a second function * [NMR_Model] Creating new package ids for the merged functions * Fixing broken tests * [ImplicitFunction] Introducing SortNodesTopologically * [Volumetric tests] Adding volume element to shell from mesh test * Fixing warning that is turning into error with VS2022 * Removing solidthreshold attribute from element * Introducing ImplicitNodeConfiguration, to set port types during construction of nodes * [Implicit] Initializing port types based on the set node configuration * Fixing warnings and errors from gcc * Satisfying clang warnings * Using local independent std::from_chars for parsing floating point numbers * Setting c++17 for all compiler * Replacing strtof with fnStringToFloat * [fnStringToDouble] Adding std::chars_format::general, not all compiler seem to support the overload with 3 arguments * [build.yml] Changing all runners to latest * Revert "Replacing strtof with fnStringToFloat" This reverts commit 27ca9de181dc1213a1f06ef6d626fb5d89c552df. * Falling back to strtod for non c++17 complaint platforms * [lib3mf.xml] Adding spezialized node classes * [lib3mf.xml] Adding spezialized factory methods for implicit nodes * Generating new API with ACT * [implicit] Adding factories for spezialized node types * [Volumetric tests] Using new API for node creation * [CImplicitNode] Explicitly initalizining m_pImplicitNode in derived classes * [Volumetric tests] Passing again * [Volumetric/Implicit] Enabling dynamic_pointer_cast for nodeiterator->getCurrent() * [Volumetric] Improving error messages * Ports now know the referenced port, not just its name * Introducing DirectedGraph * [build.yml] Don't fail cli if codecoverage fails * Adding fast_float as submodule * Using fast_float for string parsing * [Common/graph] Unsigned indices * [GraphAlgorithms] Resolving signed/unsigned mismatch * Updating accroding to spec: UnsignedMesh, vectorfroamscalar, matrixfromrows, matrixfromcolumns * Adding fallback value to volume data elements * Improving Volumetric tests, so that the output files make more sense * Breaking change: Adding implicit namespace with prefix "i", writing and reading considers the namespace. Writing explicitly the default channel name for volumedata:boundary * [NMR_ImplicitNodeTypes] Adding VectorFromScalar and UnsignedMesh * [implicit] Don't write inputs for nodes that are not supposed to have them * Fixing namespace check for volumetric and implicit * Updating namespace urls for volumetric and implicit * CheckRequiredExtensions now considers Volumetric and Implict namespace * Introducing BoundaryShape, removing boundary from VolumeData * Introducing ModelBoundaryShapeObject * Implementing wrapper for boundary shape * Reader for boundary shape * Removing boundary from volume data * Making VolumeData a Resource (WIP) * [CModelVolumeData] Removing boundary * [VectorFromScalarNode] Adding missing implementation by inheriting OneInputNode * Adding VolumeData as resource * [BoundaryShape] Implementing writer * Add XML attribute for boundary shape ID * [API] Introducing AddBoundaryShape * [Volumetric tests] fixing some tests, but requiers api mehtod to query BoundaryShapeObjects * [Volumetric tests] Tests pass again * [CBoundaryShape] Adding implementation for Set and GetVolumeData * [.gitmodules] Adding cpp-base64 * [.gitmodules] Adding googletest, libzip and zlib * Renaming boundary shape to level set * Correcting filename case * Correcting more filename cases * Implement IsMeshObject method in CLevelSet class * Introducing IsLevelSetObject * Add GetLevelSetByID method to IModel interface * Fix null pointer exception in CMeshObject::GetVolumeData() * Add support for CModelLevelSetObject in CObject::fnCreateObjectFromModelResource * [implicit] Adding mod (glsl) node * Adding missing ctor for CMoeNode * Resource -> ConstResourceID * [WriterNode_Implicit] Writing function outputs at the end of functions rather than in the beginning to avoid forward references * cherrypicking fix for functionfromimage3d to read scale and offset * Add CMakePresets.json for build configurations * [levelset] Adding missing override for IsComponentsObject() * [levelset] Adding missing override for IsComponentsObject() * Writing id attribute of * Removing XML constants for scalar and vector fields * Reading volumedata id attribute * feat: Add volumeData Id assertion and validation in Volumetric tests * XML constants for volumedata and levelset attributes * Add writePrefixedIntAttribute method to ModelWriterNode * Levelsets writes volumeid * Mesh writer does not write VolumeData anymore * refactor: Update attribute name in ModelReaderNode_LevelSet.cpp * ModelReaderNode100_Mesh reads volumeid * volumedata is wrtten out as a resource * CModelReaderNode100_Mesh parses volumeid with namestace prefix * Implicit: function -> implicitfunction, for now both element names are accepted for reading to migrate existing files * CLevelSet::GetVolumeData returns nullptr if no volumedata is set * Levelset writes volumeid without namespace prefix * Correcting string literals based on findings by quality logic * Writing prefix for functions inputs again * Improving error messages * Enhance CNMRException to include detailed error messages and improve exception handling * Improving resource ID handling for merging implicit functions * [CModel] Refactor resource ID generation to ensure uniqueness * generateResourceID now considers the model resource id rather than the UniqueResourceID * Update GitHub Actions to use checkout and upload-artifact actions version 4 * Update GitHub Actions to use download-artifact action version 4 * Refactor model writer to introduce dedicated methods for writing base materials, textures, and colors * Extract resource write methods * Extracting writeResource * Write resources in topological order * Add cyclic dependency check to resource sorting algorithm * Prevent duplicate metadata addition and enhance test coverage for model merging * Fixing mix up between unique and model resource id * Rename UniqueResourceID to ModelResourceID in CModelImplicitNode * Enhance error message for resource ID not found exception to include details on potential forward references * Fixing issue with merging functions * Adding new tesf files for volumetric test * Setting parent of merged implicit nodes * Implement RemoveResource method in model interface and bindings * Remove package resource ID from resource handler upon resource removal * Add function resource verification in volumetric tests and update function count handling * Refactor function count retrieval and clean up debug output for merged implicit functions * Resolving merge conflicts * Update dynamic library copy command to use version variable for consistency * Update dynamic library copy command to include version suffix * Rename enum value 'None' to 'BeamLatticeBallModeNone' to not use a python keyword * Update lib3mf_DIR paths to use environment variable for versioning * Increasing code coverage of binding tests --------- Co-authored-by: Martin Weismann <30837766+martinweismann@users.noreply.github.com> --- .clang-format | 14 + .gitignore | 9 + Autogenerated/Bindings/C/lib3mf.h | 3499 ++- Autogenerated/Bindings/C/lib3mf_types.h | 232 +- .../Bindings/CDynamic/lib3mf_dynamic.cc | 2884 ++- .../Bindings/CDynamic/lib3mf_dynamic.h | 3742 ++- .../Bindings/CDynamic/lib3mf_types.h | 232 +- Autogenerated/Bindings/CSharp/Lib3MF.cs | 4240 +++- Autogenerated/Bindings/Cpp/lib3mf_abi.hpp | 3499 ++- .../Bindings/Cpp/lib3mf_implicit.hpp | 9273 ++++++-- Autogenerated/Bindings/Cpp/lib3mf_types.hpp | 210 +- .../Bindings/CppDynamic/lib3mf_abi.hpp | 1388 +- .../Bindings/CppDynamic/lib3mf_dynamic.h | 3742 ++- .../Bindings/CppDynamic/lib3mf_dynamic.hpp | 19283 ++++++++++++---- .../Bindings/CppDynamic/lib3mf_types.hpp | 210 +- Autogenerated/Bindings/Go/cfunc.go | 4 +- Autogenerated/Bindings/Go/lib3mf.go | 10541 +++++++-- Autogenerated/Bindings/Go/lib3mf_dynamic.cc | 2884 ++- Autogenerated/Bindings/Go/lib3mf_dynamic.h | 3742 ++- Autogenerated/Bindings/Go/lib3mf_impl.go | 4126 +++- Autogenerated/Bindings/Go/lib3mf_types.h | 232 +- .../Bindings/NodeJS/lib3mf_dynamic.cc | 2884 ++- .../Bindings/NodeJS/lib3mf_dynamic.h | 3742 ++- .../Bindings/NodeJS/lib3mf_nodeaddon.cc | 77 +- .../Bindings/NodeJS/lib3mf_nodewrapper.cc | 14087 +++++++++-- .../Bindings/NodeJS/lib3mf_nodewrapper.h | 1488 +- Autogenerated/Bindings/NodeJS/lib3mf_types.h | 232 +- Autogenerated/Bindings/Pascal/Unit_Lib3MF.pas | 16412 ++++++++++--- Autogenerated/Bindings/Python/Lib3MF.py | 10768 ++++++--- Autogenerated/Source/lib3mf_abi.hpp | 3499 ++- .../Source/lib3mf_interfaceexception.cpp | 4 +- .../Source/lib3mf_interfaceexception.hpp | 4 +- .../Source/lib3mf_interfacejournal.cpp | 6 +- .../Source/lib3mf_interfacejournal.hpp | 4 +- Autogenerated/Source/lib3mf_interfaces.hpp | 3759 ++- .../Source/lib3mf_interfacewrapper.cpp | 12417 +++++++++- Autogenerated/Source/lib3mf_types.hpp | 210 +- .../generateWrapperAndBindingsLinux64.sh | 8 + .../generateWrapperAndBindingsWin64.sh | 8 + AutomaticComponentToolkit/lib3mf.xml | 4765 +++- AutomaticComponentToolkit/patch_python.bat | 17 - AutomaticComponentToolkit/patch_python.sh | 17 - CMakeLists.txt | 41 +- CMakePresets.json | 53 + Include/API/lib3mf_absnode.hpp | 87 + Include/API/lib3mf_accessright.hpp | 8 +- Include/API/lib3mf_additionnode.hpp | 87 + Include/API/lib3mf_arccosnode.hpp | 87 + Include/API/lib3mf_arcsinnode.hpp | 87 + Include/API/lib3mf_arctan2node.hpp | 87 + Include/API/lib3mf_arctannode.hpp | 87 + Include/API/lib3mf_attachment.hpp | 2 + Include/API/lib3mf_ceilnode.hpp | 87 + Include/API/lib3mf_clampnode.hpp | 99 + Include/API/lib3mf_componentsobject.hpp | 1 + Include/API/lib3mf_composematrixnode.hpp | 190 + Include/API/lib3mf_composevectornode.hpp | 111 + Include/API/lib3mf_constantnode.hpp | 105 + Include/API/lib3mf_constmatnode.hpp | 105 + Include/API/lib3mf_constvecnode.hpp | 105 + Include/API/lib3mf_coshnode.hpp | 87 + Include/API/lib3mf_cosnode.hpp | 87 + Include/API/lib3mf_crossnode.hpp | 88 + Include/API/lib3mf_decomposevectornode.hpp | 111 + Include/API/lib3mf_divisionnode.hpp | 87 + Include/API/lib3mf_dotnode.hpp | 87 + Include/API/lib3mf_expnode.hpp | 87 + Include/API/lib3mf_floornode.hpp | 87 + Include/API/lib3mf_fmodnode.hpp | 87 + Include/API/lib3mf_fractnode.hpp | 87 + Include/API/lib3mf_function.hpp | 156 + Include/API/lib3mf_functioncallnode.hpp | 92 + Include/API/lib3mf_functionfromimage3d.hpp | 156 + Include/API/lib3mf_functioniterator.hpp | 93 + Include/API/lib3mf_functionreference.hpp | 149 + Include/API/lib3mf_image3d.hpp | 94 + Include/API/lib3mf_image3diterator.hpp | 88 + Include/API/lib3mf_imagestack.hpp | 109 + Include/API/lib3mf_implicitfunction.hpp | 795 + Include/API/lib3mf_implicitnode.hpp | 173 + Include/API/lib3mf_implicitport.hpp | 137 + Include/API/lib3mf_implicitportiterator.hpp | 95 + Include/API/lib3mf_inversenode.hpp | 87 + Include/API/lib3mf_iterator.hpp | 106 + Include/API/lib3mf_keystore.hpp | 24 +- Include/API/lib3mf_lengthnode.hpp | 87 + Include/API/lib3mf_levelset.hpp | 194 + Include/API/lib3mf_levelsetiterator.hpp | 93 + Include/API/lib3mf_log10node.hpp | 87 + Include/API/lib3mf_log2node.hpp | 87 + Include/API/lib3mf_lognode.hpp | 87 + Include/API/lib3mf_materialmapping.hpp | 87 + Include/API/lib3mf_matrixfromcolumnsnode.hpp | 117 + Include/API/lib3mf_matrixfromrowsnode.hpp | 117 + .../API/lib3mf_matvecmultiplicationnode.hpp | 87 + Include/API/lib3mf_maxnode.hpp | 84 + Include/API/lib3mf_meshnode.hpp | 105 + Include/API/lib3mf_meshobject.hpp | 8 +- Include/API/lib3mf_minnode.hpp | 87 + Include/API/lib3mf_model.hpp | 32 +- Include/API/lib3mf_modnode.hpp | 87 + Include/API/lib3mf_multiplicationnode.hpp | 87 + Include/API/lib3mf_nodeiterator.hpp | 96 + Include/API/lib3mf_object.hpp | 2 + Include/API/lib3mf_oneinputnode.hpp | 101 + Include/API/lib3mf_pownode.hpp | 87 + Include/API/lib3mf_resource.hpp | 4 +- Include/API/lib3mf_resourceidnode.hpp | 106 + Include/API/lib3mf_resourceiterator.hpp | 2 + Include/API/lib3mf_roundnode.hpp | 87 + Include/API/lib3mf_selectnode.hpp | 105 + Include/API/lib3mf_signnode.hpp | 87 + Include/API/lib3mf_sinhnode.hpp | 87 + Include/API/lib3mf_sinnode.hpp | 88 + Include/API/lib3mf_sqrtnode.hpp | 87 + Include/API/lib3mf_subtractionnode.hpp | 87 + Include/API/lib3mf_tanhnode.hpp | 87 + Include/API/lib3mf_tannode.hpp | 87 + Include/API/lib3mf_transposenode.hpp | 87 + Include/API/lib3mf_twoinputnode.hpp | 94 + Include/API/lib3mf_unsignedmeshnode.hpp | 105 + Include/API/lib3mf_utils.hpp | 1 + Include/API/lib3mf_vectorfromscalarnode.hpp | 87 + Include/API/lib3mf_volumedata.hpp | 116 + Include/API/lib3mf_volumedatacolor.hpp | 89 + Include/API/lib3mf_volumedatacomposite.hpp | 102 + Include/API/lib3mf_volumedataproperty.hpp | 94 + Include/API/lib3mf_writer.hpp | 12 +- Include/Common/Graph/DirectedGraph.h | 67 + Include/Common/Graph/GraphAlgorithms.h | 41 + Include/Common/Graph/IDirectedGraph.h | 62 + Include/Common/Mesh/NMR_Mesh.h | 1 - Include/Common/Mesh/NMR_MeshTypes.h | 15 +- Include/Common/Mesh/NMR_VolumeDataBoundary.h | 61 + Include/Common/Mesh/NMR_VolumeDataColor.h | 54 + Include/Common/Mesh/NMR_VolumeDataComposite.h | 68 + Include/Common/Mesh/NMR_VolumeDataProperty.h | 64 + Include/Common/NMR_ErrorConst.h | 228 + Include/Common/NMR_Exception.h | 7 +- Include/Common/NMR_FunctionReference.h | 80 + Include/Model/Classes/NMR_ImplicitNodeTypes.h | 116 + Include/Model/Classes/NMR_KeyStoreCEKParams.h | 2 +- Include/Model/Classes/NMR_Model.h | 52 + Include/Model/Classes/NMR_ModelAttachment.h | 5 +- .../Model/Classes/NMR_ModelComponentsObject.h | 2 + Include/Model/Classes/NMR_ModelConstants.h | 98 + Include/Model/Classes/NMR_ModelFunction.h | 73 + .../Classes/NMR_ModelFunctionFromImage3D.h | 91 + Include/Model/Classes/NMR_ModelImage3D.h | 69 + Include/Model/Classes/NMR_ModelImageStack.h | 80 + .../Model/Classes/NMR_ModelImplicitFunction.h | 134 + Include/Model/Classes/NMR_ModelImplicitNode.h | 126 + Include/Model/Classes/NMR_ModelImplicitPort.h | 90 + .../Classes/NMR_ModelImplicitPortNames.h | 79 + .../Model/Classes/NMR_ModelLevelSetObject.h | 116 + Include/Model/Classes/NMR_ModelMeshObject.h | 9 +- Include/Model/Classes/NMR_ModelObject.h | 1 - Include/Model/Classes/NMR_ModelResource.h | 13 +- Include/Model/Classes/NMR_ModelTypes.h | 45 +- Include/Model/Classes/NMR_ModelVolumeData.h | 92 + .../Reader/NMR_ModelReaderNode_KeyStoreBase.h | 2 +- .../NMR_Implicit_PortType_Convert.h | 55 + .../NMR_ModelReaderNode_FunctionFromImage3D.h | 74 + .../NMR_ModelReaderNode_Implicit_Function.h | 68 + ..._ModelReaderNode_Implicit_Function_Input.h | 63 + ...ModelReaderNode_Implicit_Function_Inputs.h | 60 + ...ModelReaderNode_Implicit_Function_Output.h | 64 + ...odelReaderNode_Implicit_Function_Outputs.h | 60 + .../NMR_ModelReaderNode_Implicit_Node.h | 65 + ...NMR_ModelReaderNode_Implicit_Node_Inputs.h | 59 + ...MR_ModelReaderNode_Implicit_Node_Outputs.h | 59 + .../NMR_ModelReaderNode_Implicit_Port.h | 75 + .../NMR_ModelReaderNode_LevelSet.h | 88 + ...NMR_ModelReaderNode_Volumetric2201_Color.h | 76 + ...R_ModelReaderNode_Volumetric2201_Image3D.h | 68 + ...odelReaderNode_Volumetric2201_ImageSheet.h | 61 + ...odelReaderNode_Volumetric2201_ImageStack.h | 67 + ..._ModelReaderNode_Volumetric2201_Property.h | 78 + ...odelReaderNode_Volumetric2201_VolumeData.h | 63 + .../Reader/v100/NMR_ModelReaderNode100_Mesh.h | 16 +- Include/Model/Writer/NMR_ModelWriterNode.h | 2 + .../Writer/NMR_ModelWriterNode_Implicit.h | 74 + .../Writer/NMR_ModelWriterNode_LevelSet.h | 70 + .../Writer/NMR_ModelWriterNode_VolumeData.h | 69 + .../Writer/v100/NMR_ModelWriterNode100_Mesh.h | 4 +- .../v100/NMR_ModelWriterNode100_Model.h | 24 +- .../v100/NMR_ResourceDependencySorter.h | 65 + SDK/CPackExamples/Cpp/CMakeLists.txt | 6 +- SDK/CPackExamples/CppDynamic/CMakeLists.txt | 6 +- ...CoreApp,Version=v2.0.AssemblyAttributes.cs | 4 + .../Lib3MF_Example.AssemblyInfo.cs | 23 + .../Lib3MF_Example.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 3 + ...3MF_Example.csproj.CoreCompileInputs.cache | 1 + SDK/GenerateSDK_github.sh | 2 +- Source/API/lib3mf_absnode.cpp | 47 + Source/API/lib3mf_additionnode.cpp | 48 + Source/API/lib3mf_arccosnode.cpp | 47 + Source/API/lib3mf_arcsinnode.cpp | 47 + Source/API/lib3mf_arctan2node.cpp | 48 + Source/API/lib3mf_arctannode.cpp | 47 + Source/API/lib3mf_attachment.cpp | 5 + Source/API/lib3mf_beamlattice.cpp | 6 +- Source/API/lib3mf_ceilnode.cpp | 47 + Source/API/lib3mf_clampnode.cpp | 57 + Source/API/lib3mf_componentsobject.cpp | 5 + Source/API/lib3mf_composematrixnode.cpp | 133 + Source/API/lib3mf_composevectornode.cpp | 68 + Source/API/lib3mf_constantnode.cpp | 64 + Source/API/lib3mf_constmatnode.cpp | 64 + Source/API/lib3mf_constvecnode.cpp | 64 + Source/API/lib3mf_coshnode.cpp | 47 + Source/API/lib3mf_cosnode.cpp | 47 + Source/API/lib3mf_crossnode.cpp | 47 + Source/API/lib3mf_decomposevectornode.cpp | 68 + Source/API/lib3mf_divisionnode.cpp | 48 + Source/API/lib3mf_dotnode.cpp | 47 + Source/API/lib3mf_expnode.cpp | 47 + Source/API/lib3mf_floornode.cpp | 47 + Source/API/lib3mf_fmodnode.cpp | 47 + Source/API/lib3mf_fractnode.cpp | 47 + Source/API/lib3mf_function.cpp | 126 + Source/API/lib3mf_functioncallnode.cpp | 53 + Source/API/lib3mf_functionfromimage3d.cpp | 128 + Source/API/lib3mf_functioniterator.cpp | 51 + Source/API/lib3mf_functionreference.cpp | 106 + Source/API/lib3mf_image3d.cpp | 70 + Source/API/lib3mf_image3diterator.cpp | 47 + Source/API/lib3mf_imagestack.cpp | 117 + Source/API/lib3mf_implicitfunction.cpp | 719 + Source/API/lib3mf_implicitnode.cpp | 158 + Source/API/lib3mf_implicitport.cpp | 91 + Source/API/lib3mf_implicitportiterator.cpp | 57 + Source/API/lib3mf_inversenode.cpp | 46 + Source/API/lib3mf_iterator.cpp | 86 + Source/API/lib3mf_lengthnode.cpp | 47 + Source/API/lib3mf_levelset.cpp | 278 + Source/API/lib3mf_levelsetiterator.cpp | 48 + Source/API/lib3mf_log10node.cpp | 47 + Source/API/lib3mf_log2node.cpp | 47 + Source/API/lib3mf_lognode.cpp | 47 + Source/API/lib3mf_materialmapping.cpp | 42 + Source/API/lib3mf_matrixfromcolumnsnode.cpp | 73 + Source/API/lib3mf_matrixfromrowsnode.cpp | 75 + .../API/lib3mf_matvecmultiplicationnode.cpp | 48 + Source/API/lib3mf_maxnode.cpp | 47 + Source/API/lib3mf_meshnode.cpp | 64 + Source/API/lib3mf_meshobject.cpp | 37 + Source/API/lib3mf_minnode.cpp | 47 + Source/API/lib3mf_model.cpp | 188 +- Source/API/lib3mf_modnode.cpp | 47 + Source/API/lib3mf_multiplicationnode.cpp | 48 + Source/API/lib3mf_nodeiterator.cpp | 281 + Source/API/lib3mf_object.cpp | 14 + Source/API/lib3mf_oneinputnode.cpp | 57 + Source/API/lib3mf_pownode.cpp | 47 + Source/API/lib3mf_resource.cpp | 14 +- Source/API/lib3mf_resourceidnode.cpp | 63 + Source/API/lib3mf_roundnode.cpp | 47 + Source/API/lib3mf_selectnode.cpp | 62 + Source/API/lib3mf_signnode.cpp | 47 + Source/API/lib3mf_sinhnode.cpp | 47 + Source/API/lib3mf_sinnode.cpp | 48 + Source/API/lib3mf_sqrtnode.cpp | 47 + Source/API/lib3mf_subtractionnode.cpp | 48 + Source/API/lib3mf_tanhnode.cpp | 47 + Source/API/lib3mf_tannode.cpp | 47 + Source/API/lib3mf_transposenode.cpp | 48 + Source/API/lib3mf_twoinputnode.cpp | 54 + Source/API/lib3mf_unsignedmeshnode.cpp | 63 + Source/API/lib3mf_utils.cpp | 5 +- Source/API/lib3mf_vectorfromscalarnode.cpp | 48 + Source/API/lib3mf_volumedata.cpp | 161 + Source/API/lib3mf_volumedatacolor.cpp | 48 + Source/API/lib3mf_volumedatacomposite.cpp | 84 + Source/API/lib3mf_volumedataproperty.cpp | 69 + Source/CMakeLists.txt | 221 +- Source/Common/Graph/DirectedGraph.cpp | 103 + Source/Common/Graph/GraphAlgorithms.cpp | 133 + Source/Common/Mesh/NMR_BeamLattice.cpp | 2 +- Source/Common/Mesh/NMR_Mesh.cpp | 2 +- .../Mesh/NMR_VolumeDataBoundary.cpp} | 22 +- Source/Common/Mesh/NMR_VolumeDataColor.cpp | 42 + .../Common/Mesh/NMR_VolumeDataComposite.cpp | 74 + Source/Common/Mesh/NMR_VolumeDataProperty.cpp | 70 + .../MeshImport/NMR_MeshImporter_STL.cpp | 21 +- Source/Common/NMR_Exception.cpp | 103 +- Source/Common/NMR_FunctionReference.cpp | 108 + Source/Common/NMR_StringUtils.cpp | 1 + .../Common/Platform/NMR_ImportStream_ZIP.cpp | 2 +- .../Model/Classes/NMR_ImplicitNodeTypes.cpp | 522 + Source/Model/Classes/NMR_Model.cpp | 525 +- Source/Model/Classes/NMR_ModelAttachment.cpp | 14 + .../Classes/NMR_ModelComponentsObject.cpp | 24 +- Source/Model/Classes/NMR_ModelFunction.cpp | 112 + .../Classes/NMR_ModelFunctionFromImage3D.cpp | 134 + Source/Model/Classes/NMR_ModelImage3D.cpp | 59 + Source/Model/Classes/NMR_ModelImageStack.cpp | 130 + .../Classes/NMR_ModelImplicitFunction.cpp | 475 + .../Model/Classes/NMR_ModelImplicitNode.cpp | 259 + .../Model/Classes/NMR_ModelImplicitPort.cpp | 161 + .../Model/Classes/NMR_ModelLevelSetObject.cpp | 200 + Source/Model/Classes/NMR_ModelMeshObject.cpp | 25 + .../Model/Classes/NMR_ModelMetaDataGroup.cpp | 7 +- .../Classes/NMR_ModelMultiPropertyGroup.cpp | 7 +- Source/Model/Classes/NMR_ModelObject.cpp | 2 - Source/Model/Classes/NMR_ModelResource.cpp | 17 +- Source/Model/Classes/NMR_ModelVolumeData.cpp | 229 + .../Model/Classes/NMR_PackageResourceID.cpp | 7 + .../Reader/NMR_ModelReaderNode_ModelBase.cpp | 5 +- .../NMR_Implicit_PortType_Convert.cpp | 126 + ...MR_ModelReaderNode_FunctionFromImage3D.cpp | 175 + .../NMR_ModelReaderNode_Implicit_Function.cpp | 136 + ...odelReaderNode_Implicit_Function_Input.cpp | 95 + ...delReaderNode_Implicit_Function_Inputs.cpp | 77 + ...delReaderNode_Implicit_Function_Output.cpp | 102 + ...elReaderNode_Implicit_Function_Outputs.cpp | 78 + .../NMR_ModelReaderNode_Implicit_Node.cpp | 173 + ...R_ModelReaderNode_Implicit_Node_Inputs.cpp | 77 + ..._ModelReaderNode_Implicit_Node_Outputs.cpp | 78 + .../NMR_ModelReaderNode_Implicit_Port.cpp | 119 + .../NMR_ModelReaderNode_LevelSet.cpp | 246 + ...R_ModelReaderNode_Volumetric2201_Color.cpp | 156 + ...ModelReaderNode_Volumetric2201_Image3D.cpp | 117 + ...elReaderNode_Volumetric2201_ImageSheet.cpp | 77 + ...elReaderNode_Volumetric2201_ImageStack.cpp | 150 + ...odelReaderNode_Volumetric2201_Property.cpp | 185 + ...elReaderNode_Volumetric2201_VolumeData.cpp | 138 + .../NMR_ModelReaderNode093_TextureVertex.cpp | 6 +- .../v100/NMR_ModelReaderNode100_Mesh.cpp | 68 +- ...NMR_ModelReaderNode100_MultiProperties.cpp | 2 +- .../v100/NMR_ModelReaderNode100_Object.cpp | 30 +- .../v100/NMR_ModelReaderNode100_Resources.cpp | 35 + .../Writer/NMR_KeyStoreOpcPackageWriter.cpp | 4 +- Source/Model/Writer/NMR_ModelWriterNode.cpp | 19 +- .../Writer/NMR_ModelWriterNode_Implicit.cpp | 288 + .../Writer/NMR_ModelWriterNode_LevelSet.cpp | 152 + .../Writer/NMR_ModelWriterNode_VolumeData.cpp | 181 + .../Model/Writer/NMR_ModelWriter_3MF_OPC.cpp | 226 - .../v100/NMR_ModelWriterNode100_Mesh.cpp | 16 +- .../v100/NMR_ModelWriterNode100_Model.cpp | 669 +- .../v100/NMR_ResourceDependencySorter.cpp | 125 + Tests/CPP_Bindings/CMakeLists.txt | 3 + .../CPP_Bindings/Include/UnitTest_Utilities.h | 132 +- Tests/CPP_Bindings/Source/BeamLattice.cpp | 22 +- Tests/CPP_Bindings/Source/BeamSets.cpp | 6 +- Tests/CPP_Bindings/Source/BuildItems.cpp | 6 +- Tests/CPP_Bindings/Source/MetaData.cpp | 16 +- Tests/CPP_Bindings/Source/Model.cpp | 88 + Tests/CPP_Bindings/Source/Properties.cpp | 3 + Tests/CPP_Bindings/Source/Reader.cpp | 30 +- Tests/CPP_Bindings/Source/SliceStack.cpp | 4 +- .../Source/UnitTest_Utilities.cpp | 385 +- Tests/CPP_Bindings/Source/Volumetric.cpp | 1897 ++ Tests/CPP_Bindings/Source/Volumetric.test.cpp | 0 Tests/CPP_Bindings/Source/v093.cpp | 1 + Tests/TestFiles/Models/WithSomeResources.3mf | Bin 161780 -> 161779 bytes Tests/TestFiles/Reader/PyramidVolume.3mf | Bin 0 -> 3028 bytes .../Volumetric/ColorMapRGB2D/img_01.png | Bin 0 -> 443924 bytes Tests/TestFiles/Volumetric/Cube.3mf | Bin 0 -> 47552 bytes Tests/TestFiles/Volumetric/Pyramid.3mf | Bin 0 -> 1730 bytes Tests/TestFiles/Volumetric/RadialRadiator.3mf | Bin 0 -> 99199 bytes Tests/TestFiles/Volumetric/SphereInACage.3mf | Bin 0 -> 61937 bytes Tests/TestFiles/Volumetric/img_01.png | Bin 0 -> 10514 bytes Tests/TestFiles/Volumetric/img_02.png | Bin 0 -> 58101 bytes Tests/TestFiles/Volumetric/img_03.png | Bin 0 -> 81805 bytes Tests/TestFiles/Volumetric/img_04.png | Bin 0 -> 88998 bytes Tests/TestFiles/Volumetric/img_05.png | Bin 0 -> 91667 bytes Tests/TestFiles/Volumetric/img_06.png | Bin 0 -> 89694 bytes Tests/TestFiles/Volumetric/img_07.png | Bin 0 -> 75264 bytes Tests/TestFiles/Volumetric/img_08.png | Bin 0 -> 62547 bytes Tests/TestFiles/Volumetric/img_09.png | Bin 0 -> 46669 bytes Tests/TestFiles/Volumetric/img_10.png | Bin 0 -> 26207 bytes Tests/TestFiles/Volumetric/img_11.png | Bin 0 -> 8323 bytes Tests/TestFiles/Volumetric/template.3mf | Bin 0 -> 37160 bytes cmake/lib3mfConfig.cmake.in | 3 + outProduction.3mf | Bin 0 -> 18388 bytes submodules/AutomaticComponentToolkit | 2 +- submodules/cpp-base64 | 2 +- submodules/googletest | 2 +- submodules/libzip | 2 +- 381 files changed, 152157 insertions(+), 24469 deletions(-) create mode 100644 .clang-format create mode 100755 AutomaticComponentToolkit/generateWrapperAndBindingsLinux64.sh create mode 100644 AutomaticComponentToolkit/generateWrapperAndBindingsWin64.sh delete mode 100644 AutomaticComponentToolkit/patch_python.bat delete mode 100644 AutomaticComponentToolkit/patch_python.sh create mode 100644 CMakePresets.json create mode 100644 Include/API/lib3mf_absnode.hpp create mode 100644 Include/API/lib3mf_additionnode.hpp create mode 100644 Include/API/lib3mf_arccosnode.hpp create mode 100644 Include/API/lib3mf_arcsinnode.hpp create mode 100644 Include/API/lib3mf_arctan2node.hpp create mode 100644 Include/API/lib3mf_arctannode.hpp create mode 100644 Include/API/lib3mf_ceilnode.hpp create mode 100644 Include/API/lib3mf_clampnode.hpp create mode 100644 Include/API/lib3mf_composematrixnode.hpp create mode 100644 Include/API/lib3mf_composevectornode.hpp create mode 100644 Include/API/lib3mf_constantnode.hpp create mode 100644 Include/API/lib3mf_constmatnode.hpp create mode 100644 Include/API/lib3mf_constvecnode.hpp create mode 100644 Include/API/lib3mf_coshnode.hpp create mode 100644 Include/API/lib3mf_cosnode.hpp create mode 100644 Include/API/lib3mf_crossnode.hpp create mode 100644 Include/API/lib3mf_decomposevectornode.hpp create mode 100644 Include/API/lib3mf_divisionnode.hpp create mode 100644 Include/API/lib3mf_dotnode.hpp create mode 100644 Include/API/lib3mf_expnode.hpp create mode 100644 Include/API/lib3mf_floornode.hpp create mode 100644 Include/API/lib3mf_fmodnode.hpp create mode 100644 Include/API/lib3mf_fractnode.hpp create mode 100644 Include/API/lib3mf_function.hpp create mode 100644 Include/API/lib3mf_functioncallnode.hpp create mode 100644 Include/API/lib3mf_functionfromimage3d.hpp create mode 100644 Include/API/lib3mf_functioniterator.hpp create mode 100644 Include/API/lib3mf_functionreference.hpp create mode 100644 Include/API/lib3mf_image3d.hpp create mode 100644 Include/API/lib3mf_image3diterator.hpp create mode 100644 Include/API/lib3mf_imagestack.hpp create mode 100644 Include/API/lib3mf_implicitfunction.hpp create mode 100644 Include/API/lib3mf_implicitnode.hpp create mode 100644 Include/API/lib3mf_implicitport.hpp create mode 100644 Include/API/lib3mf_implicitportiterator.hpp create mode 100644 Include/API/lib3mf_inversenode.hpp create mode 100644 Include/API/lib3mf_iterator.hpp create mode 100644 Include/API/lib3mf_lengthnode.hpp create mode 100644 Include/API/lib3mf_levelset.hpp create mode 100644 Include/API/lib3mf_levelsetiterator.hpp create mode 100644 Include/API/lib3mf_log10node.hpp create mode 100644 Include/API/lib3mf_log2node.hpp create mode 100644 Include/API/lib3mf_lognode.hpp create mode 100644 Include/API/lib3mf_materialmapping.hpp create mode 100644 Include/API/lib3mf_matrixfromcolumnsnode.hpp create mode 100644 Include/API/lib3mf_matrixfromrowsnode.hpp create mode 100644 Include/API/lib3mf_matvecmultiplicationnode.hpp create mode 100644 Include/API/lib3mf_maxnode.hpp create mode 100644 Include/API/lib3mf_meshnode.hpp create mode 100644 Include/API/lib3mf_minnode.hpp create mode 100644 Include/API/lib3mf_modnode.hpp create mode 100644 Include/API/lib3mf_multiplicationnode.hpp create mode 100644 Include/API/lib3mf_nodeiterator.hpp create mode 100644 Include/API/lib3mf_oneinputnode.hpp create mode 100644 Include/API/lib3mf_pownode.hpp create mode 100644 Include/API/lib3mf_resourceidnode.hpp create mode 100644 Include/API/lib3mf_roundnode.hpp create mode 100644 Include/API/lib3mf_selectnode.hpp create mode 100644 Include/API/lib3mf_signnode.hpp create mode 100644 Include/API/lib3mf_sinhnode.hpp create mode 100644 Include/API/lib3mf_sinnode.hpp create mode 100644 Include/API/lib3mf_sqrtnode.hpp create mode 100644 Include/API/lib3mf_subtractionnode.hpp create mode 100644 Include/API/lib3mf_tanhnode.hpp create mode 100644 Include/API/lib3mf_tannode.hpp create mode 100644 Include/API/lib3mf_transposenode.hpp create mode 100644 Include/API/lib3mf_twoinputnode.hpp create mode 100644 Include/API/lib3mf_unsignedmeshnode.hpp create mode 100644 Include/API/lib3mf_vectorfromscalarnode.hpp create mode 100644 Include/API/lib3mf_volumedata.hpp create mode 100644 Include/API/lib3mf_volumedatacolor.hpp create mode 100644 Include/API/lib3mf_volumedatacomposite.hpp create mode 100644 Include/API/lib3mf_volumedataproperty.hpp create mode 100644 Include/Common/Graph/DirectedGraph.h create mode 100644 Include/Common/Graph/GraphAlgorithms.h create mode 100644 Include/Common/Graph/IDirectedGraph.h create mode 100644 Include/Common/Mesh/NMR_VolumeDataBoundary.h create mode 100644 Include/Common/Mesh/NMR_VolumeDataColor.h create mode 100644 Include/Common/Mesh/NMR_VolumeDataComposite.h create mode 100644 Include/Common/Mesh/NMR_VolumeDataProperty.h create mode 100644 Include/Common/NMR_FunctionReference.h create mode 100644 Include/Model/Classes/NMR_ImplicitNodeTypes.h create mode 100644 Include/Model/Classes/NMR_ModelFunction.h create mode 100644 Include/Model/Classes/NMR_ModelFunctionFromImage3D.h create mode 100644 Include/Model/Classes/NMR_ModelImage3D.h create mode 100644 Include/Model/Classes/NMR_ModelImageStack.h create mode 100644 Include/Model/Classes/NMR_ModelImplicitFunction.h create mode 100644 Include/Model/Classes/NMR_ModelImplicitNode.h create mode 100644 Include/Model/Classes/NMR_ModelImplicitPort.h create mode 100644 Include/Model/Classes/NMR_ModelImplicitPortNames.h create mode 100644 Include/Model/Classes/NMR_ModelLevelSetObject.h create mode 100644 Include/Model/Classes/NMR_ModelVolumeData.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_Implicit_PortType_Convert.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_FunctionFromImage3D.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Input.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Inputs.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Output.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Outputs.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Inputs.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Outputs.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Port.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_LevelSet.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Color.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Image3D.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageSheet.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageStack.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Property.h create mode 100644 Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_VolumeData.h create mode 100644 Include/Model/Writer/NMR_ModelWriterNode_Implicit.h create mode 100644 Include/Model/Writer/NMR_ModelWriterNode_LevelSet.h create mode 100644 Include/Model/Writer/NMR_ModelWriterNode_VolumeData.h create mode 100644 Include/Model/Writer/v100/NMR_ResourceDependencySorter.h create mode 100644 SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/.NETCoreApp,Version=v2.0.AssemblyAttributes.cs create mode 100644 SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.AssemblyInfo.cs create mode 100644 SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.AssemblyInfoInputs.cache create mode 100644 SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.csproj.CoreCompileInputs.cache create mode 100644 Source/API/lib3mf_absnode.cpp create mode 100644 Source/API/lib3mf_additionnode.cpp create mode 100644 Source/API/lib3mf_arccosnode.cpp create mode 100644 Source/API/lib3mf_arcsinnode.cpp create mode 100644 Source/API/lib3mf_arctan2node.cpp create mode 100644 Source/API/lib3mf_arctannode.cpp create mode 100644 Source/API/lib3mf_ceilnode.cpp create mode 100644 Source/API/lib3mf_clampnode.cpp create mode 100644 Source/API/lib3mf_composematrixnode.cpp create mode 100644 Source/API/lib3mf_composevectornode.cpp create mode 100644 Source/API/lib3mf_constantnode.cpp create mode 100644 Source/API/lib3mf_constmatnode.cpp create mode 100644 Source/API/lib3mf_constvecnode.cpp create mode 100644 Source/API/lib3mf_coshnode.cpp create mode 100644 Source/API/lib3mf_cosnode.cpp create mode 100644 Source/API/lib3mf_crossnode.cpp create mode 100644 Source/API/lib3mf_decomposevectornode.cpp create mode 100644 Source/API/lib3mf_divisionnode.cpp create mode 100644 Source/API/lib3mf_dotnode.cpp create mode 100644 Source/API/lib3mf_expnode.cpp create mode 100644 Source/API/lib3mf_floornode.cpp create mode 100644 Source/API/lib3mf_fmodnode.cpp create mode 100644 Source/API/lib3mf_fractnode.cpp create mode 100644 Source/API/lib3mf_function.cpp create mode 100644 Source/API/lib3mf_functioncallnode.cpp create mode 100644 Source/API/lib3mf_functionfromimage3d.cpp create mode 100644 Source/API/lib3mf_functioniterator.cpp create mode 100644 Source/API/lib3mf_functionreference.cpp create mode 100644 Source/API/lib3mf_image3d.cpp create mode 100644 Source/API/lib3mf_image3diterator.cpp create mode 100644 Source/API/lib3mf_imagestack.cpp create mode 100644 Source/API/lib3mf_implicitfunction.cpp create mode 100644 Source/API/lib3mf_implicitnode.cpp create mode 100644 Source/API/lib3mf_implicitport.cpp create mode 100644 Source/API/lib3mf_implicitportiterator.cpp create mode 100644 Source/API/lib3mf_inversenode.cpp create mode 100644 Source/API/lib3mf_iterator.cpp create mode 100644 Source/API/lib3mf_lengthnode.cpp create mode 100644 Source/API/lib3mf_levelset.cpp create mode 100644 Source/API/lib3mf_levelsetiterator.cpp create mode 100644 Source/API/lib3mf_log10node.cpp create mode 100644 Source/API/lib3mf_log2node.cpp create mode 100644 Source/API/lib3mf_lognode.cpp create mode 100644 Source/API/lib3mf_materialmapping.cpp create mode 100644 Source/API/lib3mf_matrixfromcolumnsnode.cpp create mode 100644 Source/API/lib3mf_matrixfromrowsnode.cpp create mode 100644 Source/API/lib3mf_matvecmultiplicationnode.cpp create mode 100644 Source/API/lib3mf_maxnode.cpp create mode 100644 Source/API/lib3mf_meshnode.cpp create mode 100644 Source/API/lib3mf_minnode.cpp create mode 100644 Source/API/lib3mf_modnode.cpp create mode 100644 Source/API/lib3mf_multiplicationnode.cpp create mode 100644 Source/API/lib3mf_nodeiterator.cpp create mode 100644 Source/API/lib3mf_oneinputnode.cpp create mode 100644 Source/API/lib3mf_pownode.cpp create mode 100644 Source/API/lib3mf_resourceidnode.cpp create mode 100644 Source/API/lib3mf_roundnode.cpp create mode 100644 Source/API/lib3mf_selectnode.cpp create mode 100644 Source/API/lib3mf_signnode.cpp create mode 100644 Source/API/lib3mf_sinhnode.cpp create mode 100644 Source/API/lib3mf_sinnode.cpp create mode 100644 Source/API/lib3mf_sqrtnode.cpp create mode 100644 Source/API/lib3mf_subtractionnode.cpp create mode 100644 Source/API/lib3mf_tanhnode.cpp create mode 100644 Source/API/lib3mf_tannode.cpp create mode 100644 Source/API/lib3mf_transposenode.cpp create mode 100644 Source/API/lib3mf_twoinputnode.cpp create mode 100644 Source/API/lib3mf_unsignedmeshnode.cpp create mode 100644 Source/API/lib3mf_vectorfromscalarnode.cpp create mode 100644 Source/API/lib3mf_volumedata.cpp create mode 100644 Source/API/lib3mf_volumedatacolor.cpp create mode 100644 Source/API/lib3mf_volumedatacomposite.cpp create mode 100644 Source/API/lib3mf_volumedataproperty.cpp create mode 100644 Source/Common/Graph/DirectedGraph.cpp create mode 100644 Source/Common/Graph/GraphAlgorithms.cpp rename Source/{Model/Classes/NMR_ModelTextureAttachment.cpp => Common/Mesh/NMR_VolumeDataBoundary.cpp} (73%) create mode 100644 Source/Common/Mesh/NMR_VolumeDataColor.cpp create mode 100644 Source/Common/Mesh/NMR_VolumeDataComposite.cpp create mode 100644 Source/Common/Mesh/NMR_VolumeDataProperty.cpp create mode 100644 Source/Common/NMR_FunctionReference.cpp create mode 100644 Source/Model/Classes/NMR_ImplicitNodeTypes.cpp create mode 100644 Source/Model/Classes/NMR_ModelFunction.cpp create mode 100644 Source/Model/Classes/NMR_ModelFunctionFromImage3D.cpp create mode 100644 Source/Model/Classes/NMR_ModelImage3D.cpp create mode 100644 Source/Model/Classes/NMR_ModelImageStack.cpp create mode 100644 Source/Model/Classes/NMR_ModelImplicitFunction.cpp create mode 100644 Source/Model/Classes/NMR_ModelImplicitNode.cpp create mode 100644 Source/Model/Classes/NMR_ModelImplicitPort.cpp create mode 100644 Source/Model/Classes/NMR_ModelLevelSetObject.cpp create mode 100644 Source/Model/Classes/NMR_ModelVolumeData.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_Implicit_PortType_Convert.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_FunctionFromImage3D.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Input.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Inputs.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Output.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Outputs.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Inputs.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Outputs.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Port.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_LevelSet.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Color.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Image3D.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageSheet.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageStack.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Property.cpp create mode 100644 Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_VolumeData.cpp create mode 100644 Source/Model/Writer/NMR_ModelWriterNode_Implicit.cpp create mode 100644 Source/Model/Writer/NMR_ModelWriterNode_LevelSet.cpp create mode 100644 Source/Model/Writer/NMR_ModelWriterNode_VolumeData.cpp delete mode 100644 Source/Model/Writer/NMR_ModelWriter_3MF_OPC.cpp create mode 100644 Source/Model/Writer/v100/NMR_ResourceDependencySorter.cpp create mode 100644 Tests/CPP_Bindings/Source/Volumetric.cpp create mode 100644 Tests/CPP_Bindings/Source/Volumetric.test.cpp create mode 100644 Tests/TestFiles/Reader/PyramidVolume.3mf create mode 100644 Tests/TestFiles/Volumetric/ColorMapRGB2D/img_01.png create mode 100644 Tests/TestFiles/Volumetric/Cube.3mf create mode 100644 Tests/TestFiles/Volumetric/Pyramid.3mf create mode 100644 Tests/TestFiles/Volumetric/RadialRadiator.3mf create mode 100644 Tests/TestFiles/Volumetric/SphereInACage.3mf create mode 100644 Tests/TestFiles/Volumetric/img_01.png create mode 100644 Tests/TestFiles/Volumetric/img_02.png create mode 100644 Tests/TestFiles/Volumetric/img_03.png create mode 100644 Tests/TestFiles/Volumetric/img_04.png create mode 100644 Tests/TestFiles/Volumetric/img_05.png create mode 100644 Tests/TestFiles/Volumetric/img_06.png create mode 100644 Tests/TestFiles/Volumetric/img_07.png create mode 100644 Tests/TestFiles/Volumetric/img_08.png create mode 100644 Tests/TestFiles/Volumetric/img_09.png create mode 100644 Tests/TestFiles/Volumetric/img_10.png create mode 100644 Tests/TestFiles/Volumetric/img_11.png create mode 100644 Tests/TestFiles/Volumetric/template.3mf create mode 100644 cmake/lib3mfConfig.cmake.in create mode 100644 outProduction.3mf diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000..d807c6279 --- /dev/null +++ b/.clang-format @@ -0,0 +1,14 @@ +BasedOnStyle: Google +IndentWidth: 4 +AllowShortFunctionsOnASingleLine: Inline +PointerAlignment: Left +SpaceBeforeParens: Never +SpacesInParentheses: false +MaxEmptyLinesToKeep: 1 +BreakBeforeBraces: Allman +DerivePointerAlignment: true +AlignAfterOpenBracket: Align +BreakConstructorInitializers: BeforeColon +ConstructorInitializerAllOnOneLineOrOnePerLine: true +NamespaceIndentation: All +SortIncludes: true \ No newline at end of file diff --git a/.gitignore b/.gitignore index 87ee8d189..85501469d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,14 @@ Include/Model/COM/NMR_COMVersion.h debug .DS_Store .vscode +TestOutput +nonrootmodels.3mf +SetupWriteRead1.3mf +SetupWriteRead2.3mf +SetupWriteRead3.3mf +SetupWriteRead4.3mf +SetupWriteRead5.3mf +v093reout.3mf +.vs .idea cmake-build-* \ No newline at end of file diff --git a/Autogenerated/Bindings/C/lib3mf.h b/Autogenerated/Bindings/C/lib3mf.h index 80ba9cd19..6253b6f81 100644 --- a/Autogenerated/Bindings/C/lib3mf.h +++ b/Autogenerated/Bindings/C/lib3mf.h @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated plain C Header file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -575,6 +575,45 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerialsiterator_getcurrentcomposi */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup(Lib3MF_MultiPropertyGroupIterator pMultiPropertyGroupIterator, Lib3MF_MultiPropertyGroup * pResource); +/************************************************************************************************************************* + Class definition for Image3DIterator +**************************************************************************************************************************/ + +/** +* Returns the Image3D the iterator points at. +* +* @param[in] pImage3DIterator - Image3DIterator instance. +* @param[out] pResource - returns the Image3D instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3diterator_getcurrentimage3d(Lib3MF_Image3DIterator pImage3DIterator, Lib3MF_Image3D * pResource); + +/************************************************************************************************************************* + Class definition for FunctionIterator +**************************************************************************************************************************/ + +/** +* Returns the Function the iterator points at. +* +* @param[in] pFunctionIterator - FunctionIterator instance. +* @param[out] pResource - returns the Function instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functioniterator_getcurrentfunction(Lib3MF_FunctionIterator pFunctionIterator, Lib3MF_Function * pResource); + +/************************************************************************************************************************* + Class definition for LevelSetIterator +**************************************************************************************************************************/ + +/** +* Returns the LevelSet the iterator points at. +* +* @param[in] pLevelSetIterator - LevelSetIterator instance. +* @param[out] pResource - returns the MeshObject instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelsetiterator_getcurrentlevelset(Lib3MF_LevelSetIterator pLevelSetIterator, Lib3MF_LevelSet * pResource); + /************************************************************************************************************************* Class definition for MetaData **************************************************************************************************************************/ @@ -834,6 +873,15 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_object_ismeshobject(Lib3MF_Object pObject, b */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_object_iscomponentsobject(Lib3MF_Object pObject, bool * pIsComponentsObject); +/** +* Retrieves, if an object is a level set object +* +* @param[in] pObject - Object instance. +* @param[out] pIsLevelSetObject - returns, whether the object is a level set object +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_object_islevelsetobject(Lib3MF_Object pObject, bool * pIsLevelSetObject); + /** * Retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. * @@ -1166,6 +1214,174 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_ismanifoldandoriented(Lib3MF_Mesh */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_beamlattice(Lib3MF_MeshObject pMeshObject, Lib3MF_BeamLattice * pTheBeamLattice); +/** +* Retrieves the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[out] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_getvolumedata(Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_setvolumedata(Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData pTheVolumeData); + +/************************************************************************************************************************* + Class definition for LevelSet +**************************************************************************************************************************/ + +/** +* Returns the function that is used as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getfunction(Lib3MF_LevelSet pLevelSet, Lib3MF_Function * pTheFunction); + +/** +* Sets the function to use as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setfunction(Lib3MF_LevelSet pLevelSet, Lib3MF_Function pTheFunction); + +/** +* Returns the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTransform - the transformation matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_gettransform(Lib3MF_LevelSet pLevelSet, sLib3MFTransform * pTransform); + +/** +* Sets the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_settransform(Lib3MF_LevelSet pLevelSet, const sLib3MFTransform * pTransform); + +/** +* Returns the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getchannelname(Lib3MF_LevelSet pLevelSet, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); + +/** +* Sets the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pChannelName - new name of the function output channel +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setchannelname(Lib3MF_LevelSet pLevelSet, const char * pChannelName); + +/** +* Sets the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setminfeaturesize(Lib3MF_LevelSet pLevelSet, Lib3MF_double dMinFeatureSize); + +/** +* Returns the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getminfeaturesize(Lib3MF_LevelSet pLevelSet, Lib3MF_double * pMinFeatureSize); + +/** +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dFallBackValue - fallback value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setfallbackvalue(Lib3MF_LevelSet pLevelSet, Lib3MF_double dFallBackValue); + +/** +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pFallBackValue - fallback value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getfallbackvalue(Lib3MF_LevelSet pLevelSet, Lib3MF_double * pFallBackValue); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] bMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setmeshbboxonly(Lib3MF_LevelSet pLevelSet, bool bMeshBBoxOnly); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getmeshbboxonly(Lib3MF_LevelSet pLevelSet, bool * pMeshBBoxOnly); + +/** +* Sets the mesh to use as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setmesh(Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject pTheMesh); + +/** +* Returns the mesh that is used as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getmesh(Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject * pTheMesh); + +/** +* Retrieves the VolumeData this Object. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheVolumeData - the VolumeData of this Object +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getvolumedata(Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this LevelSet. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setvolumedata(Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData pTheVolumeData); + /************************************************************************************************************************* Class definition for BeamLattice **************************************************************************************************************************/ @@ -1396,784 +1612,3179 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_addbeamset(Lib3MF_BeamLattice pB LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getbeamset(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF_BeamSet * pBeamSet); /************************************************************************************************************************* - Class definition for Component + Class definition for FunctionReference **************************************************************************************************************************/ /** -* Returns the Resource Instance of the component. +* Returns the UniqueResourceID of the Function. Only functions with a 'pos'-input are allowed. * -* @param[in] pComponent - Component instance. -* @param[out] pObjectResource - filled with the Resource Instance. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getobjectresource(Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_getfunctionresourceid(Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 * pUniqueResourceID); /** -* Returns the UniqueResourceID of the component. +* Sets the UniqueResourceID to refer to. * -* @param[in] pComponent - Component instance. -* @param[out] pUniqueResourceID - returns the UniqueResourceID. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nUniqueResourceID - UniqueResourceID of the function * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getobjectresourceid(Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_setfunctionresourceid(Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 nUniqueResourceID); /** -* returns, whether a component has a UUID and, if true, the component's UUID +* Returns the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[out] pHasUUID - flag whether the component has a UUID -* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) -* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pTransform - the transformation matrix * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getuuid(Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_gettransform(Lib3MF_FunctionReference pFunctionReference, sLib3MFTransform * pTransform); /** -* sets the component's UUID +* Sets the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pTransform - new transformation matrix * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_setuuid(Lib3MF_Component pComponent, const char * pUUID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_settransform(Lib3MF_FunctionReference pFunctionReference, const sLib3MFTransform * pTransform); /** -* Returns, if the component has a different transformation than the identity matrix +* Returns the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_hastransform(Lib3MF_Component pComponent, bool * pHasTransform); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_getchannelname(Lib3MF_FunctionReference pFunctionReference, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); /** -* Returns the transformation matrix of the component. +* Sets the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pTransform - filled with the component transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pChannelName - new name of the function output channel * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_gettransform(Lib3MF_Component pComponent, sLib3MFTransform * pTransform); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_setchannelname(Lib3MF_FunctionReference pFunctionReference, const char * pChannelName); /** -* Sets the transformation matrix of the component. +* Sets the minimal feature size as a hint for the function evaluator * -* @param[in] pComponent - Component instance. -* @param[in] pTransform - new transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_settransform(Lib3MF_Component pComponent, const sLib3MFTransform * pTransform); - -/************************************************************************************************************************* - Class definition for ComponentsObject -**************************************************************************************************************************/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_setminfeaturesize(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dMinFeatureSize); /** -* Adds a new component to a components object. +* Returns the minimal feature size as a hint for the function evaluator * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] pObjectResource - object to add as component. Must not lead to circular references! -* @param[in] pTransform - optional transform matrix for the component. -* @param[out] pComponentInstance - new component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_addcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const sLib3MFTransform * pTransform, Lib3MF_Component * pComponentInstance); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_getminfeaturesize(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pMinFeatureSize); /** -* Retrieves a component from a component object. +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) -* @param[out] pComponentInstance - component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dFallBackValue - fallback value * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_getcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_setfallbackvalue(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dFallBackValue); /** -* Retrieves a component count of a component object. +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[out] pCount - returns the component count +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pFallBackValue - fallback value * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_getcomponentcount(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_getfallbackvalue(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pFallBackValue); /************************************************************************************************************************* - Class definition for BeamSet + Class definition for VolumeDataColor **************************************************************************************************************************/ -/** -* Sets a beamset's name string -* -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pName - new name of the beamset. -* @return error code or 0 (success) -*/ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setname(Lib3MF_BeamSet pBeamSet, const char * pName); +/************************************************************************************************************************* + Class definition for MaterialMapping +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for VolumeDataComposite +**************************************************************************************************************************/ /** -* Retrieves a beamset's name string +* Returns the BaseMaterialGroup used within this volume data item * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pBaseMaterialGroupInstance - The BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getname(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_getbasematerialgroup(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); /** -* Sets a beamset's identifier string +* Sets the BaseMaterialGroup to use within this volume data item. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pIdentifier - new name of the beamset. +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pBaseMaterialGroupInstance - The new BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setidentifier(Lib3MF_BeamSet pBeamSet, const char * pIdentifier); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_setbasematerialgroup(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance); /** -* Retrieves a beamset's identifier string +* Returns the number of material mappings of this VolumeDataComposite element * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) -* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pCount - the number of material mappings. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getidentifier(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_getmaterialmappingcount(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 * pCount); /** -* Retrieves the reference count of a beamset +* Returns MaterialMappting with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the reference count +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - Index of the MaterialMapping in question. +* @param[out] pTheMaterialMapping - MaterialMapping used in this element * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_getmaterialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Sets the references of a beamset +* Adds a the MaterialMapping * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pTransform - new transformation matrix +* @param[out] pTheMaterialMapping - The new MaterialMapping * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_addmaterialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, const sLib3MFTransform * pTransform, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Retrieves the references of a beamset +* Removes the MaterialMapping with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - The index of the MaterialMapping to be removed. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_removematerialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex); + +/************************************************************************************************************************* + Class definition for VolumeDataProperty +**************************************************************************************************************************/ /** -* Retrieves the ball reference count of a beamset +* Gets the qualified name of this property. * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the ball reference count +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] nPropertyNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pPropertyNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPropertyNameBuffer - buffer of The qualified name of this property., may be NULL * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getballreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataproperty_getname(Lib3MF_VolumeDataProperty pVolumeDataProperty, const Lib3MF_uint32 nPropertyNameBufferSize, Lib3MF_uint32* pPropertyNameNeededChars, char * pPropertyNameBuffer); /** -* Sets the ball references of a beamset +* Sets whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] bIsRequired - New value for whether this property is required to process this 3MF document instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setballreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataproperty_setisrequired(Lib3MF_VolumeDataProperty pVolumeDataProperty, bool bIsRequired); /** -* Retrieves the ball references of a beamset +* Returns whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[out] pIsRequired - Is this property required to process this 3MF document instance? * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getballreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataproperty_isrequired(Lib3MF_VolumeDataProperty pVolumeDataProperty, bool * pIsRequired); /************************************************************************************************************************* - Class definition for BaseMaterialGroup + Class definition for VolumeData **************************************************************************************************************************/ /** -* Retrieves the count of base materials in the material group. +* Returns the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[out] pCount - returns the count of base materials. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - filled with the VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getcount(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getcomposite(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* returns all the PropertyIDs of all materials in this group +* Creates a new VolumeDataComposite for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - The new VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getallpropertyids(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_createnewcomposite(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* Adds a new material to the material group +* Removes the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] pName - new name of the base material. -* @param[in] pDisplayColor - Display color of the material -* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_addmaterial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const sLib3MFColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_removecomposite(Lib3MF_VolumeData pVolumeData); /** -* Removes a material from the material group. +* Returns the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheColorData - filled with the VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_removematerial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getcolor(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataColor * pTheColorData); /** -* Returns the base material's name +* Creates a new VolumeDataColor for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheColorData - The new VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_createnewcolor(Lib3MF_VolumeData pVolumeData, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataColor * pTheColorData); /** -* Sets a base material's name +* Removes the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pName - new name of the base material. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_setname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_removecolor(Lib3MF_VolumeData pVolumeData); /** -* Sets a base material's display color. +* Returns the number of VolumeDataProperty * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pCount - the number of VolumeDataProperty-elements within this VolumdeData * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_setdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getpropertycount(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 * pCount); /** -* Returns a base material's display color. +* Returns the VolumeDataProperty at a given Index * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[out] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be returned. +* @param[out] pTheVolumeDataProperty - the VolumeDataProperty at the given index. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getproperty(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Adds a new VolumeDataProperty from a Function +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pName - the qualified name (namespace+name) of the Property +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheVolumeDataProperty - the newly created VolumeDataProperty. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_addpropertyfromfunction(Lib3MF_VolumeData pVolumeData, const char * pName, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Removes the VolumeDataProperty with a given index +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be removed. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_removeproperty(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex); /************************************************************************************************************************* - Class definition for ColorGroup + Class definition for Component **************************************************************************************************************************/ /** -* Retrieves the count of base materials in this Color Group. +* Returns the Resource Instance of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[out] pCount - returns the count of colors within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pObjectResource - filled with the Resource Instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getcount(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getobjectresource(Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); /** -* returns all the PropertyIDs of all colors within this group +* Returns the UniqueResourceID of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @param[in] pComponent - Component instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getallpropertyids(Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getobjectresourceid(Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); /** -* Adds a new value. +* returns, whether a component has a UUID and, if true, the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] pTheColor - The new color -* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pHasUUID - flag whether the component has a UUID +* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) +* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_addcolor(Lib3MF_ColorGroup pColorGroup, const sLib3MFColor * pTheColor, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getuuid(Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); /** -* Removes a color from the color group. +* sets the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @param[in] pComponent - Component instance. +* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_removecolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_setuuid(Lib3MF_Component pComponent, const char * pUUID); /** -* Sets a color value. +* Returns, if the component has a different transformation than the identity matrix * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[in] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_setcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_hastransform(Lib3MF_Component pComponent, bool * pHasTransform); /** -* Sets a color value. +* Returns the transformation matrix of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[out] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pTransform - filled with the component transformation matrix * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_gettransform(Lib3MF_Component pComponent, sLib3MFTransform * pTransform); + +/** +* Sets the transformation matrix of the component. +* +* @param[in] pComponent - Component instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_settransform(Lib3MF_Component pComponent, const sLib3MFTransform * pTransform); /************************************************************************************************************************* - Class definition for Texture2DGroup + Class definition for ComponentsObject **************************************************************************************************************************/ /** -* Retrieves the count of tex2coords in the Texture2DGroup. +* Adds a new component to a components object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pCount - returns the count of tex2coords. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] pObjectResource - object to add as component. Must not lead to circular references! +* @param[in] pTransform - optional transform matrix for the component. +* @param[out] pComponentInstance - new component instance * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_getcount(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_addcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const sLib3MFTransform * pTransform, Lib3MF_Component * pComponentInstance); /** -* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* Retrieves a component from a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) +* @param[out] pComponentInstance - component instance * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_getallpropertyids(Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_getcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); /** -* Adds a new tex2coord to the Texture2DGroup +* Retrieves a component count of a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. -* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[out] pCount - returns the component count * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_addtex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, const sLib3MFTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_getcomponentcount(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); + +/************************************************************************************************************************* + Class definition for BeamSet +**************************************************************************************************************************/ /** -* Obtains a tex2coord to the Texture2DGroup +* Sets a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. -* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pName - new name of the beamset. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_gettex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, sLib3MFTex2Coord * pUVCoordinate); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setname(Lib3MF_BeamSet pBeamSet, const char * pName); /** -* Removes a tex2coords from the Texture2DGroup. +* Retrieves a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_removetex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getname(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); /** -* Obtains the texture2D instance of this group. +* Sets a beamset's identifier string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pIdentifier - new name of the beamset. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_gettexture2d(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setidentifier(Lib3MF_BeamSet pBeamSet, const char * pIdentifier); + +/** +* Retrieves a beamset's identifier string +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getidentifier(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Retrieves the reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the reference count +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the ball reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the ball reference count +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getballreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setballreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); + +/** +* Retrieves the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getballreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); /************************************************************************************************************************* - Class definition for CompositeMaterials + Class definition for BaseMaterialGroup **************************************************************************************************************************/ /** -* Retrieves the count of Composite-s in the CompositeMaterials. +* Retrieves the count of base materials in the material group. * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pCount - returns the count of Composite-s +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[out] pCount - returns the count of base materials. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getcount(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getcount(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); /** -* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* returns all the PropertyIDs of all materials in this group * -* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getallpropertyids(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new material to the material group +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] pName - new name of the base material. +* @param[in] pDisplayColor - Display color of the material +* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_addmaterial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const sLib3MFColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a material from the material group. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_removematerial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); + +/** +* Returns the base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* Sets a base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pName - new name of the base material. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_setname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); + +/** +* Sets a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_setdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); + +/** +* Returns a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[out] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); + +/************************************************************************************************************************* + Class definition for ColorGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of base materials in this Color Group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[out] pCount - returns the count of colors within this color group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getcount(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all colors within this group +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getallpropertyids(Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] pTheColor - The new color +* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_addcolor(Lib3MF_ColorGroup pColorGroup, const sLib3MFColor * pTheColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a color from the color group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_removecolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[in] pTheColor - The color +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_setcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[out] pTheColor - The color +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); + +/************************************************************************************************************************* + Class definition for Texture2DGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of tex2coords in the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pCount - returns the count of tex2coords. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_getcount(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_getallpropertyids(Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_addtex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, const sLib3MFTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); + +/** +* Obtains a tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. +* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_gettex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, sLib3MFTex2Coord * pUVCoordinate); + +/** +* Removes a tex2coords from the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_removetex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); + +/** +* Obtains the texture2D instance of this group. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_gettexture2d(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); + +/************************************************************************************************************************* + Class definition for CompositeMaterials +**************************************************************************************************************************/ + +/** +* Retrieves the count of Composite-s in the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pCount - returns the count of Composite-s +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getcount(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. * @param[in] nPropertyIDsBufferSize - Number of elements in buffer * @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. * @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the Composite-Mixing Values in the CompositeMaterials. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getallpropertyids(Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getallpropertyids(Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getbasematerialgroup(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); + +/** +* Adds a new Composite-Mixing Values to the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite +* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_addcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const sLib3MFCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_removecomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); + +/** +* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, sLib3MFCompositeConstituent * pCompositeBuffer); + +/************************************************************************************************************************* + Class definition for MultiPropertyGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the count of MultiProperty-s +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getcount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getallpropertyids(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new MultiProperty to the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. +* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_addmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Sets the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_setmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Removes a MultiProperty from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_removemultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); + +/** +* Retrieves the number of layers of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the number of layers +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getlayercount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup +* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_addlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const sLib3MFMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); + +/** +* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried +* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, sLib3MFMultiPropertyLayer * pTheLayer); + +/** +* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_removelayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); + +/************************************************************************************************************************* + Class definition for Image3D +**************************************************************************************************************************/ + +/** +* returns the name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of the name of this Image3D, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3d_getname(Lib3MF_Image3D pImage3D, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* sets a new name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] pName - the new name of this Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3d_setname(Lib3MF_Image3D pImage3D, const char * pName); + +/** +* Retrieves, if this Image3D is a ImageStack +* +* @param[in] pImage3D - Image3D instance. +* @param[out] pIsImageStack - returns, whether the Image3D is an ImageStack +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3d_isimagestack(Lib3MF_Image3D pImage3D, bool * pIsImageStack); + +/************************************************************************************************************************* + Class definition for ImageStack +**************************************************************************************************************************/ + +/** +* Retrieves the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pRowCount - number of rows +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getrowcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pRowCount); + +/** +* Sets the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nRowCount - number of rows +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_setrowcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nRowCount); + +/** +* Retrieves the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pColumnCount - number of columns +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getcolumncount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pColumnCount); + +/** +* Sets the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nColumnCount - number of columns +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_setcolumncount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nColumnCount); + +/** +* Retrieves the number of images in the stack. +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pSheetCount - number of images +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getsheetcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pSheetCount); + +/** +* Retrieves a sheet of the stack. Raises an error if sheet is not set. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getsheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment * pSheet); + +/** +* Sets a sheet to an existing attachment. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_setsheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment pSheet); + +/** +* Creates a new sheet attachment with empty data. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_createemptysheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a memory buffer. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] nDataBufferSize - Number of elements in buffer +* @param[in] pDataBuffer - uint8 buffer of binary image data +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_createsheetfrombuffer(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_uint64 nDataBufferSize, const Lib3MF_uint8 * pDataBuffer, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a file on disk. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] pFileName - file name to read from +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_createsheetfromfile(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, const char * pFileName, Lib3MF_Attachment * pSheet); + +/************************************************************************************************************************* + Class definition for Attachment +**************************************************************************************************************************/ + +/** +* Retrieves an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getpath(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new path of the attachment. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_setpath(Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Returns the PackagePart that is this attachment. +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pPackagePart - The PackagePart of this attachment. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_packagepart(Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); + +/** +* Retrieves an attachment's relationship type +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getrelationshiptype(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's relationship type. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new relationship type string. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_setrelationshiptype(Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Writes out the attachment as file. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to write into. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_writetofile(Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to read from. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfromfile(Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pTheReadCallback - Callback to call for reading a data chunk +* @param[in] nStreamSize - number of bytes the callback returns +* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. +* @param[in] pUserData - Userdata that is passed to the callback function +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfromcallback(Lib3MF_Attachment pAttachment, Lib3MFReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MFSeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); + +/** +* Retrieves the size of the attachment stream +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pStreamSize - the stream size +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getstreamsize(Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); + +/** +* Writes out the attachment into a buffer +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_writetobuffer(Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); + +/** +* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfrombuffer(Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); + +/************************************************************************************************************************* + Class definition for Texture2D +**************************************************************************************************************************/ + +/** +* Retrieves the attachment located at the path of the texture. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); + +/** +* Sets the texture's package path to the path of the attachment. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pContentType - returns content type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getcontenttype(Lib3MF_Texture2D pTexture2D, eLib3MFTextureType * pContentType); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eContentType - new Content Type +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setcontenttype(Lib3MF_Texture2D pTexture2D, eLib3MFTextureType eContentType); + +/** +* Retrieves a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pTileStyleU - returns tilestyle type enum. +* @param[out] pTileStyleV - returns tilestyle type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_gettilestyleuv(Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV); + +/** +* Sets a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eTileStyleU - new tilestyle type enum. +* @param[in] eTileStyleV - new tilestyle type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_settilestyleuv(Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV); + +/** +* Retrieves a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pFilter - returns filter type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getfilter(Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter * pFilter); + +/** +* Sets a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eFilter - sets new filter type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setfilter(Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter eFilter); + +/************************************************************************************************************************* + Class definition for ImplicitPort +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_getidentifier(Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_setidentifier(Lib3MF_ImplicitPort pImplicitPort, const char * pIdentifier); + +/** +* Retrieves the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_getdisplayname(Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_setdisplayname(Lib3MF_ImplicitPort pImplicitPort, const char * pDisplayName); + +/** +* Sets the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] eImplicitPortType - the type +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_settype(Lib3MF_ImplicitPort pImplicitPort, eLib3MFImplicitPortType eImplicitPortType); + +/** +* Retrieves the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[out] pImplicitPortType - the type +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_gettype(Lib3MF_ImplicitPort pImplicitPort, eLib3MFImplicitPortType * pImplicitPortType); + +/** +* Retrieves the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nReferenceBufferSize - size of the buffer (including trailing 0) +* @param[out] pReferenceNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pReferenceBuffer - buffer of the reference, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_getreference(Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nReferenceBufferSize, Lib3MF_uint32* pReferenceNeededChars, char * pReferenceBuffer); + +/** +* Sets the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pReference - the reference +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_setreference(Lib3MF_ImplicitPort pImplicitPort, const char * pReference); + +/************************************************************************************************************************* + Class definition for Iterator +**************************************************************************************************************************/ + +/** +* Iterates to the next item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasNext - Iterates to the next item in the list. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_iterator_movenext(Lib3MF_Iterator pIterator, bool * pHasNext); + +/** +* Iterates to the previous item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasPrevious - Iterates to the previous item in the list. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_iterator_moveprevious(Lib3MF_Iterator pIterator, bool * pHasPrevious); + +/** +* Returns the number of items the iterator captures. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pCount - returns the number of items the iterator captures. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_iterator_count(Lib3MF_Iterator pIterator, Lib3MF_uint64 * pCount); + +/************************************************************************************************************************* + Class definition for ImplicitPortIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pImplicitPortIterator - ImplicitPortIterator instance. +* @param[out] pPort - The current element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitportiterator_getcurrent(Lib3MF_ImplicitPortIterator pImplicitPortIterator, Lib3MF_ImplicitPort * pPort); + +/************************************************************************************************************************* + Class definition for ImplicitNode +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getidentifier(Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_setidentifier(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier); + +/** +* Retrieves the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getdisplayname(Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_setdisplayname(Lib3MF_ImplicitNode pImplicitNode, const char * pDisplayName); + +/** +* Retrieves the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nTagBufferSize - size of the buffer (including trailing 0) +* @param[out] pTagNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pTagBuffer - buffer of the tag, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_gettag(Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nTagBufferSize, Lib3MF_uint32* pTagNeededChars, char * pTagBuffer); + +/** +* Sets the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pTag - the tag +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_settag(Lib3MF_ImplicitNode pImplicitNode, const char * pTag); + +/** +* Retrieves the type of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pType - the type of the node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getnodetype(Lib3MF_ImplicitNode pImplicitNode, eLib3MFImplicitNodeType * pType); + +/** +* Add an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[out] pPort - +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_addinput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator for the inputs +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getinputs(Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Add an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[out] pPort - +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_addoutput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator the outputs +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getoutputs(Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Retrieves an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_findinput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_findoutput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/** +* Checks if the types of the input and output ports are valid for the node type +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pValid - true, if the types are valid +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_aretypesvalid(Lib3MF_ImplicitNode pImplicitNode, bool * pValid); + +/************************************************************************************************************************* + Class definition for OneInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pInput - the input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_oneinputnode_getinputa(Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves the output +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_oneinputnode_getoutputresult(Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for SinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcSinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcCosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SinhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CoshNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for RoundNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CeilNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FloorNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SignNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FractNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for AbsNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ExpNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LogNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log10Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LengthNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TransposeNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for InverseNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SqrtNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ResourceIdNode +**************************************************************************************************************************/ + +/** +* Sets the Resource that the resourceid attribute of the node will point to +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[in] pResource - the resource +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_resourceidnode_setresource(Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource pResource); + +/** +* Retrieves the resource of the node +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pResource - the resource +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_resourceidnode_getresource(Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource * pResource); + +/** +* Retrieves the output +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_resourceidnode_getoutputvalue(Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for TwoInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pTwoInputNode - TwoInputNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_twoinputnode_getinputb(Lib3MF_TwoInputNode pTwoInputNode, Lib3MF_ImplicitPort * pB); + +/************************************************************************************************************************* + Class definition for AdditionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SubtractionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DivisionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DotNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CrossNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTan2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MatVecMultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MaxNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FmodNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ModNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for PowNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SelectNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_selectnode_getinputb(Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pB); + +/** +* Retrieves the third input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pC - the third input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_selectnode_getinputc(Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pC); + +/** +* Retrieves the fourth input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pD - the fourth input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_selectnode_getinputd(Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pD); + +/************************************************************************************************************************* + Class definition for ClampNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the lower limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMin - the input for the lower limit +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_clampnode_getinputmin(Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMin); + +/** +* Retrieves the input for the upper limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMax - the input for the upper limit +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_clampnode_getinputmax(Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMax); + +/************************************************************************************************************************* + Class definition for ComposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the x component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pX - the input for the x component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composevectornode_getinputx(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the input for the y component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pY - the input for the y component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composevectornode_getinputy(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the input for the z component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pZ - the input for the z component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composevectornode_getinputz(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/** +* Retrieves the output +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composevectornode_getoutputresult(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for VectorFromScalarNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DecomposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pA - the input port for the vector to decompose +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_decomposevectornode_getinputa(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pA); + +/** +* Retrieves the output for the x component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pX - the output for the x component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_decomposevectornode_getoutputx(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the output for the y component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pY - the output for the y component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_decomposevectornode_getoutputy(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the output for the z component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pZ - the output for the z component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_decomposevectornode_getoutputz(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/************************************************************************************************************************* + Class definition for ComposeMatrixNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the element 0 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM00 - the input for the m00 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm00(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM00); + +/** +* Retrieves the input for the element 0 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM01 - the input for the m01 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm01(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM01); + +/** +* Retrieves the input for the element 0 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM02 - the input for the m02 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm02(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM02); + +/** +* Retrieves the input for the element 0 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM03 - the input for the m03 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm03(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM03); + +/** +* Retrieves the input for the element 1 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM10 - the input for the m10 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm10(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM10); + +/** +* Retrieves the input for the element 1 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM11 - the input for the m11 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm11(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM11); + +/** +* Retrieves the input for the element 1 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM12 - the input for the m12 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm12(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM12); + +/** +* Retrieves the input for the element 1 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM13 - the input for the m3 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm13(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM13); + +/** +* Retrieves the input for the element 2 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM20 - the input for the m2 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm20(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM20); + +/** +* Retrieves the input for the element 2 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM21 - +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm21(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM21); + +/** +* Retrieves the input for the element 2 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM22 - the input for the m22 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm22(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM22); + +/** +* Retrieves the input for the element 2 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM23 - the input for the m23 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm23(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM23); + +/** +* Retrieves the input for the element 3 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM30 - the input for the m30 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm30(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM30); + +/** +* Retrieves the input for the element 3 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM31 - the input for the m31 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm31(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM31); + +/** +* Retrieves the input for the element 3 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM32 - the input for the m32 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm32(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM32); + +/** +* Retrieves the input for the element 3 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM33 - the input for the m33 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm33(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM33); + +/** +* Retrieves the output +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getoutputresult(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromRowsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow0 - the input for the first row +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getinputa(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow0); + +/** +* Retrieves the input for the second row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow1 - the input for the second row +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getinputb(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow1); + +/** +* Retrieves the input for the third row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow2 - the input for the third row +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getinputc(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow2); + +/** +* Retrieves the input for the fourth row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow3 - the input for the fourth row +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getinputd(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getoutputresult(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromColumnsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn0 - the input for the first column +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputa(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn0); + +/** +* Retrieves the input for the second column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn1 - the input for the second column +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputb(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn1); + +/** +* Retrieves the input for the third column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn2 - the input for the third column +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputc(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn2); + +/** +* Retrieves the input for the fourth column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn3 - the input for the fourth column +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputd(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getoutputresult(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for ConstantNode +**************************************************************************************************************************/ + +/** +* Sets the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[in] dValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constantnode_setconstant(Lib3MF_ConstantNode pConstantNode, Lib3MF_double dValue); + +/** +* Retrieves the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constantnode_getconstant(Lib3MF_ConstantNode pConstantNode, Lib3MF_double * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constantnode_getoutputvalue(Lib3MF_ConstantNode pConstantNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for ConstVecNode +**************************************************************************************************************************/ + +/** +* Sets the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constvecnode_setvector(Lib3MF_ConstVecNode pConstVecNode, const sLib3MFVector * pValue); + +/** +* Retrieves the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constvecnode_getvector(Lib3MF_ConstVecNode pConstVecNode, sLib3MFVector * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pVector - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constvecnode_getoutputvector(Lib3MF_ConstVecNode pConstVecNode, Lib3MF_ImplicitPort * pVector); + +/************************************************************************************************************************* + Class definition for ConstMatNode +**************************************************************************************************************************/ + +/** +* Sets the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constmatnode_setmatrix(Lib3MF_ConstMatNode pConstMatNode, const sLib3MFMatrix4x4 * pValue); + +/** +* Retrieves the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pValue - the matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constmatnode_getmatrix(Lib3MF_ConstMatNode pConstMatNode, sLib3MFMatrix4x4 * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pMatrix - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constmatnode_getoutputmatrix(Lib3MF_ConstMatNode pConstMatNode, Lib3MF_ImplicitPort * pMatrix); + +/************************************************************************************************************************* + Class definition for MeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshnode_getinputmesh(Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshnode_getinputpos(Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pDistance - the output port for the signed distance to the mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshnode_getoutputdistance(Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for UnsignedMeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_unsignedmeshnode_getinputmesh(Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_unsignedmeshnode_getinputpos(Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pDistance - the output port for the unsigned distance to the mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_unsignedmeshnode_getoutputdistance(Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for FunctionCallNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the function id +* +* @param[in] pFunctionCallNode - FunctionCallNode instance. +* @param[out] pFunction - the input port for the function +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functioncallnode_getinputfunctionid(Lib3MF_FunctionCallNode pFunctionCallNode, Lib3MF_ImplicitPort * pFunction); + +/************************************************************************************************************************* + Class definition for NodeIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pNodeIterator - NodeIterator instance. +* @param[out] pNode - The current element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_nodeiterator_getcurrent(Lib3MF_NodeIterator pNodeIterator, Lib3MF_ImplicitNode * pNode); + +/************************************************************************************************************************* + Class definition for Function +**************************************************************************************************************************/ + +/** +* Retrieves the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_getdisplayname(Lib3MF_Function pFunction, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_setdisplayname(Lib3MF_Function pFunction, const char * pDisplayName); + +/** +* Add an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_addinput(Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, eLib3MFImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the list of inputs +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_getinputs(Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an input +* +* @param[in] pFunction - Function instance. +* @param[in] pInput - The input to be removed +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_removeinput(Lib3MF_Function pFunction, Lib3MF_ImplicitPort pInput); + +/** +* Add an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_addoutput(Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, eLib3MFImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the outputs +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_getoutputs(Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an output +* +* @param[in] pFunction - Function instance. +* @param[in] pOutput - The output to be removed +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_removeoutput(Lib3MF_Function pFunction, Lib3MF_ImplicitPort pOutput); + +/** +* Retrieves an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_findinput(Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_findoutput(Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/************************************************************************************************************************* + Class definition for ImplicitFunction +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_getidentifier(Lib3MF_ImplicitFunction pImplicitFunction, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_setidentifier(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier); + +/** +* Add a node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] eNodeType - the type of the node +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addnode(Lib3MF_ImplicitFunction pImplicitFunction, eLib3MFImplicitNodeType eNodeType, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ImplicitNode * pNode); + +/** +* Add a SinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsinnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinNode * pNode); + +/** +* Add a CosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcosnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CosNode * pNode); + +/** +* Add a TanNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addtannode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanNode * pNode); + +/** +* Add a ArcSinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addarcsinnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcSinNode * pNode); + +/** +* Add a ArcCosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addarccosnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcCosNode * pNode); + +/** +* Add a ArcTan2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addarctan2node(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcTan2Node * pNode); + +/** +* Add a SinhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsinhnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinhNode * pNode); + +/** +* Add a CoshNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcoshnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CoshNode * pNode); + +/** +* Add a TanhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addtanhnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanhNode * pNode); + +/** +* Add a RoundNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addroundnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_RoundNode * pNode); + +/** +* Add a CeilNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addceilnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CeilNode * pNode); + +/** +* Add a FloorNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addfloornode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FloorNode * pNode); + +/** +* Add a SignNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsignnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SignNode * pNode); + +/** +* Add a FractNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addfractnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FractNode * pNode); + +/** +* Add a AbsNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addabsnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AbsNode * pNode); + +/** +* Add a ExpNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addexpnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ExpNode * pNode); + +/** +* Add a LogNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlognode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_LogNode * pNode); + +/** +* Add a Log2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlog2node(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log2Node * pNode); + +/** +* Add a Log10Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlog10node(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log10Node * pNode); + +/** +* Add a LengthNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlengthnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_LengthNode * pNode); + +/** +* Add a TransposeNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addtransposenode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TransposeNode * pNode); + +/** +* Add a InverseNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_inversenode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_InverseNode * pNode); + +/** +* Add a SqrtNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsqrtnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SqrtNode * pNode); + +/** +* Add a ResourceIdNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addresourceidnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ResourceIdNode * pNode); + +/** +* Add an AdditionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addadditionnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AdditionNode * pNode); + +/** +* Add a SubtractionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsubtractionnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SubtractionNode * pNode); + +/** +* Add a MultiplicationNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmultiplicationnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MultiplicationNode * pNode); + +/** +* Add a DivisionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_adddivisionnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_DivisionNode * pNode); + +/** +* Add a DotNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_adddotnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DotNode * pNode); + +/** +* Add a CrossNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcrossnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_CrossNode * pNode); /** -* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* Add a MatVecMultiplicationNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getbasematerialgroup(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmatvecmultiplicationnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatVecMultiplicationNode * pNode); /** -* Adds a new Composite-Mixing Values to the CompositeMaterials. +* Add a MinNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite -* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_addcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const sLib3MFCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addminnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MinNode * pNode); /** -* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* Add a MaxNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_removecomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmaxnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MaxNode * pNode); /** -* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* Add a FmodNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, sLib3MFCompositeConstituent * pCompositeBuffer); - -/************************************************************************************************************************* - Class definition for MultiPropertyGroup -**************************************************************************************************************************/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addfmodnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FmodNode * pNode); /** -* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* Add a PowNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the count of MultiProperty-s +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getcount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addpownode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_PowNode * pNode); /** -* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* Add a SelectNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getallpropertyids(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addselectnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SelectNode * pNode); /** -* Adds a new MultiProperty to the MultiPropertyGroup. +* Add a ClampNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. -* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_addmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addclampnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ClampNode * pNode); /** -* Sets the PropertyIDs of a MultiProperty. +* Add a ComposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_setmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcomposevectornode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeVectorNode * pNode); /** -* Obtains the PropertyIDs of a MultiProperty. +* Add a VectorFromScalar * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addvectorfromscalarnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_VectorFromScalarNode * pNode); /** -* Removes a MultiProperty from this MultiPropertyGroup. +* Add a DecomposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_removemultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_adddecomposevectornode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DecomposeVectorNode * pNode); /** -* Retrieves the number of layers of this MultiPropertyGroup. +* Add a ComposeMatrixNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the number of layers +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getlayercount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcomposematrixnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeMatrixNode * pNode); /** -* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* Add a MatrixFromRowsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup -* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_addlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const sLib3MFMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmatrixfromrowsnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromRowsNode * pNode); /** -* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* Add a MatrixFromColumnsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried -* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, sLib3MFMultiPropertyLayer * pTheLayer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmatrixfromcolumnsnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromColumnsNode * pNode); /** -* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* Add a ConstantNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_removelayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); - -/************************************************************************************************************************* - Class definition for Attachment -**************************************************************************************************************************/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addconstantnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstantNode * pNode); /** -* Retrieves an attachment's package path. This function will be removed in a later release. +* Add a ConstVecNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getpath(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addconstvecnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstVecNode * pNode); /** -* Sets an attachment's package path. This function will be removed in a later release. +* Add a ConstMatNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new path of the attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_setpath(Lib3MF_Attachment pAttachment, const char * pPath); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addconstmatnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstMatNode * pNode); /** -* Returns the PackagePart that is this attachment. +* Add a MeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[out] pPackagePart - The PackagePart of this attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_packagepart(Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmeshnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MeshNode * pNode); /** -* Retrieves an attachment's relationship type +* Add a UnsignedMeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getrelationshiptype(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addunsignedmeshnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_UnsignedMeshNode * pNode); /** -* Sets an attachment's relationship type. +* Add a FunctionCallNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new relationship type string. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_setrelationshiptype(Lib3MF_Attachment pAttachment, const char * pPath); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addfunctioncallnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_FunctionCallNode * pNode); /** -* Writes out the attachment as file. +* Retrieves the nodes * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to write into. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[out] pIterator - iterator for the list of nodes * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_writetofile(Lib3MF_Attachment pAttachment, const char * pFileName); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_getnodes(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_NodeIterator * pIterator); /** -* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Removes a node * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to read from. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pNode - The node to be removed * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfromfile(Lib3MF_Attachment pAttachment, const char * pFileName); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_removenode(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitNode pNode); /** -* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[in] pTheReadCallback - Callback to call for reading a data chunk -* @param[in] nStreamSize - number of bytes the callback returns -* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. -* @param[in] pUserData - Userdata that is passed to the callback function +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - the source port +* @param[in] pTarget - the target port * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfromcallback(Lib3MF_Attachment pAttachment, Lib3MFReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MFSeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlink(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitPort pSource, Lib3MF_ImplicitPort pTarget); /** -* Retrieves the size of the attachment stream +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[out] pStreamSize - the stream size +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - name of the source port in the format nodename.portname +* @param[in] pTarget - name of the target port in the format nodename.portname * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getstreamsize(Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlinkbynames(Lib3MF_ImplicitFunction pImplicitFunction, const char * pSource, const char * pTarget); /** -* Writes out the attachment into a buffer +* Clears the function * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_writetobuffer(Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_clear(Lib3MF_ImplicitFunction pImplicitFunction); /** -* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* Sorts the nodes topologically * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfrombuffer(Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_sortnodestopologically(Lib3MF_ImplicitFunction pImplicitFunction); /************************************************************************************************************************* - Class definition for Texture2D + Class definition for FunctionFromImage3D **************************************************************************************************************************/ /** -* Retrieves the attachment located at the path of the texture. +* Returns the selected 3D image. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pImage3D - image instance * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_getimage3d(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D * pImage3D); /** -* Sets the texture's package path to the path of the attachment. +* Sets the 3D image of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] pImage3D - image instance * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_setimage3d(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D pImage3D); /** -* Retrieves a texture's content type. +* Sets the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pContentType - returns content type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eFilter - texture filter * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getcontenttype(Lib3MF_Texture2D pTexture2D, eLib3MFTextureType * pContentType); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_setfilter(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureFilter eFilter); /** -* Retrieves a texture's content type. +* Returns the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eContentType - new Content Type +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pFilter - texture filter * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setcontenttype(Lib3MF_Texture2D pTexture2D, eLib3MFTextureType eContentType); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_getfilter(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureFilter * pFilter); /** -* Retrieves a texture's tilestyle type. +* Sets the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pTileStyleU - returns tilestyle type enum. -* @param[out] pTileStyleV - returns tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eTileStyleU - tile style in U +* @param[in] eTileStyleV - tile style in V +* @param[in] eTileStyleW - tile style in W * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_gettilestyleuv(Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_settilestyles(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV, eLib3MFTextureTileStyle eTileStyleW); /** -* Sets a texture's tilestyle type. +* Retrieves the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eTileStyleU - new tilestyle type enum. -* @param[in] eTileStyleV - new tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pTileStyleU - tile style in U +* @param[out] pTileStyleV - tile style in V +* @param[out] pTileStyleW - tile style in W * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_settilestyleuv(Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_gettilestyles(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV, eLib3MFTextureTileStyle * pTileStyleW); /** -* Retrieves a texture's filter type. +* returns the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pFilter - returns filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getfilter(Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter * pFilter); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_getoffset(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pOffset); /** -* Sets a texture's filter type. +* Sets the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eFilter - sets new filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setfilter(Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter eFilter); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_setoffset(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dOffset); + +/** +* returns the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_getscale(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pScale); + +/** +* Sets the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_setscale(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dScale); /************************************************************************************************************************* Class definition for BuildItem @@ -3145,6 +5756,16 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getcolorgroupbyid(Lib3MF_Model pModel, */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getslicestackbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_SliceStack * pSliceStacInstance); +/** +* finds a level set object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pLevelSetObjectInstance - returns the level set object instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getlevelsetbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_LevelSet * pLevelSetObjectInstance); + /** * returns, whether a build has a UUID and, if true, the build's UUID * @@ -3283,6 +5904,15 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getmultipropertygroups(Lib3MF_Model pM */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getslicestacks(Lib3MF_Model pModel, Lib3MF_SliceStackIterator * pResourceIterator); +/** +* creates a resource iterator instance with all image3d resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getimage3ds(Lib3MF_Model pModel, Lib3MF_Image3DIterator * pResourceIterator); + /** * Merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. * @@ -3292,6 +5922,15 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getslicestacks(Lib3MF_Model pModel, Li */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_mergetomodel(Lib3MF_Model pModel, Lib3MF_Model * pMergedModelInstance); +/** +* Merges the given model into this model. +* +* @param[in] pModel - Model instance. +* @param[in] pModelInstance - model to be merged +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_mergefrommodel(Lib3MF_Model pModel, Lib3MF_Model pModelInstance); + /** * adds an empty mesh object to the model. * @@ -3377,6 +6016,28 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addcompositematerials(Lib3MF_Model pMo */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addmultipropertygroup(Lib3MF_Model pModel, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance); +/** +* creates a new 3D Image Resource +* +* @param[in] pModel - Model instance. +* @param[in] nColumnCount - the number of columns in each sheet. +* @param[in] nRowCount - the number of rows in each sheet. +* @param[in] nSheetCount - the number of sheets in the image stack. +* @param[out] pInstance - returns the new ImageStack instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addimagestack(Lib3MF_Model pModel, Lib3MF_uint32 nColumnCount, Lib3MF_uint32 nRowCount, Lib3MF_uint32 nSheetCount, Lib3MF_ImageStack * pInstance); + +/** +* finds an ImageStack object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pImageStackInstance - returns the image stack instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getimagestackbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ImageStack * pImageStackInstance); + /** * adds a build item to the model. * @@ -3528,6 +6189,70 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_setrandomnumbercallback(Lib3MF_Model p */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getkeystore(Lib3MF_Model pModel, Lib3MF_KeyStore * pKeyStore); +/** +* creates a resource iterator for all functions +* +* @param[in] pModel - Model instance. +* @param[out] pTheResourceIterator - returns the resource iterator +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getfunctions(Lib3MF_Model pModel, Lib3MF_FunctionIterator * pTheResourceIterator); + +/** +* adds a function described by nodes to the model +* +* @param[in] pModel - Model instance. +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addimplicitfunction(Lib3MF_Model pModel, Lib3MF_ImplicitFunction * pFunctionInstance); + +/** +* adds a function defined by an image3d to the model +* +* @param[in] pModel - Model instance. +* @param[in] pImage3DInstance - the Image3D-instance used for this function +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addfunctionfromimage3d(Lib3MF_Model pModel, Lib3MF_Image3D pImage3DInstance, Lib3MF_FunctionFromImage3D * pFunctionInstance); + +/** +* adds a volume data resource to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pVolumeDataInstance - returns the new volume data instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addvolumedata(Lib3MF_Model pModel, Lib3MF_VolumeData * pVolumeDataInstance); + +/** +* adds an empty boundary shape object to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pLevelSetInstance - returns the mesh object instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addlevelset(Lib3MF_Model pModel, Lib3MF_LevelSet * pLevelSetInstance); + +/** +* creates a resource iterator instance with all boundary shape resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getlevelsets(Lib3MF_Model pModel, Lib3MF_LevelSetIterator * pResourceIterator); + +/** +* Removes a resource from the model +* +* @param[in] pModel - Model instance. +* @param[in] pResource - The resource to remove +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_removeresource(Lib3MF_Model pModel, Lib3MF_Resource pResource); + /************************************************************************************************************************* Global functions **************************************************************************************************************************/ diff --git a/Autogenerated/Bindings/C/lib3mf_types.h b/Autogenerated/Bindings/C/lib3mf_types.h index 6f2dcf6a4..696aec4eb 100644 --- a/Autogenerated/Bindings/C/lib3mf_types.h +++ b/Autogenerated/Bindings/C/lib3mf_types.h @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated plain C Header file with basic types in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -84,8 +84,8 @@ typedef void * Lib3MF_pvoid; **************************************************************************************************************************/ #define LIB3MF_VERSION_MAJOR 2 -#define LIB3MF_VERSION_MINOR 3 -#define LIB3MF_VERSION_MICRO 2 +#define LIB3MF_VERSION_MINOR 4 +#define LIB3MF_VERSION_MICRO 0 #define LIB3MF_VERSION_PRERELEASEINFO "" #define LIB3MF_VERSION_BUILDINFO "" @@ -130,13 +130,18 @@ typedef void * Lib3MF_pvoid; #define LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER 140 /** A progress identifier is unknown */ #define LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT 141 /** An element buffer exceeds its spec limit */ #define LIB3MF_ERROR_INVALIDRESOURCE 142 /** A resource is invalid */ +#define LIB3MF_ERROR_INVALIDLEVELSET 143 /** A level set is invalid */ #define LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE 2000 /** This object type is not valid for beamlattices */ #define LIB3MF_ERROR_INVALIDKEYSTORE 3000 /** The keystore object is invalid */ #define LIB3MF_ERROR_INVALIDKEYSTORECONSUMER 3001 /** The consumer keystore object is invalid */ #define LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND 3002 /** A consumer has not been found */ #define LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND 3003 /** A resource data has not been found */ #define LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED 3004 /** A Key or Conentent encryption callback has not been registered */ -#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key siue is invalid */ +#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key size is invalid */ +#define LIB3MF_ERROR_INCOMPATIBLEPORTTYPES 4000 /** Link could not be added, the port types are incompatible */ +#define LIB3MF_ERROR_GRAPHISCYCLIC 4001 /** The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted. */ +#define LIB3MF_ERROR_INPUTNOTSET 4002 /** The input of a node is not set. */ +#define LIB3MF_ERROR_INVALIDNODECONFIGURATION 4003 /** The selected node configuration is not supported */ /************************************************************************************************************************* Error strings for Lib3MF @@ -181,13 +186,18 @@ inline const char * LIB3MF_GETERRORSTRING (Lib3MFResult nErrorCode) { case LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: return "A progress identifier is unknown"; case LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: return "An element buffer exceeds its spec limit"; case LIB3MF_ERROR_INVALIDRESOURCE: return "A resource is invalid"; + case LIB3MF_ERROR_INVALIDLEVELSET: return "A level set is invalid"; case LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: return "This object type is not valid for beamlattices"; case LIB3MF_ERROR_INVALIDKEYSTORE: return "The keystore object is invalid"; case LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: return "The consumer keystore object is invalid"; case LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND: return "A consumer has not been found"; case LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: return "A resource data has not been found"; case LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: return "A Key or Conentent encryption callback has not been registered"; - case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key siue is invalid"; + case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key size is invalid"; + case LIB3MF_ERROR_INCOMPATIBLEPORTTYPES: return "Link could not be added, the port types are incompatible"; + case LIB3MF_ERROR_GRAPHISCYCLIC: return "The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted."; + case LIB3MF_ERROR_INPUTNOTSET: return "The input of a node is not set."; + case LIB3MF_ERROR_INVALIDNODECONFIGURATION: return "The selected node configuration is not supported"; default: return "unknown error"; } } @@ -212,11 +222,21 @@ typedef Lib3MFHandle Lib3MF_ColorGroupIterator; typedef Lib3MFHandle Lib3MF_Texture2DGroupIterator; typedef Lib3MFHandle Lib3MF_CompositeMaterialsIterator; typedef Lib3MFHandle Lib3MF_MultiPropertyGroupIterator; +typedef Lib3MFHandle Lib3MF_Image3DIterator; +typedef Lib3MFHandle Lib3MF_FunctionIterator; +typedef Lib3MFHandle Lib3MF_LevelSetIterator; typedef Lib3MFHandle Lib3MF_MetaData; typedef Lib3MFHandle Lib3MF_MetaDataGroup; typedef Lib3MFHandle Lib3MF_Object; typedef Lib3MFHandle Lib3MF_MeshObject; +typedef Lib3MFHandle Lib3MF_LevelSet; typedef Lib3MFHandle Lib3MF_BeamLattice; +typedef Lib3MFHandle Lib3MF_FunctionReference; +typedef Lib3MFHandle Lib3MF_VolumeDataColor; +typedef Lib3MFHandle Lib3MF_MaterialMapping; +typedef Lib3MFHandle Lib3MF_VolumeDataComposite; +typedef Lib3MFHandle Lib3MF_VolumeDataProperty; +typedef Lib3MFHandle Lib3MF_VolumeData; typedef Lib3MFHandle Lib3MF_Component; typedef Lib3MFHandle Lib3MF_ComponentsObject; typedef Lib3MFHandle Lib3MF_BeamSet; @@ -225,8 +245,71 @@ typedef Lib3MFHandle Lib3MF_ColorGroup; typedef Lib3MFHandle Lib3MF_Texture2DGroup; typedef Lib3MFHandle Lib3MF_CompositeMaterials; typedef Lib3MFHandle Lib3MF_MultiPropertyGroup; +typedef Lib3MFHandle Lib3MF_Image3D; +typedef Lib3MFHandle Lib3MF_ImageStack; typedef Lib3MFHandle Lib3MF_Attachment; typedef Lib3MFHandle Lib3MF_Texture2D; +typedef Lib3MFHandle Lib3MF_ImplicitPort; +typedef Lib3MFHandle Lib3MF_Iterator; +typedef Lib3MFHandle Lib3MF_ImplicitPortIterator; +typedef Lib3MFHandle Lib3MF_ImplicitNode; +typedef Lib3MFHandle Lib3MF_OneInputNode; +typedef Lib3MFHandle Lib3MF_SinNode; +typedef Lib3MFHandle Lib3MF_CosNode; +typedef Lib3MFHandle Lib3MF_TanNode; +typedef Lib3MFHandle Lib3MF_ArcSinNode; +typedef Lib3MFHandle Lib3MF_ArcCosNode; +typedef Lib3MFHandle Lib3MF_ArcTanNode; +typedef Lib3MFHandle Lib3MF_SinhNode; +typedef Lib3MFHandle Lib3MF_CoshNode; +typedef Lib3MFHandle Lib3MF_TanhNode; +typedef Lib3MFHandle Lib3MF_RoundNode; +typedef Lib3MFHandle Lib3MF_CeilNode; +typedef Lib3MFHandle Lib3MF_FloorNode; +typedef Lib3MFHandle Lib3MF_SignNode; +typedef Lib3MFHandle Lib3MF_FractNode; +typedef Lib3MFHandle Lib3MF_AbsNode; +typedef Lib3MFHandle Lib3MF_ExpNode; +typedef Lib3MFHandle Lib3MF_LogNode; +typedef Lib3MFHandle Lib3MF_Log2Node; +typedef Lib3MFHandle Lib3MF_Log10Node; +typedef Lib3MFHandle Lib3MF_LengthNode; +typedef Lib3MFHandle Lib3MF_TransposeNode; +typedef Lib3MFHandle Lib3MF_InverseNode; +typedef Lib3MFHandle Lib3MF_SqrtNode; +typedef Lib3MFHandle Lib3MF_ResourceIdNode; +typedef Lib3MFHandle Lib3MF_TwoInputNode; +typedef Lib3MFHandle Lib3MF_AdditionNode; +typedef Lib3MFHandle Lib3MF_SubtractionNode; +typedef Lib3MFHandle Lib3MF_MultiplicationNode; +typedef Lib3MFHandle Lib3MF_DivisionNode; +typedef Lib3MFHandle Lib3MF_DotNode; +typedef Lib3MFHandle Lib3MF_CrossNode; +typedef Lib3MFHandle Lib3MF_ArcTan2Node; +typedef Lib3MFHandle Lib3MF_MatVecMultiplicationNode; +typedef Lib3MFHandle Lib3MF_MinNode; +typedef Lib3MFHandle Lib3MF_MaxNode; +typedef Lib3MFHandle Lib3MF_FmodNode; +typedef Lib3MFHandle Lib3MF_ModNode; +typedef Lib3MFHandle Lib3MF_PowNode; +typedef Lib3MFHandle Lib3MF_SelectNode; +typedef Lib3MFHandle Lib3MF_ClampNode; +typedef Lib3MFHandle Lib3MF_ComposeVectorNode; +typedef Lib3MFHandle Lib3MF_VectorFromScalarNode; +typedef Lib3MFHandle Lib3MF_DecomposeVectorNode; +typedef Lib3MFHandle Lib3MF_ComposeMatrixNode; +typedef Lib3MFHandle Lib3MF_MatrixFromRowsNode; +typedef Lib3MFHandle Lib3MF_MatrixFromColumnsNode; +typedef Lib3MFHandle Lib3MF_ConstantNode; +typedef Lib3MFHandle Lib3MF_ConstVecNode; +typedef Lib3MFHandle Lib3MF_ConstMatNode; +typedef Lib3MFHandle Lib3MF_MeshNode; +typedef Lib3MFHandle Lib3MF_UnsignedMeshNode; +typedef Lib3MFHandle Lib3MF_FunctionCallNode; +typedef Lib3MFHandle Lib3MF_NodeIterator; +typedef Lib3MFHandle Lib3MF_Function; +typedef Lib3MFHandle Lib3MF_ImplicitFunction; +typedef Lib3MFHandle Lib3MF_FunctionFromImage3D; typedef Lib3MFHandle Lib3MF_BuildItem; typedef Lib3MFHandle Lib3MF_BuildItemIterator; typedef Lib3MFHandle Lib3MF_Slice; @@ -305,7 +388,7 @@ typedef enum eLib3MFBeamLatticeClipMode { } eLib3MFBeamLatticeClipMode; typedef enum eLib3MFBeamLatticeBallMode { - eBeamLatticeBallModeNone = 0, + eBeamLatticeBallModeBeamLatticeBallModeNone = 0, eBeamLatticeBallModeMixed = 1, eBeamLatticeBallModeAll = 2 } eLib3MFBeamLatticeBallMode; @@ -343,6 +426,103 @@ typedef enum eLib3MFBlendMethod { eBlendMethodMultiply = 2 } eLib3MFBlendMethod; +typedef enum eLib3MFChannelName { + eChannelNameRed = 0, + eChannelNameGreen = 1, + eChannelNameBlue = 2, + eChannelNameAlpha = 3 +} eLib3MFChannelName; + +typedef enum eLib3MFCompositionMethod { + eCompositionMethodWeightedSum = 0, + eCompositionMethodMultiply = 1, + eCompositionMethodMin = 2, + eCompositionMethodMax = 3, + eCompositionMethodMask = 4 +} eLib3MFCompositionMethod; + +typedef enum eLib3MFCompositionSpace { + eCompositionSpaceRaw = 0, + eCompositionSpaceLinearColor = 1 +} eLib3MFCompositionSpace; + +/** +* enum eLib3MFImplicitNodeType - The type of the node +*/ +typedef enum eLib3MFImplicitNodeType { + eImplicitNodeTypeAddition = 1, /** Adds to values (scalar or vector) */ + eImplicitNodeTypeSubtraction = 2, /** Subtracts two values (scalar or vector) */ + eImplicitNodeTypeMultiplication = 3, /** Multiplies two values (scalar or vector) */ + eImplicitNodeTypeDivision = 4, /** Divides two values (scalar or vector) */ + eImplicitNodeTypeConstant = 5, /** A constant scalar value */ + eImplicitNodeTypeConstVec = 6, /** A constant vector value */ + eImplicitNodeTypeConstMat = 7, /** A constant matrix value */ + eImplicitNodeTypeComposeVector = 8, /** Creates a vector from three scalar values */ + eImplicitNodeTypeDecomposeVector = 9, /** Decomposes a vector into three scalar values */ + eImplicitNodeTypeComposeMatrix = 10, /** Creates a matrix from nine scalar values */ + eImplicitNodeTypeMatrixFromColumns = 11, /** Creates a matrix from three column vector values */ + eImplicitNodeTypeMatrixFromRows = 12, /** Creates a matrix from three row vector values */ + eImplicitNodeTypeDot = 13, /** Calculates the dot product of two vector values */ + eImplicitNodeTypeCross = 14, /** Calculates the cross product of two vector values */ + eImplicitNodeTypeMatVecMultiplication = 15, /** Multiplies a matrix with a vector */ + eImplicitNodeTypeTranspose = 16, /** Transposes a matrix */ + eImplicitNodeTypeInverse = 17, /** Computes the inverse of a matrix */ + eImplicitNodeTypeSinus = 18, /** Calculates the sinus */ + eImplicitNodeTypeCosinus = 19, /** Calculates the cosinus */ + eImplicitNodeTypeTan = 20, /** Calculates the tangent */ + eImplicitNodeTypeArcSin = 21, /** Calculates the arcsinus */ + eImplicitNodeTypeArcCos = 22, /** Calculates the arccosinus */ + eImplicitNodeTypeArcTan = 23, /** Calculates the arctangent */ + eImplicitNodeTypeArcTan2 = 24, /** Calculates the arctangent */ + eImplicitNodeTypeMin = 25, /** Calculates the minimum tow values */ + eImplicitNodeTypeMax = 26, /** Calculates the maximum of two values */ + eImplicitNodeTypeAbs = 27, /** Calcul the absolute value */ + eImplicitNodeTypeFmod = 28, /** Computes the remainder of the divison of the inputs (same behavior as C fmod) */ + eImplicitNodeTypePow = 29, /** Calculates the power A^B */ + eImplicitNodeTypeSqrt = 30, /** Calculates the square root */ + eImplicitNodeTypeExp = 31, /** Exponential function */ + eImplicitNodeTypeLog = 32, /** Natural logarithmus */ + eImplicitNodeTypeLog2 = 33, /** Logarithmus to the base 2 */ + eImplicitNodeTypeLog10 = 34, /** Logarithmus to the base 10 */ + eImplicitNodeTypeSelect = 35, /** If A is less B returns C, else D */ + eImplicitNodeTypeClamp = 36, /** Clamps the input value to min and max */ + eImplicitNodeTypeSinh = 37, /** Calculates the hyperbolic sine */ + eImplicitNodeTypeCosh = 38, /** Calculates the hyperbolic cosine */ + eImplicitNodeTypeTanh = 39, /** Calculates the hyperbolic tangent */ + eImplicitNodeTypeRound = 40, /** Rounds a scalar value to the nearest integer */ + eImplicitNodeTypeCeil = 41, /** Rounds a scalar value up to the nearest integer */ + eImplicitNodeTypeFloor = 42, /** Rounds a scalar value down to the nearest integer */ + eImplicitNodeTypeSign = 43, /** Returns the sign */ + eImplicitNodeTypeFract = 44, /** Returns the fractional part */ + eImplicitNodeTypeFunctionCall = 45, /** Calls a function */ + eImplicitNodeTypeMesh = 46, /** Calculates the signed distance to a mesh */ + eImplicitNodeTypeLength = 47, /** Calculates the length of a vector */ + eImplicitNodeTypeConstResourceID = 48, /** Selects a resource (function, mesh etc.) */ + eImplicitNodeTypeVectorFromScalar = 49, /** Creates a vector from one scalar values */ + eImplicitNodeTypeUnsignedMesh = 50, /** Calculates the unsigned distance to a mesh */ + eImplicitNodeTypeMod = 51 /** Calculates the modulo of two values (same behaviour as glsl mod) */ +} eLib3MFImplicitNodeType; + +/** +* enum eLib3MFImplicitPortType - The type of the port +*/ +typedef enum eLib3MFImplicitPortType { + eImplicitPortTypeScalar = 1, /** Scalar */ + eImplicitPortTypeVector = 2, /** Vector */ + eImplicitPortTypeMatrix = 3, /** 4x4 Matrix */ + eImplicitPortTypeResourceID = 4 /** Resource ID */ +} eLib3MFImplicitPortType; + +/** +* enum eLib3MFImplicitNodeConfiguration - Defines the input and output types of a node +*/ +typedef enum eLib3MFImplicitNodeConfiguration { + eImplicitNodeConfigurationDefault = 1, /** Default */ + eImplicitNodeConfigurationScalarToScalar = 2, /** Scalar -> Scalar */ + eImplicitNodeConfigurationVectorToVector = 3, /** Vector -> Vector */ + eImplicitNodeConfigurationMatrixToMatrix = 4 /** Matrix -> Matrix */ +} eLib3MFImplicitNodeConfiguration; + typedef enum eLib3MFEncryptionAlgorithm { eEncryptionAlgorithmAES256_GCM = 1 /** http://www.w3.org/2009/xmlenc11#aes256-gcm */ } eLib3MFEncryptionAlgorithm; @@ -433,6 +613,36 @@ typedef union { int m_code; } structEnumLib3MFBlendMethod; +typedef union { + eLib3MFChannelName m_enum; + int m_code; +} structEnumLib3MFChannelName; + +typedef union { + eLib3MFCompositionMethod m_enum; + int m_code; +} structEnumLib3MFCompositionMethod; + +typedef union { + eLib3MFCompositionSpace m_enum; + int m_code; +} structEnumLib3MFCompositionSpace; + +typedef union { + eLib3MFImplicitNodeType m_enum; + int m_code; +} structEnumLib3MFImplicitNodeType; + +typedef union { + eLib3MFImplicitPortType m_enum; + int m_code; +} structEnumLib3MFImplicitPortType; + +typedef union { + eLib3MFImplicitNodeConfiguration m_enum; + int m_code; +} structEnumLib3MFImplicitNodeConfiguration; + typedef union { eLib3MFEncryptionAlgorithm m_enum; int m_code; @@ -523,6 +733,14 @@ typedef struct sLib3MFBall { Lib3MF_double m_Radius; } sLib3MFBall; +typedef struct sLib3MFVector { + Lib3MF_double m_Coordinates[3]; +} sLib3MFVector; + +typedef struct sLib3MFMatrix4x4 { + Lib3MF_double m_Field[4][4]; +} sLib3MFMatrix4x4; + #pragma pack () /************************************************************************************************************************* diff --git a/Autogenerated/Bindings/CDynamic/lib3mf_dynamic.cc b/Autogenerated/Bindings/CDynamic/lib3mf_dynamic.cc index e1cec341d..2bef1bdf1 100644 --- a/Autogenerated/Bindings/CDynamic/lib3mf_dynamic.cc +++ b/Autogenerated/Bindings/CDynamic/lib3mf_dynamic.cc @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated plain C Header file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -96,6 +96,9 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup = NULL; pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials = NULL; pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup = NULL; + pWrapperTable->m_Image3DIterator_GetCurrentImage3D = NULL; + pWrapperTable->m_FunctionIterator_GetCurrentFunction = NULL; + pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet = NULL; pWrapperTable->m_MetaData_GetNameSpace = NULL; pWrapperTable->m_MetaData_SetNameSpace = NULL; pWrapperTable->m_MetaData_GetName = NULL; @@ -121,6 +124,7 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Object_SetPartNumber = NULL; pWrapperTable->m_Object_IsMeshObject = NULL; pWrapperTable->m_Object_IsComponentsObject = NULL; + pWrapperTable->m_Object_IsLevelSetObject = NULL; pWrapperTable->m_Object_IsValid = NULL; pWrapperTable->m_Object_SetAttachmentAsThumbnail = NULL; pWrapperTable->m_Object_GetThumbnailAttachment = NULL; @@ -155,6 +159,24 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_MeshObject_SetGeometry = NULL; pWrapperTable->m_MeshObject_IsManifoldAndOriented = NULL; pWrapperTable->m_MeshObject_BeamLattice = NULL; + pWrapperTable->m_MeshObject_GetVolumeData = NULL; + pWrapperTable->m_MeshObject_SetVolumeData = NULL; + pWrapperTable->m_LevelSet_GetFunction = NULL; + pWrapperTable->m_LevelSet_SetFunction = NULL; + pWrapperTable->m_LevelSet_GetTransform = NULL; + pWrapperTable->m_LevelSet_SetTransform = NULL; + pWrapperTable->m_LevelSet_GetChannelName = NULL; + pWrapperTable->m_LevelSet_SetChannelName = NULL; + pWrapperTable->m_LevelSet_SetMinFeatureSize = NULL; + pWrapperTable->m_LevelSet_GetMinFeatureSize = NULL; + pWrapperTable->m_LevelSet_SetFallBackValue = NULL; + pWrapperTable->m_LevelSet_GetFallBackValue = NULL; + pWrapperTable->m_LevelSet_SetMeshBBoxOnly = NULL; + pWrapperTable->m_LevelSet_GetMeshBBoxOnly = NULL; + pWrapperTable->m_LevelSet_SetMesh = NULL; + pWrapperTable->m_LevelSet_GetMesh = NULL; + pWrapperTable->m_LevelSet_GetVolumeData = NULL; + pWrapperTable->m_LevelSet_SetVolumeData = NULL; pWrapperTable->m_BeamLattice_GetMinLength = NULL; pWrapperTable->m_BeamLattice_SetMinLength = NULL; pWrapperTable->m_BeamLattice_GetClipping = NULL; @@ -178,6 +200,35 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_BeamLattice_GetBeamSetCount = NULL; pWrapperTable->m_BeamLattice_AddBeamSet = NULL; pWrapperTable->m_BeamLattice_GetBeamSet = NULL; + pWrapperTable->m_FunctionReference_GetFunctionResourceID = NULL; + pWrapperTable->m_FunctionReference_SetFunctionResourceID = NULL; + pWrapperTable->m_FunctionReference_GetTransform = NULL; + pWrapperTable->m_FunctionReference_SetTransform = NULL; + pWrapperTable->m_FunctionReference_GetChannelName = NULL; + pWrapperTable->m_FunctionReference_SetChannelName = NULL; + pWrapperTable->m_FunctionReference_SetMinFeatureSize = NULL; + pWrapperTable->m_FunctionReference_GetMinFeatureSize = NULL; + pWrapperTable->m_FunctionReference_SetFallBackValue = NULL; + pWrapperTable->m_FunctionReference_GetFallBackValue = NULL; + pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup = NULL; + pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup = NULL; + pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount = NULL; + pWrapperTable->m_VolumeDataComposite_GetMaterialMapping = NULL; + pWrapperTable->m_VolumeDataComposite_AddMaterialMapping = NULL; + pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping = NULL; + pWrapperTable->m_VolumeDataProperty_GetName = NULL; + pWrapperTable->m_VolumeDataProperty_SetIsRequired = NULL; + pWrapperTable->m_VolumeDataProperty_IsRequired = NULL; + pWrapperTable->m_VolumeData_GetComposite = NULL; + pWrapperTable->m_VolumeData_CreateNewComposite = NULL; + pWrapperTable->m_VolumeData_RemoveComposite = NULL; + pWrapperTable->m_VolumeData_GetColor = NULL; + pWrapperTable->m_VolumeData_CreateNewColor = NULL; + pWrapperTable->m_VolumeData_RemoveColor = NULL; + pWrapperTable->m_VolumeData_GetPropertyCount = NULL; + pWrapperTable->m_VolumeData_GetProperty = NULL; + pWrapperTable->m_VolumeData_AddPropertyFromFunction = NULL; + pWrapperTable->m_VolumeData_RemoveProperty = NULL; pWrapperTable->m_Component_GetObjectResource = NULL; pWrapperTable->m_Component_GetObjectResourceID = NULL; pWrapperTable->m_Component_GetUUID = NULL; @@ -234,6 +285,19 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_MultiPropertyGroup_AddLayer = NULL; pWrapperTable->m_MultiPropertyGroup_GetLayer = NULL; pWrapperTable->m_MultiPropertyGroup_RemoveLayer = NULL; + pWrapperTable->m_Image3D_GetName = NULL; + pWrapperTable->m_Image3D_SetName = NULL; + pWrapperTable->m_Image3D_IsImageStack = NULL; + pWrapperTable->m_ImageStack_GetRowCount = NULL; + pWrapperTable->m_ImageStack_SetRowCount = NULL; + pWrapperTable->m_ImageStack_GetColumnCount = NULL; + pWrapperTable->m_ImageStack_SetColumnCount = NULL; + pWrapperTable->m_ImageStack_GetSheetCount = NULL; + pWrapperTable->m_ImageStack_GetSheet = NULL; + pWrapperTable->m_ImageStack_SetSheet = NULL; + pWrapperTable->m_ImageStack_CreateEmptySheet = NULL; + pWrapperTable->m_ImageStack_CreateSheetFromBuffer = NULL; + pWrapperTable->m_ImageStack_CreateSheetFromFile = NULL; pWrapperTable->m_Attachment_GetPath = NULL; pWrapperTable->m_Attachment_SetPath = NULL; pWrapperTable->m_Attachment_PackagePart = NULL; @@ -253,6 +317,173 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Texture2D_SetTileStyleUV = NULL; pWrapperTable->m_Texture2D_GetFilter = NULL; pWrapperTable->m_Texture2D_SetFilter = NULL; + pWrapperTable->m_ImplicitPort_GetIdentifier = NULL; + pWrapperTable->m_ImplicitPort_SetIdentifier = NULL; + pWrapperTable->m_ImplicitPort_GetDisplayName = NULL; + pWrapperTable->m_ImplicitPort_SetDisplayName = NULL; + pWrapperTable->m_ImplicitPort_SetType = NULL; + pWrapperTable->m_ImplicitPort_GetType = NULL; + pWrapperTable->m_ImplicitPort_GetReference = NULL; + pWrapperTable->m_ImplicitPort_SetReference = NULL; + pWrapperTable->m_Iterator_MoveNext = NULL; + pWrapperTable->m_Iterator_MovePrevious = NULL; + pWrapperTable->m_Iterator_Count = NULL; + pWrapperTable->m_ImplicitPortIterator_GetCurrent = NULL; + pWrapperTable->m_ImplicitNode_GetIdentifier = NULL; + pWrapperTable->m_ImplicitNode_SetIdentifier = NULL; + pWrapperTable->m_ImplicitNode_GetDisplayName = NULL; + pWrapperTable->m_ImplicitNode_SetDisplayName = NULL; + pWrapperTable->m_ImplicitNode_GetTag = NULL; + pWrapperTable->m_ImplicitNode_SetTag = NULL; + pWrapperTable->m_ImplicitNode_GetNodeType = NULL; + pWrapperTable->m_ImplicitNode_AddInput = NULL; + pWrapperTable->m_ImplicitNode_GetInputs = NULL; + pWrapperTable->m_ImplicitNode_AddOutput = NULL; + pWrapperTable->m_ImplicitNode_GetOutputs = NULL; + pWrapperTable->m_ImplicitNode_FindInput = NULL; + pWrapperTable->m_ImplicitNode_FindOutput = NULL; + pWrapperTable->m_ImplicitNode_AreTypesValid = NULL; + pWrapperTable->m_OneInputNode_GetInputA = NULL; + pWrapperTable->m_OneInputNode_GetOutputResult = NULL; + pWrapperTable->m_ResourceIdNode_SetResource = NULL; + pWrapperTable->m_ResourceIdNode_GetResource = NULL; + pWrapperTable->m_ResourceIdNode_GetOutputValue = NULL; + pWrapperTable->m_TwoInputNode_GetInputB = NULL; + pWrapperTable->m_SelectNode_GetInputB = NULL; + pWrapperTable->m_SelectNode_GetInputC = NULL; + pWrapperTable->m_SelectNode_GetInputD = NULL; + pWrapperTable->m_ClampNode_GetInputMin = NULL; + pWrapperTable->m_ClampNode_GetInputMax = NULL; + pWrapperTable->m_ComposeVectorNode_GetInputX = NULL; + pWrapperTable->m_ComposeVectorNode_GetInputY = NULL; + pWrapperTable->m_ComposeVectorNode_GetInputZ = NULL; + pWrapperTable->m_ComposeVectorNode_GetOutputResult = NULL; + pWrapperTable->m_DecomposeVectorNode_GetInputA = NULL; + pWrapperTable->m_DecomposeVectorNode_GetOutputX = NULL; + pWrapperTable->m_DecomposeVectorNode_GetOutputY = NULL; + pWrapperTable->m_DecomposeVectorNode_GetOutputZ = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM00 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM01 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM02 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM03 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM10 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM11 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM12 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM13 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM20 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM21 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM22 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM23 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM30 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM31 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM32 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM33 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetOutputResult = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetInputA = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetInputB = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetInputC = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetInputD = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetOutputResult = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetInputA = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetInputB = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetInputC = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetInputD = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult = NULL; + pWrapperTable->m_ConstantNode_SetConstant = NULL; + pWrapperTable->m_ConstantNode_GetConstant = NULL; + pWrapperTable->m_ConstantNode_GetOutputValue = NULL; + pWrapperTable->m_ConstVecNode_SetVector = NULL; + pWrapperTable->m_ConstVecNode_GetVector = NULL; + pWrapperTable->m_ConstVecNode_GetOutputVector = NULL; + pWrapperTable->m_ConstMatNode_SetMatrix = NULL; + pWrapperTable->m_ConstMatNode_GetMatrix = NULL; + pWrapperTable->m_ConstMatNode_GetOutputMatrix = NULL; + pWrapperTable->m_MeshNode_GetInputMesh = NULL; + pWrapperTable->m_MeshNode_GetInputPos = NULL; + pWrapperTable->m_MeshNode_GetOutputDistance = NULL; + pWrapperTable->m_UnsignedMeshNode_GetInputMesh = NULL; + pWrapperTable->m_UnsignedMeshNode_GetInputPos = NULL; + pWrapperTable->m_UnsignedMeshNode_GetOutputDistance = NULL; + pWrapperTable->m_FunctionCallNode_GetInputFunctionID = NULL; + pWrapperTable->m_NodeIterator_GetCurrent = NULL; + pWrapperTable->m_Function_GetDisplayName = NULL; + pWrapperTable->m_Function_SetDisplayName = NULL; + pWrapperTable->m_Function_AddInput = NULL; + pWrapperTable->m_Function_GetInputs = NULL; + pWrapperTable->m_Function_RemoveInput = NULL; + pWrapperTable->m_Function_AddOutput = NULL; + pWrapperTable->m_Function_GetOutputs = NULL; + pWrapperTable->m_Function_RemoveOutput = NULL; + pWrapperTable->m_Function_FindInput = NULL; + pWrapperTable->m_Function_FindOutput = NULL; + pWrapperTable->m_ImplicitFunction_GetIdentifier = NULL; + pWrapperTable->m_ImplicitFunction_SetIdentifier = NULL; + pWrapperTable->m_ImplicitFunction_AddNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSinNode = NULL; + pWrapperTable->m_ImplicitFunction_AddCosNode = NULL; + pWrapperTable->m_ImplicitFunction_AddTanNode = NULL; + pWrapperTable->m_ImplicitFunction_AddArcSinNode = NULL; + pWrapperTable->m_ImplicitFunction_AddArcCosNode = NULL; + pWrapperTable->m_ImplicitFunction_AddArcTan2Node = NULL; + pWrapperTable->m_ImplicitFunction_AddSinhNode = NULL; + pWrapperTable->m_ImplicitFunction_AddCoshNode = NULL; + pWrapperTable->m_ImplicitFunction_AddTanhNode = NULL; + pWrapperTable->m_ImplicitFunction_AddRoundNode = NULL; + pWrapperTable->m_ImplicitFunction_AddCeilNode = NULL; + pWrapperTable->m_ImplicitFunction_AddFloorNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSignNode = NULL; + pWrapperTable->m_ImplicitFunction_AddFractNode = NULL; + pWrapperTable->m_ImplicitFunction_AddAbsNode = NULL; + pWrapperTable->m_ImplicitFunction_AddExpNode = NULL; + pWrapperTable->m_ImplicitFunction_AddLogNode = NULL; + pWrapperTable->m_ImplicitFunction_AddLog2Node = NULL; + pWrapperTable->m_ImplicitFunction_AddLog10Node = NULL; + pWrapperTable->m_ImplicitFunction_AddLengthNode = NULL; + pWrapperTable->m_ImplicitFunction_AddTransposeNode = NULL; + pWrapperTable->m_ImplicitFunction_InverseNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSqrtNode = NULL; + pWrapperTable->m_ImplicitFunction_AddResourceIdNode = NULL; + pWrapperTable->m_ImplicitFunction_AddAdditionNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSubtractionNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMultiplicationNode = NULL; + pWrapperTable->m_ImplicitFunction_AddDivisionNode = NULL; + pWrapperTable->m_ImplicitFunction_AddDotNode = NULL; + pWrapperTable->m_ImplicitFunction_AddCrossNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMinNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMaxNode = NULL; + pWrapperTable->m_ImplicitFunction_AddFmodNode = NULL; + pWrapperTable->m_ImplicitFunction_AddPowNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSelectNode = NULL; + pWrapperTable->m_ImplicitFunction_AddClampNode = NULL; + pWrapperTable->m_ImplicitFunction_AddComposeVectorNode = NULL; + pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode = NULL; + pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode = NULL; + pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode = NULL; + pWrapperTable->m_ImplicitFunction_AddConstantNode = NULL; + pWrapperTable->m_ImplicitFunction_AddConstVecNode = NULL; + pWrapperTable->m_ImplicitFunction_AddConstMatNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMeshNode = NULL; + pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode = NULL; + pWrapperTable->m_ImplicitFunction_AddFunctionCallNode = NULL; + pWrapperTable->m_ImplicitFunction_GetNodes = NULL; + pWrapperTable->m_ImplicitFunction_RemoveNode = NULL; + pWrapperTable->m_ImplicitFunction_AddLink = NULL; + pWrapperTable->m_ImplicitFunction_AddLinkByNames = NULL; + pWrapperTable->m_ImplicitFunction_Clear = NULL; + pWrapperTable->m_ImplicitFunction_SortNodesTopologically = NULL; + pWrapperTable->m_FunctionFromImage3D_GetImage3D = NULL; + pWrapperTable->m_FunctionFromImage3D_SetImage3D = NULL; + pWrapperTable->m_FunctionFromImage3D_SetFilter = NULL; + pWrapperTable->m_FunctionFromImage3D_GetFilter = NULL; + pWrapperTable->m_FunctionFromImage3D_SetTileStyles = NULL; + pWrapperTable->m_FunctionFromImage3D_GetTileStyles = NULL; + pWrapperTable->m_FunctionFromImage3D_GetOffset = NULL; + pWrapperTable->m_FunctionFromImage3D_SetOffset = NULL; + pWrapperTable->m_FunctionFromImage3D_GetScale = NULL; + pWrapperTable->m_FunctionFromImage3D_SetScale = NULL; pWrapperTable->m_BuildItem_GetObjectResource = NULL; pWrapperTable->m_BuildItem_GetUUID = NULL; pWrapperTable->m_BuildItem_SetUUID = NULL; @@ -347,6 +578,7 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Model_GetComponentsObjectByID = NULL; pWrapperTable->m_Model_GetColorGroupByID = NULL; pWrapperTable->m_Model_GetSliceStackByID = NULL; + pWrapperTable->m_Model_GetLevelSetByID = NULL; pWrapperTable->m_Model_GetBuildUUID = NULL; pWrapperTable->m_Model_SetBuildUUID = NULL; pWrapperTable->m_Model_GetBuildItems = NULL; @@ -362,7 +594,9 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Model_GetCompositeMaterials = NULL; pWrapperTable->m_Model_GetMultiPropertyGroups = NULL; pWrapperTable->m_Model_GetSliceStacks = NULL; + pWrapperTable->m_Model_GetImage3Ds = NULL; pWrapperTable->m_Model_MergeToModel = NULL; + pWrapperTable->m_Model_MergeFromModel = NULL; pWrapperTable->m_Model_AddMeshObject = NULL; pWrapperTable->m_Model_AddComponentsObject = NULL; pWrapperTable->m_Model_AddSliceStack = NULL; @@ -372,6 +606,8 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Model_AddTexture2DGroup = NULL; pWrapperTable->m_Model_AddCompositeMaterials = NULL; pWrapperTable->m_Model_AddMultiPropertyGroup = NULL; + pWrapperTable->m_Model_AddImageStack = NULL; + pWrapperTable->m_Model_GetImageStackByID = NULL; pWrapperTable->m_Model_AddBuildItem = NULL; pWrapperTable->m_Model_RemoveBuildItem = NULL; pWrapperTable->m_Model_GetMetaDataGroup = NULL; @@ -388,6 +624,13 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Model_RemoveCustomContentType = NULL; pWrapperTable->m_Model_SetRandomNumberCallback = NULL; pWrapperTable->m_Model_GetKeyStore = NULL; + pWrapperTable->m_Model_GetFunctions = NULL; + pWrapperTable->m_Model_AddImplicitFunction = NULL; + pWrapperTable->m_Model_AddFunctionFromImage3D = NULL; + pWrapperTable->m_Model_AddVolumeData = NULL; + pWrapperTable->m_Model_AddLevelSet = NULL; + pWrapperTable->m_Model_GetLevelSets = NULL; + pWrapperTable->m_Model_RemoveResource = NULL; pWrapperTable->m_GetLibraryVersion = NULL; pWrapperTable->m_GetPrereleaseInformation = NULL; pWrapperTable->m_GetBuildInformation = NULL; @@ -893,6 +1136,33 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Image3DIterator_GetCurrentImage3D = (PLib3MFImage3DIterator_GetCurrentImage3DPtr) GetProcAddress(hLibrary, "lib3mf_image3diterator_getcurrentimage3d"); + #else // _WIN32 + pWrapperTable->m_Image3DIterator_GetCurrentImage3D = (PLib3MFImage3DIterator_GetCurrentImage3DPtr) dlsym(hLibrary, "lib3mf_image3diterator_getcurrentimage3d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3DIterator_GetCurrentImage3D == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionIterator_GetCurrentFunction = (PLib3MFFunctionIterator_GetCurrentFunctionPtr) GetProcAddress(hLibrary, "lib3mf_functioniterator_getcurrentfunction"); + #else // _WIN32 + pWrapperTable->m_FunctionIterator_GetCurrentFunction = (PLib3MFFunctionIterator_GetCurrentFunctionPtr) dlsym(hLibrary, "lib3mf_functioniterator_getcurrentfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionIterator_GetCurrentFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet = (PLib3MFLevelSetIterator_GetCurrentLevelSetPtr) GetProcAddress(hLibrary, "lib3mf_levelsetiterator_getcurrentlevelset"); + #else // _WIN32 + pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet = (PLib3MFLevelSetIterator_GetCurrentLevelSetPtr) dlsym(hLibrary, "lib3mf_levelsetiterator_getcurrentlevelset"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_MetaData_GetNameSpace = (PLib3MFMetaData_GetNameSpacePtr) GetProcAddress(hLibrary, "lib3mf_metadata_getnamespace"); #else // _WIN32 @@ -1118,6 +1388,15 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Object_IsComponentsObject == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Object_IsLevelSetObject = (PLib3MFObject_IsLevelSetObjectPtr) GetProcAddress(hLibrary, "lib3mf_object_islevelsetobject"); + #else // _WIN32 + pWrapperTable->m_Object_IsLevelSetObject = (PLib3MFObject_IsLevelSetObjectPtr) dlsym(hLibrary, "lib3mf_object_islevelsetobject"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_IsLevelSetObject == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Object_IsValid = (PLib3MFObject_IsValidPtr) GetProcAddress(hLibrary, "lib3mf_object_isvalid"); #else // _WIN32 @@ -1424,6 +1703,168 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_MeshObject_BeamLattice == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_MeshObject_GetVolumeData = (PLib3MFMeshObject_GetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getvolumedata"); + #else // _WIN32 + pWrapperTable->m_MeshObject_GetVolumeData = (PLib3MFMeshObject_GetVolumeDataPtr) dlsym(hLibrary, "lib3mf_meshobject_getvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_GetVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_SetVolumeData = (PLib3MFMeshObject_SetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_setvolumedata"); + #else // _WIN32 + pWrapperTable->m_MeshObject_SetVolumeData = (PLib3MFMeshObject_SetVolumeDataPtr) dlsym(hLibrary, "lib3mf_meshobject_setvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_SetVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetFunction = (PLib3MFLevelSet_GetFunctionPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getfunction"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetFunction = (PLib3MFLevelSet_GetFunctionPtr) dlsym(hLibrary, "lib3mf_levelset_getfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetFunction = (PLib3MFLevelSet_SetFunctionPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setfunction"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetFunction = (PLib3MFLevelSet_SetFunctionPtr) dlsym(hLibrary, "lib3mf_levelset_setfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetTransform = (PLib3MFLevelSet_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_levelset_gettransform"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetTransform = (PLib3MFLevelSet_GetTransformPtr) dlsym(hLibrary, "lib3mf_levelset_gettransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetTransform = (PLib3MFLevelSet_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_levelset_settransform"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetTransform = (PLib3MFLevelSet_SetTransformPtr) dlsym(hLibrary, "lib3mf_levelset_settransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetChannelName = (PLib3MFLevelSet_GetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_levelset_getchannelname"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetChannelName = (PLib3MFLevelSet_GetChannelNamePtr) dlsym(hLibrary, "lib3mf_levelset_getchannelname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetChannelName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetChannelName = (PLib3MFLevelSet_SetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_levelset_setchannelname"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetChannelName = (PLib3MFLevelSet_SetChannelNamePtr) dlsym(hLibrary, "lib3mf_levelset_setchannelname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetChannelName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetMinFeatureSize = (PLib3MFLevelSet_SetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_levelset_setminfeaturesize"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetMinFeatureSize = (PLib3MFLevelSet_SetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_levelset_setminfeaturesize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetMinFeatureSize == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetMinFeatureSize = (PLib3MFLevelSet_GetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_levelset_getminfeaturesize"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetMinFeatureSize = (PLib3MFLevelSet_GetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_levelset_getminfeaturesize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetMinFeatureSize == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetFallBackValue = (PLib3MFLevelSet_SetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_levelset_setfallbackvalue"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetFallBackValue = (PLib3MFLevelSet_SetFallBackValuePtr) dlsym(hLibrary, "lib3mf_levelset_setfallbackvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetFallBackValue == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetFallBackValue = (PLib3MFLevelSet_GetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_levelset_getfallbackvalue"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetFallBackValue = (PLib3MFLevelSet_GetFallBackValuePtr) dlsym(hLibrary, "lib3mf_levelset_getfallbackvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetFallBackValue == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetMeshBBoxOnly = (PLib3MFLevelSet_SetMeshBBoxOnlyPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setmeshbboxonly"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetMeshBBoxOnly = (PLib3MFLevelSet_SetMeshBBoxOnlyPtr) dlsym(hLibrary, "lib3mf_levelset_setmeshbboxonly"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetMeshBBoxOnly == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetMeshBBoxOnly = (PLib3MFLevelSet_GetMeshBBoxOnlyPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getmeshbboxonly"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetMeshBBoxOnly = (PLib3MFLevelSet_GetMeshBBoxOnlyPtr) dlsym(hLibrary, "lib3mf_levelset_getmeshbboxonly"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetMeshBBoxOnly == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetMesh = (PLib3MFLevelSet_SetMeshPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setmesh"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetMesh = (PLib3MFLevelSet_SetMeshPtr) dlsym(hLibrary, "lib3mf_levelset_setmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetMesh == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetMesh = (PLib3MFLevelSet_GetMeshPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getmesh"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetMesh = (PLib3MFLevelSet_GetMeshPtr) dlsym(hLibrary, "lib3mf_levelset_getmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetMesh == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetVolumeData = (PLib3MFLevelSet_GetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getvolumedata"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetVolumeData = (PLib3MFLevelSet_GetVolumeDataPtr) dlsym(hLibrary, "lib3mf_levelset_getvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetVolumeData = (PLib3MFLevelSet_SetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setvolumedata"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetVolumeData = (PLib3MFLevelSet_SetVolumeDataPtr) dlsym(hLibrary, "lib3mf_levelset_setvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_BeamLattice_GetMinLength = (PLib3MFBeamLattice_GetMinLengthPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getminlength"); #else // _WIN32 @@ -1632,678 +2073,2559 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresource"); + pWrapperTable->m_FunctionReference_GetFunctionResourceID = (PLib3MFFunctionReference_GetFunctionResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getfunctionresourceid"); #else // _WIN32 - pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) dlsym(hLibrary, "lib3mf_component_getobjectresource"); + pWrapperTable->m_FunctionReference_GetFunctionResourceID = (PLib3MFFunctionReference_GetFunctionResourceIDPtr) dlsym(hLibrary, "lib3mf_functionreference_getfunctionresourceid"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_GetObjectResource == NULL) + if (pWrapperTable->m_FunctionReference_GetFunctionResourceID == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresourceid"); + pWrapperTable->m_FunctionReference_SetFunctionResourceID = (PLib3MFFunctionReference_SetFunctionResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setfunctionresourceid"); #else // _WIN32 - pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) dlsym(hLibrary, "lib3mf_component_getobjectresourceid"); + pWrapperTable->m_FunctionReference_SetFunctionResourceID = (PLib3MFFunctionReference_SetFunctionResourceIDPtr) dlsym(hLibrary, "lib3mf_functionreference_setfunctionresourceid"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_GetObjectResourceID == NULL) + if (pWrapperTable->m_FunctionReference_SetFunctionResourceID == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getuuid"); + pWrapperTable->m_FunctionReference_GetTransform = (PLib3MFFunctionReference_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_gettransform"); #else // _WIN32 - pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) dlsym(hLibrary, "lib3mf_component_getuuid"); + pWrapperTable->m_FunctionReference_GetTransform = (PLib3MFFunctionReference_GetTransformPtr) dlsym(hLibrary, "lib3mf_functionreference_gettransform"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_GetUUID == NULL) + if (pWrapperTable->m_FunctionReference_GetTransform == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_setuuid"); + pWrapperTable->m_FunctionReference_SetTransform = (PLib3MFFunctionReference_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_settransform"); #else // _WIN32 - pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) dlsym(hLibrary, "lib3mf_component_setuuid"); + pWrapperTable->m_FunctionReference_SetTransform = (PLib3MFFunctionReference_SetTransformPtr) dlsym(hLibrary, "lib3mf_functionreference_settransform"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_SetUUID == NULL) + if (pWrapperTable->m_FunctionReference_SetTransform == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_hastransform"); + pWrapperTable->m_FunctionReference_GetChannelName = (PLib3MFFunctionReference_GetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getchannelname"); #else // _WIN32 - pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) dlsym(hLibrary, "lib3mf_component_hastransform"); + pWrapperTable->m_FunctionReference_GetChannelName = (PLib3MFFunctionReference_GetChannelNamePtr) dlsym(hLibrary, "lib3mf_functionreference_getchannelname"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_HasTransform == NULL) + if (pWrapperTable->m_FunctionReference_GetChannelName == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_gettransform"); + pWrapperTable->m_FunctionReference_SetChannelName = (PLib3MFFunctionReference_SetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setchannelname"); #else // _WIN32 - pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) dlsym(hLibrary, "lib3mf_component_gettransform"); + pWrapperTable->m_FunctionReference_SetChannelName = (PLib3MFFunctionReference_SetChannelNamePtr) dlsym(hLibrary, "lib3mf_functionreference_setchannelname"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_GetTransform == NULL) + if (pWrapperTable->m_FunctionReference_SetChannelName == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_settransform"); + pWrapperTable->m_FunctionReference_SetMinFeatureSize = (PLib3MFFunctionReference_SetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setminfeaturesize"); #else // _WIN32 - pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) dlsym(hLibrary, "lib3mf_component_settransform"); + pWrapperTable->m_FunctionReference_SetMinFeatureSize = (PLib3MFFunctionReference_SetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_functionreference_setminfeaturesize"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_SetTransform == NULL) + if (pWrapperTable->m_FunctionReference_SetMinFeatureSize == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_addcomponent"); + pWrapperTable->m_FunctionReference_GetMinFeatureSize = (PLib3MFFunctionReference_GetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getminfeaturesize"); #else // _WIN32 - pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_addcomponent"); + pWrapperTable->m_FunctionReference_GetMinFeatureSize = (PLib3MFFunctionReference_GetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_functionreference_getminfeaturesize"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ComponentsObject_AddComponent == NULL) + if (pWrapperTable->m_FunctionReference_GetMinFeatureSize == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponent"); + pWrapperTable->m_FunctionReference_SetFallBackValue = (PLib3MFFunctionReference_SetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setfallbackvalue"); #else // _WIN32 - pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponent"); + pWrapperTable->m_FunctionReference_SetFallBackValue = (PLib3MFFunctionReference_SetFallBackValuePtr) dlsym(hLibrary, "lib3mf_functionreference_setfallbackvalue"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ComponentsObject_GetComponent == NULL) + if (pWrapperTable->m_FunctionReference_SetFallBackValue == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + pWrapperTable->m_FunctionReference_GetFallBackValue = (PLib3MFFunctionReference_GetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getfallbackvalue"); #else // _WIN32 - pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + pWrapperTable->m_FunctionReference_GetFallBackValue = (PLib3MFFunctionReference_GetFallBackValuePtr) dlsym(hLibrary, "lib3mf_functionreference_getfallbackvalue"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ComponentsObject_GetComponentCount == NULL) + if (pWrapperTable->m_FunctionReference_GetFallBackValue == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_setname"); + pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup = (PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_getbasematerialgroup"); #else // _WIN32 - pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) dlsym(hLibrary, "lib3mf_beamset_setname"); + pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup = (PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_getbasematerialgroup"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetName == NULL) + if (pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_getname"); + pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup = (PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_setbasematerialgroup"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) dlsym(hLibrary, "lib3mf_beamset_getname"); + pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup = (PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_setbasematerialgroup"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetName == NULL) + if (pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setidentifier"); + pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount = (PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_getmaterialmappingcount"); #else // _WIN32 - pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_setidentifier"); + pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount = (PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_getmaterialmappingcount"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetIdentifier == NULL) + if (pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getidentifier"); + pWrapperTable->m_VolumeDataComposite_GetMaterialMapping = (PLib3MFVolumeDataComposite_GetMaterialMappingPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_getmaterialmapping"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_getidentifier"); + pWrapperTable->m_VolumeDataComposite_GetMaterialMapping = (PLib3MFVolumeDataComposite_GetMaterialMappingPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_getmaterialmapping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_GetMaterialMapping == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataComposite_AddMaterialMapping = (PLib3MFVolumeDataComposite_AddMaterialMappingPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_addmaterialmapping"); + #else // _WIN32 + pWrapperTable->m_VolumeDataComposite_AddMaterialMapping = (PLib3MFVolumeDataComposite_AddMaterialMappingPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_addmaterialmapping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_AddMaterialMapping == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping = (PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_removematerialmapping"); + #else // _WIN32 + pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping = (PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_removematerialmapping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataProperty_GetName = (PLib3MFVolumeDataProperty_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_volumedataproperty_getname"); + #else // _WIN32 + pWrapperTable->m_VolumeDataProperty_GetName = (PLib3MFVolumeDataProperty_GetNamePtr) dlsym(hLibrary, "lib3mf_volumedataproperty_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataProperty_GetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataProperty_SetIsRequired = (PLib3MFVolumeDataProperty_SetIsRequiredPtr) GetProcAddress(hLibrary, "lib3mf_volumedataproperty_setisrequired"); + #else // _WIN32 + pWrapperTable->m_VolumeDataProperty_SetIsRequired = (PLib3MFVolumeDataProperty_SetIsRequiredPtr) dlsym(hLibrary, "lib3mf_volumedataproperty_setisrequired"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataProperty_SetIsRequired == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataProperty_IsRequired = (PLib3MFVolumeDataProperty_IsRequiredPtr) GetProcAddress(hLibrary, "lib3mf_volumedataproperty_isrequired"); + #else // _WIN32 + pWrapperTable->m_VolumeDataProperty_IsRequired = (PLib3MFVolumeDataProperty_IsRequiredPtr) dlsym(hLibrary, "lib3mf_volumedataproperty_isrequired"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataProperty_IsRequired == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetComposite = (PLib3MFVolumeData_GetCompositePtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getcomposite"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetComposite = (PLib3MFVolumeData_GetCompositePtr) dlsym(hLibrary, "lib3mf_volumedata_getcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_CreateNewComposite = (PLib3MFVolumeData_CreateNewCompositePtr) GetProcAddress(hLibrary, "lib3mf_volumedata_createnewcomposite"); + #else // _WIN32 + pWrapperTable->m_VolumeData_CreateNewComposite = (PLib3MFVolumeData_CreateNewCompositePtr) dlsym(hLibrary, "lib3mf_volumedata_createnewcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_CreateNewComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_RemoveComposite = (PLib3MFVolumeData_RemoveCompositePtr) GetProcAddress(hLibrary, "lib3mf_volumedata_removecomposite"); + #else // _WIN32 + pWrapperTable->m_VolumeData_RemoveComposite = (PLib3MFVolumeData_RemoveCompositePtr) dlsym(hLibrary, "lib3mf_volumedata_removecomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_RemoveComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetColor = (PLib3MFVolumeData_GetColorPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getcolor"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetColor = (PLib3MFVolumeData_GetColorPtr) dlsym(hLibrary, "lib3mf_volumedata_getcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_CreateNewColor = (PLib3MFVolumeData_CreateNewColorPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_createnewcolor"); + #else // _WIN32 + pWrapperTable->m_VolumeData_CreateNewColor = (PLib3MFVolumeData_CreateNewColorPtr) dlsym(hLibrary, "lib3mf_volumedata_createnewcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_CreateNewColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_RemoveColor = (PLib3MFVolumeData_RemoveColorPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_removecolor"); + #else // _WIN32 + pWrapperTable->m_VolumeData_RemoveColor = (PLib3MFVolumeData_RemoveColorPtr) dlsym(hLibrary, "lib3mf_volumedata_removecolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_RemoveColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetPropertyCount = (PLib3MFVolumeData_GetPropertyCountPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getpropertycount"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetPropertyCount = (PLib3MFVolumeData_GetPropertyCountPtr) dlsym(hLibrary, "lib3mf_volumedata_getpropertycount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetPropertyCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetProperty = (PLib3MFVolumeData_GetPropertyPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getproperty"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetProperty = (PLib3MFVolumeData_GetPropertyPtr) dlsym(hLibrary, "lib3mf_volumedata_getproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_AddPropertyFromFunction = (PLib3MFVolumeData_AddPropertyFromFunctionPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_addpropertyfromfunction"); + #else // _WIN32 + pWrapperTable->m_VolumeData_AddPropertyFromFunction = (PLib3MFVolumeData_AddPropertyFromFunctionPtr) dlsym(hLibrary, "lib3mf_volumedata_addpropertyfromfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_AddPropertyFromFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_RemoveProperty = (PLib3MFVolumeData_RemovePropertyPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_removeproperty"); + #else // _WIN32 + pWrapperTable->m_VolumeData_RemoveProperty = (PLib3MFVolumeData_RemovePropertyPtr) dlsym(hLibrary, "lib3mf_volumedata_removeproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_RemoveProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresource"); + #else // _WIN32 + pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) dlsym(hLibrary, "lib3mf_component_getobjectresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetObjectResource == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresourceid"); + #else // _WIN32 + pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) dlsym(hLibrary, "lib3mf_component_getobjectresourceid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetObjectResourceID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getuuid"); + #else // _WIN32 + pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) dlsym(hLibrary, "lib3mf_component_getuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetUUID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_setuuid"); + #else // _WIN32 + pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) dlsym(hLibrary, "lib3mf_component_setuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_SetUUID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_hastransform"); + #else // _WIN32 + pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) dlsym(hLibrary, "lib3mf_component_hastransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_HasTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_gettransform"); + #else // _WIN32 + pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) dlsym(hLibrary, "lib3mf_component_gettransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_settransform"); + #else // _WIN32 + pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) dlsym(hLibrary, "lib3mf_component_settransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_SetTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_addcomponent"); + #else // _WIN32 + pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_addcomponent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComponentsObject_AddComponent == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponent"); + #else // _WIN32 + pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComponentsObject_GetComponent == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + #else // _WIN32 + pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComponentsObject_GetComponentCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_setname"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) dlsym(hLibrary, "lib3mf_beamset_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_getname"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) dlsym(hLibrary, "lib3mf_beamset_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setidentifier"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getidentifier"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferencecount"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getreferencecount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetReferenceCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetReferences == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetReferences == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferencecount"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferencecount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetBallReferenceCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setballreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setballreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetBallReferences == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetBallReferences == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getcount"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_AddMaterial == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_removematerial"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_removematerial"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_RemoveMaterial == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getname"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setname"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_SetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_SetDisplayColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetDisplayColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcount"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_addcolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_addcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_AddColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_removecolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_removecolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_RemoveColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_setcolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_setcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_SetColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_GetColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getcount"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_AddTex2Coord == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetTex2Coord == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_RemoveTex2Coord == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetTexture2D == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcount"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) dlsym(hLibrary, "lib3mf_compositematerials_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_addcomposite"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_addcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_AddComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_removecomposite"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_removecomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_RemoveComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcomposite"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_getcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getcount"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_AddMultiProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_SetMultiProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetMultiProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetLayerCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addlayer"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addlayer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_AddLayer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayer"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetLayer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removelayer"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removelayer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_RemoveLayer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Image3D_GetName = (PLib3MFImage3D_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_image3d_getname"); + #else // _WIN32 + pWrapperTable->m_Image3D_GetName = (PLib3MFImage3D_GetNamePtr) dlsym(hLibrary, "lib3mf_image3d_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3D_GetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Image3D_SetName = (PLib3MFImage3D_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_image3d_setname"); + #else // _WIN32 + pWrapperTable->m_Image3D_SetName = (PLib3MFImage3D_SetNamePtr) dlsym(hLibrary, "lib3mf_image3d_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3D_SetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Image3D_IsImageStack = (PLib3MFImage3D_IsImageStackPtr) GetProcAddress(hLibrary, "lib3mf_image3d_isimagestack"); + #else // _WIN32 + pWrapperTable->m_Image3D_IsImageStack = (PLib3MFImage3D_IsImageStackPtr) dlsym(hLibrary, "lib3mf_image3d_isimagestack"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3D_IsImageStack == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetRowCount = (PLib3MFImageStack_GetRowCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getrowcount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetRowCount = (PLib3MFImageStack_GetRowCountPtr) dlsym(hLibrary, "lib3mf_imagestack_getrowcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetRowCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_SetRowCount = (PLib3MFImageStack_SetRowCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_setrowcount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_SetRowCount = (PLib3MFImageStack_SetRowCountPtr) dlsym(hLibrary, "lib3mf_imagestack_setrowcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_SetRowCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetColumnCount = (PLib3MFImageStack_GetColumnCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getcolumncount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetColumnCount = (PLib3MFImageStack_GetColumnCountPtr) dlsym(hLibrary, "lib3mf_imagestack_getcolumncount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetColumnCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_SetColumnCount = (PLib3MFImageStack_SetColumnCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_setcolumncount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_SetColumnCount = (PLib3MFImageStack_SetColumnCountPtr) dlsym(hLibrary, "lib3mf_imagestack_setcolumncount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_SetColumnCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetSheetCount = (PLib3MFImageStack_GetSheetCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getsheetcount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetSheetCount = (PLib3MFImageStack_GetSheetCountPtr) dlsym(hLibrary, "lib3mf_imagestack_getsheetcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetSheetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetSheet = (PLib3MFImageStack_GetSheetPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getsheet"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetSheet = (PLib3MFImageStack_GetSheetPtr) dlsym(hLibrary, "lib3mf_imagestack_getsheet"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetSheet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_SetSheet = (PLib3MFImageStack_SetSheetPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_setsheet"); + #else // _WIN32 + pWrapperTable->m_ImageStack_SetSheet = (PLib3MFImageStack_SetSheetPtr) dlsym(hLibrary, "lib3mf_imagestack_setsheet"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_SetSheet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_CreateEmptySheet = (PLib3MFImageStack_CreateEmptySheetPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_createemptysheet"); + #else // _WIN32 + pWrapperTable->m_ImageStack_CreateEmptySheet = (PLib3MFImageStack_CreateEmptySheetPtr) dlsym(hLibrary, "lib3mf_imagestack_createemptysheet"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_CreateEmptySheet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromBuffer = (PLib3MFImageStack_CreateSheetFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_createsheetfrombuffer"); + #else // _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromBuffer = (PLib3MFImageStack_CreateSheetFromBufferPtr) dlsym(hLibrary, "lib3mf_imagestack_createsheetfrombuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_CreateSheetFromBuffer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromFile = (PLib3MFImageStack_CreateSheetFromFilePtr) GetProcAddress(hLibrary, "lib3mf_imagestack_createsheetfromfile"); + #else // _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromFile = (PLib3MFImageStack_CreateSheetFromFilePtr) dlsym(hLibrary, "lib3mf_imagestack_createsheetfromfile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_CreateSheetFromFile == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_getpath"); + #else // _WIN32 + pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) dlsym(hLibrary, "lib3mf_attachment_getpath"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_GetPath == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_setpath"); + #else // _WIN32 + pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) dlsym(hLibrary, "lib3mf_attachment_setpath"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_SetPath == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) GetProcAddress(hLibrary, "lib3mf_attachment_packagepart"); + #else // _WIN32 + pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) dlsym(hLibrary, "lib3mf_attachment_packagepart"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_PackagePart == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getrelationshiptype"); + #else // _WIN32 + pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_getrelationshiptype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_GetRelationShipType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_setrelationshiptype"); + #else // _WIN32 + pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_setrelationshiptype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_SetRelationShipType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetofile"); + #else // _WIN32 + pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) dlsym(hLibrary, "lib3mf_attachment_writetofile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_WriteToFile == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromfile"); + #else // _WIN32 + pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) dlsym(hLibrary, "lib3mf_attachment_readfromfile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_ReadFromFile == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromcallback"); + #else // _WIN32 + pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) dlsym(hLibrary, "lib3mf_attachment_readfromcallback"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_ReadFromCallback == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getstreamsize"); + #else // _WIN32 + pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) dlsym(hLibrary, "lib3mf_attachment_getstreamsize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_GetStreamSize == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetobuffer"); + #else // _WIN32 + pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) dlsym(hLibrary, "lib3mf_attachment_writetobuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_WriteToBuffer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfrombuffer"); + #else // _WIN32 + pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) dlsym(hLibrary, "lib3mf_attachment_readfrombuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_ReadFromBuffer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getattachment"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_getattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetAttachment == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setattachment"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_setattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetAttachment == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getcontenttype"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_getcontenttype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetContentType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setcontenttype"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_setcontenttype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetContentType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetTileStyleUV == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_settilestyleuv"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_settilestyleuv"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetTileStyleUV == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getfilter"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_getfilter"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetFilter == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setfilter"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_setfilter"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetFilter == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetIdentifier = (PLib3MFImplicitPort_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitport_getidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetIdentifier = (PLib3MFImplicitPort_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitport_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetIdentifier = (PLib3MFImplicitPort_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitport_setidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetIdentifier = (PLib3MFImplicitPort_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitport_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetDisplayName = (PLib3MFImplicitPort_GetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_getdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetDisplayName = (PLib3MFImplicitPort_GetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitport_getdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetDisplayName = (PLib3MFImplicitPort_SetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_setdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetDisplayName = (PLib3MFImplicitPort_SetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitport_setdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetType = (PLib3MFImplicitPort_SetTypePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_settype"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetType = (PLib3MFImplicitPort_SetTypePtr) dlsym(hLibrary, "lib3mf_implicitport_settype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetType = (PLib3MFImplicitPort_GetTypePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_gettype"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetType = (PLib3MFImplicitPort_GetTypePtr) dlsym(hLibrary, "lib3mf_implicitport_gettype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetReference = (PLib3MFImplicitPort_GetReferencePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_getreference"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetReference = (PLib3MFImplicitPort_GetReferencePtr) dlsym(hLibrary, "lib3mf_implicitport_getreference"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetReference == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetReference = (PLib3MFImplicitPort_SetReferencePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_setreference"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetReference = (PLib3MFImplicitPort_SetReferencePtr) dlsym(hLibrary, "lib3mf_implicitport_setreference"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetReference == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Iterator_MoveNext = (PLib3MFIterator_MoveNextPtr) GetProcAddress(hLibrary, "lib3mf_iterator_movenext"); + #else // _WIN32 + pWrapperTable->m_Iterator_MoveNext = (PLib3MFIterator_MoveNextPtr) dlsym(hLibrary, "lib3mf_iterator_movenext"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Iterator_MoveNext == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Iterator_MovePrevious = (PLib3MFIterator_MovePreviousPtr) GetProcAddress(hLibrary, "lib3mf_iterator_moveprevious"); + #else // _WIN32 + pWrapperTable->m_Iterator_MovePrevious = (PLib3MFIterator_MovePreviousPtr) dlsym(hLibrary, "lib3mf_iterator_moveprevious"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Iterator_MovePrevious == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Iterator_Count = (PLib3MFIterator_CountPtr) GetProcAddress(hLibrary, "lib3mf_iterator_count"); + #else // _WIN32 + pWrapperTable->m_Iterator_Count = (PLib3MFIterator_CountPtr) dlsym(hLibrary, "lib3mf_iterator_count"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Iterator_Count == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPortIterator_GetCurrent = (PLib3MFImplicitPortIterator_GetCurrentPtr) GetProcAddress(hLibrary, "lib3mf_implicitportiterator_getcurrent"); + #else // _WIN32 + pWrapperTable->m_ImplicitPortIterator_GetCurrent = (PLib3MFImplicitPortIterator_GetCurrentPtr) dlsym(hLibrary, "lib3mf_implicitportiterator_getcurrent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPortIterator_GetCurrent == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetIdentifier = (PLib3MFImplicitNode_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetIdentifier = (PLib3MFImplicitNode_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitnode_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_SetIdentifier = (PLib3MFImplicitNode_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_setidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_SetIdentifier = (PLib3MFImplicitNode_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitnode_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_SetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetDisplayName = (PLib3MFImplicitNode_GetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetDisplayName = (PLib3MFImplicitNode_GetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitnode_getdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_SetDisplayName = (PLib3MFImplicitNode_SetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_setdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_SetDisplayName = (PLib3MFImplicitNode_SetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitnode_setdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_SetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetTag = (PLib3MFImplicitNode_GetTagPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_gettag"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetTag = (PLib3MFImplicitNode_GetTagPtr) dlsym(hLibrary, "lib3mf_implicitnode_gettag"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetTag == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_SetTag = (PLib3MFImplicitNode_SetTagPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_settag"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_SetTag = (PLib3MFImplicitNode_SetTagPtr) dlsym(hLibrary, "lib3mf_implicitnode_settag"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_SetTag == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetNodeType = (PLib3MFImplicitNode_GetNodeTypePtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getnodetype"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetNodeType = (PLib3MFImplicitNode_GetNodeTypePtr) dlsym(hLibrary, "lib3mf_implicitnode_getnodetype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetNodeType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_AddInput = (PLib3MFImplicitNode_AddInputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_addinput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_AddInput = (PLib3MFImplicitNode_AddInputPtr) dlsym(hLibrary, "lib3mf_implicitnode_addinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_AddInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetInputs = (PLib3MFImplicitNode_GetInputsPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getinputs"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetInputs = (PLib3MFImplicitNode_GetInputsPtr) dlsym(hLibrary, "lib3mf_implicitnode_getinputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetInputs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_AddOutput = (PLib3MFImplicitNode_AddOutputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_addoutput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_AddOutput = (PLib3MFImplicitNode_AddOutputPtr) dlsym(hLibrary, "lib3mf_implicitnode_addoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_AddOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetOutputs = (PLib3MFImplicitNode_GetOutputsPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getoutputs"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetOutputs = (PLib3MFImplicitNode_GetOutputsPtr) dlsym(hLibrary, "lib3mf_implicitnode_getoutputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetOutputs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_FindInput = (PLib3MFImplicitNode_FindInputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_findinput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_FindInput = (PLib3MFImplicitNode_FindInputPtr) dlsym(hLibrary, "lib3mf_implicitnode_findinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_FindInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_FindOutput = (PLib3MFImplicitNode_FindOutputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_findoutput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_FindOutput = (PLib3MFImplicitNode_FindOutputPtr) dlsym(hLibrary, "lib3mf_implicitnode_findoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_FindOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_AreTypesValid = (PLib3MFImplicitNode_AreTypesValidPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_aretypesvalid"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_AreTypesValid = (PLib3MFImplicitNode_AreTypesValidPtr) dlsym(hLibrary, "lib3mf_implicitnode_aretypesvalid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_AreTypesValid == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_OneInputNode_GetInputA = (PLib3MFOneInputNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_oneinputnode_getinputa"); + #else // _WIN32 + pWrapperTable->m_OneInputNode_GetInputA = (PLib3MFOneInputNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_oneinputnode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_OneInputNode_GetInputA == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_OneInputNode_GetOutputResult = (PLib3MFOneInputNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_oneinputnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_OneInputNode_GetOutputResult = (PLib3MFOneInputNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_oneinputnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_OneInputNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIdNode_SetResource = (PLib3MFResourceIdNode_SetResourcePtr) GetProcAddress(hLibrary, "lib3mf_resourceidnode_setresource"); + #else // _WIN32 + pWrapperTable->m_ResourceIdNode_SetResource = (PLib3MFResourceIdNode_SetResourcePtr) dlsym(hLibrary, "lib3mf_resourceidnode_setresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIdNode_SetResource == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIdNode_GetResource = (PLib3MFResourceIdNode_GetResourcePtr) GetProcAddress(hLibrary, "lib3mf_resourceidnode_getresource"); + #else // _WIN32 + pWrapperTable->m_ResourceIdNode_GetResource = (PLib3MFResourceIdNode_GetResourcePtr) dlsym(hLibrary, "lib3mf_resourceidnode_getresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIdNode_GetResource == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIdNode_GetOutputValue = (PLib3MFResourceIdNode_GetOutputValuePtr) GetProcAddress(hLibrary, "lib3mf_resourceidnode_getoutputvalue"); + #else // _WIN32 + pWrapperTable->m_ResourceIdNode_GetOutputValue = (PLib3MFResourceIdNode_GetOutputValuePtr) dlsym(hLibrary, "lib3mf_resourceidnode_getoutputvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIdNode_GetOutputValue == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_TwoInputNode_GetInputB = (PLib3MFTwoInputNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_twoinputnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_TwoInputNode_GetInputB = (PLib3MFTwoInputNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_twoinputnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_TwoInputNode_GetInputB == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SelectNode_GetInputB = (PLib3MFSelectNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_selectnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_SelectNode_GetInputB = (PLib3MFSelectNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_selectnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SelectNode_GetInputB == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SelectNode_GetInputC = (PLib3MFSelectNode_GetInputCPtr) GetProcAddress(hLibrary, "lib3mf_selectnode_getinputc"); + #else // _WIN32 + pWrapperTable->m_SelectNode_GetInputC = (PLib3MFSelectNode_GetInputCPtr) dlsym(hLibrary, "lib3mf_selectnode_getinputc"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SelectNode_GetInputC == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SelectNode_GetInputD = (PLib3MFSelectNode_GetInputDPtr) GetProcAddress(hLibrary, "lib3mf_selectnode_getinputd"); + #else // _WIN32 + pWrapperTable->m_SelectNode_GetInputD = (PLib3MFSelectNode_GetInputDPtr) dlsym(hLibrary, "lib3mf_selectnode_getinputd"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SelectNode_GetInputD == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ClampNode_GetInputMin = (PLib3MFClampNode_GetInputMinPtr) GetProcAddress(hLibrary, "lib3mf_clampnode_getinputmin"); + #else // _WIN32 + pWrapperTable->m_ClampNode_GetInputMin = (PLib3MFClampNode_GetInputMinPtr) dlsym(hLibrary, "lib3mf_clampnode_getinputmin"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ClampNode_GetInputMin == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ClampNode_GetInputMax = (PLib3MFClampNode_GetInputMaxPtr) GetProcAddress(hLibrary, "lib3mf_clampnode_getinputmax"); + #else // _WIN32 + pWrapperTable->m_ClampNode_GetInputMax = (PLib3MFClampNode_GetInputMaxPtr) dlsym(hLibrary, "lib3mf_clampnode_getinputmax"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ClampNode_GetInputMax == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputX = (PLib3MFComposeVectorNode_GetInputXPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getinputx"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputX = (PLib3MFComposeVectorNode_GetInputXPtr) dlsym(hLibrary, "lib3mf_composevectornode_getinputx"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetInputX == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputY = (PLib3MFComposeVectorNode_GetInputYPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getinputy"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputY = (PLib3MFComposeVectorNode_GetInputYPtr) dlsym(hLibrary, "lib3mf_composevectornode_getinputy"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetInputY == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputZ = (PLib3MFComposeVectorNode_GetInputZPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getinputz"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputZ = (PLib3MFComposeVectorNode_GetInputZPtr) dlsym(hLibrary, "lib3mf_composevectornode_getinputz"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetInputZ == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetOutputResult = (PLib3MFComposeVectorNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetOutputResult = (PLib3MFComposeVectorNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_composevectornode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetInputA = (PLib3MFDecomposeVectorNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getinputa"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetInputA = (PLib3MFDecomposeVectorNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetInputA == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputX = (PLib3MFDecomposeVectorNode_GetOutputXPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getoutputx"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputX = (PLib3MFDecomposeVectorNode_GetOutputXPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getoutputx"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetOutputX == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputY = (PLib3MFDecomposeVectorNode_GetOutputYPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getoutputy"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputY = (PLib3MFDecomposeVectorNode_GetOutputYPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getoutputy"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetOutputY == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputZ = (PLib3MFDecomposeVectorNode_GetOutputZPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getoutputz"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputZ = (PLib3MFDecomposeVectorNode_GetOutputZPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getoutputz"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetOutputZ == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM00 = (PLib3MFComposeMatrixNode_GetInputM00Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm00"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM00 = (PLib3MFComposeMatrixNode_GetInputM00Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm00"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM00 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM01 = (PLib3MFComposeMatrixNode_GetInputM01Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm01"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM01 = (PLib3MFComposeMatrixNode_GetInputM01Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm01"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM01 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM02 = (PLib3MFComposeMatrixNode_GetInputM02Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm02"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM02 = (PLib3MFComposeMatrixNode_GetInputM02Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm02"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM02 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM03 = (PLib3MFComposeMatrixNode_GetInputM03Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm03"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM03 = (PLib3MFComposeMatrixNode_GetInputM03Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm03"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM03 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM10 = (PLib3MFComposeMatrixNode_GetInputM10Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm10"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM10 = (PLib3MFComposeMatrixNode_GetInputM10Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm10"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM10 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM11 = (PLib3MFComposeMatrixNode_GetInputM11Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm11"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM11 = (PLib3MFComposeMatrixNode_GetInputM11Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm11"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM11 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM12 = (PLib3MFComposeMatrixNode_GetInputM12Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm12"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM12 = (PLib3MFComposeMatrixNode_GetInputM12Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm12"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM12 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM13 = (PLib3MFComposeMatrixNode_GetInputM13Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm13"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM13 = (PLib3MFComposeMatrixNode_GetInputM13Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm13"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM13 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM20 = (PLib3MFComposeMatrixNode_GetInputM20Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm20"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM20 = (PLib3MFComposeMatrixNode_GetInputM20Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm20"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM20 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM21 = (PLib3MFComposeMatrixNode_GetInputM21Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm21"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM21 = (PLib3MFComposeMatrixNode_GetInputM21Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm21"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM21 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM22 = (PLib3MFComposeMatrixNode_GetInputM22Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm22"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM22 = (PLib3MFComposeMatrixNode_GetInputM22Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm22"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM22 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM23 = (PLib3MFComposeMatrixNode_GetInputM23Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm23"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM23 = (PLib3MFComposeMatrixNode_GetInputM23Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm23"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM23 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM30 = (PLib3MFComposeMatrixNode_GetInputM30Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm30"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM30 = (PLib3MFComposeMatrixNode_GetInputM30Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm30"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM30 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM31 = (PLib3MFComposeMatrixNode_GetInputM31Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm31"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM31 = (PLib3MFComposeMatrixNode_GetInputM31Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm31"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM31 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM32 = (PLib3MFComposeMatrixNode_GetInputM32Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm32"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM32 = (PLib3MFComposeMatrixNode_GetInputM32Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm32"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM32 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM33 = (PLib3MFComposeMatrixNode_GetInputM33Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm33"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM33 = (PLib3MFComposeMatrixNode_GetInputM33Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm33"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM33 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetOutputResult = (PLib3MFComposeMatrixNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetOutputResult = (PLib3MFComposeMatrixNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_composematrixnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputA = (PLib3MFMatrixFromRowsNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputa"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputA = (PLib3MFMatrixFromRowsNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputA == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputB = (PLib3MFMatrixFromRowsNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputB = (PLib3MFMatrixFromRowsNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputB == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputC = (PLib3MFMatrixFromRowsNode_GetInputCPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputc"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputC = (PLib3MFMatrixFromRowsNode_GetInputCPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputc"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputC == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputD = (PLib3MFMatrixFromRowsNode_GetInputDPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputd"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputD = (PLib3MFMatrixFromRowsNode_GetInputDPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputd"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputD == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetOutputResult = (PLib3MFMatrixFromRowsNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetOutputResult = (PLib3MFMatrixFromRowsNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputA = (PLib3MFMatrixFromColumnsNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputa"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputA = (PLib3MFMatrixFromColumnsNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputA == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputB = (PLib3MFMatrixFromColumnsNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputB = (PLib3MFMatrixFromColumnsNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputB == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputC = (PLib3MFMatrixFromColumnsNode_GetInputCPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputc"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputC = (PLib3MFMatrixFromColumnsNode_GetInputCPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputc"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputC == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputD = (PLib3MFMatrixFromColumnsNode_GetInputDPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputd"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputD = (PLib3MFMatrixFromColumnsNode_GetInputDPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputd"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputD == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult = (PLib3MFMatrixFromColumnsNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult = (PLib3MFMatrixFromColumnsNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstantNode_SetConstant = (PLib3MFConstantNode_SetConstantPtr) GetProcAddress(hLibrary, "lib3mf_constantnode_setconstant"); + #else // _WIN32 + pWrapperTable->m_ConstantNode_SetConstant = (PLib3MFConstantNode_SetConstantPtr) dlsym(hLibrary, "lib3mf_constantnode_setconstant"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstantNode_SetConstant == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstantNode_GetConstant = (PLib3MFConstantNode_GetConstantPtr) GetProcAddress(hLibrary, "lib3mf_constantnode_getconstant"); + #else // _WIN32 + pWrapperTable->m_ConstantNode_GetConstant = (PLib3MFConstantNode_GetConstantPtr) dlsym(hLibrary, "lib3mf_constantnode_getconstant"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstantNode_GetConstant == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstantNode_GetOutputValue = (PLib3MFConstantNode_GetOutputValuePtr) GetProcAddress(hLibrary, "lib3mf_constantnode_getoutputvalue"); + #else // _WIN32 + pWrapperTable->m_ConstantNode_GetOutputValue = (PLib3MFConstantNode_GetOutputValuePtr) dlsym(hLibrary, "lib3mf_constantnode_getoutputvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstantNode_GetOutputValue == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstVecNode_SetVector = (PLib3MFConstVecNode_SetVectorPtr) GetProcAddress(hLibrary, "lib3mf_constvecnode_setvector"); + #else // _WIN32 + pWrapperTable->m_ConstVecNode_SetVector = (PLib3MFConstVecNode_SetVectorPtr) dlsym(hLibrary, "lib3mf_constvecnode_setvector"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstVecNode_SetVector == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstVecNode_GetVector = (PLib3MFConstVecNode_GetVectorPtr) GetProcAddress(hLibrary, "lib3mf_constvecnode_getvector"); + #else // _WIN32 + pWrapperTable->m_ConstVecNode_GetVector = (PLib3MFConstVecNode_GetVectorPtr) dlsym(hLibrary, "lib3mf_constvecnode_getvector"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstVecNode_GetVector == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstVecNode_GetOutputVector = (PLib3MFConstVecNode_GetOutputVectorPtr) GetProcAddress(hLibrary, "lib3mf_constvecnode_getoutputvector"); + #else // _WIN32 + pWrapperTable->m_ConstVecNode_GetOutputVector = (PLib3MFConstVecNode_GetOutputVectorPtr) dlsym(hLibrary, "lib3mf_constvecnode_getoutputvector"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstVecNode_GetOutputVector == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstMatNode_SetMatrix = (PLib3MFConstMatNode_SetMatrixPtr) GetProcAddress(hLibrary, "lib3mf_constmatnode_setmatrix"); + #else // _WIN32 + pWrapperTable->m_ConstMatNode_SetMatrix = (PLib3MFConstMatNode_SetMatrixPtr) dlsym(hLibrary, "lib3mf_constmatnode_setmatrix"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstMatNode_SetMatrix == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstMatNode_GetMatrix = (PLib3MFConstMatNode_GetMatrixPtr) GetProcAddress(hLibrary, "lib3mf_constmatnode_getmatrix"); + #else // _WIN32 + pWrapperTable->m_ConstMatNode_GetMatrix = (PLib3MFConstMatNode_GetMatrixPtr) dlsym(hLibrary, "lib3mf_constmatnode_getmatrix"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstMatNode_GetMatrix == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstMatNode_GetOutputMatrix = (PLib3MFConstMatNode_GetOutputMatrixPtr) GetProcAddress(hLibrary, "lib3mf_constmatnode_getoutputmatrix"); + #else // _WIN32 + pWrapperTable->m_ConstMatNode_GetOutputMatrix = (PLib3MFConstMatNode_GetOutputMatrixPtr) dlsym(hLibrary, "lib3mf_constmatnode_getoutputmatrix"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstMatNode_GetOutputMatrix == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshNode_GetInputMesh = (PLib3MFMeshNode_GetInputMeshPtr) GetProcAddress(hLibrary, "lib3mf_meshnode_getinputmesh"); + #else // _WIN32 + pWrapperTable->m_MeshNode_GetInputMesh = (PLib3MFMeshNode_GetInputMeshPtr) dlsym(hLibrary, "lib3mf_meshnode_getinputmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshNode_GetInputMesh == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshNode_GetInputPos = (PLib3MFMeshNode_GetInputPosPtr) GetProcAddress(hLibrary, "lib3mf_meshnode_getinputpos"); + #else // _WIN32 + pWrapperTable->m_MeshNode_GetInputPos = (PLib3MFMeshNode_GetInputPosPtr) dlsym(hLibrary, "lib3mf_meshnode_getinputpos"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshNode_GetInputPos == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshNode_GetOutputDistance = (PLib3MFMeshNode_GetOutputDistancePtr) GetProcAddress(hLibrary, "lib3mf_meshnode_getoutputdistance"); + #else // _WIN32 + pWrapperTable->m_MeshNode_GetOutputDistance = (PLib3MFMeshNode_GetOutputDistancePtr) dlsym(hLibrary, "lib3mf_meshnode_getoutputdistance"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshNode_GetOutputDistance == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputMesh = (PLib3MFUnsignedMeshNode_GetInputMeshPtr) GetProcAddress(hLibrary, "lib3mf_unsignedmeshnode_getinputmesh"); + #else // _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputMesh = (PLib3MFUnsignedMeshNode_GetInputMeshPtr) dlsym(hLibrary, "lib3mf_unsignedmeshnode_getinputmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_UnsignedMeshNode_GetInputMesh == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputPos = (PLib3MFUnsignedMeshNode_GetInputPosPtr) GetProcAddress(hLibrary, "lib3mf_unsignedmeshnode_getinputpos"); + #else // _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputPos = (PLib3MFUnsignedMeshNode_GetInputPosPtr) dlsym(hLibrary, "lib3mf_unsignedmeshnode_getinputpos"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_UnsignedMeshNode_GetInputPos == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetOutputDistance = (PLib3MFUnsignedMeshNode_GetOutputDistancePtr) GetProcAddress(hLibrary, "lib3mf_unsignedmeshnode_getoutputdistance"); + #else // _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetOutputDistance = (PLib3MFUnsignedMeshNode_GetOutputDistancePtr) dlsym(hLibrary, "lib3mf_unsignedmeshnode_getoutputdistance"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_UnsignedMeshNode_GetOutputDistance == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionCallNode_GetInputFunctionID = (PLib3MFFunctionCallNode_GetInputFunctionIDPtr) GetProcAddress(hLibrary, "lib3mf_functioncallnode_getinputfunctionid"); + #else // _WIN32 + pWrapperTable->m_FunctionCallNode_GetInputFunctionID = (PLib3MFFunctionCallNode_GetInputFunctionIDPtr) dlsym(hLibrary, "lib3mf_functioncallnode_getinputfunctionid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionCallNode_GetInputFunctionID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_NodeIterator_GetCurrent = (PLib3MFNodeIterator_GetCurrentPtr) GetProcAddress(hLibrary, "lib3mf_nodeiterator_getcurrent"); + #else // _WIN32 + pWrapperTable->m_NodeIterator_GetCurrent = (PLib3MFNodeIterator_GetCurrentPtr) dlsym(hLibrary, "lib3mf_nodeiterator_getcurrent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_NodeIterator_GetCurrent == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_GetDisplayName = (PLib3MFFunction_GetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_function_getdisplayname"); + #else // _WIN32 + pWrapperTable->m_Function_GetDisplayName = (PLib3MFFunction_GetDisplayNamePtr) dlsym(hLibrary, "lib3mf_function_getdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_GetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_SetDisplayName = (PLib3MFFunction_SetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_function_setdisplayname"); + #else // _WIN32 + pWrapperTable->m_Function_SetDisplayName = (PLib3MFFunction_SetDisplayNamePtr) dlsym(hLibrary, "lib3mf_function_setdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_SetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_AddInput = (PLib3MFFunction_AddInputPtr) GetProcAddress(hLibrary, "lib3mf_function_addinput"); + #else // _WIN32 + pWrapperTable->m_Function_AddInput = (PLib3MFFunction_AddInputPtr) dlsym(hLibrary, "lib3mf_function_addinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_AddInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_GetInputs = (PLib3MFFunction_GetInputsPtr) GetProcAddress(hLibrary, "lib3mf_function_getinputs"); + #else // _WIN32 + pWrapperTable->m_Function_GetInputs = (PLib3MFFunction_GetInputsPtr) dlsym(hLibrary, "lib3mf_function_getinputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_GetInputs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_RemoveInput = (PLib3MFFunction_RemoveInputPtr) GetProcAddress(hLibrary, "lib3mf_function_removeinput"); + #else // _WIN32 + pWrapperTable->m_Function_RemoveInput = (PLib3MFFunction_RemoveInputPtr) dlsym(hLibrary, "lib3mf_function_removeinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_RemoveInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_AddOutput = (PLib3MFFunction_AddOutputPtr) GetProcAddress(hLibrary, "lib3mf_function_addoutput"); + #else // _WIN32 + pWrapperTable->m_Function_AddOutput = (PLib3MFFunction_AddOutputPtr) dlsym(hLibrary, "lib3mf_function_addoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_AddOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_GetOutputs = (PLib3MFFunction_GetOutputsPtr) GetProcAddress(hLibrary, "lib3mf_function_getoutputs"); + #else // _WIN32 + pWrapperTable->m_Function_GetOutputs = (PLib3MFFunction_GetOutputsPtr) dlsym(hLibrary, "lib3mf_function_getoutputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_GetOutputs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_RemoveOutput = (PLib3MFFunction_RemoveOutputPtr) GetProcAddress(hLibrary, "lib3mf_function_removeoutput"); + #else // _WIN32 + pWrapperTable->m_Function_RemoveOutput = (PLib3MFFunction_RemoveOutputPtr) dlsym(hLibrary, "lib3mf_function_removeoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_RemoveOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_FindInput = (PLib3MFFunction_FindInputPtr) GetProcAddress(hLibrary, "lib3mf_function_findinput"); + #else // _WIN32 + pWrapperTable->m_Function_FindInput = (PLib3MFFunction_FindInputPtr) dlsym(hLibrary, "lib3mf_function_findinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_FindInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_FindOutput = (PLib3MFFunction_FindOutputPtr) GetProcAddress(hLibrary, "lib3mf_function_findoutput"); + #else // _WIN32 + pWrapperTable->m_Function_FindOutput = (PLib3MFFunction_FindOutputPtr) dlsym(hLibrary, "lib3mf_function_findoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_FindOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_GetIdentifier = (PLib3MFImplicitFunction_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_getidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_GetIdentifier = (PLib3MFImplicitFunction_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitfunction_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_GetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_SetIdentifier = (PLib3MFImplicitFunction_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_setidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_SetIdentifier = (PLib3MFImplicitFunction_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitfunction_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_SetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddNode = (PLib3MFImplicitFunction_AddNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddNode = (PLib3MFImplicitFunction_AddNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddNode == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddSinNode = (PLib3MFImplicitFunction_AddSinNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsinnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddSinNode = (PLib3MFImplicitFunction_AddSinNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsinnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddSinNode == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddCosNode = (PLib3MFImplicitFunction_AddCosNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcosnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddCosNode = (PLib3MFImplicitFunction_AddCosNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcosnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddCosNode == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddTanNode = (PLib3MFImplicitFunction_AddTanNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addtannode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddTanNode = (PLib3MFImplicitFunction_AddTanNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addtannode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddTanNode == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddArcSinNode = (PLib3MFImplicitFunction_AddArcSinNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addarcsinnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddArcSinNode = (PLib3MFImplicitFunction_AddArcSinNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addarcsinnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetIdentifier == NULL) + if (pWrapperTable->m_ImplicitFunction_AddArcSinNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferencecount"); + pWrapperTable->m_ImplicitFunction_AddArcCosNode = (PLib3MFImplicitFunction_AddArcCosNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addarccosnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getreferencecount"); + pWrapperTable->m_ImplicitFunction_AddArcCosNode = (PLib3MFImplicitFunction_AddArcCosNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addarccosnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetReferenceCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddArcCosNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setreferences"); + pWrapperTable->m_ImplicitFunction_AddArcTan2Node = (PLib3MFImplicitFunction_AddArcTan2NodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addarctan2node"); #else // _WIN32 - pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setreferences"); + pWrapperTable->m_ImplicitFunction_AddArcTan2Node = (PLib3MFImplicitFunction_AddArcTan2NodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addarctan2node"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetReferences == NULL) + if (pWrapperTable->m_ImplicitFunction_AddArcTan2Node == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferences"); + pWrapperTable->m_ImplicitFunction_AddSinhNode = (PLib3MFImplicitFunction_AddSinhNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsinhnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getreferences"); + pWrapperTable->m_ImplicitFunction_AddSinhNode = (PLib3MFImplicitFunction_AddSinhNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsinhnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetReferences == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSinhNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferencecount"); + pWrapperTable->m_ImplicitFunction_AddCoshNode = (PLib3MFImplicitFunction_AddCoshNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcoshnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferencecount"); + pWrapperTable->m_ImplicitFunction_AddCoshNode = (PLib3MFImplicitFunction_AddCoshNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcoshnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetBallReferenceCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddCoshNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setballreferences"); + pWrapperTable->m_ImplicitFunction_AddTanhNode = (PLib3MFImplicitFunction_AddTanhNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addtanhnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setballreferences"); + pWrapperTable->m_ImplicitFunction_AddTanhNode = (PLib3MFImplicitFunction_AddTanhNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addtanhnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetBallReferences == NULL) + if (pWrapperTable->m_ImplicitFunction_AddTanhNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferences"); + pWrapperTable->m_ImplicitFunction_AddRoundNode = (PLib3MFImplicitFunction_AddRoundNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addroundnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferences"); + pWrapperTable->m_ImplicitFunction_AddRoundNode = (PLib3MFImplicitFunction_AddRoundNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addroundnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetBallReferences == NULL) + if (pWrapperTable->m_ImplicitFunction_AddRoundNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddCeilNode = (PLib3MFImplicitFunction_AddCeilNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addceilnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddCeilNode = (PLib3MFImplicitFunction_AddCeilNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addceilnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddCeilNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddFloorNode = (PLib3MFImplicitFunction_AddFloorNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfloornode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddFloorNode = (PLib3MFImplicitFunction_AddFloorNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfloornode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddFloorNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + pWrapperTable->m_ImplicitFunction_AddSignNode = (PLib3MFImplicitFunction_AddSignNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsignnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + pWrapperTable->m_ImplicitFunction_AddSignNode = (PLib3MFImplicitFunction_AddSignNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsignnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_AddMaterial == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSignNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_removematerial"); + pWrapperTable->m_ImplicitFunction_AddFractNode = (PLib3MFImplicitFunction_AddFractNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfractnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_removematerial"); + pWrapperTable->m_ImplicitFunction_AddFractNode = (PLib3MFImplicitFunction_AddFractNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfractnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_RemoveMaterial == NULL) + if (pWrapperTable->m_ImplicitFunction_AddFractNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getname"); + pWrapperTable->m_ImplicitFunction_AddAbsNode = (PLib3MFImplicitFunction_AddAbsNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addabsnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getname"); + pWrapperTable->m_ImplicitFunction_AddAbsNode = (PLib3MFImplicitFunction_AddAbsNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addabsnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetName == NULL) + if (pWrapperTable->m_ImplicitFunction_AddAbsNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setname"); + pWrapperTable->m_ImplicitFunction_AddExpNode = (PLib3MFImplicitFunction_AddExpNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addexpnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setname"); + pWrapperTable->m_ImplicitFunction_AddExpNode = (PLib3MFImplicitFunction_AddExpNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addexpnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_SetName == NULL) + if (pWrapperTable->m_ImplicitFunction_AddExpNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + pWrapperTable->m_ImplicitFunction_AddLogNode = (PLib3MFImplicitFunction_AddLogNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlognode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + pWrapperTable->m_ImplicitFunction_AddLogNode = (PLib3MFImplicitFunction_AddLogNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlognode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_SetDisplayColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLogNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + pWrapperTable->m_ImplicitFunction_AddLog2Node = (PLib3MFImplicitFunction_AddLog2NodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlog2node"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + pWrapperTable->m_ImplicitFunction_AddLog2Node = (PLib3MFImplicitFunction_AddLog2NodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlog2node"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetDisplayColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLog2Node == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddLog10Node = (PLib3MFImplicitFunction_AddLog10NodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlog10node"); #else // _WIN32 - pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddLog10Node = (PLib3MFImplicitFunction_AddLog10NodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlog10node"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLog10Node == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddLengthNode = (PLib3MFImplicitFunction_AddLengthNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlengthnode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddLengthNode = (PLib3MFImplicitFunction_AddLengthNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlengthnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLengthNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_addcolor"); + pWrapperTable->m_ImplicitFunction_AddTransposeNode = (PLib3MFImplicitFunction_AddTransposeNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addtransposenode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_addcolor"); + pWrapperTable->m_ImplicitFunction_AddTransposeNode = (PLib3MFImplicitFunction_AddTransposeNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addtransposenode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_AddColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddTransposeNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_removecolor"); + pWrapperTable->m_ImplicitFunction_InverseNode = (PLib3MFImplicitFunction_InverseNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_inversenode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_removecolor"); + pWrapperTable->m_ImplicitFunction_InverseNode = (PLib3MFImplicitFunction_InverseNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_inversenode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_RemoveColor == NULL) + if (pWrapperTable->m_ImplicitFunction_InverseNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_setcolor"); + pWrapperTable->m_ImplicitFunction_AddSqrtNode = (PLib3MFImplicitFunction_AddSqrtNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsqrtnode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_setcolor"); + pWrapperTable->m_ImplicitFunction_AddSqrtNode = (PLib3MFImplicitFunction_AddSqrtNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsqrtnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_SetColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSqrtNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcolor"); + pWrapperTable->m_ImplicitFunction_AddResourceIdNode = (PLib3MFImplicitFunction_AddResourceIdNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addresourceidnode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcolor"); + pWrapperTable->m_ImplicitFunction_AddResourceIdNode = (PLib3MFImplicitFunction_AddResourceIdNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addresourceidnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_GetColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddResourceIdNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddAdditionNode = (PLib3MFImplicitFunction_AddAdditionNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addadditionnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddAdditionNode = (PLib3MFImplicitFunction_AddAdditionNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addadditionnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddAdditionNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddSubtractionNode = (PLib3MFImplicitFunction_AddSubtractionNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsubtractionnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddSubtractionNode = (PLib3MFImplicitFunction_AddSubtractionNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsubtractionnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSubtractionNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + pWrapperTable->m_ImplicitFunction_AddMultiplicationNode = (PLib3MFImplicitFunction_AddMultiplicationNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmultiplicationnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + pWrapperTable->m_ImplicitFunction_AddMultiplicationNode = (PLib3MFImplicitFunction_AddMultiplicationNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmultiplicationnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_AddTex2Coord == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMultiplicationNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + pWrapperTable->m_ImplicitFunction_AddDivisionNode = (PLib3MFImplicitFunction_AddDivisionNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_adddivisionnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + pWrapperTable->m_ImplicitFunction_AddDivisionNode = (PLib3MFImplicitFunction_AddDivisionNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_adddivisionnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetTex2Coord == NULL) + if (pWrapperTable->m_ImplicitFunction_AddDivisionNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + pWrapperTable->m_ImplicitFunction_AddDotNode = (PLib3MFImplicitFunction_AddDotNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_adddotnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + pWrapperTable->m_ImplicitFunction_AddDotNode = (PLib3MFImplicitFunction_AddDotNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_adddotnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_RemoveTex2Coord == NULL) + if (pWrapperTable->m_ImplicitFunction_AddDotNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + pWrapperTable->m_ImplicitFunction_AddCrossNode = (PLib3MFImplicitFunction_AddCrossNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcrossnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + pWrapperTable->m_ImplicitFunction_AddCrossNode = (PLib3MFImplicitFunction_AddCrossNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcrossnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetTexture2D == NULL) + if (pWrapperTable->m_ImplicitFunction_AddCrossNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcount"); + pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode = (PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmatvecmultiplicationnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) dlsym(hLibrary, "lib3mf_compositematerials_getcount"); + pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode = (PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmatvecmultiplicationnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddMinNode = (PLib3MFImplicitFunction_AddMinNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addminnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddMinNode = (PLib3MFImplicitFunction_AddMinNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addminnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMinNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + pWrapperTable->m_ImplicitFunction_AddMaxNode = (PLib3MFImplicitFunction_AddMaxNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmaxnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + pWrapperTable->m_ImplicitFunction_AddMaxNode = (PLib3MFImplicitFunction_AddMaxNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmaxnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMaxNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_addcomposite"); + pWrapperTable->m_ImplicitFunction_AddFmodNode = (PLib3MFImplicitFunction_AddFmodNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfmodnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_addcomposite"); + pWrapperTable->m_ImplicitFunction_AddFmodNode = (PLib3MFImplicitFunction_AddFmodNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfmodnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_AddComposite == NULL) + if (pWrapperTable->m_ImplicitFunction_AddFmodNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_removecomposite"); + pWrapperTable->m_ImplicitFunction_AddPowNode = (PLib3MFImplicitFunction_AddPowNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addpownode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_removecomposite"); + pWrapperTable->m_ImplicitFunction_AddPowNode = (PLib3MFImplicitFunction_AddPowNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addpownode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_RemoveComposite == NULL) + if (pWrapperTable->m_ImplicitFunction_AddPowNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcomposite"); + pWrapperTable->m_ImplicitFunction_AddSelectNode = (PLib3MFImplicitFunction_AddSelectNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addselectnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_getcomposite"); + pWrapperTable->m_ImplicitFunction_AddSelectNode = (PLib3MFImplicitFunction_AddSelectNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addselectnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetComposite == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSelectNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddClampNode = (PLib3MFImplicitFunction_AddClampNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addclampnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddClampNode = (PLib3MFImplicitFunction_AddClampNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addclampnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddClampNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddComposeVectorNode = (PLib3MFImplicitFunction_AddComposeVectorNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcomposevectornode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddComposeVectorNode = (PLib3MFImplicitFunction_AddComposeVectorNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcomposevectornode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddComposeVectorNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode = (PLib3MFImplicitFunction_AddVectorFromScalarNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addvectorfromscalarnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode = (PLib3MFImplicitFunction_AddVectorFromScalarNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addvectorfromscalarnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_AddMultiProperty == NULL) + if (pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode = (PLib3MFImplicitFunction_AddDecomposeVectorNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_adddecomposevectornode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode = (PLib3MFImplicitFunction_AddDecomposeVectorNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_adddecomposevectornode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_SetMultiProperty == NULL) + if (pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode = (PLib3MFImplicitFunction_AddComposeMatrixNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcomposematrixnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode = (PLib3MFImplicitFunction_AddComposeMatrixNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcomposematrixnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetMultiProperty == NULL) + if (pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode = (PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmatrixfromrowsnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode = (PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmatrixfromrowsnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode = (PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmatrixfromcolumnsnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode = (PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmatrixfromcolumnsnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetLayerCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addlayer"); + pWrapperTable->m_ImplicitFunction_AddConstantNode = (PLib3MFImplicitFunction_AddConstantNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addconstantnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addlayer"); + pWrapperTable->m_ImplicitFunction_AddConstantNode = (PLib3MFImplicitFunction_AddConstantNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addconstantnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_AddLayer == NULL) + if (pWrapperTable->m_ImplicitFunction_AddConstantNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayer"); + pWrapperTable->m_ImplicitFunction_AddConstVecNode = (PLib3MFImplicitFunction_AddConstVecNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addconstvecnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayer"); + pWrapperTable->m_ImplicitFunction_AddConstVecNode = (PLib3MFImplicitFunction_AddConstVecNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addconstvecnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetLayer == NULL) + if (pWrapperTable->m_ImplicitFunction_AddConstVecNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removelayer"); + pWrapperTable->m_ImplicitFunction_AddConstMatNode = (PLib3MFImplicitFunction_AddConstMatNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addconstmatnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removelayer"); + pWrapperTable->m_ImplicitFunction_AddConstMatNode = (PLib3MFImplicitFunction_AddConstMatNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addconstmatnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_RemoveLayer == NULL) + if (pWrapperTable->m_ImplicitFunction_AddConstMatNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_getpath"); + pWrapperTable->m_ImplicitFunction_AddMeshNode = (PLib3MFImplicitFunction_AddMeshNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmeshnode"); #else // _WIN32 - pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) dlsym(hLibrary, "lib3mf_attachment_getpath"); + pWrapperTable->m_ImplicitFunction_AddMeshNode = (PLib3MFImplicitFunction_AddMeshNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmeshnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_GetPath == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMeshNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_setpath"); + pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode = (PLib3MFImplicitFunction_AddUnsignedMeshNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addunsignedmeshnode"); #else // _WIN32 - pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) dlsym(hLibrary, "lib3mf_attachment_setpath"); + pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode = (PLib3MFImplicitFunction_AddUnsignedMeshNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addunsignedmeshnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_SetPath == NULL) + if (pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) GetProcAddress(hLibrary, "lib3mf_attachment_packagepart"); + pWrapperTable->m_ImplicitFunction_AddFunctionCallNode = (PLib3MFImplicitFunction_AddFunctionCallNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfunctioncallnode"); #else // _WIN32 - pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) dlsym(hLibrary, "lib3mf_attachment_packagepart"); + pWrapperTable->m_ImplicitFunction_AddFunctionCallNode = (PLib3MFImplicitFunction_AddFunctionCallNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfunctioncallnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_PackagePart == NULL) + if (pWrapperTable->m_ImplicitFunction_AddFunctionCallNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getrelationshiptype"); + pWrapperTable->m_ImplicitFunction_GetNodes = (PLib3MFImplicitFunction_GetNodesPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_getnodes"); #else // _WIN32 - pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_getrelationshiptype"); + pWrapperTable->m_ImplicitFunction_GetNodes = (PLib3MFImplicitFunction_GetNodesPtr) dlsym(hLibrary, "lib3mf_implicitfunction_getnodes"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_GetRelationShipType == NULL) + if (pWrapperTable->m_ImplicitFunction_GetNodes == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_setrelationshiptype"); + pWrapperTable->m_ImplicitFunction_RemoveNode = (PLib3MFImplicitFunction_RemoveNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_removenode"); #else // _WIN32 - pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_setrelationshiptype"); + pWrapperTable->m_ImplicitFunction_RemoveNode = (PLib3MFImplicitFunction_RemoveNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_removenode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_SetRelationShipType == NULL) + if (pWrapperTable->m_ImplicitFunction_RemoveNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetofile"); + pWrapperTable->m_ImplicitFunction_AddLink = (PLib3MFImplicitFunction_AddLinkPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlink"); #else // _WIN32 - pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) dlsym(hLibrary, "lib3mf_attachment_writetofile"); + pWrapperTable->m_ImplicitFunction_AddLink = (PLib3MFImplicitFunction_AddLinkPtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlink"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_WriteToFile == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLink == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromfile"); + pWrapperTable->m_ImplicitFunction_AddLinkByNames = (PLib3MFImplicitFunction_AddLinkByNamesPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlinkbynames"); #else // _WIN32 - pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) dlsym(hLibrary, "lib3mf_attachment_readfromfile"); + pWrapperTable->m_ImplicitFunction_AddLinkByNames = (PLib3MFImplicitFunction_AddLinkByNamesPtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlinkbynames"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_ReadFromFile == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLinkByNames == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromcallback"); + pWrapperTable->m_ImplicitFunction_Clear = (PLib3MFImplicitFunction_ClearPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_clear"); #else // _WIN32 - pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) dlsym(hLibrary, "lib3mf_attachment_readfromcallback"); + pWrapperTable->m_ImplicitFunction_Clear = (PLib3MFImplicitFunction_ClearPtr) dlsym(hLibrary, "lib3mf_implicitfunction_clear"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_ReadFromCallback == NULL) + if (pWrapperTable->m_ImplicitFunction_Clear == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getstreamsize"); + pWrapperTable->m_ImplicitFunction_SortNodesTopologically = (PLib3MFImplicitFunction_SortNodesTopologicallyPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_sortnodestopologically"); #else // _WIN32 - pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) dlsym(hLibrary, "lib3mf_attachment_getstreamsize"); + pWrapperTable->m_ImplicitFunction_SortNodesTopologically = (PLib3MFImplicitFunction_SortNodesTopologicallyPtr) dlsym(hLibrary, "lib3mf_implicitfunction_sortnodestopologically"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_GetStreamSize == NULL) + if (pWrapperTable->m_ImplicitFunction_SortNodesTopologically == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetobuffer"); + pWrapperTable->m_FunctionFromImage3D_GetImage3D = (PLib3MFFunctionFromImage3D_GetImage3DPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getimage3d"); #else // _WIN32 - pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) dlsym(hLibrary, "lib3mf_attachment_writetobuffer"); + pWrapperTable->m_FunctionFromImage3D_GetImage3D = (PLib3MFFunctionFromImage3D_GetImage3DPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getimage3d"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_WriteToBuffer == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetImage3D == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfrombuffer"); + pWrapperTable->m_FunctionFromImage3D_SetImage3D = (PLib3MFFunctionFromImage3D_SetImage3DPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setimage3d"); #else // _WIN32 - pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) dlsym(hLibrary, "lib3mf_attachment_readfrombuffer"); + pWrapperTable->m_FunctionFromImage3D_SetImage3D = (PLib3MFFunctionFromImage3D_SetImage3DPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setimage3d"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_ReadFromBuffer == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetImage3D == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getattachment"); + pWrapperTable->m_FunctionFromImage3D_SetFilter = (PLib3MFFunctionFromImage3D_SetFilterPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setfilter"); #else // _WIN32 - pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_getattachment"); + pWrapperTable->m_FunctionFromImage3D_SetFilter = (PLib3MFFunctionFromImage3D_SetFilterPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setfilter"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetAttachment == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetFilter == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setattachment"); + pWrapperTable->m_FunctionFromImage3D_GetFilter = (PLib3MFFunctionFromImage3D_GetFilterPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getfilter"); #else // _WIN32 - pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_setattachment"); + pWrapperTable->m_FunctionFromImage3D_GetFilter = (PLib3MFFunctionFromImage3D_GetFilterPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getfilter"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetAttachment == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetFilter == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getcontenttype"); + pWrapperTable->m_FunctionFromImage3D_SetTileStyles = (PLib3MFFunctionFromImage3D_SetTileStylesPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_settilestyles"); #else // _WIN32 - pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_getcontenttype"); + pWrapperTable->m_FunctionFromImage3D_SetTileStyles = (PLib3MFFunctionFromImage3D_SetTileStylesPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_settilestyles"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetContentType == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetTileStyles == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setcontenttype"); + pWrapperTable->m_FunctionFromImage3D_GetTileStyles = (PLib3MFFunctionFromImage3D_GetTileStylesPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_gettilestyles"); #else // _WIN32 - pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_setcontenttype"); + pWrapperTable->m_FunctionFromImage3D_GetTileStyles = (PLib3MFFunctionFromImage3D_GetTileStylesPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_gettilestyles"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetContentType == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetTileStyles == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + pWrapperTable->m_FunctionFromImage3D_GetOffset = (PLib3MFFunctionFromImage3D_GetOffsetPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getoffset"); #else // _WIN32 - pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + pWrapperTable->m_FunctionFromImage3D_GetOffset = (PLib3MFFunctionFromImage3D_GetOffsetPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getoffset"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetTileStyleUV == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetOffset == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_settilestyleuv"); + pWrapperTable->m_FunctionFromImage3D_SetOffset = (PLib3MFFunctionFromImage3D_SetOffsetPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setoffset"); #else // _WIN32 - pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_settilestyleuv"); + pWrapperTable->m_FunctionFromImage3D_SetOffset = (PLib3MFFunctionFromImage3D_SetOffsetPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setoffset"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetTileStyleUV == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetOffset == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getfilter"); + pWrapperTable->m_FunctionFromImage3D_GetScale = (PLib3MFFunctionFromImage3D_GetScalePtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getscale"); #else // _WIN32 - pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_getfilter"); + pWrapperTable->m_FunctionFromImage3D_GetScale = (PLib3MFFunctionFromImage3D_GetScalePtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getscale"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetFilter == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetScale == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setfilter"); + pWrapperTable->m_FunctionFromImage3D_SetScale = (PLib3MFFunctionFromImage3D_SetScalePtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setscale"); #else // _WIN32 - pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_setfilter"); + pWrapperTable->m_FunctionFromImage3D_SetScale = (PLib3MFFunctionFromImage3D_SetScalePtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setscale"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetFilter == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetScale == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 @@ -3152,6 +5474,15 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_GetSliceStackByID == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_GetLevelSetByID = (PLib3MFModel_GetLevelSetByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getlevelsetbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetLevelSetByID = (PLib3MFModel_GetLevelSetByIDPtr) dlsym(hLibrary, "lib3mf_model_getlevelsetbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetLevelSetByID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Model_GetBuildUUID = (PLib3MFModel_GetBuildUUIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getbuilduuid"); #else // _WIN32 @@ -3287,6 +5618,15 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_GetSliceStacks == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_GetImage3Ds = (PLib3MFModel_GetImage3DsPtr) GetProcAddress(hLibrary, "lib3mf_model_getimage3ds"); + #else // _WIN32 + pWrapperTable->m_Model_GetImage3Ds = (PLib3MFModel_GetImage3DsPtr) dlsym(hLibrary, "lib3mf_model_getimage3ds"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetImage3Ds == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Model_MergeToModel = (PLib3MFModel_MergeToModelPtr) GetProcAddress(hLibrary, "lib3mf_model_mergetomodel"); #else // _WIN32 @@ -3296,6 +5636,15 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_MergeToModel == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_MergeFromModel = (PLib3MFModel_MergeFromModelPtr) GetProcAddress(hLibrary, "lib3mf_model_mergefrommodel"); + #else // _WIN32 + pWrapperTable->m_Model_MergeFromModel = (PLib3MFModel_MergeFromModelPtr) dlsym(hLibrary, "lib3mf_model_mergefrommodel"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_MergeFromModel == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Model_AddMeshObject = (PLib3MFModel_AddMeshObjectPtr) GetProcAddress(hLibrary, "lib3mf_model_addmeshobject"); #else // _WIN32 @@ -3377,6 +5726,24 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_AddMultiPropertyGroup == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_AddImageStack = (PLib3MFModel_AddImageStackPtr) GetProcAddress(hLibrary, "lib3mf_model_addimagestack"); + #else // _WIN32 + pWrapperTable->m_Model_AddImageStack = (PLib3MFModel_AddImageStackPtr) dlsym(hLibrary, "lib3mf_model_addimagestack"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddImageStack == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetImageStackByID = (PLib3MFModel_GetImageStackByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getimagestackbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetImageStackByID = (PLib3MFModel_GetImageStackByIDPtr) dlsym(hLibrary, "lib3mf_model_getimagestackbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetImageStackByID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Model_AddBuildItem = (PLib3MFModel_AddBuildItemPtr) GetProcAddress(hLibrary, "lib3mf_model_addbuilditem"); #else // _WIN32 @@ -3521,6 +5888,69 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_GetKeyStore == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_GetFunctions = (PLib3MFModel_GetFunctionsPtr) GetProcAddress(hLibrary, "lib3mf_model_getfunctions"); + #else // _WIN32 + pWrapperTable->m_Model_GetFunctions = (PLib3MFModel_GetFunctionsPtr) dlsym(hLibrary, "lib3mf_model_getfunctions"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetFunctions == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddImplicitFunction = (PLib3MFModel_AddImplicitFunctionPtr) GetProcAddress(hLibrary, "lib3mf_model_addimplicitfunction"); + #else // _WIN32 + pWrapperTable->m_Model_AddImplicitFunction = (PLib3MFModel_AddImplicitFunctionPtr) dlsym(hLibrary, "lib3mf_model_addimplicitfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddImplicitFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddFunctionFromImage3D = (PLib3MFModel_AddFunctionFromImage3DPtr) GetProcAddress(hLibrary, "lib3mf_model_addfunctionfromimage3d"); + #else // _WIN32 + pWrapperTable->m_Model_AddFunctionFromImage3D = (PLib3MFModel_AddFunctionFromImage3DPtr) dlsym(hLibrary, "lib3mf_model_addfunctionfromimage3d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddFunctionFromImage3D == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddVolumeData = (PLib3MFModel_AddVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_model_addvolumedata"); + #else // _WIN32 + pWrapperTable->m_Model_AddVolumeData = (PLib3MFModel_AddVolumeDataPtr) dlsym(hLibrary, "lib3mf_model_addvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddLevelSet = (PLib3MFModel_AddLevelSetPtr) GetProcAddress(hLibrary, "lib3mf_model_addlevelset"); + #else // _WIN32 + pWrapperTable->m_Model_AddLevelSet = (PLib3MFModel_AddLevelSetPtr) dlsym(hLibrary, "lib3mf_model_addlevelset"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddLevelSet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetLevelSets = (PLib3MFModel_GetLevelSetsPtr) GetProcAddress(hLibrary, "lib3mf_model_getlevelsets"); + #else // _WIN32 + pWrapperTable->m_Model_GetLevelSets = (PLib3MFModel_GetLevelSetsPtr) dlsym(hLibrary, "lib3mf_model_getlevelsets"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetLevelSets == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_RemoveResource = (PLib3MFModel_RemoveResourcePtr) GetProcAddress(hLibrary, "lib3mf_model_removeresource"); + #else // _WIN32 + pWrapperTable->m_Model_RemoveResource = (PLib3MFModel_RemoveResourcePtr) dlsym(hLibrary, "lib3mf_model_removeresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_RemoveResource == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_GetLibraryVersion = (PLib3MFGetLibraryVersionPtr) GetProcAddress(hLibrary, "lib3mf_getlibraryversion"); #else // _WIN32 diff --git a/Autogenerated/Bindings/CDynamic/lib3mf_dynamic.h b/Autogenerated/Bindings/CDynamic/lib3mf_dynamic.h index 044c754bb..d7fcaf59a 100644 --- a/Autogenerated/Bindings/CDynamic/lib3mf_dynamic.h +++ b/Autogenerated/Bindings/CDynamic/lib3mf_dynamic.h @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated plain C Header file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -562,6 +562,45 @@ typedef Lib3MFResult (*PLib3MFCompositeMaterialsIterator_GetCurrentCompositeMate */ typedef Lib3MFResult (*PLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupPtr) (Lib3MF_MultiPropertyGroupIterator pMultiPropertyGroupIterator, Lib3MF_MultiPropertyGroup * pResource); +/************************************************************************************************************************* + Class definition for Image3DIterator +**************************************************************************************************************************/ + +/** +* Returns the Image3D the iterator points at. +* +* @param[in] pImage3DIterator - Image3DIterator instance. +* @param[out] pResource - returns the Image3D instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3DIterator_GetCurrentImage3DPtr) (Lib3MF_Image3DIterator pImage3DIterator, Lib3MF_Image3D * pResource); + +/************************************************************************************************************************* + Class definition for FunctionIterator +**************************************************************************************************************************/ + +/** +* Returns the Function the iterator points at. +* +* @param[in] pFunctionIterator - FunctionIterator instance. +* @param[out] pResource - returns the Function instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionIterator_GetCurrentFunctionPtr) (Lib3MF_FunctionIterator pFunctionIterator, Lib3MF_Function * pResource); + +/************************************************************************************************************************* + Class definition for LevelSetIterator +**************************************************************************************************************************/ + +/** +* Returns the LevelSet the iterator points at. +* +* @param[in] pLevelSetIterator - LevelSetIterator instance. +* @param[out] pResource - returns the MeshObject instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSetIterator_GetCurrentLevelSetPtr) (Lib3MF_LevelSetIterator pLevelSetIterator, Lib3MF_LevelSet * pResource); + /************************************************************************************************************************* Class definition for MetaData **************************************************************************************************************************/ @@ -821,6 +860,15 @@ typedef Lib3MFResult (*PLib3MFObject_IsMeshObjectPtr) (Lib3MF_Object pObject, bo */ typedef Lib3MFResult (*PLib3MFObject_IsComponentsObjectPtr) (Lib3MF_Object pObject, bool * pIsComponentsObject); +/** +* Retrieves, if an object is a level set object +* +* @param[in] pObject - Object instance. +* @param[out] pIsLevelSetObject - returns, whether the object is a level set object +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFObject_IsLevelSetObjectPtr) (Lib3MF_Object pObject, bool * pIsLevelSetObject); + /** * Retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. * @@ -1153,6 +1201,174 @@ typedef Lib3MFResult (*PLib3MFMeshObject_IsManifoldAndOrientedPtr) (Lib3MF_MeshO */ typedef Lib3MFResult (*PLib3MFMeshObject_BeamLatticePtr) (Lib3MF_MeshObject pMeshObject, Lib3MF_BeamLattice * pTheBeamLattice); +/** +* Retrieves the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[out] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshObject_GetVolumeDataPtr) (Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshObject_SetVolumeDataPtr) (Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData pTheVolumeData); + +/************************************************************************************************************************* + Class definition for LevelSet +**************************************************************************************************************************/ + +/** +* Returns the function that is used as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetFunctionPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_Function * pTheFunction); + +/** +* Sets the function to use as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetFunctionPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_Function pTheFunction); + +/** +* Returns the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTransform - the transformation matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetTransformPtr) (Lib3MF_LevelSet pLevelSet, sLib3MFTransform * pTransform); + +/** +* Sets the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetTransformPtr) (Lib3MF_LevelSet pLevelSet, const sLib3MFTransform * pTransform); + +/** +* Returns the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetChannelNamePtr) (Lib3MF_LevelSet pLevelSet, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); + +/** +* Sets the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pChannelName - new name of the function output channel +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetChannelNamePtr) (Lib3MF_LevelSet pLevelSet, const char * pChannelName); + +/** +* Sets the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetMinFeatureSizePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double dMinFeatureSize); + +/** +* Returns the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetMinFeatureSizePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double * pMinFeatureSize); + +/** +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dFallBackValue - fallback value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetFallBackValuePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double dFallBackValue); + +/** +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pFallBackValue - fallback value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetFallBackValuePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double * pFallBackValue); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] bMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetMeshBBoxOnlyPtr) (Lib3MF_LevelSet pLevelSet, bool bMeshBBoxOnly); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetMeshBBoxOnlyPtr) (Lib3MF_LevelSet pLevelSet, bool * pMeshBBoxOnly); + +/** +* Sets the mesh to use as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetMeshPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject pTheMesh); + +/** +* Returns the mesh that is used as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetMeshPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject * pTheMesh); + +/** +* Retrieves the VolumeData this Object. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheVolumeData - the VolumeData of this Object +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetVolumeDataPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this LevelSet. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetVolumeDataPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData pTheVolumeData); + /************************************************************************************************************************* Class definition for BeamLattice **************************************************************************************************************************/ @@ -1383,784 +1599,3179 @@ typedef Lib3MFResult (*PLib3MFBeamLattice_AddBeamSetPtr) (Lib3MF_BeamLattice pBe typedef Lib3MFResult (*PLib3MFBeamLattice_GetBeamSetPtr) (Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF_BeamSet * pBeamSet); /************************************************************************************************************************* - Class definition for Component + Class definition for FunctionReference **************************************************************************************************************************/ /** -* Returns the Resource Instance of the component. +* Returns the UniqueResourceID of the Function. Only functions with a 'pos'-input are allowed. * -* @param[in] pComponent - Component instance. -* @param[out] pObjectResource - filled with the Resource Instance. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourcePtr) (Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetFunctionResourceIDPtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 * pUniqueResourceID); /** -* Returns the UniqueResourceID of the component. +* Sets the UniqueResourceID to refer to. * -* @param[in] pComponent - Component instance. -* @param[out] pUniqueResourceID - returns the UniqueResourceID. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nUniqueResourceID - UniqueResourceID of the function * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourceIDPtr) (Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetFunctionResourceIDPtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 nUniqueResourceID); /** -* returns, whether a component has a UUID and, if true, the component's UUID +* Returns the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[out] pHasUUID - flag whether the component has a UUID -* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) -* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pTransform - the transformation matrix * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetUUIDPtr) (Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetTransformPtr) (Lib3MF_FunctionReference pFunctionReference, sLib3MFTransform * pTransform); /** -* sets the component's UUID +* Sets the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pTransform - new transformation matrix * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_SetUUIDPtr) (Lib3MF_Component pComponent, const char * pUUID); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetTransformPtr) (Lib3MF_FunctionReference pFunctionReference, const sLib3MFTransform * pTransform); /** -* Returns, if the component has a different transformation than the identity matrix +* Returns the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_HasTransformPtr) (Lib3MF_Component pComponent, bool * pHasTransform); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetChannelNamePtr) (Lib3MF_FunctionReference pFunctionReference, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); /** -* Returns the transformation matrix of the component. +* Sets the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pTransform - filled with the component transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pChannelName - new name of the function output channel * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetTransformPtr) (Lib3MF_Component pComponent, sLib3MFTransform * pTransform); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetChannelNamePtr) (Lib3MF_FunctionReference pFunctionReference, const char * pChannelName); /** -* Sets the transformation matrix of the component. +* Sets the minimal feature size as a hint for the function evaluator * -* @param[in] pComponent - Component instance. -* @param[in] pTransform - new transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_SetTransformPtr) (Lib3MF_Component pComponent, const sLib3MFTransform * pTransform); - -/************************************************************************************************************************* - Class definition for ComponentsObject -**************************************************************************************************************************/ +typedef Lib3MFResult (*PLib3MFFunctionReference_SetMinFeatureSizePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dMinFeatureSize); /** -* Adds a new component to a components object. +* Returns the minimal feature size as a hint for the function evaluator * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] pObjectResource - object to add as component. Must not lead to circular references! -* @param[in] pTransform - optional transform matrix for the component. -* @param[out] pComponentInstance - new component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponentsObject_AddComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const sLib3MFTransform * pTransform, Lib3MF_Component * pComponentInstance); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetMinFeatureSizePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pMinFeatureSize); /** -* Retrieves a component from a component object. +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) -* @param[out] pComponentInstance - component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dFallBackValue - fallback value * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetFallBackValuePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dFallBackValue); /** -* Retrieves a component count of a component object. +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[out] pCount - returns the component count +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pFallBackValue - fallback value * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentCountPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetFallBackValuePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pFallBackValue); /************************************************************************************************************************* - Class definition for BeamSet + Class definition for VolumeDataColor **************************************************************************************************************************/ -/** -* Sets a beamset's name string -* -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pName - new name of the beamset. -* @return error code or 0 (success) -*/ -typedef Lib3MFResult (*PLib3MFBeamSet_SetNamePtr) (Lib3MF_BeamSet pBeamSet, const char * pName); +/************************************************************************************************************************* + Class definition for MaterialMapping +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for VolumeDataComposite +**************************************************************************************************************************/ /** -* Retrieves a beamset's name string +* Returns the BaseMaterialGroup used within this volume data item * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pBaseMaterialGroupInstance - The BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetNamePtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); /** -* Sets a beamset's identifier string +* Sets the BaseMaterialGroup to use within this volume data item. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pIdentifier - new name of the beamset. +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pBaseMaterialGroupInstance - The new BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_SetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const char * pIdentifier); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance); /** -* Retrieves a beamset's identifier string +* Returns the number of material mappings of this VolumeDataComposite element * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) -* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pCount - the number of material mappings. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 * pCount); /** -* Retrieves the reference count of a beamset +* Returns MaterialMappting with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the reference count +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - Index of the MaterialMapping in question. +* @param[out] pTheMaterialMapping - MaterialMapping used in this element * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_GetMaterialMappingPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Sets the references of a beamset +* Adds a the MaterialMapping * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pTransform - new transformation matrix +* @param[out] pTheMaterialMapping - The new MaterialMapping * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_SetReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_AddMaterialMappingPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, const sLib3MFTransform * pTransform, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Retrieves the references of a beamset +* Removes the MaterialMapping with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - The index of the MaterialMapping to be removed. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex); + +/************************************************************************************************************************* + Class definition for VolumeDataProperty +**************************************************************************************************************************/ /** -* Retrieves the ball reference count of a beamset +* Gets the qualified name of this property. * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the ball reference count +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] nPropertyNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pPropertyNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPropertyNameBuffer - buffer of The qualified name of this property., may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFVolumeDataProperty_GetNamePtr) (Lib3MF_VolumeDataProperty pVolumeDataProperty, const Lib3MF_uint32 nPropertyNameBufferSize, Lib3MF_uint32* pPropertyNameNeededChars, char * pPropertyNameBuffer); /** -* Sets the ball references of a beamset +* Sets whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] bIsRequired - New value for whether this property is required to process this 3MF document instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_SetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataProperty_SetIsRequiredPtr) (Lib3MF_VolumeDataProperty pVolumeDataProperty, bool bIsRequired); /** -* Retrieves the ball references of a beamset +* Returns whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[out] pIsRequired - Is this property required to process this 3MF document instance? * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataProperty_IsRequiredPtr) (Lib3MF_VolumeDataProperty pVolumeDataProperty, bool * pIsRequired); /************************************************************************************************************************* - Class definition for BaseMaterialGroup + Class definition for VolumeData **************************************************************************************************************************/ /** -* Retrieves the count of base materials in the material group. +* Returns the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[out] pCount - returns the count of base materials. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - filled with the VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetCountPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFVolumeData_GetCompositePtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* returns all the PropertyIDs of all materials in this group +* Creates a new VolumeDataComposite for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - The new VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFVolumeData_CreateNewCompositePtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* Adds a new material to the material group +* Removes the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] pName - new name of the base material. -* @param[in] pDisplayColor - Display color of the material -* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_AddMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const sLib3MFColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFVolumeData_RemoveCompositePtr) (Lib3MF_VolumeData pVolumeData); /** -* Removes a material from the material group. +* Returns the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheColorData - filled with the VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_RemoveMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFVolumeData_GetColorPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataColor * pTheColorData); /** -* Returns the base material's name +* Creates a new VolumeDataColor for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheColorData - The new VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +typedef Lib3MFResult (*PLib3MFVolumeData_CreateNewColorPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataColor * pTheColorData); /** -* Sets a base material's name +* Removes the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pName - new name of the base material. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); +typedef Lib3MFResult (*PLib3MFVolumeData_RemoveColorPtr) (Lib3MF_VolumeData pVolumeData); /** -* Sets a base material's display color. +* Returns the number of VolumeDataProperty * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pCount - the number of VolumeDataProperty-elements within this VolumdeData * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); +typedef Lib3MFResult (*PLib3MFVolumeData_GetPropertyCountPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 * pCount); /** -* Returns a base material's display color. +* Returns the VolumeDataProperty at a given Index * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[out] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be returned. +* @param[out] pTheVolumeDataProperty - the VolumeDataProperty at the given index. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); +typedef Lib3MFResult (*PLib3MFVolumeData_GetPropertyPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Adds a new VolumeDataProperty from a Function +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pName - the qualified name (namespace+name) of the Property +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheVolumeDataProperty - the newly created VolumeDataProperty. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFVolumeData_AddPropertyFromFunctionPtr) (Lib3MF_VolumeData pVolumeData, const char * pName, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Removes the VolumeDataProperty with a given index +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be removed. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFVolumeData_RemovePropertyPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex); /************************************************************************************************************************* - Class definition for ColorGroup + Class definition for Component **************************************************************************************************************************/ /** -* Retrieves the count of base materials in this Color Group. +* Returns the Resource Instance of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[out] pCount - returns the count of colors within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pObjectResource - filled with the Resource Instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_GetCountPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourcePtr) (Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); /** -* returns all the PropertyIDs of all colors within this group +* Returns the UniqueResourceID of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @param[in] pComponent - Component instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_GetAllPropertyIDsPtr) (Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourceIDPtr) (Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); /** -* Adds a new value. +* returns, whether a component has a UUID and, if true, the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] pTheColor - The new color -* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pHasUUID - flag whether the component has a UUID +* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) +* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_AddColorPtr) (Lib3MF_ColorGroup pColorGroup, const sLib3MFColor * pTheColor, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFComponent_GetUUIDPtr) (Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); /** -* Removes a color from the color group. +* sets the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @param[in] pComponent - Component instance. +* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_RemoveColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFComponent_SetUUIDPtr) (Lib3MF_Component pComponent, const char * pUUID); /** -* Sets a color value. +* Returns, if the component has a different transformation than the identity matrix * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[in] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_SetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); +typedef Lib3MFResult (*PLib3MFComponent_HasTransformPtr) (Lib3MF_Component pComponent, bool * pHasTransform); /** -* Sets a color value. +* Returns the transformation matrix of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[out] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pTransform - filled with the component transformation matrix * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_GetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); +typedef Lib3MFResult (*PLib3MFComponent_GetTransformPtr) (Lib3MF_Component pComponent, sLib3MFTransform * pTransform); + +/** +* Sets the transformation matrix of the component. +* +* @param[in] pComponent - Component instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComponent_SetTransformPtr) (Lib3MF_Component pComponent, const sLib3MFTransform * pTransform); /************************************************************************************************************************* - Class definition for Texture2DGroup + Class definition for ComponentsObject **************************************************************************************************************************/ /** -* Retrieves the count of tex2coords in the Texture2DGroup. +* Adds a new component to a components object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pCount - returns the count of tex2coords. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] pObjectResource - object to add as component. Must not lead to circular references! +* @param[in] pTransform - optional transform matrix for the component. +* @param[out] pComponentInstance - new component instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetCountPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFComponentsObject_AddComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const sLib3MFTransform * pTransform, Lib3MF_Component * pComponentInstance); /** -* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* Retrieves a component from a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) +* @param[out] pComponentInstance - component instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); /** -* Adds a new tex2coord to the Texture2DGroup +* Retrieves a component count of a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. -* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[out] pCount - returns the component count * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_AddTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const sLib3MFTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentCountPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); + +/************************************************************************************************************************* + Class definition for BeamSet +**************************************************************************************************************************/ /** -* Obtains a tex2coord to the Texture2DGroup +* Sets a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. -* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pName - new name of the beamset. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, sLib3MFTex2Coord * pUVCoordinate); +typedef Lib3MFResult (*PLib3MFBeamSet_SetNamePtr) (Lib3MF_BeamSet pBeamSet, const char * pName); /** -* Removes a tex2coords from the Texture2DGroup. +* Retrieves a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_RemoveTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFBeamSet_GetNamePtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); /** -* Obtains the texture2D instance of this group. +* Sets a beamset's identifier string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pIdentifier - new name of the beamset. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTexture2DPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); +typedef Lib3MFResult (*PLib3MFBeamSet_SetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const char * pIdentifier); + +/** +* Retrieves a beamset's identifier string +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Retrieves the reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the reference count +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_SetReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the ball reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the ball reference count +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_SetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); + +/** +* Retrieves the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); /************************************************************************************************************************* - Class definition for CompositeMaterials + Class definition for BaseMaterialGroup **************************************************************************************************************************/ /** -* Retrieves the count of Composite-s in the CompositeMaterials. +* Retrieves the count of base materials in the material group. * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pCount - returns the count of Composite-s +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[out] pCount - returns the count of base materials. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCountPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetCountPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); /** -* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* returns all the PropertyIDs of all materials in this group * -* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new material to the material group +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] pName - new name of the base material. +* @param[in] pDisplayColor - Display color of the material +* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_AddMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const sLib3MFColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a material from the material group. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_RemoveMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); + +/** +* Returns the base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* Sets a base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pName - new name of the base material. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); + +/** +* Sets a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); + +/** +* Returns a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[out] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); + +/************************************************************************************************************************* + Class definition for ColorGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of base materials in this Color Group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[out] pCount - returns the count of colors within this color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_GetCountPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all colors within this group +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_GetAllPropertyIDsPtr) (Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] pTheColor - The new color +* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_AddColorPtr) (Lib3MF_ColorGroup pColorGroup, const sLib3MFColor * pTheColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a color from the color group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_RemoveColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[in] pTheColor - The color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_SetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[out] pTheColor - The color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_GetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); + +/************************************************************************************************************************* + Class definition for Texture2DGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of tex2coords in the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pCount - returns the count of tex2coords. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetCountPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_AddTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const sLib3MFTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); + +/** +* Obtains a tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. +* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, sLib3MFTex2Coord * pUVCoordinate); + +/** +* Removes a tex2coords from the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_RemoveTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); + +/** +* Obtains the texture2D instance of this group. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTexture2DPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); + +/************************************************************************************************************************* + Class definition for CompositeMaterials +**************************************************************************************************************************/ + +/** +* Retrieves the count of Composite-s in the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pCount - returns the count of Composite-s +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCountPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. * @param[in] nPropertyIDsBufferSize - Number of elements in buffer * @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. * @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the Composite-Mixing Values in the CompositeMaterials. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); + +/** +* Adds a new Composite-Mixing Values to the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite +* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_AddCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const sLib3MFCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_RemoveCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); + +/** +* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, sLib3MFCompositeConstituent * pCompositeBuffer); + +/************************************************************************************************************************* + Class definition for MultiPropertyGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the count of MultiProperty-s +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new MultiProperty to the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. +* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Sets the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Removes a MultiProperty from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); + +/** +* Retrieves the number of layers of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the number of layers +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup +* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const sLib3MFMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); + +/** +* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried +* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, sLib3MFMultiPropertyLayer * pTheLayer); + +/** +* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); + +/************************************************************************************************************************* + Class definition for Image3D +**************************************************************************************************************************/ + +/** +* returns the name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of the name of this Image3D, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3D_GetNamePtr) (Lib3MF_Image3D pImage3D, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* sets a new name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] pName - the new name of this Image3D +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3D_SetNamePtr) (Lib3MF_Image3D pImage3D, const char * pName); + +/** +* Retrieves, if this Image3D is a ImageStack +* +* @param[in] pImage3D - Image3D instance. +* @param[out] pIsImageStack - returns, whether the Image3D is an ImageStack +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3D_IsImageStackPtr) (Lib3MF_Image3D pImage3D, bool * pIsImageStack); + +/************************************************************************************************************************* + Class definition for ImageStack +**************************************************************************************************************************/ + +/** +* Retrieves the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pRowCount - number of rows +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetRowCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pRowCount); + +/** +* Sets the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nRowCount - number of rows +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_SetRowCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nRowCount); + +/** +* Retrieves the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pColumnCount - number of columns +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetColumnCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pColumnCount); + +/** +* Sets the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nColumnCount - number of columns +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_SetColumnCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nColumnCount); + +/** +* Retrieves the number of images in the stack. +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pSheetCount - number of images +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetSheetCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pSheetCount); + +/** +* Retrieves a sheet of the stack. Raises an error if sheet is not set. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetSheetPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment * pSheet); + +/** +* Sets a sheet to an existing attachment. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_SetSheetPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment pSheet); + +/** +* Creates a new sheet attachment with empty data. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_CreateEmptySheetPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a memory buffer. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] nDataBufferSize - Number of elements in buffer +* @param[in] pDataBuffer - uint8 buffer of binary image data +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_CreateSheetFromBufferPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_uint64 nDataBufferSize, const Lib3MF_uint8 * pDataBuffer, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a file on disk. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] pFileName - file name to read from +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_CreateSheetFromFilePtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, const char * pFileName, Lib3MF_Attachment * pSheet); + +/************************************************************************************************************************* + Class definition for Attachment +**************************************************************************************************************************/ + +/** +* Retrieves an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_GetPathPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new path of the attachment. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_SetPathPtr) (Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Returns the PackagePart that is this attachment. +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pPackagePart - The PackagePart of this attachment. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_PackagePartPtr) (Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); + +/** +* Retrieves an attachment's relationship type +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_GetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's relationship type. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new relationship type string. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_SetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Writes out the attachment as file. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to write into. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_WriteToFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to read from. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_ReadFromFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pTheReadCallback - Callback to call for reading a data chunk +* @param[in] nStreamSize - number of bytes the callback returns +* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. +* @param[in] pUserData - Userdata that is passed to the callback function +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_ReadFromCallbackPtr) (Lib3MF_Attachment pAttachment, Lib3MFReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MFSeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); + +/** +* Retrieves the size of the attachment stream +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pStreamSize - the stream size +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_GetStreamSizePtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); + +/** +* Writes out the attachment into a buffer +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_WriteToBufferPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); + +/** +* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_ReadFromBufferPtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); + +/************************************************************************************************************************* + Class definition for Texture2D +**************************************************************************************************************************/ + +/** +* Retrieves the attachment located at the path of the texture. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); + +/** +* Sets the texture's package path to the path of the attachment. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pContentType - returns content type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetContentTypePtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureType * pContentType); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eContentType - new Content Type +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetContentTypePtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureType eContentType); + +/** +* Retrieves a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pTileStyleU - returns tilestyle type enum. +* @param[out] pTileStyleV - returns tilestyle type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV); + +/** +* Sets a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eTileStyleU - new tilestyle type enum. +* @param[in] eTileStyleV - new tilestyle type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV); + +/** +* Retrieves a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pFilter - returns filter type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetFilterPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter * pFilter); + +/** +* Sets a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eFilter - sets new filter type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetFilterPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter eFilter); + +/************************************************************************************************************************* + Class definition for ImplicitPort +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetIdentifierPtr) (Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetIdentifierPtr) (Lib3MF_ImplicitPort pImplicitPort, const char * pIdentifier); + +/** +* Retrieves the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetDisplayNamePtr) (Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetDisplayNamePtr) (Lib3MF_ImplicitPort pImplicitPort, const char * pDisplayName); + +/** +* Sets the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] eImplicitPortType - the type +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetTypePtr) (Lib3MF_ImplicitPort pImplicitPort, eLib3MFImplicitPortType eImplicitPortType); + +/** +* Retrieves the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[out] pImplicitPortType - the type +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetTypePtr) (Lib3MF_ImplicitPort pImplicitPort, eLib3MFImplicitPortType * pImplicitPortType); + +/** +* Retrieves the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nReferenceBufferSize - size of the buffer (including trailing 0) +* @param[out] pReferenceNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pReferenceBuffer - buffer of the reference, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetReferencePtr) (Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nReferenceBufferSize, Lib3MF_uint32* pReferenceNeededChars, char * pReferenceBuffer); + +/** +* Sets the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pReference - the reference +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetReferencePtr) (Lib3MF_ImplicitPort pImplicitPort, const char * pReference); + +/************************************************************************************************************************* + Class definition for Iterator +**************************************************************************************************************************/ + +/** +* Iterates to the next item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasNext - Iterates to the next item in the list. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFIterator_MoveNextPtr) (Lib3MF_Iterator pIterator, bool * pHasNext); + +/** +* Iterates to the previous item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasPrevious - Iterates to the previous item in the list. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFIterator_MovePreviousPtr) (Lib3MF_Iterator pIterator, bool * pHasPrevious); + +/** +* Returns the number of items the iterator captures. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pCount - returns the number of items the iterator captures. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFIterator_CountPtr) (Lib3MF_Iterator pIterator, Lib3MF_uint64 * pCount); + +/************************************************************************************************************************* + Class definition for ImplicitPortIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pImplicitPortIterator - ImplicitPortIterator instance. +* @param[out] pPort - The current element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPortIterator_GetCurrentPtr) (Lib3MF_ImplicitPortIterator pImplicitPortIterator, Lib3MF_ImplicitPort * pPort); + +/************************************************************************************************************************* + Class definition for ImplicitNode +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetIdentifierPtr) (Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_SetIdentifierPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier); + +/** +* Retrieves the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetDisplayNamePtr) (Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_SetDisplayNamePtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pDisplayName); + +/** +* Retrieves the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nTagBufferSize - size of the buffer (including trailing 0) +* @param[out] pTagNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pTagBuffer - buffer of the tag, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetTagPtr) (Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nTagBufferSize, Lib3MF_uint32* pTagNeededChars, char * pTagBuffer); + +/** +* Sets the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pTag - the tag +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_SetTagPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pTag); + +/** +* Retrieves the type of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pType - the type of the node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetNodeTypePtr) (Lib3MF_ImplicitNode pImplicitNode, eLib3MFImplicitNodeType * pType); + +/** +* Add an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[out] pPort - +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_AddInputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator for the inputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetInputsPtr) (Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Add an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[out] pPort - +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_AddOutputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator the outputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetOutputsPtr) (Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Retrieves an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_FindInputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_FindOutputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/** +* Checks if the types of the input and output ports are valid for the node type +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pValid - true, if the types are valid +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_AreTypesValidPtr) (Lib3MF_ImplicitNode pImplicitNode, bool * pValid); + +/************************************************************************************************************************* + Class definition for OneInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pInput - the input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFOneInputNode_GetInputAPtr) (Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves the output +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFOneInputNode_GetOutputResultPtr) (Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for SinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcSinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcCosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SinhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CoshNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for RoundNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CeilNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FloorNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SignNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FractNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for AbsNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ExpNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LogNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log10Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LengthNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TransposeNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for InverseNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SqrtNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ResourceIdNode +**************************************************************************************************************************/ + +/** +* Sets the Resource that the resourceid attribute of the node will point to +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[in] pResource - the resource +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFResourceIdNode_SetResourcePtr) (Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource pResource); + +/** +* Retrieves the resource of the node +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pResource - the resource +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFResourceIdNode_GetResourcePtr) (Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource * pResource); + +/** +* Retrieves the output +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFResourceIdNode_GetOutputValuePtr) (Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for TwoInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pTwoInputNode - TwoInputNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTwoInputNode_GetInputBPtr) (Lib3MF_TwoInputNode pTwoInputNode, Lib3MF_ImplicitPort * pB); + +/************************************************************************************************************************* + Class definition for AdditionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SubtractionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DivisionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DotNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CrossNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTan2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MatVecMultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MaxNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FmodNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ModNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for PowNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SelectNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFSelectNode_GetInputBPtr) (Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pB); + +/** +* Retrieves the third input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pC - the third input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFSelectNode_GetInputCPtr) (Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pC); + +/** +* Retrieves the fourth input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pD - the fourth input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFSelectNode_GetInputDPtr) (Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pD); + +/************************************************************************************************************************* + Class definition for ClampNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the lower limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMin - the input for the lower limit +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFClampNode_GetInputMinPtr) (Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMin); + +/** +* Retrieves the input for the upper limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMax - the input for the upper limit +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFClampNode_GetInputMaxPtr) (Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMax); + +/************************************************************************************************************************* + Class definition for ComposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the x component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pX - the input for the x component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetInputXPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the input for the y component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pY - the input for the y component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetInputYPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the input for the z component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pZ - the input for the z component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetInputZPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/** +* Retrieves the output +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetOutputResultPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for VectorFromScalarNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DecomposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pA - the input port for the vector to decompose +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetInputAPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pA); + +/** +* Retrieves the output for the x component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pX - the output for the x component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetOutputXPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the output for the y component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pY - the output for the y component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetOutputYPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the output for the z component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pZ - the output for the z component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetOutputZPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/************************************************************************************************************************* + Class definition for ComposeMatrixNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the element 0 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM00 - the input for the m00 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM00Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM00); + +/** +* Retrieves the input for the element 0 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM01 - the input for the m01 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM01Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM01); + +/** +* Retrieves the input for the element 0 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM02 - the input for the m02 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM02Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM02); + +/** +* Retrieves the input for the element 0 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM03 - the input for the m03 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM03Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM03); + +/** +* Retrieves the input for the element 1 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM10 - the input for the m10 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM10Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM10); + +/** +* Retrieves the input for the element 1 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM11 - the input for the m11 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM11Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM11); + +/** +* Retrieves the input for the element 1 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM12 - the input for the m12 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM12Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM12); + +/** +* Retrieves the input for the element 1 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM13 - the input for the m3 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM13Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM13); + +/** +* Retrieves the input for the element 2 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM20 - the input for the m2 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM20Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM20); + +/** +* Retrieves the input for the element 2 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM21 - +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM21Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM21); + +/** +* Retrieves the input for the element 2 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM22 - the input for the m22 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM22Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM22); + +/** +* Retrieves the input for the element 2 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM23 - the input for the m23 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM23Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM23); + +/** +* Retrieves the input for the element 3 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM30 - the input for the m30 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM30Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM30); + +/** +* Retrieves the input for the element 3 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM31 - the input for the m31 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM31Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM31); + +/** +* Retrieves the input for the element 3 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM32 - the input for the m32 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM32Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM32); + +/** +* Retrieves the input for the element 3 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM33 - the input for the m33 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM33Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM33); + +/** +* Retrieves the output +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetOutputResultPtr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromRowsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow0 - the input for the first row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputAPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow0); + +/** +* Retrieves the input for the second row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow1 - the input for the second row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputBPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow1); + +/** +* Retrieves the input for the third row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow2 - the input for the third row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputCPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow2); + +/** +* Retrieves the input for the fourth row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow3 - the input for the fourth row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputDPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetOutputResultPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromColumnsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn0 - the input for the first column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputAPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn0); + +/** +* Retrieves the input for the second column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn1 - the input for the second column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputBPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn1); + +/** +* Retrieves the input for the third column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn2 - the input for the third column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputCPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn2); + +/** +* Retrieves the input for the fourth column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn3 - the input for the fourth column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputDPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetOutputResultPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for ConstantNode +**************************************************************************************************************************/ + +/** +* Sets the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[in] dValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstantNode_SetConstantPtr) (Lib3MF_ConstantNode pConstantNode, Lib3MF_double dValue); + +/** +* Retrieves the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstantNode_GetConstantPtr) (Lib3MF_ConstantNode pConstantNode, Lib3MF_double * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstantNode_GetOutputValuePtr) (Lib3MF_ConstantNode pConstantNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for ConstVecNode +**************************************************************************************************************************/ + +/** +* Sets the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstVecNode_SetVectorPtr) (Lib3MF_ConstVecNode pConstVecNode, const sLib3MFVector * pValue); + +/** +* Retrieves the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstVecNode_GetVectorPtr) (Lib3MF_ConstVecNode pConstVecNode, sLib3MFVector * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pVector - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstVecNode_GetOutputVectorPtr) (Lib3MF_ConstVecNode pConstVecNode, Lib3MF_ImplicitPort * pVector); + +/************************************************************************************************************************* + Class definition for ConstMatNode +**************************************************************************************************************************/ + +/** +* Sets the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstMatNode_SetMatrixPtr) (Lib3MF_ConstMatNode pConstMatNode, const sLib3MFMatrix4x4 * pValue); + +/** +* Retrieves the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pValue - the matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstMatNode_GetMatrixPtr) (Lib3MF_ConstMatNode pConstMatNode, sLib3MFMatrix4x4 * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pMatrix - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstMatNode_GetOutputMatrixPtr) (Lib3MF_ConstMatNode pConstMatNode, Lib3MF_ImplicitPort * pMatrix); + +/************************************************************************************************************************* + Class definition for MeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshNode_GetInputMeshPtr) (Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshNode_GetInputPosPtr) (Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pDistance - the output port for the signed distance to the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshNode_GetOutputDistancePtr) (Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for UnsignedMeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFUnsignedMeshNode_GetInputMeshPtr) (Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFUnsignedMeshNode_GetInputPosPtr) (Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pDistance - the output port for the unsigned distance to the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFUnsignedMeshNode_GetOutputDistancePtr) (Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for FunctionCallNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the function id +* +* @param[in] pFunctionCallNode - FunctionCallNode instance. +* @param[out] pFunction - the input port for the function +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionCallNode_GetInputFunctionIDPtr) (Lib3MF_FunctionCallNode pFunctionCallNode, Lib3MF_ImplicitPort * pFunction); + +/************************************************************************************************************************* + Class definition for NodeIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pNodeIterator - NodeIterator instance. +* @param[out] pNode - The current element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFNodeIterator_GetCurrentPtr) (Lib3MF_NodeIterator pNodeIterator, Lib3MF_ImplicitNode * pNode); + +/************************************************************************************************************************* + Class definition for Function +**************************************************************************************************************************/ + +/** +* Retrieves the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_GetDisplayNamePtr) (Lib3MF_Function pFunction, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_SetDisplayNamePtr) (Lib3MF_Function pFunction, const char * pDisplayName); + +/** +* Add an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_AddInputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, eLib3MFImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the list of inputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_GetInputsPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an input +* +* @param[in] pFunction - Function instance. +* @param[in] pInput - The input to be removed +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_RemoveInputPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPort pInput); + +/** +* Add an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_AddOutputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, eLib3MFImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the outputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_GetOutputsPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an output +* +* @param[in] pFunction - Function instance. +* @param[in] pOutput - The output to be removed +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_RemoveOutputPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPort pOutput); + +/** +* Retrieves an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_FindInputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_FindOutputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/************************************************************************************************************************* + Class definition for ImplicitFunction +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_GetIdentifierPtr) (Lib3MF_ImplicitFunction pImplicitFunction, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_SetIdentifierPtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier); + +/** +* Add a node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] eNodeType - the type of the node +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, eLib3MFImplicitNodeType eNodeType, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ImplicitNode * pNode); + +/** +* Add a SinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSinNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinNode * pNode); + +/** +* Add a CosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCosNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CosNode * pNode); + +/** +* Add a TanNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddTanNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanNode * pNode); + +/** +* Add a ArcSinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddArcSinNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcSinNode * pNode); + +/** +* Add a ArcCosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddArcCosNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcCosNode * pNode); + +/** +* Add a ArcTan2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddArcTan2NodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcTan2Node * pNode); + +/** +* Add a SinhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSinhNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinhNode * pNode); + +/** +* Add a CoshNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCoshNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CoshNode * pNode); + +/** +* Add a TanhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddTanhNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanhNode * pNode); + +/** +* Add a RoundNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddRoundNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_RoundNode * pNode); + +/** +* Add a CeilNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCeilNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CeilNode * pNode); + +/** +* Add a FloorNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFloorNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FloorNode * pNode); + +/** +* Add a SignNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSignNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SignNode * pNode); + +/** +* Add a FractNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFractNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FractNode * pNode); + +/** +* Add a AbsNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddAbsNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AbsNode * pNode); + +/** +* Add a ExpNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddExpNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ExpNode * pNode); + +/** +* Add a LogNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLogNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_LogNode * pNode); + +/** +* Add a Log2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLog2NodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log2Node * pNode); + +/** +* Add a Log10Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLog10NodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log10Node * pNode); + +/** +* Add a LengthNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLengthNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_LengthNode * pNode); + +/** +* Add a TransposeNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddTransposeNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TransposeNode * pNode); + +/** +* Add a InverseNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_InverseNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_InverseNode * pNode); + +/** +* Add a SqrtNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSqrtNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SqrtNode * pNode); + +/** +* Add a ResourceIdNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddResourceIdNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ResourceIdNode * pNode); + +/** +* Add an AdditionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddAdditionNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AdditionNode * pNode); + +/** +* Add a SubtractionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSubtractionNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SubtractionNode * pNode); + +/** +* Add a MultiplicationNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMultiplicationNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MultiplicationNode * pNode); + +/** +* Add a DivisionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddDivisionNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_DivisionNode * pNode); + +/** +* Add a DotNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddDotNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DotNode * pNode); + +/** +* Add a CrossNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCrossNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_CrossNode * pNode); /** -* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* Add a MatVecMultiplicationNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatVecMultiplicationNode * pNode); /** -* Adds a new Composite-Mixing Values to the CompositeMaterials. +* Add a MinNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite -* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_AddCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const sLib3MFCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMinNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MinNode * pNode); /** -* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* Add a MaxNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_RemoveCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMaxNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MaxNode * pNode); /** -* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* Add a FmodNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, sLib3MFCompositeConstituent * pCompositeBuffer); - -/************************************************************************************************************************* - Class definition for MultiPropertyGroup -**************************************************************************************************************************/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFmodNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FmodNode * pNode); /** -* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* Add a PowNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the count of MultiProperty-s +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddPowNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_PowNode * pNode); /** -* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* Add a SelectNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSelectNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SelectNode * pNode); /** -* Adds a new MultiProperty to the MultiPropertyGroup. +* Add a ClampNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. -* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddClampNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ClampNode * pNode); /** -* Sets the PropertyIDs of a MultiProperty. +* Add a ComposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddComposeVectorNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeVectorNode * pNode); /** -* Obtains the PropertyIDs of a MultiProperty. +* Add a VectorFromScalar * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddVectorFromScalarNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_VectorFromScalarNode * pNode); /** -* Removes a MultiProperty from this MultiPropertyGroup. +* Add a DecomposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddDecomposeVectorNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DecomposeVectorNode * pNode); /** -* Retrieves the number of layers of this MultiPropertyGroup. +* Add a ComposeMatrixNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the number of layers +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddComposeMatrixNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeMatrixNode * pNode); /** -* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* Add a MatrixFromRowsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup -* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const sLib3MFMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromRowsNode * pNode); /** -* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* Add a MatrixFromColumnsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried -* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, sLib3MFMultiPropertyLayer * pTheLayer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromColumnsNode * pNode); /** -* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* Add a ConstantNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); - -/************************************************************************************************************************* - Class definition for Attachment -**************************************************************************************************************************/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddConstantNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstantNode * pNode); /** -* Retrieves an attachment's package path. This function will be removed in a later release. +* Add a ConstVecNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_GetPathPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddConstVecNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstVecNode * pNode); /** -* Sets an attachment's package path. This function will be removed in a later release. +* Add a ConstMatNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new path of the attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_SetPathPtr) (Lib3MF_Attachment pAttachment, const char * pPath); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddConstMatNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstMatNode * pNode); /** -* Returns the PackagePart that is this attachment. +* Add a MeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[out] pPackagePart - The PackagePart of this attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_PackagePartPtr) (Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMeshNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MeshNode * pNode); /** -* Retrieves an attachment's relationship type +* Add a UnsignedMeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_GetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddUnsignedMeshNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_UnsignedMeshNode * pNode); /** -* Sets an attachment's relationship type. +* Add a FunctionCallNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new relationship type string. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_SetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const char * pPath); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFunctionCallNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_FunctionCallNode * pNode); /** -* Writes out the attachment as file. +* Retrieves the nodes * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to write into. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[out] pIterator - iterator for the list of nodes * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_WriteToFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); +typedef Lib3MFResult (*PLib3MFImplicitFunction_GetNodesPtr) (Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_NodeIterator * pIterator); /** -* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Removes a node * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to read from. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pNode - The node to be removed * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_ReadFromFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); +typedef Lib3MFResult (*PLib3MFImplicitFunction_RemoveNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitNode pNode); /** -* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[in] pTheReadCallback - Callback to call for reading a data chunk -* @param[in] nStreamSize - number of bytes the callback returns -* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. -* @param[in] pUserData - Userdata that is passed to the callback function +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - the source port +* @param[in] pTarget - the target port * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_ReadFromCallbackPtr) (Lib3MF_Attachment pAttachment, Lib3MFReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MFSeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLinkPtr) (Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitPort pSource, Lib3MF_ImplicitPort pTarget); /** -* Retrieves the size of the attachment stream +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[out] pStreamSize - the stream size +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - name of the source port in the format nodename.portname +* @param[in] pTarget - name of the target port in the format nodename.portname * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_GetStreamSizePtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLinkByNamesPtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pSource, const char * pTarget); /** -* Writes out the attachment into a buffer +* Clears the function * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_WriteToBufferPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_ClearPtr) (Lib3MF_ImplicitFunction pImplicitFunction); /** -* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* Sorts the nodes topologically * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_ReadFromBufferPtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_SortNodesTopologicallyPtr) (Lib3MF_ImplicitFunction pImplicitFunction); /************************************************************************************************************************* - Class definition for Texture2D + Class definition for FunctionFromImage3D **************************************************************************************************************************/ /** -* Retrieves the attachment located at the path of the texture. +* Returns the selected 3D image. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pImage3D - image instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetImage3DPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D * pImage3D); /** -* Sets the texture's package path to the path of the attachment. +* Sets the 3D image of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] pImage3D - image instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetImage3DPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D pImage3D); /** -* Retrieves a texture's content type. +* Sets the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pContentType - returns content type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eFilter - texture filter * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetContentTypePtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureType * pContentType); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetFilterPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureFilter eFilter); /** -* Retrieves a texture's content type. +* Returns the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eContentType - new Content Type +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pFilter - texture filter * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetContentTypePtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureType eContentType); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetFilterPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureFilter * pFilter); /** -* Retrieves a texture's tilestyle type. +* Sets the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pTileStyleU - returns tilestyle type enum. -* @param[out] pTileStyleV - returns tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eTileStyleU - tile style in U +* @param[in] eTileStyleV - tile style in V +* @param[in] eTileStyleW - tile style in W * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetTileStylesPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV, eLib3MFTextureTileStyle eTileStyleW); /** -* Sets a texture's tilestyle type. +* Retrieves the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eTileStyleU - new tilestyle type enum. -* @param[in] eTileStyleV - new tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pTileStyleU - tile style in U +* @param[out] pTileStyleV - tile style in V +* @param[out] pTileStyleW - tile style in W * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetTileStylesPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV, eLib3MFTextureTileStyle * pTileStyleW); /** -* Retrieves a texture's filter type. +* returns the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pFilter - returns filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetFilterPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter * pFilter); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetOffsetPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pOffset); /** -* Sets a texture's filter type. +* Sets the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eFilter - sets new filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetFilterPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter eFilter); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetOffsetPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dOffset); + +/** +* returns the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetScalePtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pScale); + +/** +* Sets the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetScalePtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dScale); /************************************************************************************************************************* Class definition for BuildItem @@ -3132,6 +5743,16 @@ typedef Lib3MFResult (*PLib3MFModel_GetColorGroupByIDPtr) (Lib3MF_Model pModel, */ typedef Lib3MFResult (*PLib3MFModel_GetSliceStackByIDPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_SliceStack * pSliceStacInstance); +/** +* finds a level set object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pLevelSetObjectInstance - returns the level set object instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetLevelSetByIDPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_LevelSet * pLevelSetObjectInstance); + /** * returns, whether a build has a UUID and, if true, the build's UUID * @@ -3270,6 +5891,15 @@ typedef Lib3MFResult (*PLib3MFModel_GetMultiPropertyGroupsPtr) (Lib3MF_Model pMo */ typedef Lib3MFResult (*PLib3MFModel_GetSliceStacksPtr) (Lib3MF_Model pModel, Lib3MF_SliceStackIterator * pResourceIterator); +/** +* creates a resource iterator instance with all image3d resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetImage3DsPtr) (Lib3MF_Model pModel, Lib3MF_Image3DIterator * pResourceIterator); + /** * Merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. * @@ -3279,6 +5909,15 @@ typedef Lib3MFResult (*PLib3MFModel_GetSliceStacksPtr) (Lib3MF_Model pModel, Lib */ typedef Lib3MFResult (*PLib3MFModel_MergeToModelPtr) (Lib3MF_Model pModel, Lib3MF_Model * pMergedModelInstance); +/** +* Merges the given model into this model. +* +* @param[in] pModel - Model instance. +* @param[in] pModelInstance - model to be merged +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_MergeFromModelPtr) (Lib3MF_Model pModel, Lib3MF_Model pModelInstance); + /** * adds an empty mesh object to the model. * @@ -3364,6 +6003,28 @@ typedef Lib3MFResult (*PLib3MFModel_AddCompositeMaterialsPtr) (Lib3MF_Model pMod */ typedef Lib3MFResult (*PLib3MFModel_AddMultiPropertyGroupPtr) (Lib3MF_Model pModel, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance); +/** +* creates a new 3D Image Resource +* +* @param[in] pModel - Model instance. +* @param[in] nColumnCount - the number of columns in each sheet. +* @param[in] nRowCount - the number of rows in each sheet. +* @param[in] nSheetCount - the number of sheets in the image stack. +* @param[out] pInstance - returns the new ImageStack instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddImageStackPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nColumnCount, Lib3MF_uint32 nRowCount, Lib3MF_uint32 nSheetCount, Lib3MF_ImageStack * pInstance); + +/** +* finds an ImageStack object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pImageStackInstance - returns the image stack instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetImageStackByIDPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ImageStack * pImageStackInstance); + /** * adds a build item to the model. * @@ -3515,6 +6176,70 @@ typedef Lib3MFResult (*PLib3MFModel_SetRandomNumberCallbackPtr) (Lib3MF_Model pM */ typedef Lib3MFResult (*PLib3MFModel_GetKeyStorePtr) (Lib3MF_Model pModel, Lib3MF_KeyStore * pKeyStore); +/** +* creates a resource iterator for all functions +* +* @param[in] pModel - Model instance. +* @param[out] pTheResourceIterator - returns the resource iterator +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetFunctionsPtr) (Lib3MF_Model pModel, Lib3MF_FunctionIterator * pTheResourceIterator); + +/** +* adds a function described by nodes to the model +* +* @param[in] pModel - Model instance. +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddImplicitFunctionPtr) (Lib3MF_Model pModel, Lib3MF_ImplicitFunction * pFunctionInstance); + +/** +* adds a function defined by an image3d to the model +* +* @param[in] pModel - Model instance. +* @param[in] pImage3DInstance - the Image3D-instance used for this function +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddFunctionFromImage3DPtr) (Lib3MF_Model pModel, Lib3MF_Image3D pImage3DInstance, Lib3MF_FunctionFromImage3D * pFunctionInstance); + +/** +* adds a volume data resource to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pVolumeDataInstance - returns the new volume data instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddVolumeDataPtr) (Lib3MF_Model pModel, Lib3MF_VolumeData * pVolumeDataInstance); + +/** +* adds an empty boundary shape object to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pLevelSetInstance - returns the mesh object instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddLevelSetPtr) (Lib3MF_Model pModel, Lib3MF_LevelSet * pLevelSetInstance); + +/** +* creates a resource iterator instance with all boundary shape resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetLevelSetsPtr) (Lib3MF_Model pModel, Lib3MF_LevelSetIterator * pResourceIterator); + +/** +* Removes a resource from the model +* +* @param[in] pModel - Model instance. +* @param[in] pResource - The resource to remove +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_RemoveResourcePtr) (Lib3MF_Model pModel, Lib3MF_Resource pResource); + /************************************************************************************************************************* Global functions **************************************************************************************************************************/ @@ -3767,6 +6492,9 @@ typedef struct { PLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupPtr m_Texture2DGroupIterator_GetCurrentTexture2DGroup; PLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsPtr m_CompositeMaterialsIterator_GetCurrentCompositeMaterials; PLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupPtr m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup; + PLib3MFImage3DIterator_GetCurrentImage3DPtr m_Image3DIterator_GetCurrentImage3D; + PLib3MFFunctionIterator_GetCurrentFunctionPtr m_FunctionIterator_GetCurrentFunction; + PLib3MFLevelSetIterator_GetCurrentLevelSetPtr m_LevelSetIterator_GetCurrentLevelSet; PLib3MFMetaData_GetNameSpacePtr m_MetaData_GetNameSpace; PLib3MFMetaData_SetNameSpacePtr m_MetaData_SetNameSpace; PLib3MFMetaData_GetNamePtr m_MetaData_GetName; @@ -3792,6 +6520,7 @@ typedef struct { PLib3MFObject_SetPartNumberPtr m_Object_SetPartNumber; PLib3MFObject_IsMeshObjectPtr m_Object_IsMeshObject; PLib3MFObject_IsComponentsObjectPtr m_Object_IsComponentsObject; + PLib3MFObject_IsLevelSetObjectPtr m_Object_IsLevelSetObject; PLib3MFObject_IsValidPtr m_Object_IsValid; PLib3MFObject_SetAttachmentAsThumbnailPtr m_Object_SetAttachmentAsThumbnail; PLib3MFObject_GetThumbnailAttachmentPtr m_Object_GetThumbnailAttachment; @@ -3826,6 +6555,24 @@ typedef struct { PLib3MFMeshObject_SetGeometryPtr m_MeshObject_SetGeometry; PLib3MFMeshObject_IsManifoldAndOrientedPtr m_MeshObject_IsManifoldAndOriented; PLib3MFMeshObject_BeamLatticePtr m_MeshObject_BeamLattice; + PLib3MFMeshObject_GetVolumeDataPtr m_MeshObject_GetVolumeData; + PLib3MFMeshObject_SetVolumeDataPtr m_MeshObject_SetVolumeData; + PLib3MFLevelSet_GetFunctionPtr m_LevelSet_GetFunction; + PLib3MFLevelSet_SetFunctionPtr m_LevelSet_SetFunction; + PLib3MFLevelSet_GetTransformPtr m_LevelSet_GetTransform; + PLib3MFLevelSet_SetTransformPtr m_LevelSet_SetTransform; + PLib3MFLevelSet_GetChannelNamePtr m_LevelSet_GetChannelName; + PLib3MFLevelSet_SetChannelNamePtr m_LevelSet_SetChannelName; + PLib3MFLevelSet_SetMinFeatureSizePtr m_LevelSet_SetMinFeatureSize; + PLib3MFLevelSet_GetMinFeatureSizePtr m_LevelSet_GetMinFeatureSize; + PLib3MFLevelSet_SetFallBackValuePtr m_LevelSet_SetFallBackValue; + PLib3MFLevelSet_GetFallBackValuePtr m_LevelSet_GetFallBackValue; + PLib3MFLevelSet_SetMeshBBoxOnlyPtr m_LevelSet_SetMeshBBoxOnly; + PLib3MFLevelSet_GetMeshBBoxOnlyPtr m_LevelSet_GetMeshBBoxOnly; + PLib3MFLevelSet_SetMeshPtr m_LevelSet_SetMesh; + PLib3MFLevelSet_GetMeshPtr m_LevelSet_GetMesh; + PLib3MFLevelSet_GetVolumeDataPtr m_LevelSet_GetVolumeData; + PLib3MFLevelSet_SetVolumeDataPtr m_LevelSet_SetVolumeData; PLib3MFBeamLattice_GetMinLengthPtr m_BeamLattice_GetMinLength; PLib3MFBeamLattice_SetMinLengthPtr m_BeamLattice_SetMinLength; PLib3MFBeamLattice_GetClippingPtr m_BeamLattice_GetClipping; @@ -3849,6 +6596,35 @@ typedef struct { PLib3MFBeamLattice_GetBeamSetCountPtr m_BeamLattice_GetBeamSetCount; PLib3MFBeamLattice_AddBeamSetPtr m_BeamLattice_AddBeamSet; PLib3MFBeamLattice_GetBeamSetPtr m_BeamLattice_GetBeamSet; + PLib3MFFunctionReference_GetFunctionResourceIDPtr m_FunctionReference_GetFunctionResourceID; + PLib3MFFunctionReference_SetFunctionResourceIDPtr m_FunctionReference_SetFunctionResourceID; + PLib3MFFunctionReference_GetTransformPtr m_FunctionReference_GetTransform; + PLib3MFFunctionReference_SetTransformPtr m_FunctionReference_SetTransform; + PLib3MFFunctionReference_GetChannelNamePtr m_FunctionReference_GetChannelName; + PLib3MFFunctionReference_SetChannelNamePtr m_FunctionReference_SetChannelName; + PLib3MFFunctionReference_SetMinFeatureSizePtr m_FunctionReference_SetMinFeatureSize; + PLib3MFFunctionReference_GetMinFeatureSizePtr m_FunctionReference_GetMinFeatureSize; + PLib3MFFunctionReference_SetFallBackValuePtr m_FunctionReference_SetFallBackValue; + PLib3MFFunctionReference_GetFallBackValuePtr m_FunctionReference_GetFallBackValue; + PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr m_VolumeDataComposite_GetBaseMaterialGroup; + PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr m_VolumeDataComposite_SetBaseMaterialGroup; + PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr m_VolumeDataComposite_GetMaterialMappingCount; + PLib3MFVolumeDataComposite_GetMaterialMappingPtr m_VolumeDataComposite_GetMaterialMapping; + PLib3MFVolumeDataComposite_AddMaterialMappingPtr m_VolumeDataComposite_AddMaterialMapping; + PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr m_VolumeDataComposite_RemoveMaterialMapping; + PLib3MFVolumeDataProperty_GetNamePtr m_VolumeDataProperty_GetName; + PLib3MFVolumeDataProperty_SetIsRequiredPtr m_VolumeDataProperty_SetIsRequired; + PLib3MFVolumeDataProperty_IsRequiredPtr m_VolumeDataProperty_IsRequired; + PLib3MFVolumeData_GetCompositePtr m_VolumeData_GetComposite; + PLib3MFVolumeData_CreateNewCompositePtr m_VolumeData_CreateNewComposite; + PLib3MFVolumeData_RemoveCompositePtr m_VolumeData_RemoveComposite; + PLib3MFVolumeData_GetColorPtr m_VolumeData_GetColor; + PLib3MFVolumeData_CreateNewColorPtr m_VolumeData_CreateNewColor; + PLib3MFVolumeData_RemoveColorPtr m_VolumeData_RemoveColor; + PLib3MFVolumeData_GetPropertyCountPtr m_VolumeData_GetPropertyCount; + PLib3MFVolumeData_GetPropertyPtr m_VolumeData_GetProperty; + PLib3MFVolumeData_AddPropertyFromFunctionPtr m_VolumeData_AddPropertyFromFunction; + PLib3MFVolumeData_RemovePropertyPtr m_VolumeData_RemoveProperty; PLib3MFComponent_GetObjectResourcePtr m_Component_GetObjectResource; PLib3MFComponent_GetObjectResourceIDPtr m_Component_GetObjectResourceID; PLib3MFComponent_GetUUIDPtr m_Component_GetUUID; @@ -3905,6 +6681,19 @@ typedef struct { PLib3MFMultiPropertyGroup_AddLayerPtr m_MultiPropertyGroup_AddLayer; PLib3MFMultiPropertyGroup_GetLayerPtr m_MultiPropertyGroup_GetLayer; PLib3MFMultiPropertyGroup_RemoveLayerPtr m_MultiPropertyGroup_RemoveLayer; + PLib3MFImage3D_GetNamePtr m_Image3D_GetName; + PLib3MFImage3D_SetNamePtr m_Image3D_SetName; + PLib3MFImage3D_IsImageStackPtr m_Image3D_IsImageStack; + PLib3MFImageStack_GetRowCountPtr m_ImageStack_GetRowCount; + PLib3MFImageStack_SetRowCountPtr m_ImageStack_SetRowCount; + PLib3MFImageStack_GetColumnCountPtr m_ImageStack_GetColumnCount; + PLib3MFImageStack_SetColumnCountPtr m_ImageStack_SetColumnCount; + PLib3MFImageStack_GetSheetCountPtr m_ImageStack_GetSheetCount; + PLib3MFImageStack_GetSheetPtr m_ImageStack_GetSheet; + PLib3MFImageStack_SetSheetPtr m_ImageStack_SetSheet; + PLib3MFImageStack_CreateEmptySheetPtr m_ImageStack_CreateEmptySheet; + PLib3MFImageStack_CreateSheetFromBufferPtr m_ImageStack_CreateSheetFromBuffer; + PLib3MFImageStack_CreateSheetFromFilePtr m_ImageStack_CreateSheetFromFile; PLib3MFAttachment_GetPathPtr m_Attachment_GetPath; PLib3MFAttachment_SetPathPtr m_Attachment_SetPath; PLib3MFAttachment_PackagePartPtr m_Attachment_PackagePart; @@ -3924,6 +6713,173 @@ typedef struct { PLib3MFTexture2D_SetTileStyleUVPtr m_Texture2D_SetTileStyleUV; PLib3MFTexture2D_GetFilterPtr m_Texture2D_GetFilter; PLib3MFTexture2D_SetFilterPtr m_Texture2D_SetFilter; + PLib3MFImplicitPort_GetIdentifierPtr m_ImplicitPort_GetIdentifier; + PLib3MFImplicitPort_SetIdentifierPtr m_ImplicitPort_SetIdentifier; + PLib3MFImplicitPort_GetDisplayNamePtr m_ImplicitPort_GetDisplayName; + PLib3MFImplicitPort_SetDisplayNamePtr m_ImplicitPort_SetDisplayName; + PLib3MFImplicitPort_SetTypePtr m_ImplicitPort_SetType; + PLib3MFImplicitPort_GetTypePtr m_ImplicitPort_GetType; + PLib3MFImplicitPort_GetReferencePtr m_ImplicitPort_GetReference; + PLib3MFImplicitPort_SetReferencePtr m_ImplicitPort_SetReference; + PLib3MFIterator_MoveNextPtr m_Iterator_MoveNext; + PLib3MFIterator_MovePreviousPtr m_Iterator_MovePrevious; + PLib3MFIterator_CountPtr m_Iterator_Count; + PLib3MFImplicitPortIterator_GetCurrentPtr m_ImplicitPortIterator_GetCurrent; + PLib3MFImplicitNode_GetIdentifierPtr m_ImplicitNode_GetIdentifier; + PLib3MFImplicitNode_SetIdentifierPtr m_ImplicitNode_SetIdentifier; + PLib3MFImplicitNode_GetDisplayNamePtr m_ImplicitNode_GetDisplayName; + PLib3MFImplicitNode_SetDisplayNamePtr m_ImplicitNode_SetDisplayName; + PLib3MFImplicitNode_GetTagPtr m_ImplicitNode_GetTag; + PLib3MFImplicitNode_SetTagPtr m_ImplicitNode_SetTag; + PLib3MFImplicitNode_GetNodeTypePtr m_ImplicitNode_GetNodeType; + PLib3MFImplicitNode_AddInputPtr m_ImplicitNode_AddInput; + PLib3MFImplicitNode_GetInputsPtr m_ImplicitNode_GetInputs; + PLib3MFImplicitNode_AddOutputPtr m_ImplicitNode_AddOutput; + PLib3MFImplicitNode_GetOutputsPtr m_ImplicitNode_GetOutputs; + PLib3MFImplicitNode_FindInputPtr m_ImplicitNode_FindInput; + PLib3MFImplicitNode_FindOutputPtr m_ImplicitNode_FindOutput; + PLib3MFImplicitNode_AreTypesValidPtr m_ImplicitNode_AreTypesValid; + PLib3MFOneInputNode_GetInputAPtr m_OneInputNode_GetInputA; + PLib3MFOneInputNode_GetOutputResultPtr m_OneInputNode_GetOutputResult; + PLib3MFResourceIdNode_SetResourcePtr m_ResourceIdNode_SetResource; + PLib3MFResourceIdNode_GetResourcePtr m_ResourceIdNode_GetResource; + PLib3MFResourceIdNode_GetOutputValuePtr m_ResourceIdNode_GetOutputValue; + PLib3MFTwoInputNode_GetInputBPtr m_TwoInputNode_GetInputB; + PLib3MFSelectNode_GetInputBPtr m_SelectNode_GetInputB; + PLib3MFSelectNode_GetInputCPtr m_SelectNode_GetInputC; + PLib3MFSelectNode_GetInputDPtr m_SelectNode_GetInputD; + PLib3MFClampNode_GetInputMinPtr m_ClampNode_GetInputMin; + PLib3MFClampNode_GetInputMaxPtr m_ClampNode_GetInputMax; + PLib3MFComposeVectorNode_GetInputXPtr m_ComposeVectorNode_GetInputX; + PLib3MFComposeVectorNode_GetInputYPtr m_ComposeVectorNode_GetInputY; + PLib3MFComposeVectorNode_GetInputZPtr m_ComposeVectorNode_GetInputZ; + PLib3MFComposeVectorNode_GetOutputResultPtr m_ComposeVectorNode_GetOutputResult; + PLib3MFDecomposeVectorNode_GetInputAPtr m_DecomposeVectorNode_GetInputA; + PLib3MFDecomposeVectorNode_GetOutputXPtr m_DecomposeVectorNode_GetOutputX; + PLib3MFDecomposeVectorNode_GetOutputYPtr m_DecomposeVectorNode_GetOutputY; + PLib3MFDecomposeVectorNode_GetOutputZPtr m_DecomposeVectorNode_GetOutputZ; + PLib3MFComposeMatrixNode_GetInputM00Ptr m_ComposeMatrixNode_GetInputM00; + PLib3MFComposeMatrixNode_GetInputM01Ptr m_ComposeMatrixNode_GetInputM01; + PLib3MFComposeMatrixNode_GetInputM02Ptr m_ComposeMatrixNode_GetInputM02; + PLib3MFComposeMatrixNode_GetInputM03Ptr m_ComposeMatrixNode_GetInputM03; + PLib3MFComposeMatrixNode_GetInputM10Ptr m_ComposeMatrixNode_GetInputM10; + PLib3MFComposeMatrixNode_GetInputM11Ptr m_ComposeMatrixNode_GetInputM11; + PLib3MFComposeMatrixNode_GetInputM12Ptr m_ComposeMatrixNode_GetInputM12; + PLib3MFComposeMatrixNode_GetInputM13Ptr m_ComposeMatrixNode_GetInputM13; + PLib3MFComposeMatrixNode_GetInputM20Ptr m_ComposeMatrixNode_GetInputM20; + PLib3MFComposeMatrixNode_GetInputM21Ptr m_ComposeMatrixNode_GetInputM21; + PLib3MFComposeMatrixNode_GetInputM22Ptr m_ComposeMatrixNode_GetInputM22; + PLib3MFComposeMatrixNode_GetInputM23Ptr m_ComposeMatrixNode_GetInputM23; + PLib3MFComposeMatrixNode_GetInputM30Ptr m_ComposeMatrixNode_GetInputM30; + PLib3MFComposeMatrixNode_GetInputM31Ptr m_ComposeMatrixNode_GetInputM31; + PLib3MFComposeMatrixNode_GetInputM32Ptr m_ComposeMatrixNode_GetInputM32; + PLib3MFComposeMatrixNode_GetInputM33Ptr m_ComposeMatrixNode_GetInputM33; + PLib3MFComposeMatrixNode_GetOutputResultPtr m_ComposeMatrixNode_GetOutputResult; + PLib3MFMatrixFromRowsNode_GetInputAPtr m_MatrixFromRowsNode_GetInputA; + PLib3MFMatrixFromRowsNode_GetInputBPtr m_MatrixFromRowsNode_GetInputB; + PLib3MFMatrixFromRowsNode_GetInputCPtr m_MatrixFromRowsNode_GetInputC; + PLib3MFMatrixFromRowsNode_GetInputDPtr m_MatrixFromRowsNode_GetInputD; + PLib3MFMatrixFromRowsNode_GetOutputResultPtr m_MatrixFromRowsNode_GetOutputResult; + PLib3MFMatrixFromColumnsNode_GetInputAPtr m_MatrixFromColumnsNode_GetInputA; + PLib3MFMatrixFromColumnsNode_GetInputBPtr m_MatrixFromColumnsNode_GetInputB; + PLib3MFMatrixFromColumnsNode_GetInputCPtr m_MatrixFromColumnsNode_GetInputC; + PLib3MFMatrixFromColumnsNode_GetInputDPtr m_MatrixFromColumnsNode_GetInputD; + PLib3MFMatrixFromColumnsNode_GetOutputResultPtr m_MatrixFromColumnsNode_GetOutputResult; + PLib3MFConstantNode_SetConstantPtr m_ConstantNode_SetConstant; + PLib3MFConstantNode_GetConstantPtr m_ConstantNode_GetConstant; + PLib3MFConstantNode_GetOutputValuePtr m_ConstantNode_GetOutputValue; + PLib3MFConstVecNode_SetVectorPtr m_ConstVecNode_SetVector; + PLib3MFConstVecNode_GetVectorPtr m_ConstVecNode_GetVector; + PLib3MFConstVecNode_GetOutputVectorPtr m_ConstVecNode_GetOutputVector; + PLib3MFConstMatNode_SetMatrixPtr m_ConstMatNode_SetMatrix; + PLib3MFConstMatNode_GetMatrixPtr m_ConstMatNode_GetMatrix; + PLib3MFConstMatNode_GetOutputMatrixPtr m_ConstMatNode_GetOutputMatrix; + PLib3MFMeshNode_GetInputMeshPtr m_MeshNode_GetInputMesh; + PLib3MFMeshNode_GetInputPosPtr m_MeshNode_GetInputPos; + PLib3MFMeshNode_GetOutputDistancePtr m_MeshNode_GetOutputDistance; + PLib3MFUnsignedMeshNode_GetInputMeshPtr m_UnsignedMeshNode_GetInputMesh; + PLib3MFUnsignedMeshNode_GetInputPosPtr m_UnsignedMeshNode_GetInputPos; + PLib3MFUnsignedMeshNode_GetOutputDistancePtr m_UnsignedMeshNode_GetOutputDistance; + PLib3MFFunctionCallNode_GetInputFunctionIDPtr m_FunctionCallNode_GetInputFunctionID; + PLib3MFNodeIterator_GetCurrentPtr m_NodeIterator_GetCurrent; + PLib3MFFunction_GetDisplayNamePtr m_Function_GetDisplayName; + PLib3MFFunction_SetDisplayNamePtr m_Function_SetDisplayName; + PLib3MFFunction_AddInputPtr m_Function_AddInput; + PLib3MFFunction_GetInputsPtr m_Function_GetInputs; + PLib3MFFunction_RemoveInputPtr m_Function_RemoveInput; + PLib3MFFunction_AddOutputPtr m_Function_AddOutput; + PLib3MFFunction_GetOutputsPtr m_Function_GetOutputs; + PLib3MFFunction_RemoveOutputPtr m_Function_RemoveOutput; + PLib3MFFunction_FindInputPtr m_Function_FindInput; + PLib3MFFunction_FindOutputPtr m_Function_FindOutput; + PLib3MFImplicitFunction_GetIdentifierPtr m_ImplicitFunction_GetIdentifier; + PLib3MFImplicitFunction_SetIdentifierPtr m_ImplicitFunction_SetIdentifier; + PLib3MFImplicitFunction_AddNodePtr m_ImplicitFunction_AddNode; + PLib3MFImplicitFunction_AddSinNodePtr m_ImplicitFunction_AddSinNode; + PLib3MFImplicitFunction_AddCosNodePtr m_ImplicitFunction_AddCosNode; + PLib3MFImplicitFunction_AddTanNodePtr m_ImplicitFunction_AddTanNode; + PLib3MFImplicitFunction_AddArcSinNodePtr m_ImplicitFunction_AddArcSinNode; + PLib3MFImplicitFunction_AddArcCosNodePtr m_ImplicitFunction_AddArcCosNode; + PLib3MFImplicitFunction_AddArcTan2NodePtr m_ImplicitFunction_AddArcTan2Node; + PLib3MFImplicitFunction_AddSinhNodePtr m_ImplicitFunction_AddSinhNode; + PLib3MFImplicitFunction_AddCoshNodePtr m_ImplicitFunction_AddCoshNode; + PLib3MFImplicitFunction_AddTanhNodePtr m_ImplicitFunction_AddTanhNode; + PLib3MFImplicitFunction_AddRoundNodePtr m_ImplicitFunction_AddRoundNode; + PLib3MFImplicitFunction_AddCeilNodePtr m_ImplicitFunction_AddCeilNode; + PLib3MFImplicitFunction_AddFloorNodePtr m_ImplicitFunction_AddFloorNode; + PLib3MFImplicitFunction_AddSignNodePtr m_ImplicitFunction_AddSignNode; + PLib3MFImplicitFunction_AddFractNodePtr m_ImplicitFunction_AddFractNode; + PLib3MFImplicitFunction_AddAbsNodePtr m_ImplicitFunction_AddAbsNode; + PLib3MFImplicitFunction_AddExpNodePtr m_ImplicitFunction_AddExpNode; + PLib3MFImplicitFunction_AddLogNodePtr m_ImplicitFunction_AddLogNode; + PLib3MFImplicitFunction_AddLog2NodePtr m_ImplicitFunction_AddLog2Node; + PLib3MFImplicitFunction_AddLog10NodePtr m_ImplicitFunction_AddLog10Node; + PLib3MFImplicitFunction_AddLengthNodePtr m_ImplicitFunction_AddLengthNode; + PLib3MFImplicitFunction_AddTransposeNodePtr m_ImplicitFunction_AddTransposeNode; + PLib3MFImplicitFunction_InverseNodePtr m_ImplicitFunction_InverseNode; + PLib3MFImplicitFunction_AddSqrtNodePtr m_ImplicitFunction_AddSqrtNode; + PLib3MFImplicitFunction_AddResourceIdNodePtr m_ImplicitFunction_AddResourceIdNode; + PLib3MFImplicitFunction_AddAdditionNodePtr m_ImplicitFunction_AddAdditionNode; + PLib3MFImplicitFunction_AddSubtractionNodePtr m_ImplicitFunction_AddSubtractionNode; + PLib3MFImplicitFunction_AddMultiplicationNodePtr m_ImplicitFunction_AddMultiplicationNode; + PLib3MFImplicitFunction_AddDivisionNodePtr m_ImplicitFunction_AddDivisionNode; + PLib3MFImplicitFunction_AddDotNodePtr m_ImplicitFunction_AddDotNode; + PLib3MFImplicitFunction_AddCrossNodePtr m_ImplicitFunction_AddCrossNode; + PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr m_ImplicitFunction_AddMatVecMultiplicationNode; + PLib3MFImplicitFunction_AddMinNodePtr m_ImplicitFunction_AddMinNode; + PLib3MFImplicitFunction_AddMaxNodePtr m_ImplicitFunction_AddMaxNode; + PLib3MFImplicitFunction_AddFmodNodePtr m_ImplicitFunction_AddFmodNode; + PLib3MFImplicitFunction_AddPowNodePtr m_ImplicitFunction_AddPowNode; + PLib3MFImplicitFunction_AddSelectNodePtr m_ImplicitFunction_AddSelectNode; + PLib3MFImplicitFunction_AddClampNodePtr m_ImplicitFunction_AddClampNode; + PLib3MFImplicitFunction_AddComposeVectorNodePtr m_ImplicitFunction_AddComposeVectorNode; + PLib3MFImplicitFunction_AddVectorFromScalarNodePtr m_ImplicitFunction_AddVectorFromScalarNode; + PLib3MFImplicitFunction_AddDecomposeVectorNodePtr m_ImplicitFunction_AddDecomposeVectorNode; + PLib3MFImplicitFunction_AddComposeMatrixNodePtr m_ImplicitFunction_AddComposeMatrixNode; + PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr m_ImplicitFunction_AddMatrixFromRowsNode; + PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr m_ImplicitFunction_AddMatrixFromColumnsNode; + PLib3MFImplicitFunction_AddConstantNodePtr m_ImplicitFunction_AddConstantNode; + PLib3MFImplicitFunction_AddConstVecNodePtr m_ImplicitFunction_AddConstVecNode; + PLib3MFImplicitFunction_AddConstMatNodePtr m_ImplicitFunction_AddConstMatNode; + PLib3MFImplicitFunction_AddMeshNodePtr m_ImplicitFunction_AddMeshNode; + PLib3MFImplicitFunction_AddUnsignedMeshNodePtr m_ImplicitFunction_AddUnsignedMeshNode; + PLib3MFImplicitFunction_AddFunctionCallNodePtr m_ImplicitFunction_AddFunctionCallNode; + PLib3MFImplicitFunction_GetNodesPtr m_ImplicitFunction_GetNodes; + PLib3MFImplicitFunction_RemoveNodePtr m_ImplicitFunction_RemoveNode; + PLib3MFImplicitFunction_AddLinkPtr m_ImplicitFunction_AddLink; + PLib3MFImplicitFunction_AddLinkByNamesPtr m_ImplicitFunction_AddLinkByNames; + PLib3MFImplicitFunction_ClearPtr m_ImplicitFunction_Clear; + PLib3MFImplicitFunction_SortNodesTopologicallyPtr m_ImplicitFunction_SortNodesTopologically; + PLib3MFFunctionFromImage3D_GetImage3DPtr m_FunctionFromImage3D_GetImage3D; + PLib3MFFunctionFromImage3D_SetImage3DPtr m_FunctionFromImage3D_SetImage3D; + PLib3MFFunctionFromImage3D_SetFilterPtr m_FunctionFromImage3D_SetFilter; + PLib3MFFunctionFromImage3D_GetFilterPtr m_FunctionFromImage3D_GetFilter; + PLib3MFFunctionFromImage3D_SetTileStylesPtr m_FunctionFromImage3D_SetTileStyles; + PLib3MFFunctionFromImage3D_GetTileStylesPtr m_FunctionFromImage3D_GetTileStyles; + PLib3MFFunctionFromImage3D_GetOffsetPtr m_FunctionFromImage3D_GetOffset; + PLib3MFFunctionFromImage3D_SetOffsetPtr m_FunctionFromImage3D_SetOffset; + PLib3MFFunctionFromImage3D_GetScalePtr m_FunctionFromImage3D_GetScale; + PLib3MFFunctionFromImage3D_SetScalePtr m_FunctionFromImage3D_SetScale; PLib3MFBuildItem_GetObjectResourcePtr m_BuildItem_GetObjectResource; PLib3MFBuildItem_GetUUIDPtr m_BuildItem_GetUUID; PLib3MFBuildItem_SetUUIDPtr m_BuildItem_SetUUID; @@ -4018,6 +6974,7 @@ typedef struct { PLib3MFModel_GetComponentsObjectByIDPtr m_Model_GetComponentsObjectByID; PLib3MFModel_GetColorGroupByIDPtr m_Model_GetColorGroupByID; PLib3MFModel_GetSliceStackByIDPtr m_Model_GetSliceStackByID; + PLib3MFModel_GetLevelSetByIDPtr m_Model_GetLevelSetByID; PLib3MFModel_GetBuildUUIDPtr m_Model_GetBuildUUID; PLib3MFModel_SetBuildUUIDPtr m_Model_SetBuildUUID; PLib3MFModel_GetBuildItemsPtr m_Model_GetBuildItems; @@ -4033,7 +6990,9 @@ typedef struct { PLib3MFModel_GetCompositeMaterialsPtr m_Model_GetCompositeMaterials; PLib3MFModel_GetMultiPropertyGroupsPtr m_Model_GetMultiPropertyGroups; PLib3MFModel_GetSliceStacksPtr m_Model_GetSliceStacks; + PLib3MFModel_GetImage3DsPtr m_Model_GetImage3Ds; PLib3MFModel_MergeToModelPtr m_Model_MergeToModel; + PLib3MFModel_MergeFromModelPtr m_Model_MergeFromModel; PLib3MFModel_AddMeshObjectPtr m_Model_AddMeshObject; PLib3MFModel_AddComponentsObjectPtr m_Model_AddComponentsObject; PLib3MFModel_AddSliceStackPtr m_Model_AddSliceStack; @@ -4043,6 +7002,8 @@ typedef struct { PLib3MFModel_AddTexture2DGroupPtr m_Model_AddTexture2DGroup; PLib3MFModel_AddCompositeMaterialsPtr m_Model_AddCompositeMaterials; PLib3MFModel_AddMultiPropertyGroupPtr m_Model_AddMultiPropertyGroup; + PLib3MFModel_AddImageStackPtr m_Model_AddImageStack; + PLib3MFModel_GetImageStackByIDPtr m_Model_GetImageStackByID; PLib3MFModel_AddBuildItemPtr m_Model_AddBuildItem; PLib3MFModel_RemoveBuildItemPtr m_Model_RemoveBuildItem; PLib3MFModel_GetMetaDataGroupPtr m_Model_GetMetaDataGroup; @@ -4059,6 +7020,13 @@ typedef struct { PLib3MFModel_RemoveCustomContentTypePtr m_Model_RemoveCustomContentType; PLib3MFModel_SetRandomNumberCallbackPtr m_Model_SetRandomNumberCallback; PLib3MFModel_GetKeyStorePtr m_Model_GetKeyStore; + PLib3MFModel_GetFunctionsPtr m_Model_GetFunctions; + PLib3MFModel_AddImplicitFunctionPtr m_Model_AddImplicitFunction; + PLib3MFModel_AddFunctionFromImage3DPtr m_Model_AddFunctionFromImage3D; + PLib3MFModel_AddVolumeDataPtr m_Model_AddVolumeData; + PLib3MFModel_AddLevelSetPtr m_Model_AddLevelSet; + PLib3MFModel_GetLevelSetsPtr m_Model_GetLevelSets; + PLib3MFModel_RemoveResourcePtr m_Model_RemoveResource; PLib3MFGetLibraryVersionPtr m_GetLibraryVersion; PLib3MFGetPrereleaseInformationPtr m_GetPrereleaseInformation; PLib3MFGetBuildInformationPtr m_GetBuildInformation; diff --git a/Autogenerated/Bindings/CDynamic/lib3mf_types.h b/Autogenerated/Bindings/CDynamic/lib3mf_types.h index 6f2dcf6a4..696aec4eb 100644 --- a/Autogenerated/Bindings/CDynamic/lib3mf_types.h +++ b/Autogenerated/Bindings/CDynamic/lib3mf_types.h @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated plain C Header file with basic types in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -84,8 +84,8 @@ typedef void * Lib3MF_pvoid; **************************************************************************************************************************/ #define LIB3MF_VERSION_MAJOR 2 -#define LIB3MF_VERSION_MINOR 3 -#define LIB3MF_VERSION_MICRO 2 +#define LIB3MF_VERSION_MINOR 4 +#define LIB3MF_VERSION_MICRO 0 #define LIB3MF_VERSION_PRERELEASEINFO "" #define LIB3MF_VERSION_BUILDINFO "" @@ -130,13 +130,18 @@ typedef void * Lib3MF_pvoid; #define LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER 140 /** A progress identifier is unknown */ #define LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT 141 /** An element buffer exceeds its spec limit */ #define LIB3MF_ERROR_INVALIDRESOURCE 142 /** A resource is invalid */ +#define LIB3MF_ERROR_INVALIDLEVELSET 143 /** A level set is invalid */ #define LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE 2000 /** This object type is not valid for beamlattices */ #define LIB3MF_ERROR_INVALIDKEYSTORE 3000 /** The keystore object is invalid */ #define LIB3MF_ERROR_INVALIDKEYSTORECONSUMER 3001 /** The consumer keystore object is invalid */ #define LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND 3002 /** A consumer has not been found */ #define LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND 3003 /** A resource data has not been found */ #define LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED 3004 /** A Key or Conentent encryption callback has not been registered */ -#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key siue is invalid */ +#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key size is invalid */ +#define LIB3MF_ERROR_INCOMPATIBLEPORTTYPES 4000 /** Link could not be added, the port types are incompatible */ +#define LIB3MF_ERROR_GRAPHISCYCLIC 4001 /** The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted. */ +#define LIB3MF_ERROR_INPUTNOTSET 4002 /** The input of a node is not set. */ +#define LIB3MF_ERROR_INVALIDNODECONFIGURATION 4003 /** The selected node configuration is not supported */ /************************************************************************************************************************* Error strings for Lib3MF @@ -181,13 +186,18 @@ inline const char * LIB3MF_GETERRORSTRING (Lib3MFResult nErrorCode) { case LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: return "A progress identifier is unknown"; case LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: return "An element buffer exceeds its spec limit"; case LIB3MF_ERROR_INVALIDRESOURCE: return "A resource is invalid"; + case LIB3MF_ERROR_INVALIDLEVELSET: return "A level set is invalid"; case LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: return "This object type is not valid for beamlattices"; case LIB3MF_ERROR_INVALIDKEYSTORE: return "The keystore object is invalid"; case LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: return "The consumer keystore object is invalid"; case LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND: return "A consumer has not been found"; case LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: return "A resource data has not been found"; case LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: return "A Key or Conentent encryption callback has not been registered"; - case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key siue is invalid"; + case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key size is invalid"; + case LIB3MF_ERROR_INCOMPATIBLEPORTTYPES: return "Link could not be added, the port types are incompatible"; + case LIB3MF_ERROR_GRAPHISCYCLIC: return "The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted."; + case LIB3MF_ERROR_INPUTNOTSET: return "The input of a node is not set."; + case LIB3MF_ERROR_INVALIDNODECONFIGURATION: return "The selected node configuration is not supported"; default: return "unknown error"; } } @@ -212,11 +222,21 @@ typedef Lib3MFHandle Lib3MF_ColorGroupIterator; typedef Lib3MFHandle Lib3MF_Texture2DGroupIterator; typedef Lib3MFHandle Lib3MF_CompositeMaterialsIterator; typedef Lib3MFHandle Lib3MF_MultiPropertyGroupIterator; +typedef Lib3MFHandle Lib3MF_Image3DIterator; +typedef Lib3MFHandle Lib3MF_FunctionIterator; +typedef Lib3MFHandle Lib3MF_LevelSetIterator; typedef Lib3MFHandle Lib3MF_MetaData; typedef Lib3MFHandle Lib3MF_MetaDataGroup; typedef Lib3MFHandle Lib3MF_Object; typedef Lib3MFHandle Lib3MF_MeshObject; +typedef Lib3MFHandle Lib3MF_LevelSet; typedef Lib3MFHandle Lib3MF_BeamLattice; +typedef Lib3MFHandle Lib3MF_FunctionReference; +typedef Lib3MFHandle Lib3MF_VolumeDataColor; +typedef Lib3MFHandle Lib3MF_MaterialMapping; +typedef Lib3MFHandle Lib3MF_VolumeDataComposite; +typedef Lib3MFHandle Lib3MF_VolumeDataProperty; +typedef Lib3MFHandle Lib3MF_VolumeData; typedef Lib3MFHandle Lib3MF_Component; typedef Lib3MFHandle Lib3MF_ComponentsObject; typedef Lib3MFHandle Lib3MF_BeamSet; @@ -225,8 +245,71 @@ typedef Lib3MFHandle Lib3MF_ColorGroup; typedef Lib3MFHandle Lib3MF_Texture2DGroup; typedef Lib3MFHandle Lib3MF_CompositeMaterials; typedef Lib3MFHandle Lib3MF_MultiPropertyGroup; +typedef Lib3MFHandle Lib3MF_Image3D; +typedef Lib3MFHandle Lib3MF_ImageStack; typedef Lib3MFHandle Lib3MF_Attachment; typedef Lib3MFHandle Lib3MF_Texture2D; +typedef Lib3MFHandle Lib3MF_ImplicitPort; +typedef Lib3MFHandle Lib3MF_Iterator; +typedef Lib3MFHandle Lib3MF_ImplicitPortIterator; +typedef Lib3MFHandle Lib3MF_ImplicitNode; +typedef Lib3MFHandle Lib3MF_OneInputNode; +typedef Lib3MFHandle Lib3MF_SinNode; +typedef Lib3MFHandle Lib3MF_CosNode; +typedef Lib3MFHandle Lib3MF_TanNode; +typedef Lib3MFHandle Lib3MF_ArcSinNode; +typedef Lib3MFHandle Lib3MF_ArcCosNode; +typedef Lib3MFHandle Lib3MF_ArcTanNode; +typedef Lib3MFHandle Lib3MF_SinhNode; +typedef Lib3MFHandle Lib3MF_CoshNode; +typedef Lib3MFHandle Lib3MF_TanhNode; +typedef Lib3MFHandle Lib3MF_RoundNode; +typedef Lib3MFHandle Lib3MF_CeilNode; +typedef Lib3MFHandle Lib3MF_FloorNode; +typedef Lib3MFHandle Lib3MF_SignNode; +typedef Lib3MFHandle Lib3MF_FractNode; +typedef Lib3MFHandle Lib3MF_AbsNode; +typedef Lib3MFHandle Lib3MF_ExpNode; +typedef Lib3MFHandle Lib3MF_LogNode; +typedef Lib3MFHandle Lib3MF_Log2Node; +typedef Lib3MFHandle Lib3MF_Log10Node; +typedef Lib3MFHandle Lib3MF_LengthNode; +typedef Lib3MFHandle Lib3MF_TransposeNode; +typedef Lib3MFHandle Lib3MF_InverseNode; +typedef Lib3MFHandle Lib3MF_SqrtNode; +typedef Lib3MFHandle Lib3MF_ResourceIdNode; +typedef Lib3MFHandle Lib3MF_TwoInputNode; +typedef Lib3MFHandle Lib3MF_AdditionNode; +typedef Lib3MFHandle Lib3MF_SubtractionNode; +typedef Lib3MFHandle Lib3MF_MultiplicationNode; +typedef Lib3MFHandle Lib3MF_DivisionNode; +typedef Lib3MFHandle Lib3MF_DotNode; +typedef Lib3MFHandle Lib3MF_CrossNode; +typedef Lib3MFHandle Lib3MF_ArcTan2Node; +typedef Lib3MFHandle Lib3MF_MatVecMultiplicationNode; +typedef Lib3MFHandle Lib3MF_MinNode; +typedef Lib3MFHandle Lib3MF_MaxNode; +typedef Lib3MFHandle Lib3MF_FmodNode; +typedef Lib3MFHandle Lib3MF_ModNode; +typedef Lib3MFHandle Lib3MF_PowNode; +typedef Lib3MFHandle Lib3MF_SelectNode; +typedef Lib3MFHandle Lib3MF_ClampNode; +typedef Lib3MFHandle Lib3MF_ComposeVectorNode; +typedef Lib3MFHandle Lib3MF_VectorFromScalarNode; +typedef Lib3MFHandle Lib3MF_DecomposeVectorNode; +typedef Lib3MFHandle Lib3MF_ComposeMatrixNode; +typedef Lib3MFHandle Lib3MF_MatrixFromRowsNode; +typedef Lib3MFHandle Lib3MF_MatrixFromColumnsNode; +typedef Lib3MFHandle Lib3MF_ConstantNode; +typedef Lib3MFHandle Lib3MF_ConstVecNode; +typedef Lib3MFHandle Lib3MF_ConstMatNode; +typedef Lib3MFHandle Lib3MF_MeshNode; +typedef Lib3MFHandle Lib3MF_UnsignedMeshNode; +typedef Lib3MFHandle Lib3MF_FunctionCallNode; +typedef Lib3MFHandle Lib3MF_NodeIterator; +typedef Lib3MFHandle Lib3MF_Function; +typedef Lib3MFHandle Lib3MF_ImplicitFunction; +typedef Lib3MFHandle Lib3MF_FunctionFromImage3D; typedef Lib3MFHandle Lib3MF_BuildItem; typedef Lib3MFHandle Lib3MF_BuildItemIterator; typedef Lib3MFHandle Lib3MF_Slice; @@ -305,7 +388,7 @@ typedef enum eLib3MFBeamLatticeClipMode { } eLib3MFBeamLatticeClipMode; typedef enum eLib3MFBeamLatticeBallMode { - eBeamLatticeBallModeNone = 0, + eBeamLatticeBallModeBeamLatticeBallModeNone = 0, eBeamLatticeBallModeMixed = 1, eBeamLatticeBallModeAll = 2 } eLib3MFBeamLatticeBallMode; @@ -343,6 +426,103 @@ typedef enum eLib3MFBlendMethod { eBlendMethodMultiply = 2 } eLib3MFBlendMethod; +typedef enum eLib3MFChannelName { + eChannelNameRed = 0, + eChannelNameGreen = 1, + eChannelNameBlue = 2, + eChannelNameAlpha = 3 +} eLib3MFChannelName; + +typedef enum eLib3MFCompositionMethod { + eCompositionMethodWeightedSum = 0, + eCompositionMethodMultiply = 1, + eCompositionMethodMin = 2, + eCompositionMethodMax = 3, + eCompositionMethodMask = 4 +} eLib3MFCompositionMethod; + +typedef enum eLib3MFCompositionSpace { + eCompositionSpaceRaw = 0, + eCompositionSpaceLinearColor = 1 +} eLib3MFCompositionSpace; + +/** +* enum eLib3MFImplicitNodeType - The type of the node +*/ +typedef enum eLib3MFImplicitNodeType { + eImplicitNodeTypeAddition = 1, /** Adds to values (scalar or vector) */ + eImplicitNodeTypeSubtraction = 2, /** Subtracts two values (scalar or vector) */ + eImplicitNodeTypeMultiplication = 3, /** Multiplies two values (scalar or vector) */ + eImplicitNodeTypeDivision = 4, /** Divides two values (scalar or vector) */ + eImplicitNodeTypeConstant = 5, /** A constant scalar value */ + eImplicitNodeTypeConstVec = 6, /** A constant vector value */ + eImplicitNodeTypeConstMat = 7, /** A constant matrix value */ + eImplicitNodeTypeComposeVector = 8, /** Creates a vector from three scalar values */ + eImplicitNodeTypeDecomposeVector = 9, /** Decomposes a vector into three scalar values */ + eImplicitNodeTypeComposeMatrix = 10, /** Creates a matrix from nine scalar values */ + eImplicitNodeTypeMatrixFromColumns = 11, /** Creates a matrix from three column vector values */ + eImplicitNodeTypeMatrixFromRows = 12, /** Creates a matrix from three row vector values */ + eImplicitNodeTypeDot = 13, /** Calculates the dot product of two vector values */ + eImplicitNodeTypeCross = 14, /** Calculates the cross product of two vector values */ + eImplicitNodeTypeMatVecMultiplication = 15, /** Multiplies a matrix with a vector */ + eImplicitNodeTypeTranspose = 16, /** Transposes a matrix */ + eImplicitNodeTypeInverse = 17, /** Computes the inverse of a matrix */ + eImplicitNodeTypeSinus = 18, /** Calculates the sinus */ + eImplicitNodeTypeCosinus = 19, /** Calculates the cosinus */ + eImplicitNodeTypeTan = 20, /** Calculates the tangent */ + eImplicitNodeTypeArcSin = 21, /** Calculates the arcsinus */ + eImplicitNodeTypeArcCos = 22, /** Calculates the arccosinus */ + eImplicitNodeTypeArcTan = 23, /** Calculates the arctangent */ + eImplicitNodeTypeArcTan2 = 24, /** Calculates the arctangent */ + eImplicitNodeTypeMin = 25, /** Calculates the minimum tow values */ + eImplicitNodeTypeMax = 26, /** Calculates the maximum of two values */ + eImplicitNodeTypeAbs = 27, /** Calcul the absolute value */ + eImplicitNodeTypeFmod = 28, /** Computes the remainder of the divison of the inputs (same behavior as C fmod) */ + eImplicitNodeTypePow = 29, /** Calculates the power A^B */ + eImplicitNodeTypeSqrt = 30, /** Calculates the square root */ + eImplicitNodeTypeExp = 31, /** Exponential function */ + eImplicitNodeTypeLog = 32, /** Natural logarithmus */ + eImplicitNodeTypeLog2 = 33, /** Logarithmus to the base 2 */ + eImplicitNodeTypeLog10 = 34, /** Logarithmus to the base 10 */ + eImplicitNodeTypeSelect = 35, /** If A is less B returns C, else D */ + eImplicitNodeTypeClamp = 36, /** Clamps the input value to min and max */ + eImplicitNodeTypeSinh = 37, /** Calculates the hyperbolic sine */ + eImplicitNodeTypeCosh = 38, /** Calculates the hyperbolic cosine */ + eImplicitNodeTypeTanh = 39, /** Calculates the hyperbolic tangent */ + eImplicitNodeTypeRound = 40, /** Rounds a scalar value to the nearest integer */ + eImplicitNodeTypeCeil = 41, /** Rounds a scalar value up to the nearest integer */ + eImplicitNodeTypeFloor = 42, /** Rounds a scalar value down to the nearest integer */ + eImplicitNodeTypeSign = 43, /** Returns the sign */ + eImplicitNodeTypeFract = 44, /** Returns the fractional part */ + eImplicitNodeTypeFunctionCall = 45, /** Calls a function */ + eImplicitNodeTypeMesh = 46, /** Calculates the signed distance to a mesh */ + eImplicitNodeTypeLength = 47, /** Calculates the length of a vector */ + eImplicitNodeTypeConstResourceID = 48, /** Selects a resource (function, mesh etc.) */ + eImplicitNodeTypeVectorFromScalar = 49, /** Creates a vector from one scalar values */ + eImplicitNodeTypeUnsignedMesh = 50, /** Calculates the unsigned distance to a mesh */ + eImplicitNodeTypeMod = 51 /** Calculates the modulo of two values (same behaviour as glsl mod) */ +} eLib3MFImplicitNodeType; + +/** +* enum eLib3MFImplicitPortType - The type of the port +*/ +typedef enum eLib3MFImplicitPortType { + eImplicitPortTypeScalar = 1, /** Scalar */ + eImplicitPortTypeVector = 2, /** Vector */ + eImplicitPortTypeMatrix = 3, /** 4x4 Matrix */ + eImplicitPortTypeResourceID = 4 /** Resource ID */ +} eLib3MFImplicitPortType; + +/** +* enum eLib3MFImplicitNodeConfiguration - Defines the input and output types of a node +*/ +typedef enum eLib3MFImplicitNodeConfiguration { + eImplicitNodeConfigurationDefault = 1, /** Default */ + eImplicitNodeConfigurationScalarToScalar = 2, /** Scalar -> Scalar */ + eImplicitNodeConfigurationVectorToVector = 3, /** Vector -> Vector */ + eImplicitNodeConfigurationMatrixToMatrix = 4 /** Matrix -> Matrix */ +} eLib3MFImplicitNodeConfiguration; + typedef enum eLib3MFEncryptionAlgorithm { eEncryptionAlgorithmAES256_GCM = 1 /** http://www.w3.org/2009/xmlenc11#aes256-gcm */ } eLib3MFEncryptionAlgorithm; @@ -433,6 +613,36 @@ typedef union { int m_code; } structEnumLib3MFBlendMethod; +typedef union { + eLib3MFChannelName m_enum; + int m_code; +} structEnumLib3MFChannelName; + +typedef union { + eLib3MFCompositionMethod m_enum; + int m_code; +} structEnumLib3MFCompositionMethod; + +typedef union { + eLib3MFCompositionSpace m_enum; + int m_code; +} structEnumLib3MFCompositionSpace; + +typedef union { + eLib3MFImplicitNodeType m_enum; + int m_code; +} structEnumLib3MFImplicitNodeType; + +typedef union { + eLib3MFImplicitPortType m_enum; + int m_code; +} structEnumLib3MFImplicitPortType; + +typedef union { + eLib3MFImplicitNodeConfiguration m_enum; + int m_code; +} structEnumLib3MFImplicitNodeConfiguration; + typedef union { eLib3MFEncryptionAlgorithm m_enum; int m_code; @@ -523,6 +733,14 @@ typedef struct sLib3MFBall { Lib3MF_double m_Radius; } sLib3MFBall; +typedef struct sLib3MFVector { + Lib3MF_double m_Coordinates[3]; +} sLib3MFVector; + +typedef struct sLib3MFMatrix4x4 { + Lib3MF_double m_Field[4][4]; +} sLib3MFMatrix4x4; + #pragma pack () /************************************************************************************************************************* diff --git a/Autogenerated/Bindings/CSharp/Lib3MF.cs b/Autogenerated/Bindings/CSharp/Lib3MF.cs index 9caaa404a..7292de8bf 100644 --- a/Autogenerated/Bindings/CSharp/Lib3MF.cs +++ b/Autogenerated/Bindings/CSharp/Lib3MF.cs @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated CSharp file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -101,7 +101,7 @@ public enum eBeamLatticeClipMode { }; public enum eBeamLatticeBallMode { - None = 0, + BeamLatticeBallModeNone = 0, Mixed = 1, All = 2 }; @@ -139,6 +139,94 @@ public enum eBlendMethod { Multiply = 2 }; + public enum eChannelName { + Red = 0, + Green = 1, + Blue = 2, + Alpha = 3 + }; + + public enum eCompositionMethod { + WeightedSum = 0, + Multiply = 1, + Min = 2, + Max = 3, + Mask = 4 + }; + + public enum eCompositionSpace { + Raw = 0, + LinearColor = 1 + }; + + public enum eImplicitNodeType { + Addition = 1, + Subtraction = 2, + Multiplication = 3, + Division = 4, + Constant = 5, + ConstVec = 6, + ConstMat = 7, + ComposeVector = 8, + DecomposeVector = 9, + ComposeMatrix = 10, + MatrixFromColumns = 11, + MatrixFromRows = 12, + Dot = 13, + Cross = 14, + MatVecMultiplication = 15, + Transpose = 16, + Inverse = 17, + Sinus = 18, + Cosinus = 19, + Tan = 20, + ArcSin = 21, + ArcCos = 22, + ArcTan = 23, + ArcTan2 = 24, + Min = 25, + Max = 26, + Abs = 27, + Fmod = 28, + Pow = 29, + Sqrt = 30, + Exp = 31, + Log = 32, + Log2 = 33, + Log10 = 34, + Select = 35, + Clamp = 36, + Sinh = 37, + Cosh = 38, + Tanh = 39, + Round = 40, + Ceil = 41, + Floor = 42, + Sign = 43, + Fract = 44, + FunctionCall = 45, + Mesh = 46, + Length = 47, + ConstResourceID = 48, + VectorFromScalar = 49, + UnsignedMesh = 50, + Mod = 51 + }; + + public enum eImplicitPortType { + Scalar = 1, + Vector = 2, + Matrix = 3, + ResourceID = 4 + }; + + public enum eImplicitNodeConfiguration { + Default = 1, + ScalarToScalar = 2, + VectorToVector = 3, + MatrixToMatrix = 4 + }; + public enum eEncryptionAlgorithm { AES256_GCM = 1 }; @@ -236,6 +324,16 @@ public struct sBall public Double Radius; } + public struct sVector + { + public Double[] Coordinates; + } + + public struct sMatrix4x4 + { + public Double[][] Field; + } + namespace Internal { @@ -322,6 +420,18 @@ public unsafe struct InternalBall [FieldOffset(4)] public Double Radius; } + [StructLayout(LayoutKind.Explicit, Size=24)] + public unsafe struct InternalVector + { + [FieldOffset(0)] public fixed Double Coordinates[3]; + } + + [StructLayout(LayoutKind.Explicit, Size=128)] + public unsafe struct InternalMatrix4x4 + { + [FieldOffset(0)] public fixed Double Field[16]; + } + public class Lib3MFWrapper { @@ -469,6 +579,15 @@ public class Lib3MFWrapper [DllImport("lib3mf.dll", EntryPoint = "lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup (IntPtr Handle, out IntPtr AResource); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_image3diterator_getcurrentimage3d", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Image3DIterator_GetCurrentImage3D (IntPtr Handle, out IntPtr AResource); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functioniterator_getcurrentfunction", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionIterator_GetCurrentFunction (IntPtr Handle, out IntPtr AResource); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelsetiterator_getcurrentlevelset", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSetIterator_GetCurrentLevelSet (IntPtr Handle, out IntPtr AResource); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_metadata_getnamespace", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 MetaData_GetNameSpace (IntPtr Handle, UInt32 sizeNameSpace, out UInt32 neededNameSpace, IntPtr dataNameSpace); @@ -544,6 +663,9 @@ public class Lib3MFWrapper [DllImport("lib3mf.dll", EntryPoint = "lib3mf_object_iscomponentsobject", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 Object_IsComponentsObject (IntPtr Handle, out Byte AIsComponentsObject); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_object_islevelsetobject", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Object_IsLevelSetObject (IntPtr Handle, out Byte AIsLevelSetObject); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_object_isvalid", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 Object_IsValid (IntPtr Handle, out Byte AIsValid); @@ -646,6 +768,60 @@ public class Lib3MFWrapper [DllImport("lib3mf.dll", EntryPoint = "lib3mf_meshobject_beamlattice", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 MeshObject_BeamLattice (IntPtr Handle, out IntPtr ATheBeamLattice); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_meshobject_getvolumedata", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MeshObject_GetVolumeData (IntPtr Handle, out IntPtr ATheVolumeData); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_meshobject_setvolumedata", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MeshObject_SetVolumeData (IntPtr Handle, IntPtr ATheVolumeData); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_getfunction", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_GetFunction (IntPtr Handle, out IntPtr ATheFunction); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_setfunction", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_SetFunction (IntPtr Handle, IntPtr ATheFunction); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_gettransform", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_GetTransform (IntPtr Handle, out InternalTransform ATransform); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_settransform", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_SetTransform (IntPtr Handle, InternalTransform ATransform); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_getchannelname", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_GetChannelName (IntPtr Handle, UInt32 sizeChannelName, out UInt32 neededChannelName, IntPtr dataChannelName); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_setchannelname", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_SetChannelName (IntPtr Handle, byte[] AChannelName); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_setminfeaturesize", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_SetMinFeatureSize (IntPtr Handle, Double AMinFeatureSize); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_getminfeaturesize", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_GetMinFeatureSize (IntPtr Handle, out Double AMinFeatureSize); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_setfallbackvalue", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_SetFallBackValue (IntPtr Handle, Double AFallBackValue); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_getfallbackvalue", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_GetFallBackValue (IntPtr Handle, out Double AFallBackValue); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_setmeshbboxonly", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_SetMeshBBoxOnly (IntPtr Handle, Byte AMeshBBoxOnly); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_getmeshbboxonly", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_GetMeshBBoxOnly (IntPtr Handle, out Byte AMeshBBoxOnly); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_setmesh", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_SetMesh (IntPtr Handle, IntPtr ATheMesh); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_getmesh", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_GetMesh (IntPtr Handle, out IntPtr ATheMesh); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_getvolumedata", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_GetVolumeData (IntPtr Handle, out IntPtr ATheVolumeData); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_levelset_setvolumedata", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 LevelSet_SetVolumeData (IntPtr Handle, IntPtr ATheVolumeData); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_beamlattice_getminlength", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 BeamLattice_GetMinLength (IntPtr Handle, out Double AMinLength); @@ -715,6 +891,93 @@ public class Lib3MFWrapper [DllImport("lib3mf.dll", EntryPoint = "lib3mf_beamlattice_getbeamset", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 BeamLattice_GetBeamSet (IntPtr Handle, UInt32 AIndex, out IntPtr ABeamSet); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionreference_getfunctionresourceid", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionReference_GetFunctionResourceID (IntPtr Handle, out UInt32 AUniqueResourceID); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionreference_setfunctionresourceid", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionReference_SetFunctionResourceID (IntPtr Handle, UInt32 AUniqueResourceID); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionreference_gettransform", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionReference_GetTransform (IntPtr Handle, out InternalTransform ATransform); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionreference_settransform", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionReference_SetTransform (IntPtr Handle, InternalTransform ATransform); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionreference_getchannelname", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionReference_GetChannelName (IntPtr Handle, UInt32 sizeChannelName, out UInt32 neededChannelName, IntPtr dataChannelName); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionreference_setchannelname", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionReference_SetChannelName (IntPtr Handle, byte[] AChannelName); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionreference_setminfeaturesize", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionReference_SetMinFeatureSize (IntPtr Handle, Double AMinFeatureSize); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionreference_getminfeaturesize", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionReference_GetMinFeatureSize (IntPtr Handle, out Double AMinFeatureSize); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionreference_setfallbackvalue", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionReference_SetFallBackValue (IntPtr Handle, Double AFallBackValue); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionreference_getfallbackvalue", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionReference_GetFallBackValue (IntPtr Handle, out Double AFallBackValue); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedatacomposite_getbasematerialgroup", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeDataComposite_GetBaseMaterialGroup (IntPtr Handle, out IntPtr ABaseMaterialGroupInstance); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedatacomposite_setbasematerialgroup", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeDataComposite_SetBaseMaterialGroup (IntPtr Handle, IntPtr ABaseMaterialGroupInstance); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedatacomposite_getmaterialmappingcount", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeDataComposite_GetMaterialMappingCount (IntPtr Handle, out UInt32 ACount); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedatacomposite_getmaterialmapping", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeDataComposite_GetMaterialMapping (IntPtr Handle, UInt32 AIndex, out IntPtr ATheMaterialMapping); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedatacomposite_addmaterialmapping", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeDataComposite_AddMaterialMapping (IntPtr Handle, InternalTransform ATransform, out IntPtr ATheMaterialMapping); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedatacomposite_removematerialmapping", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeDataComposite_RemoveMaterialMapping (IntPtr Handle, UInt32 AIndex); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedataproperty_getname", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeDataProperty_GetName (IntPtr Handle, UInt32 sizePropertyName, out UInt32 neededPropertyName, IntPtr dataPropertyName); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedataproperty_setisrequired", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeDataProperty_SetIsRequired (IntPtr Handle, Byte AIsRequired); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedataproperty_isrequired", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeDataProperty_IsRequired (IntPtr Handle, out Byte AIsRequired); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedata_getcomposite", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeData_GetComposite (IntPtr Handle, out IntPtr ATheCompositeData); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedata_createnewcomposite", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeData_CreateNewComposite (IntPtr Handle, out IntPtr ATheCompositeData); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedata_removecomposite", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeData_RemoveComposite (IntPtr Handle); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedata_getcolor", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeData_GetColor (IntPtr Handle, out IntPtr ATheColorData); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedata_createnewcolor", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeData_CreateNewColor (IntPtr Handle, IntPtr ATheFunction, out IntPtr ATheColorData); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedata_removecolor", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeData_RemoveColor (IntPtr Handle); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedata_getpropertycount", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeData_GetPropertyCount (IntPtr Handle, out UInt32 ACount); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedata_getproperty", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeData_GetProperty (IntPtr Handle, UInt32 AIndex, out IntPtr ATheVolumeDataProperty); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedata_addpropertyfromfunction", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeData_AddPropertyFromFunction (IntPtr Handle, byte[] AName, IntPtr ATheFunction, out IntPtr ATheVolumeDataProperty); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_volumedata_removeproperty", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 VolumeData_RemoveProperty (IntPtr Handle, UInt32 AIndex); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_component_getobjectresource", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 Component_GetObjectResource (IntPtr Handle, out IntPtr AObjectResource); @@ -883,6 +1146,45 @@ public class Lib3MFWrapper [DllImport("lib3mf.dll", EntryPoint = "lib3mf_multipropertygroup_removelayer", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 MultiPropertyGroup_RemoveLayer (IntPtr Handle, UInt32 ALayerIndex); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_image3d_getname", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Image3D_GetName (IntPtr Handle, UInt32 sizeName, out UInt32 neededName, IntPtr dataName); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_image3d_setname", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Image3D_SetName (IntPtr Handle, byte[] AName); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_image3d_isimagestack", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Image3D_IsImageStack (IntPtr Handle, out Byte AIsImageStack); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_imagestack_getrowcount", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImageStack_GetRowCount (IntPtr Handle, out UInt32 ARowCount); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_imagestack_setrowcount", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImageStack_SetRowCount (IntPtr Handle, UInt32 ARowCount); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_imagestack_getcolumncount", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImageStack_GetColumnCount (IntPtr Handle, out UInt32 AColumnCount); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_imagestack_setcolumncount", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImageStack_SetColumnCount (IntPtr Handle, UInt32 AColumnCount); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_imagestack_getsheetcount", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImageStack_GetSheetCount (IntPtr Handle, out UInt32 ASheetCount); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_imagestack_getsheet", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImageStack_GetSheet (IntPtr Handle, UInt32 AIndex, out IntPtr ASheet); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_imagestack_setsheet", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImageStack_SetSheet (IntPtr Handle, UInt32 AIndex, IntPtr ASheet); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_imagestack_createemptysheet", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImageStack_CreateEmptySheet (IntPtr Handle, UInt32 AIndex, byte[] APath, out IntPtr ASheet); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_imagestack_createsheetfrombuffer", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImageStack_CreateSheetFromBuffer (IntPtr Handle, UInt32 AIndex, byte[] APath, UInt64 sizeData, IntPtr dataData, out IntPtr ASheet); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_imagestack_createsheetfromfile", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImageStack_CreateSheetFromFile (IntPtr Handle, UInt32 AIndex, byte[] APath, byte[] AFileName, out IntPtr ASheet); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_attachment_getpath", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 Attachment_GetPath (IntPtr Handle, UInt32 sizePath, out UInt32 neededPath, IntPtr dataPath); @@ -940,6 +1242,507 @@ public class Lib3MFWrapper [DllImport("lib3mf.dll", EntryPoint = "lib3mf_texture2d_setfilter", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 Texture2D_SetFilter (IntPtr Handle, Int32 AFilter); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitport_getidentifier", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitPort_GetIdentifier (IntPtr Handle, UInt32 sizeIdentifier, out UInt32 neededIdentifier, IntPtr dataIdentifier); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitport_setidentifier", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitPort_SetIdentifier (IntPtr Handle, byte[] AIdentifier); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitport_getdisplayname", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitPort_GetDisplayName (IntPtr Handle, UInt32 sizeDisplayName, out UInt32 neededDisplayName, IntPtr dataDisplayName); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitport_setdisplayname", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitPort_SetDisplayName (IntPtr Handle, byte[] ADisplayName); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitport_settype", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitPort_SetType (IntPtr Handle, Int32 AImplicitPortType); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitport_gettype", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitPort_GetType (IntPtr Handle, out Int32 AImplicitPortType); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitport_getreference", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitPort_GetReference (IntPtr Handle, UInt32 sizeReference, out UInt32 neededReference, IntPtr dataReference); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitport_setreference", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitPort_SetReference (IntPtr Handle, byte[] AReference); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_iterator_movenext", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Iterator_MoveNext (IntPtr Handle, out Byte AHasNext); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_iterator_moveprevious", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Iterator_MovePrevious (IntPtr Handle, out Byte AHasPrevious); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_iterator_count", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Iterator_Count (IntPtr Handle, out UInt64 ACount); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitportiterator_getcurrent", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitPortIterator_GetCurrent (IntPtr Handle, out IntPtr APort); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_getidentifier", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_GetIdentifier (IntPtr Handle, UInt32 sizeIdentifier, out UInt32 neededIdentifier, IntPtr dataIdentifier); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_setidentifier", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_SetIdentifier (IntPtr Handle, byte[] AIdentifier); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_getdisplayname", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_GetDisplayName (IntPtr Handle, UInt32 sizeDisplayName, out UInt32 neededDisplayName, IntPtr dataDisplayName); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_setdisplayname", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_SetDisplayName (IntPtr Handle, byte[] ADisplayName); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_gettag", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_GetTag (IntPtr Handle, UInt32 sizeTag, out UInt32 neededTag, IntPtr dataTag); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_settag", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_SetTag (IntPtr Handle, byte[] ATag); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_getnodetype", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_GetNodeType (IntPtr Handle, out Int32 AType); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_addinput", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_AddInput (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, out IntPtr APort); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_getinputs", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_GetInputs (IntPtr Handle, out IntPtr AIterator); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_addoutput", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_AddOutput (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, out IntPtr APort); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_getoutputs", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_GetOutputs (IntPtr Handle, out IntPtr AIterator); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_findinput", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_FindInput (IntPtr Handle, byte[] AIdentifier, out IntPtr AInput); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_findoutput", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_FindOutput (IntPtr Handle, byte[] AIdentifier, out IntPtr AOutput); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitnode_aretypesvalid", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitNode_AreTypesValid (IntPtr Handle, out Byte AValid); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_oneinputnode_getinputa", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 OneInputNode_GetInputA (IntPtr Handle, out IntPtr AInput); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_oneinputnode_getoutputresult", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 OneInputNode_GetOutputResult (IntPtr Handle, out IntPtr AResult); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_resourceidnode_setresource", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ResourceIdNode_SetResource (IntPtr Handle, IntPtr AResource); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_resourceidnode_getresource", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ResourceIdNode_GetResource (IntPtr Handle, out IntPtr AResource); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_resourceidnode_getoutputvalue", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ResourceIdNode_GetOutputValue (IntPtr Handle, out IntPtr AValue); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_twoinputnode_getinputb", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 TwoInputNode_GetInputB (IntPtr Handle, out IntPtr AB); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_selectnode_getinputb", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 SelectNode_GetInputB (IntPtr Handle, out IntPtr AB); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_selectnode_getinputc", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 SelectNode_GetInputC (IntPtr Handle, out IntPtr AC); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_selectnode_getinputd", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 SelectNode_GetInputD (IntPtr Handle, out IntPtr AD); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_clampnode_getinputmin", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ClampNode_GetInputMin (IntPtr Handle, out IntPtr AMin); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_clampnode_getinputmax", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ClampNode_GetInputMax (IntPtr Handle, out IntPtr AMax); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composevectornode_getinputx", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeVectorNode_GetInputX (IntPtr Handle, out IntPtr AX); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composevectornode_getinputy", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeVectorNode_GetInputY (IntPtr Handle, out IntPtr AY); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composevectornode_getinputz", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeVectorNode_GetInputZ (IntPtr Handle, out IntPtr AZ); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composevectornode_getoutputresult", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeVectorNode_GetOutputResult (IntPtr Handle, out IntPtr AResult); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_decomposevectornode_getinputa", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 DecomposeVectorNode_GetInputA (IntPtr Handle, out IntPtr AA); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_decomposevectornode_getoutputx", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 DecomposeVectorNode_GetOutputX (IntPtr Handle, out IntPtr AX); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_decomposevectornode_getoutputy", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 DecomposeVectorNode_GetOutputY (IntPtr Handle, out IntPtr AY); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_decomposevectornode_getoutputz", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 DecomposeVectorNode_GetOutputZ (IntPtr Handle, out IntPtr AZ); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm00", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM00 (IntPtr Handle, out IntPtr AM00); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm01", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM01 (IntPtr Handle, out IntPtr AM01); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm02", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM02 (IntPtr Handle, out IntPtr AM02); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm03", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM03 (IntPtr Handle, out IntPtr AM03); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm10", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM10 (IntPtr Handle, out IntPtr AM10); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm11", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM11 (IntPtr Handle, out IntPtr AM11); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm12", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM12 (IntPtr Handle, out IntPtr AM12); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm13", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM13 (IntPtr Handle, out IntPtr AM13); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm20", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM20 (IntPtr Handle, out IntPtr AM20); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm21", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM21 (IntPtr Handle, out IntPtr AM21); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm22", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM22 (IntPtr Handle, out IntPtr AM22); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm23", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM23 (IntPtr Handle, out IntPtr AM23); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm30", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM30 (IntPtr Handle, out IntPtr AM30); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm31", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM31 (IntPtr Handle, out IntPtr AM31); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm32", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM32 (IntPtr Handle, out IntPtr AM32); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getinputm33", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetInputM33 (IntPtr Handle, out IntPtr AM33); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_composematrixnode_getoutputresult", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ComposeMatrixNode_GetOutputResult (IntPtr Handle, out IntPtr AResult); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_matrixfromrowsnode_getinputa", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MatrixFromRowsNode_GetInputA (IntPtr Handle, out IntPtr ARow0); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_matrixfromrowsnode_getinputb", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MatrixFromRowsNode_GetInputB (IntPtr Handle, out IntPtr ARow1); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_matrixfromrowsnode_getinputc", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MatrixFromRowsNode_GetInputC (IntPtr Handle, out IntPtr ARow2); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_matrixfromrowsnode_getinputd", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MatrixFromRowsNode_GetInputD (IntPtr Handle, out IntPtr ARow3); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_matrixfromrowsnode_getoutputresult", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MatrixFromRowsNode_GetOutputResult (IntPtr Handle, out IntPtr AResult); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_matrixfromcolumnsnode_getinputa", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MatrixFromColumnsNode_GetInputA (IntPtr Handle, out IntPtr AColumn0); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_matrixfromcolumnsnode_getinputb", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MatrixFromColumnsNode_GetInputB (IntPtr Handle, out IntPtr AColumn1); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_matrixfromcolumnsnode_getinputc", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MatrixFromColumnsNode_GetInputC (IntPtr Handle, out IntPtr AColumn2); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_matrixfromcolumnsnode_getinputd", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MatrixFromColumnsNode_GetInputD (IntPtr Handle, out IntPtr AColumn3); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_matrixfromcolumnsnode_getoutputresult", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MatrixFromColumnsNode_GetOutputResult (IntPtr Handle, out IntPtr AResult); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_constantnode_setconstant", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ConstantNode_SetConstant (IntPtr Handle, Double AValue); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_constantnode_getconstant", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ConstantNode_GetConstant (IntPtr Handle, out Double AValue); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_constantnode_getoutputvalue", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ConstantNode_GetOutputValue (IntPtr Handle, out IntPtr AValue); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_constvecnode_setvector", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ConstVecNode_SetVector (IntPtr Handle, InternalVector AValue); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_constvecnode_getvector", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ConstVecNode_GetVector (IntPtr Handle, out InternalVector AValue); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_constvecnode_getoutputvector", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ConstVecNode_GetOutputVector (IntPtr Handle, out IntPtr AVector); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_constmatnode_setmatrix", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ConstMatNode_SetMatrix (IntPtr Handle, InternalMatrix4x4 AValue); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_constmatnode_getmatrix", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ConstMatNode_GetMatrix (IntPtr Handle, out InternalMatrix4x4 AValue); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_constmatnode_getoutputmatrix", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ConstMatNode_GetOutputMatrix (IntPtr Handle, out IntPtr AMatrix); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_meshnode_getinputmesh", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MeshNode_GetInputMesh (IntPtr Handle, out IntPtr AMesh); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_meshnode_getinputpos", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MeshNode_GetInputPos (IntPtr Handle, out IntPtr APos); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_meshnode_getoutputdistance", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 MeshNode_GetOutputDistance (IntPtr Handle, out IntPtr ADistance); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_unsignedmeshnode_getinputmesh", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 UnsignedMeshNode_GetInputMesh (IntPtr Handle, out IntPtr AMesh); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_unsignedmeshnode_getinputpos", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 UnsignedMeshNode_GetInputPos (IntPtr Handle, out IntPtr APos); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_unsignedmeshnode_getoutputdistance", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 UnsignedMeshNode_GetOutputDistance (IntPtr Handle, out IntPtr ADistance); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functioncallnode_getinputfunctionid", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionCallNode_GetInputFunctionID (IntPtr Handle, out IntPtr AFunction); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_nodeiterator_getcurrent", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 NodeIterator_GetCurrent (IntPtr Handle, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_function_getdisplayname", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Function_GetDisplayName (IntPtr Handle, UInt32 sizeDisplayName, out UInt32 neededDisplayName, IntPtr dataDisplayName); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_function_setdisplayname", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Function_SetDisplayName (IntPtr Handle, byte[] ADisplayName); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_function_addinput", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Function_AddInput (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, Int32 AType, out IntPtr APort); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_function_getinputs", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Function_GetInputs (IntPtr Handle, out IntPtr AIterator); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_function_removeinput", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Function_RemoveInput (IntPtr Handle, IntPtr AInput); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_function_addoutput", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Function_AddOutput (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, Int32 AType, out IntPtr APort); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_function_getoutputs", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Function_GetOutputs (IntPtr Handle, out IntPtr AIterator); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_function_removeoutput", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Function_RemoveOutput (IntPtr Handle, IntPtr AOutput); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_function_findinput", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Function_FindInput (IntPtr Handle, byte[] AIdentifier, out IntPtr AInput); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_function_findoutput", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Function_FindOutput (IntPtr Handle, byte[] AIdentifier, out IntPtr AOutput); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_getidentifier", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_GetIdentifier (IntPtr Handle, UInt32 sizeIdentifier, out UInt32 neededIdentifier, IntPtr dataIdentifier); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_setidentifier", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_SetIdentifier (IntPtr Handle, byte[] AIdentifier); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddNode (IntPtr Handle, Int32 ANodeType, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addsinnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddSinNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addcosnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddCosNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addtannode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddTanNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addarcsinnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddArcSinNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addarccosnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddArcCosNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addarctan2node", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddArcTan2Node (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addsinhnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddSinhNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addcoshnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddCoshNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addtanhnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddTanhNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addroundnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddRoundNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addceilnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddCeilNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addfloornode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddFloorNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addsignnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddSignNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addfractnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddFractNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addabsnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddAbsNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addexpnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddExpNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addlognode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddLogNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addlog2node", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddLog2Node (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addlog10node", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddLog10Node (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addlengthnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddLengthNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addtransposenode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddTransposeNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_inversenode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_InverseNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addsqrtnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddSqrtNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addresourceidnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddResourceIdNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addadditionnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddAdditionNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addsubtractionnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddSubtractionNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addmultiplicationnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddMultiplicationNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_adddivisionnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddDivisionNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_adddotnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddDotNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addcrossnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddCrossNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addmatvecmultiplicationnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddMatVecMultiplicationNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addminnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddMinNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addmaxnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddMaxNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addfmodnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddFmodNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addpownode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddPowNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addselectnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddSelectNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addclampnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddClampNode (IntPtr Handle, byte[] AIdentifier, Int32 AConfiguration, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addcomposevectornode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddComposeVectorNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addvectorfromscalarnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddVectorFromScalarNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_adddecomposevectornode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddDecomposeVectorNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addcomposematrixnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddComposeMatrixNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addmatrixfromrowsnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddMatrixFromRowsNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addmatrixfromcolumnsnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddMatrixFromColumnsNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addconstantnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddConstantNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addconstvecnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddConstVecNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addconstmatnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddConstMatNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addmeshnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddMeshNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addunsignedmeshnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddUnsignedMeshNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addfunctioncallnode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddFunctionCallNode (IntPtr Handle, byte[] AIdentifier, byte[] ADisplayName, byte[] ATag, out IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_getnodes", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_GetNodes (IntPtr Handle, out IntPtr AIterator); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_removenode", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_RemoveNode (IntPtr Handle, IntPtr ANode); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addlink", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddLink (IntPtr Handle, IntPtr ASource, IntPtr ATarget); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_addlinkbynames", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_AddLinkByNames (IntPtr Handle, byte[] ASource, byte[] ATarget); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_clear", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_Clear (IntPtr Handle); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_implicitfunction_sortnodestopologically", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 ImplicitFunction_SortNodesTopologically (IntPtr Handle); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionfromimage3d_getimage3d", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionFromImage3D_GetImage3D (IntPtr Handle, out IntPtr AImage3D); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionfromimage3d_setimage3d", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionFromImage3D_SetImage3D (IntPtr Handle, IntPtr AImage3D); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionfromimage3d_setfilter", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionFromImage3D_SetFilter (IntPtr Handle, Int32 AFilter); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionfromimage3d_getfilter", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionFromImage3D_GetFilter (IntPtr Handle, out Int32 AFilter); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionfromimage3d_settilestyles", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionFromImage3D_SetTileStyles (IntPtr Handle, Int32 ATileStyleU, Int32 ATileStyleV, Int32 ATileStyleW); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionfromimage3d_gettilestyles", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionFromImage3D_GetTileStyles (IntPtr Handle, out Int32 ATileStyleU, out Int32 ATileStyleV, out Int32 ATileStyleW); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionfromimage3d_getoffset", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionFromImage3D_GetOffset (IntPtr Handle, out Double AOffset); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionfromimage3d_setoffset", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionFromImage3D_SetOffset (IntPtr Handle, Double AOffset); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionfromimage3d_getscale", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionFromImage3D_GetScale (IntPtr Handle, out Double AScale); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_functionfromimage3d_setscale", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 FunctionFromImage3D_SetScale (IntPtr Handle, Double AScale); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_builditem_getobjectresource", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 BuildItem_GetObjectResource (IntPtr Handle, out IntPtr AObjectResource); @@ -1222,6 +2025,9 @@ public class Lib3MFWrapper [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_getslicestackbyid", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 Model_GetSliceStackByID (IntPtr Handle, UInt32 AUniqueResourceID, out IntPtr ASliceStacInstance); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_getlevelsetbyid", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Model_GetLevelSetByID (IntPtr Handle, UInt32 AUniqueResourceID, out IntPtr ALevelSetObjectInstance); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_getbuilduuid", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 Model_GetBuildUUID (IntPtr Handle, out Byte AHasUUID, UInt32 sizeUUID, out UInt32 neededUUID, IntPtr dataUUID); @@ -1267,9 +2073,15 @@ public class Lib3MFWrapper [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_getslicestacks", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 Model_GetSliceStacks (IntPtr Handle, out IntPtr AResourceIterator); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_getimage3ds", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Model_GetImage3Ds (IntPtr Handle, out IntPtr AResourceIterator); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_mergetomodel", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 Model_MergeToModel (IntPtr Handle, out IntPtr AMergedModelInstance); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_mergefrommodel", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Model_MergeFromModel (IntPtr Handle, IntPtr AModelInstance); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_addmeshobject", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 Model_AddMeshObject (IntPtr Handle, out IntPtr AMeshObjectInstance); @@ -1297,6 +2109,12 @@ public class Lib3MFWrapper [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_addmultipropertygroup", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 Model_AddMultiPropertyGroup (IntPtr Handle, out IntPtr AMultiPropertyGroupInstance); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_addimagestack", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Model_AddImageStack (IntPtr Handle, UInt32 AColumnCount, UInt32 ARowCount, UInt32 ASheetCount, out IntPtr AInstance); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_getimagestackbyid", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Model_GetImageStackByID (IntPtr Handle, UInt32 AUniqueResourceID, out IntPtr AImageStackInstance); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_addbuilditem", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 Model_AddBuildItem (IntPtr Handle, IntPtr AObject, InternalTransform ATransform, out IntPtr ABuildItemInstance); @@ -1345,6 +2163,27 @@ public class Lib3MFWrapper [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_getkeystore", CallingConvention=CallingConvention.Cdecl)] public unsafe extern static Int32 Model_GetKeyStore (IntPtr Handle, out IntPtr AKeyStore); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_getfunctions", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Model_GetFunctions (IntPtr Handle, out IntPtr ATheResourceIterator); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_addimplicitfunction", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Model_AddImplicitFunction (IntPtr Handle, out IntPtr AFunctionInstance); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_addfunctionfromimage3d", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Model_AddFunctionFromImage3D (IntPtr Handle, IntPtr AImage3DInstance, out IntPtr AFunctionInstance); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_addvolumedata", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Model_AddVolumeData (IntPtr Handle, out IntPtr AVolumeDataInstance); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_addlevelset", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Model_AddLevelSet (IntPtr Handle, out IntPtr ALevelSetInstance); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_getlevelsets", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Model_GetLevelSets (IntPtr Handle, out IntPtr AResourceIterator); + + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_model_removeresource", CallingConvention=CallingConvention.Cdecl)] + public unsafe extern static Int32 Model_RemoveResource (IntPtr Handle, IntPtr AResource); + [DllImport("lib3mf.dll", EntryPoint = "lib3mf_getlibraryversion", CharSet = CharSet.Ansi, CallingConvention=CallingConvention.Cdecl)] public extern static Int32 GetLibraryVersion (out UInt32 AMajor, out UInt32 AMinor, out UInt32 AMicro); @@ -1667,6 +2506,53 @@ public unsafe static InternalBall convertStructToInternal_Ball (sBall Ball) return intBall; } + public unsafe static sVector convertInternalToStruct_Vector (InternalVector intVector) + { + sVector Vector; + Vector.Coordinates = new Double[3]; + for (int rowIndex = 0; rowIndex < 3; rowIndex++) { + Vector.Coordinates[rowIndex] = intVector.Coordinates[rowIndex]; + } + + return Vector; + } + + public unsafe static InternalVector convertStructToInternal_Vector (sVector Vector) + { + InternalVector intVector; + for (int rowIndex = 0; rowIndex < 3; rowIndex++) { + intVector.Coordinates[rowIndex] = Vector.Coordinates[rowIndex]; + } + + return intVector; + } + + public unsafe static sMatrix4x4 convertInternalToStruct_Matrix4x4 (InternalMatrix4x4 intMatrix4x4) + { + sMatrix4x4 Matrix4x4; + Matrix4x4.Field = new Double[4][]; + for (int colIndex = 0; colIndex < 4; colIndex++) { + Matrix4x4.Field[colIndex] = new Double[4]; + for (int rowIndex = 0; rowIndex < 4; rowIndex++) { + Matrix4x4.Field[colIndex][rowIndex] = intMatrix4x4.Field[colIndex * 4 + rowIndex]; + } + } + + return Matrix4x4; + } + + public unsafe static InternalMatrix4x4 convertStructToInternal_Matrix4x4 (sMatrix4x4 Matrix4x4) + { + InternalMatrix4x4 intMatrix4x4; + for (int colIndex = 0; colIndex < 4; colIndex++) { + for (int rowIndex = 0; rowIndex < 4; rowIndex++) { + intMatrix4x4.Field[colIndex * 4 + rowIndex] = Matrix4x4.Field[colIndex][rowIndex]; + } + } + + return intMatrix4x4; + } + public static void ThrowError(IntPtr Handle, Int32 errorCode) { String sMessage = "Lib3MF Error"; @@ -1726,11 +2612,21 @@ public static T PolymorphicFactory(IntPtr Handle) where T : class case 0x30D55F4DB88FE0CA: Object = new CTexture2DGroupIterator(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroupIterator" case 0xA99CC6C3F70FB6F9: Object = new CCompositeMaterialsIterator(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterialsIterator" case 0xC2BDF5D8CBBDB1F0: Object = new CMultiPropertyGroupIterator(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroupIterator" + case 0xC4B8EC00A82BF336: Object = new CImage3DIterator(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::Image3DIterator" + case 0x40E9035363ACE65E: Object = new CFunctionIterator(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionIterator" + case 0xA0C005C035D5371D: Object = new CLevelSetIterator(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::LevelSetIterator" case 0xD17716D063DE2C22: Object = new CMetaData(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::MetaData" case 0x0C3B85369E9B25D3: Object = new CMetaDataGroup(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::MetaDataGroup" case 0x2DA2136F577A779C: Object = new CObject(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::Object" case 0x3B3A6DC6EC610497: Object = new CMeshObject(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::MeshObject" + case 0xE8A7D9C192EFD0E2: Object = new CLevelSet(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::LevelSet" case 0x63B3B461B30B4BA5: Object = new CBeamLattice(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::BeamLattice" + case 0x4DF17E76926221C2: Object = new CFunctionReference(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionReference" + case 0xD85B5B6143E787E3: Object = new CVolumeDataColor(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataColor" + case 0x241FE6B4817C3FE4: Object = new CMaterialMapping(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::MaterialMapping" + case 0x46F1DAC40581B304: Object = new CVolumeDataComposite(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataComposite" + case 0xFC368AA44ACE42DA: Object = new CVolumeDataProperty(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataProperty" + case 0x9200586FB91587A7: Object = new CVolumeData(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeData" case 0x4ECDB6A6F69F2BEB: Object = new CComponent(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::Component" case 0x6522CF04EB283FED: Object = new CComponentsObject(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObject" case 0x30CCDBE90E00B55B: Object = new CBeamSet(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::BeamSet" @@ -1739,8 +2635,71 @@ public static T PolymorphicFactory(IntPtr Handle) where T : class case 0xBC1208397E37055D: Object = new CTexture2DGroup(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroup" case 0xCE16224D688B86F2: Object = new CCompositeMaterials(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterials" case 0xB989E02E43158FE6: Object = new CMultiPropertyGroup(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroup" + case 0xBD938FF2D2663D61: Object = new CImage3D(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::Image3D" + case 0x13A2561F0CFB712A: Object = new CImageStack(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ImageStack" case 0x8CE7A1191A63A35D: Object = new CAttachment(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::Attachment" case 0xE0441CF976B36319: Object = new CTexture2D(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2D" + case 0xD5C49B04AF1963CD: Object = new CImplicitPort(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitPort" + case 0x52F06268CD098EFE: Object = new CIterator(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::Iterator" + case 0xC62268F2D7C7012C: Object = new CImplicitPortIterator(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitPortIterator" + case 0xE72592A7725AB29B: Object = new CImplicitNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitNode" + case 0xB19B9FDA94B0A5E7: Object = new COneInputNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::OneInputNode" + case 0xD5AEA50A56306722: Object = new CSinNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::SinNode" + case 0x59BC328F6FB5C5FF: Object = new CCosNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::CosNode" + case 0x2614CC572AF350B7: Object = new CTanNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::TanNode" + case 0xE554C8A7E72AAF4D: Object = new CArcSinNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ArcSinNode" + case 0x943AF6AE0EFD2B8A: Object = new CArcCosNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ArcCosNode" + case 0xE47D547615816BAD: Object = new CArcTanNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ArcTanNode" + case 0x3C7756A456F2D089: Object = new CSinhNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::SinhNode" + case 0x4A993F91E1DE256D: Object = new CCoshNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::CoshNode" + case 0xCF077B19B0B78E9D: Object = new CTanhNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::TanhNode" + case 0xD9F5A53C657765AE: Object = new CRoundNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::RoundNode" + case 0x627E211653E11D93: Object = new CCeilNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::CeilNode" + case 0x392A0F4C041D249C: Object = new CFloorNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::FloorNode" + case 0x8A45165E6C9646D7: Object = new CSignNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::SignNode" + case 0x53E62FD67F4D9A65: Object = new CFractNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::FractNode" + case 0x6B641C7060040BE3: Object = new CAbsNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::AbsNode" + case 0x3390243A8E2410F3: Object = new CExpNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ExpNode" + case 0x0070021D73AA89FD: Object = new CLogNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::LogNode" + case 0xE8C0ABF7C5DC7068: Object = new CLog2Node(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::Log2Node" + case 0x87740AD53454E0DF: Object = new CLog10Node(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::Log10Node" + case 0xD85889E2739A74B1: Object = new CLengthNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::LengthNode" + case 0xA808B7599C158CE6: Object = new CTransposeNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::TransposeNode" + case 0xE8601F66A23A0540: Object = new CInverseNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::InverseNode" + case 0x9F831944A3DE31DA: Object = new CSqrtNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::SqrtNode" + case 0xCA86A77C71CD3FAE: Object = new CResourceIdNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceIdNode" + case 0x7DE3951BA4C1064C: Object = new CTwoInputNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::TwoInputNode" + case 0x57A2236998DF5248: Object = new CAdditionNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::AdditionNode" + case 0x6079B12FFF345D02: Object = new CSubtractionNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::SubtractionNode" + case 0xA3C27CF54C2AA76C: Object = new CMultiplicationNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::MultiplicationNode" + case 0xB896B6413C08CF39: Object = new CDivisionNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::DivisionNode" + case 0xFE60932A66375FAD: Object = new CDotNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::DotNode" + case 0x106182D38CA5CFE3: Object = new CCrossNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::CrossNode" + case 0xB6153EF5DE7E5E11: Object = new CArcTan2Node(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ArcTan2Node" + case 0x7570C43B9721D0C0: Object = new CMatVecMultiplicationNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::MatVecMultiplicationNode" + case 0x846AFDE9A091E997: Object = new CMinNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::MinNode" + case 0x073F910381BF250D: Object = new CMaxNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::MaxNode" + case 0x1EF703D298223F2A: Object = new CFmodNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::FmodNode" + case 0xEA57335849379F22: Object = new CModNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ModNode" + case 0x7700AA17CA1AC0F8: Object = new CPowNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::PowNode" + case 0x1127ED71E05A9BD4: Object = new CSelectNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::SelectNode" + case 0x77AF68C971B1485F: Object = new CClampNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ClampNode" + case 0x49C24B8840C01F7E: Object = new CComposeVectorNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ComposeVectorNode" + case 0x2E417B93351375E2: Object = new CVectorFromScalarNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::VectorFromScalarNode" + case 0xCC4F8D561CCE35D4: Object = new CDecomposeVectorNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::DecomposeVectorNode" + case 0x9EF9EB54A53AA40D: Object = new CComposeMatrixNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ComposeMatrixNode" + case 0xD6DFD0A7EB64AC33: Object = new CMatrixFromRowsNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::MatrixFromRowsNode" + case 0x0DCBEAFCF83F3AAC: Object = new CMatrixFromColumnsNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::MatrixFromColumnsNode" + case 0x3F8E5D082F966B1B: Object = new CConstantNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ConstantNode" + case 0x9C9363B3F708D556: Object = new CConstVecNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ConstVecNode" + case 0xF85C90EDCE6F90A4: Object = new CConstMatNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ConstMatNode" + case 0x53601FD432E3DEF4: Object = new CMeshNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::MeshNode" + case 0x29985A628251A9CD: Object = new CUnsignedMeshNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::UnsignedMeshNode" + case 0x0765C17C952F24E3: Object = new CFunctionCallNode(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionCallNode" + case 0xFC006BC888CAB4D0: Object = new CNodeIterator(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::NodeIterator" + case 0x9EFB2757CA1A5231: Object = new CFunction(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::Function" + case 0x6CE54469EEA83BC1: Object = new CImplicitFunction(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitFunction" + case 0x9BD7D3C2026B8CE8: Object = new CFunctionFromImage3D(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionFromImage3D" case 0x68FB2D5FFC4BA12A: Object = new CBuildItem(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItem" case 0xA7D21BD364910860: Object = new CBuildItemIterator(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItemIterator" case 0x2198BCF4D8DF9C40: Object = new CSlice(Handle) as T; break; // First 64 bits of SHA1 of a string: "Lib3MF::Slice" @@ -2309,6 +3268,54 @@ public CMultiPropertyGroup GetCurrentMultiPropertyGroup () } + public class CImage3DIterator : CResourceIterator + { + public CImage3DIterator (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImage3D GetCurrentImage3D () + { + IntPtr newResource = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Image3DIterator_GetCurrentImage3D (Handle, out newResource)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newResource); + } + + } + + public class CFunctionIterator : CResourceIterator + { + public CFunctionIterator (IntPtr NewHandle) : base (NewHandle) + { + } + + public CFunction GetCurrentFunction () + { + IntPtr newResource = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.FunctionIterator_GetCurrentFunction (Handle, out newResource)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newResource); + } + + } + + public class CLevelSetIterator : CResourceIterator + { + public CLevelSetIterator (IntPtr NewHandle) : base (NewHandle) + { + } + + public CLevelSet GetCurrentLevelSet () + { + IntPtr newResource = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.LevelSetIterator_GetCurrentLevelSet (Handle, out newResource)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newResource); + } + + } + public class CMetaData : CBase { public CMetaData (IntPtr NewHandle) : base (NewHandle) @@ -2569,6 +3576,14 @@ public bool IsComponentsObject () return (resultIsComponentsObject != 0); } + public bool IsLevelSetObject () + { + Byte resultIsLevelSetObject = 0; + + CheckError(Internal.Lib3MFWrapper.Object_IsLevelSetObject (Handle, out resultIsLevelSetObject)); + return (resultIsLevelSetObject != 0); + } + public bool IsValid () { Byte resultIsValid = 0; @@ -2883,6 +3898,160 @@ public CBeamLattice BeamLattice () return Internal.Lib3MFWrapper.PolymorphicFactory(newTheBeamLattice); } + public CVolumeData GetVolumeData () + { + IntPtr newTheVolumeData = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MeshObject_GetVolumeData (Handle, out newTheVolumeData)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newTheVolumeData); + } + + public void SetVolumeData (CVolumeData ATheVolumeData) + { + IntPtr ATheVolumeDataHandle = IntPtr.Zero; + if (ATheVolumeData != null) + ATheVolumeDataHandle = ATheVolumeData.GetHandle(); + + CheckError(Internal.Lib3MFWrapper.MeshObject_SetVolumeData (Handle, ATheVolumeDataHandle)); + } + + } + + public class CLevelSet : CObject + { + public CLevelSet (IntPtr NewHandle) : base (NewHandle) + { + } + + public CFunction GetFunction () + { + IntPtr newTheFunction = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.LevelSet_GetFunction (Handle, out newTheFunction)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newTheFunction); + } + + public void SetFunction (CFunction ATheFunction) + { + IntPtr ATheFunctionHandle = IntPtr.Zero; + if (ATheFunction != null) + ATheFunctionHandle = ATheFunction.GetHandle(); + + CheckError(Internal.Lib3MFWrapper.LevelSet_SetFunction (Handle, ATheFunctionHandle)); + } + + public sTransform GetTransform () + { + Internal.InternalTransform intresultTransform; + + CheckError(Internal.Lib3MFWrapper.LevelSet_GetTransform (Handle, out intresultTransform)); + return Internal.Lib3MFWrapper.convertInternalToStruct_Transform (intresultTransform); + } + + public void SetTransform (sTransform ATransform) + { + Internal.InternalTransform intTransform = Internal.Lib3MFWrapper.convertStructToInternal_Transform (ATransform); + + CheckError(Internal.Lib3MFWrapper.LevelSet_SetTransform (Handle, intTransform)); + } + + public String GetChannelName () + { + UInt32 sizeChannelName = 0; + UInt32 neededChannelName = 0; + CheckError(Internal.Lib3MFWrapper.LevelSet_GetChannelName (Handle, sizeChannelName, out neededChannelName, IntPtr.Zero)); + sizeChannelName = neededChannelName; + byte[] bytesChannelName = new byte[sizeChannelName]; + GCHandle dataChannelName = GCHandle.Alloc(bytesChannelName, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.LevelSet_GetChannelName (Handle, sizeChannelName, out neededChannelName, dataChannelName.AddrOfPinnedObject())); + dataChannelName.Free(); + return Encoding.UTF8.GetString(bytesChannelName).TrimEnd(char.MinValue); + } + + public void SetChannelName (String AChannelName) + { + byte[] byteChannelName = Encoding.UTF8.GetBytes(AChannelName + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.LevelSet_SetChannelName (Handle, byteChannelName)); + } + + public void SetMinFeatureSize (Double AMinFeatureSize) + { + + CheckError(Internal.Lib3MFWrapper.LevelSet_SetMinFeatureSize (Handle, AMinFeatureSize)); + } + + public Double GetMinFeatureSize () + { + Double resultMinFeatureSize = 0; + + CheckError(Internal.Lib3MFWrapper.LevelSet_GetMinFeatureSize (Handle, out resultMinFeatureSize)); + return resultMinFeatureSize; + } + + public void SetFallBackValue (Double AFallBackValue) + { + + CheckError(Internal.Lib3MFWrapper.LevelSet_SetFallBackValue (Handle, AFallBackValue)); + } + + public Double GetFallBackValue () + { + Double resultFallBackValue = 0; + + CheckError(Internal.Lib3MFWrapper.LevelSet_GetFallBackValue (Handle, out resultFallBackValue)); + return resultFallBackValue; + } + + public void SetMeshBBoxOnly (bool AMeshBBoxOnly) + { + + CheckError(Internal.Lib3MFWrapper.LevelSet_SetMeshBBoxOnly (Handle, (Byte)( AMeshBBoxOnly ? 1 : 0 ))); + } + + public bool GetMeshBBoxOnly () + { + Byte resultMeshBBoxOnly = 0; + + CheckError(Internal.Lib3MFWrapper.LevelSet_GetMeshBBoxOnly (Handle, out resultMeshBBoxOnly)); + return (resultMeshBBoxOnly != 0); + } + + public void SetMesh (CMeshObject ATheMesh) + { + IntPtr ATheMeshHandle = IntPtr.Zero; + if (ATheMesh != null) + ATheMeshHandle = ATheMesh.GetHandle(); + + CheckError(Internal.Lib3MFWrapper.LevelSet_SetMesh (Handle, ATheMeshHandle)); + } + + public CMeshObject GetMesh () + { + IntPtr newTheMesh = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.LevelSet_GetMesh (Handle, out newTheMesh)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newTheMesh); + } + + public CVolumeData GetVolumeData () + { + IntPtr newTheVolumeData = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.LevelSet_GetVolumeData (Handle, out newTheVolumeData)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newTheVolumeData); + } + + public void SetVolumeData (CVolumeData ATheVolumeData) + { + IntPtr ATheVolumeDataHandle = IntPtr.Zero; + if (ATheVolumeData != null) + ATheVolumeDataHandle = ATheVolumeData.GetHandle(); + + CheckError(Internal.Lib3MFWrapper.LevelSet_SetVolumeData (Handle, ATheVolumeDataHandle)); + } + } public class CBeamLattice : CBase @@ -3093,147 +4262,430 @@ public CBeamSet GetBeamSet (UInt32 AIndex) } - public class CComponent : CBase + public class CFunctionReference : CBase { - public CComponent (IntPtr NewHandle) : base (NewHandle) + public CFunctionReference (IntPtr NewHandle) : base (NewHandle) { } - public CObject GetObjectResource () - { - IntPtr newObjectResource = IntPtr.Zero; - - CheckError(Internal.Lib3MFWrapper.Component_GetObjectResource (Handle, out newObjectResource)); - return Internal.Lib3MFWrapper.PolymorphicFactory(newObjectResource); - } - - public UInt32 GetObjectResourceID () + public UInt32 GetFunctionResourceID () { UInt32 resultUniqueResourceID = 0; - CheckError(Internal.Lib3MFWrapper.Component_GetObjectResourceID (Handle, out resultUniqueResourceID)); + CheckError(Internal.Lib3MFWrapper.FunctionReference_GetFunctionResourceID (Handle, out resultUniqueResourceID)); return resultUniqueResourceID; } - public String GetUUID (out bool AHasUUID) + public void SetFunctionResourceID (UInt32 AUniqueResourceID) { - Byte resultHasUUID = 0; - UInt32 sizeUUID = 0; - UInt32 neededUUID = 0; - CheckError(Internal.Lib3MFWrapper.Component_GetUUID (Handle, out resultHasUUID, sizeUUID, out neededUUID, IntPtr.Zero)); - sizeUUID = neededUUID; - byte[] bytesUUID = new byte[sizeUUID]; - GCHandle dataUUID = GCHandle.Alloc(bytesUUID, GCHandleType.Pinned); - CheckError(Internal.Lib3MFWrapper.Component_GetUUID (Handle, out resultHasUUID, sizeUUID, out neededUUID, dataUUID.AddrOfPinnedObject())); - AHasUUID = (resultHasUUID != 0); - dataUUID.Free(); - return Encoding.UTF8.GetString(bytesUUID).TrimEnd(char.MinValue); + CheckError(Internal.Lib3MFWrapper.FunctionReference_SetFunctionResourceID (Handle, AUniqueResourceID)); } - public void SetUUID (String AUUID) + public sTransform GetTransform () { - byte[] byteUUID = Encoding.UTF8.GetBytes(AUUID + char.MinValue); + Internal.InternalTransform intresultTransform; - CheckError(Internal.Lib3MFWrapper.Component_SetUUID (Handle, byteUUID)); + CheckError(Internal.Lib3MFWrapper.FunctionReference_GetTransform (Handle, out intresultTransform)); + return Internal.Lib3MFWrapper.convertInternalToStruct_Transform (intresultTransform); } - public bool HasTransform () + public void SetTransform (sTransform ATransform) { - Byte resultHasTransform = 0; + Internal.InternalTransform intTransform = Internal.Lib3MFWrapper.convertStructToInternal_Transform (ATransform); - CheckError(Internal.Lib3MFWrapper.Component_HasTransform (Handle, out resultHasTransform)); - return (resultHasTransform != 0); + CheckError(Internal.Lib3MFWrapper.FunctionReference_SetTransform (Handle, intTransform)); } - public sTransform GetTransform () + public String GetChannelName () { - Internal.InternalTransform intresultTransform; + UInt32 sizeChannelName = 0; + UInt32 neededChannelName = 0; + CheckError(Internal.Lib3MFWrapper.FunctionReference_GetChannelName (Handle, sizeChannelName, out neededChannelName, IntPtr.Zero)); + sizeChannelName = neededChannelName; + byte[] bytesChannelName = new byte[sizeChannelName]; + GCHandle dataChannelName = GCHandle.Alloc(bytesChannelName, GCHandleType.Pinned); - CheckError(Internal.Lib3MFWrapper.Component_GetTransform (Handle, out intresultTransform)); - return Internal.Lib3MFWrapper.convertInternalToStruct_Transform (intresultTransform); + CheckError(Internal.Lib3MFWrapper.FunctionReference_GetChannelName (Handle, sizeChannelName, out neededChannelName, dataChannelName.AddrOfPinnedObject())); + dataChannelName.Free(); + return Encoding.UTF8.GetString(bytesChannelName).TrimEnd(char.MinValue); } - public void SetTransform (sTransform ATransform) + public void SetChannelName (String AChannelName) { - Internal.InternalTransform intTransform = Internal.Lib3MFWrapper.convertStructToInternal_Transform (ATransform); + byte[] byteChannelName = Encoding.UTF8.GetBytes(AChannelName + char.MinValue); - CheckError(Internal.Lib3MFWrapper.Component_SetTransform (Handle, intTransform)); + CheckError(Internal.Lib3MFWrapper.FunctionReference_SetChannelName (Handle, byteChannelName)); } - } - - public class CComponentsObject : CObject - { - public CComponentsObject (IntPtr NewHandle) : base (NewHandle) + public void SetMinFeatureSize (Double AMinFeatureSize) { + + CheckError(Internal.Lib3MFWrapper.FunctionReference_SetMinFeatureSize (Handle, AMinFeatureSize)); } - public CComponent AddComponent (CObject AObjectResource, sTransform ATransform) + public Double GetMinFeatureSize () { - IntPtr AObjectResourceHandle = IntPtr.Zero; - if (AObjectResource != null) - AObjectResourceHandle = AObjectResource.GetHandle(); - Internal.InternalTransform intTransform = Internal.Lib3MFWrapper.convertStructToInternal_Transform (ATransform); - IntPtr newComponentInstance = IntPtr.Zero; + Double resultMinFeatureSize = 0; - CheckError(Internal.Lib3MFWrapper.ComponentsObject_AddComponent (Handle, AObjectResourceHandle, intTransform, out newComponentInstance)); - return Internal.Lib3MFWrapper.PolymorphicFactory(newComponentInstance); + CheckError(Internal.Lib3MFWrapper.FunctionReference_GetMinFeatureSize (Handle, out resultMinFeatureSize)); + return resultMinFeatureSize; } - public CComponent GetComponent (UInt32 AIndex) + public void SetFallBackValue (Double AFallBackValue) { - IntPtr newComponentInstance = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.ComponentsObject_GetComponent (Handle, AIndex, out newComponentInstance)); - return Internal.Lib3MFWrapper.PolymorphicFactory(newComponentInstance); + CheckError(Internal.Lib3MFWrapper.FunctionReference_SetFallBackValue (Handle, AFallBackValue)); } - public UInt32 GetComponentCount () + public Double GetFallBackValue () { - UInt32 resultCount = 0; + Double resultFallBackValue = 0; - CheckError(Internal.Lib3MFWrapper.ComponentsObject_GetComponentCount (Handle, out resultCount)); - return resultCount; + CheckError(Internal.Lib3MFWrapper.FunctionReference_GetFallBackValue (Handle, out resultFallBackValue)); + return resultFallBackValue; } } - public class CBeamSet : CBase + public class CVolumeDataColor : CFunctionReference { - public CBeamSet (IntPtr NewHandle) : base (NewHandle) + public CVolumeDataColor (IntPtr NewHandle) : base (NewHandle) { } - public void SetName (String AName) + } + + public class CMaterialMapping : CFunctionReference + { + public CMaterialMapping (IntPtr NewHandle) : base (NewHandle) { - byte[] byteName = Encoding.UTF8.GetBytes(AName + char.MinValue); + } - CheckError(Internal.Lib3MFWrapper.BeamSet_SetName (Handle, byteName)); + } + + public class CVolumeDataComposite : CBase + { + public CVolumeDataComposite (IntPtr NewHandle) : base (NewHandle) + { } - public String GetName () + public CBaseMaterialGroup GetBaseMaterialGroup () { - UInt32 sizeName = 0; - UInt32 neededName = 0; - CheckError(Internal.Lib3MFWrapper.BeamSet_GetName (Handle, sizeName, out neededName, IntPtr.Zero)); - sizeName = neededName; - byte[] bytesName = new byte[sizeName]; - GCHandle dataName = GCHandle.Alloc(bytesName, GCHandleType.Pinned); + IntPtr newBaseMaterialGroupInstance = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.BeamSet_GetName (Handle, sizeName, out neededName, dataName.AddrOfPinnedObject())); - dataName.Free(); - return Encoding.UTF8.GetString(bytesName).TrimEnd(char.MinValue); + CheckError(Internal.Lib3MFWrapper.VolumeDataComposite_GetBaseMaterialGroup (Handle, out newBaseMaterialGroupInstance)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newBaseMaterialGroupInstance); } - public void SetIdentifier (String AIdentifier) + public void SetBaseMaterialGroup (CBaseMaterialGroup ABaseMaterialGroupInstance) { - byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + IntPtr ABaseMaterialGroupInstanceHandle = IntPtr.Zero; + if (ABaseMaterialGroupInstance != null) + ABaseMaterialGroupInstanceHandle = ABaseMaterialGroupInstance.GetHandle(); - CheckError(Internal.Lib3MFWrapper.BeamSet_SetIdentifier (Handle, byteIdentifier)); + CheckError(Internal.Lib3MFWrapper.VolumeDataComposite_SetBaseMaterialGroup (Handle, ABaseMaterialGroupInstanceHandle)); } - public String GetIdentifier () + public UInt32 GetMaterialMappingCount () + { + UInt32 resultCount = 0; + + CheckError(Internal.Lib3MFWrapper.VolumeDataComposite_GetMaterialMappingCount (Handle, out resultCount)); + return resultCount; + } + + public CMaterialMapping GetMaterialMapping (UInt32 AIndex) + { + IntPtr newTheMaterialMapping = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.VolumeDataComposite_GetMaterialMapping (Handle, AIndex, out newTheMaterialMapping)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newTheMaterialMapping); + } + + public CMaterialMapping AddMaterialMapping (sTransform ATransform) + { + Internal.InternalTransform intTransform = Internal.Lib3MFWrapper.convertStructToInternal_Transform (ATransform); + IntPtr newTheMaterialMapping = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.VolumeDataComposite_AddMaterialMapping (Handle, intTransform, out newTheMaterialMapping)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newTheMaterialMapping); + } + + public void RemoveMaterialMapping (UInt32 AIndex) + { + + CheckError(Internal.Lib3MFWrapper.VolumeDataComposite_RemoveMaterialMapping (Handle, AIndex)); + } + + } + + public class CVolumeDataProperty : CFunctionReference + { + public CVolumeDataProperty (IntPtr NewHandle) : base (NewHandle) + { + } + + public String GetName () + { + UInt32 sizePropertyName = 0; + UInt32 neededPropertyName = 0; + CheckError(Internal.Lib3MFWrapper.VolumeDataProperty_GetName (Handle, sizePropertyName, out neededPropertyName, IntPtr.Zero)); + sizePropertyName = neededPropertyName; + byte[] bytesPropertyName = new byte[sizePropertyName]; + GCHandle dataPropertyName = GCHandle.Alloc(bytesPropertyName, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.VolumeDataProperty_GetName (Handle, sizePropertyName, out neededPropertyName, dataPropertyName.AddrOfPinnedObject())); + dataPropertyName.Free(); + return Encoding.UTF8.GetString(bytesPropertyName).TrimEnd(char.MinValue); + } + + public void SetIsRequired (bool AIsRequired) + { + + CheckError(Internal.Lib3MFWrapper.VolumeDataProperty_SetIsRequired (Handle, (Byte)( AIsRequired ? 1 : 0 ))); + } + + public bool IsRequired () + { + Byte resultIsRequired = 0; + + CheckError(Internal.Lib3MFWrapper.VolumeDataProperty_IsRequired (Handle, out resultIsRequired)); + return (resultIsRequired != 0); + } + + } + + public class CVolumeData : CResource + { + public CVolumeData (IntPtr NewHandle) : base (NewHandle) + { + } + + public CVolumeDataComposite GetComposite () + { + IntPtr newTheCompositeData = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.VolumeData_GetComposite (Handle, out newTheCompositeData)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newTheCompositeData); + } + + public CVolumeDataComposite CreateNewComposite () + { + IntPtr newTheCompositeData = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.VolumeData_CreateNewComposite (Handle, out newTheCompositeData)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newTheCompositeData); + } + + public void RemoveComposite () + { + + CheckError(Internal.Lib3MFWrapper.VolumeData_RemoveComposite (Handle)); + } + + public CVolumeDataColor GetColor () + { + IntPtr newTheColorData = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.VolumeData_GetColor (Handle, out newTheColorData)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newTheColorData); + } + + public CVolumeDataColor CreateNewColor (CFunction ATheFunction) + { + IntPtr ATheFunctionHandle = IntPtr.Zero; + if (ATheFunction != null) + ATheFunctionHandle = ATheFunction.GetHandle(); + IntPtr newTheColorData = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.VolumeData_CreateNewColor (Handle, ATheFunctionHandle, out newTheColorData)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newTheColorData); + } + + public void RemoveColor () + { + + CheckError(Internal.Lib3MFWrapper.VolumeData_RemoveColor (Handle)); + } + + public UInt32 GetPropertyCount () + { + UInt32 resultCount = 0; + + CheckError(Internal.Lib3MFWrapper.VolumeData_GetPropertyCount (Handle, out resultCount)); + return resultCount; + } + + public CVolumeDataProperty GetProperty (UInt32 AIndex) + { + IntPtr newTheVolumeDataProperty = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.VolumeData_GetProperty (Handle, AIndex, out newTheVolumeDataProperty)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newTheVolumeDataProperty); + } + + public CVolumeDataProperty AddPropertyFromFunction (String AName, CFunction ATheFunction) + { + byte[] byteName = Encoding.UTF8.GetBytes(AName + char.MinValue); + IntPtr ATheFunctionHandle = IntPtr.Zero; + if (ATheFunction != null) + ATheFunctionHandle = ATheFunction.GetHandle(); + IntPtr newTheVolumeDataProperty = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.VolumeData_AddPropertyFromFunction (Handle, byteName, ATheFunctionHandle, out newTheVolumeDataProperty)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newTheVolumeDataProperty); + } + + public void RemoveProperty (UInt32 AIndex) + { + + CheckError(Internal.Lib3MFWrapper.VolumeData_RemoveProperty (Handle, AIndex)); + } + + } + + public class CComponent : CBase + { + public CComponent (IntPtr NewHandle) : base (NewHandle) + { + } + + public CObject GetObjectResource () + { + IntPtr newObjectResource = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Component_GetObjectResource (Handle, out newObjectResource)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newObjectResource); + } + + public UInt32 GetObjectResourceID () + { + UInt32 resultUniqueResourceID = 0; + + CheckError(Internal.Lib3MFWrapper.Component_GetObjectResourceID (Handle, out resultUniqueResourceID)); + return resultUniqueResourceID; + } + + public String GetUUID (out bool AHasUUID) + { + Byte resultHasUUID = 0; + UInt32 sizeUUID = 0; + UInt32 neededUUID = 0; + CheckError(Internal.Lib3MFWrapper.Component_GetUUID (Handle, out resultHasUUID, sizeUUID, out neededUUID, IntPtr.Zero)); + sizeUUID = neededUUID; + byte[] bytesUUID = new byte[sizeUUID]; + GCHandle dataUUID = GCHandle.Alloc(bytesUUID, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.Component_GetUUID (Handle, out resultHasUUID, sizeUUID, out neededUUID, dataUUID.AddrOfPinnedObject())); + AHasUUID = (resultHasUUID != 0); + dataUUID.Free(); + return Encoding.UTF8.GetString(bytesUUID).TrimEnd(char.MinValue); + } + + public void SetUUID (String AUUID) + { + byte[] byteUUID = Encoding.UTF8.GetBytes(AUUID + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.Component_SetUUID (Handle, byteUUID)); + } + + public bool HasTransform () + { + Byte resultHasTransform = 0; + + CheckError(Internal.Lib3MFWrapper.Component_HasTransform (Handle, out resultHasTransform)); + return (resultHasTransform != 0); + } + + public sTransform GetTransform () + { + Internal.InternalTransform intresultTransform; + + CheckError(Internal.Lib3MFWrapper.Component_GetTransform (Handle, out intresultTransform)); + return Internal.Lib3MFWrapper.convertInternalToStruct_Transform (intresultTransform); + } + + public void SetTransform (sTransform ATransform) + { + Internal.InternalTransform intTransform = Internal.Lib3MFWrapper.convertStructToInternal_Transform (ATransform); + + CheckError(Internal.Lib3MFWrapper.Component_SetTransform (Handle, intTransform)); + } + + } + + public class CComponentsObject : CObject + { + public CComponentsObject (IntPtr NewHandle) : base (NewHandle) + { + } + + public CComponent AddComponent (CObject AObjectResource, sTransform ATransform) + { + IntPtr AObjectResourceHandle = IntPtr.Zero; + if (AObjectResource != null) + AObjectResourceHandle = AObjectResource.GetHandle(); + Internal.InternalTransform intTransform = Internal.Lib3MFWrapper.convertStructToInternal_Transform (ATransform); + IntPtr newComponentInstance = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComponentsObject_AddComponent (Handle, AObjectResourceHandle, intTransform, out newComponentInstance)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newComponentInstance); + } + + public CComponent GetComponent (UInt32 AIndex) + { + IntPtr newComponentInstance = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComponentsObject_GetComponent (Handle, AIndex, out newComponentInstance)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newComponentInstance); + } + + public UInt32 GetComponentCount () + { + UInt32 resultCount = 0; + + CheckError(Internal.Lib3MFWrapper.ComponentsObject_GetComponentCount (Handle, out resultCount)); + return resultCount; + } + + } + + public class CBeamSet : CBase + { + public CBeamSet (IntPtr NewHandle) : base (NewHandle) + { + } + + public void SetName (String AName) + { + byte[] byteName = Encoding.UTF8.GetBytes(AName + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.BeamSet_SetName (Handle, byteName)); + } + + public String GetName () + { + UInt32 sizeName = 0; + UInt32 neededName = 0; + CheckError(Internal.Lib3MFWrapper.BeamSet_GetName (Handle, sizeName, out neededName, IntPtr.Zero)); + sizeName = neededName; + byte[] bytesName = new byte[sizeName]; + GCHandle dataName = GCHandle.Alloc(bytesName, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.BeamSet_GetName (Handle, sizeName, out neededName, dataName.AddrOfPinnedObject())); + dataName.Free(); + return Encoding.UTF8.GetString(bytesName).TrimEnd(char.MinValue); + } + + public void SetIdentifier (String AIdentifier) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.BeamSet_SetIdentifier (Handle, byteIdentifier)); + } + + public String GetIdentifier () { UInt32 sizeIdentifier = 0; UInt32 neededIdentifier = 0; @@ -3542,316 +4994,2505 @@ public CBaseMaterialGroup GetBaseMaterialGroup () return Internal.Lib3MFWrapper.PolymorphicFactory(newBaseMaterialGroupInstance); } - public UInt32 AddComposite (sCompositeConstituent[] AComposite) + public UInt32 AddComposite (sCompositeConstituent[] AComposite) + { + Internal.InternalCompositeConstituent[] intdataComposite = new Internal.InternalCompositeConstituent[AComposite.Length]; + for (int index = 0; index < AComposite.Length; index++) + intdataComposite[index] = Internal.Lib3MFWrapper.convertStructToInternal_CompositeConstituent(AComposite[index]); + GCHandle dataComposite = GCHandle.Alloc(intdataComposite, GCHandleType.Pinned); + UInt32 resultPropertyID = 0; + + CheckError(Internal.Lib3MFWrapper.CompositeMaterials_AddComposite (Handle, (UInt64) AComposite.Length, dataComposite.AddrOfPinnedObject(), out resultPropertyID)); + dataComposite.Free (); + return resultPropertyID; + } + + public void RemoveComposite (UInt32 APropertyID) + { + + CheckError(Internal.Lib3MFWrapper.CompositeMaterials_RemoveComposite (Handle, APropertyID)); + } + + public void GetComposite (UInt32 APropertyID, out sCompositeConstituent[] AComposite) + { + UInt64 sizeComposite = 0; + UInt64 neededComposite = 0; + CheckError(Internal.Lib3MFWrapper.CompositeMaterials_GetComposite (Handle, APropertyID, sizeComposite, out neededComposite, IntPtr.Zero)); + sizeComposite = neededComposite; + var arrayComposite = new Internal.InternalCompositeConstituent[sizeComposite]; + GCHandle dataComposite = GCHandle.Alloc(arrayComposite, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.CompositeMaterials_GetComposite (Handle, APropertyID, sizeComposite, out neededComposite, dataComposite.AddrOfPinnedObject())); + dataComposite.Free(); + AComposite = new sCompositeConstituent[sizeComposite]; + for (int index = 0; index < AComposite.Length; index++) + AComposite[index] = Internal.Lib3MFWrapper.convertInternalToStruct_CompositeConstituent(arrayComposite[index]); + } + + } + + public class CMultiPropertyGroup : CResource + { + public CMultiPropertyGroup (IntPtr NewHandle) : base (NewHandle) + { + } + + public UInt32 GetCount () + { + UInt32 resultCount = 0; + + CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetCount (Handle, out resultCount)); + return resultCount; + } + + public void GetAllPropertyIDs (out UInt32[] APropertyIDs) + { + UInt64 sizePropertyIDs = 0; + UInt64 neededPropertyIDs = 0; + CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetAllPropertyIDs (Handle, sizePropertyIDs, out neededPropertyIDs, IntPtr.Zero)); + sizePropertyIDs = neededPropertyIDs; + APropertyIDs = new UInt32[sizePropertyIDs]; + GCHandle dataPropertyIDs = GCHandle.Alloc(APropertyIDs, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetAllPropertyIDs (Handle, sizePropertyIDs, out neededPropertyIDs, dataPropertyIDs.AddrOfPinnedObject())); + dataPropertyIDs.Free(); + } + + public UInt32 AddMultiProperty (UInt32[] APropertyIDs) + { + GCHandle dataPropertyIDs = GCHandle.Alloc(APropertyIDs, GCHandleType.Pinned); + UInt32 resultPropertyID = 0; + + CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_AddMultiProperty (Handle, (UInt64) APropertyIDs.Length, dataPropertyIDs.AddrOfPinnedObject(), out resultPropertyID)); + dataPropertyIDs.Free (); + return resultPropertyID; + } + + public void SetMultiProperty (UInt32 APropertyID, UInt32[] APropertyIDs) + { + GCHandle dataPropertyIDs = GCHandle.Alloc(APropertyIDs, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_SetMultiProperty (Handle, APropertyID, (UInt64) APropertyIDs.Length, dataPropertyIDs.AddrOfPinnedObject())); + dataPropertyIDs.Free (); + } + + public void GetMultiProperty (UInt32 APropertyID, out UInt32[] APropertyIDs) + { + UInt64 sizePropertyIDs = 0; + UInt64 neededPropertyIDs = 0; + CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetMultiProperty (Handle, APropertyID, sizePropertyIDs, out neededPropertyIDs, IntPtr.Zero)); + sizePropertyIDs = neededPropertyIDs; + APropertyIDs = new UInt32[sizePropertyIDs]; + GCHandle dataPropertyIDs = GCHandle.Alloc(APropertyIDs, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetMultiProperty (Handle, APropertyID, sizePropertyIDs, out neededPropertyIDs, dataPropertyIDs.AddrOfPinnedObject())); + dataPropertyIDs.Free(); + } + + public void RemoveMultiProperty (UInt32 APropertyID) + { + + CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_RemoveMultiProperty (Handle, APropertyID)); + } + + public UInt32 GetLayerCount () + { + UInt32 resultCount = 0; + + CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetLayerCount (Handle, out resultCount)); + return resultCount; + } + + public UInt32 AddLayer (sMultiPropertyLayer ATheLayer) + { + Internal.InternalMultiPropertyLayer intTheLayer = Internal.Lib3MFWrapper.convertStructToInternal_MultiPropertyLayer (ATheLayer); + UInt32 resultLayerIndex = 0; + + CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_AddLayer (Handle, intTheLayer, out resultLayerIndex)); + return resultLayerIndex; + } + + public sMultiPropertyLayer GetLayer (UInt32 ALayerIndex) + { + Internal.InternalMultiPropertyLayer intresultTheLayer; + + CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetLayer (Handle, ALayerIndex, out intresultTheLayer)); + return Internal.Lib3MFWrapper.convertInternalToStruct_MultiPropertyLayer (intresultTheLayer); + } + + public void RemoveLayer (UInt32 ALayerIndex) + { + + CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_RemoveLayer (Handle, ALayerIndex)); + } + + } + + public class CImage3D : CResource + { + public CImage3D (IntPtr NewHandle) : base (NewHandle) + { + } + + public String GetName () + { + UInt32 sizeName = 0; + UInt32 neededName = 0; + CheckError(Internal.Lib3MFWrapper.Image3D_GetName (Handle, sizeName, out neededName, IntPtr.Zero)); + sizeName = neededName; + byte[] bytesName = new byte[sizeName]; + GCHandle dataName = GCHandle.Alloc(bytesName, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.Image3D_GetName (Handle, sizeName, out neededName, dataName.AddrOfPinnedObject())); + dataName.Free(); + return Encoding.UTF8.GetString(bytesName).TrimEnd(char.MinValue); + } + + public void SetName (String AName) + { + byte[] byteName = Encoding.UTF8.GetBytes(AName + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.Image3D_SetName (Handle, byteName)); + } + + public bool IsImageStack () + { + Byte resultIsImageStack = 0; + + CheckError(Internal.Lib3MFWrapper.Image3D_IsImageStack (Handle, out resultIsImageStack)); + return (resultIsImageStack != 0); + } + + } + + public class CImageStack : CImage3D + { + public CImageStack (IntPtr NewHandle) : base (NewHandle) + { + } + + public UInt32 GetRowCount () + { + UInt32 resultRowCount = 0; + + CheckError(Internal.Lib3MFWrapper.ImageStack_GetRowCount (Handle, out resultRowCount)); + return resultRowCount; + } + + public void SetRowCount (UInt32 ARowCount) + { + + CheckError(Internal.Lib3MFWrapper.ImageStack_SetRowCount (Handle, ARowCount)); + } + + public UInt32 GetColumnCount () + { + UInt32 resultColumnCount = 0; + + CheckError(Internal.Lib3MFWrapper.ImageStack_GetColumnCount (Handle, out resultColumnCount)); + return resultColumnCount; + } + + public void SetColumnCount (UInt32 AColumnCount) + { + + CheckError(Internal.Lib3MFWrapper.ImageStack_SetColumnCount (Handle, AColumnCount)); + } + + public UInt32 GetSheetCount () + { + UInt32 resultSheetCount = 0; + + CheckError(Internal.Lib3MFWrapper.ImageStack_GetSheetCount (Handle, out resultSheetCount)); + return resultSheetCount; + } + + public CAttachment GetSheet (UInt32 AIndex) + { + IntPtr newSheet = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImageStack_GetSheet (Handle, AIndex, out newSheet)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newSheet); + } + + public void SetSheet (UInt32 AIndex, CAttachment ASheet) + { + IntPtr ASheetHandle = IntPtr.Zero; + if (ASheet != null) + ASheetHandle = ASheet.GetHandle(); + + CheckError(Internal.Lib3MFWrapper.ImageStack_SetSheet (Handle, AIndex, ASheetHandle)); + } + + public CAttachment CreateEmptySheet (UInt32 AIndex, String APath) + { + byte[] bytePath = Encoding.UTF8.GetBytes(APath + char.MinValue); + IntPtr newSheet = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImageStack_CreateEmptySheet (Handle, AIndex, bytePath, out newSheet)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newSheet); + } + + public CAttachment CreateSheetFromBuffer (UInt32 AIndex, String APath, Byte[] AData) + { + byte[] bytePath = Encoding.UTF8.GetBytes(APath + char.MinValue); + GCHandle dataData = GCHandle.Alloc(AData, GCHandleType.Pinned); + IntPtr newSheet = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImageStack_CreateSheetFromBuffer (Handle, AIndex, bytePath, (UInt64) AData.Length, dataData.AddrOfPinnedObject(), out newSheet)); + dataData.Free (); + return Internal.Lib3MFWrapper.PolymorphicFactory(newSheet); + } + + public CAttachment CreateSheetFromFile (UInt32 AIndex, String APath, String AFileName) + { + byte[] bytePath = Encoding.UTF8.GetBytes(APath + char.MinValue); + byte[] byteFileName = Encoding.UTF8.GetBytes(AFileName + char.MinValue); + IntPtr newSheet = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImageStack_CreateSheetFromFile (Handle, AIndex, bytePath, byteFileName, out newSheet)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newSheet); + } + + } + + public class CAttachment : CBase + { + public CAttachment (IntPtr NewHandle) : base (NewHandle) + { + } + + public String GetPath () + { + UInt32 sizePath = 0; + UInt32 neededPath = 0; + CheckError(Internal.Lib3MFWrapper.Attachment_GetPath (Handle, sizePath, out neededPath, IntPtr.Zero)); + sizePath = neededPath; + byte[] bytesPath = new byte[sizePath]; + GCHandle dataPath = GCHandle.Alloc(bytesPath, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.Attachment_GetPath (Handle, sizePath, out neededPath, dataPath.AddrOfPinnedObject())); + dataPath.Free(); + return Encoding.UTF8.GetString(bytesPath).TrimEnd(char.MinValue); + } + + public void SetPath (String APath) + { + byte[] bytePath = Encoding.UTF8.GetBytes(APath + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.Attachment_SetPath (Handle, bytePath)); + } + + public CPackagePart PackagePart () + { + IntPtr newPackagePart = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Attachment_PackagePart (Handle, out newPackagePart)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newPackagePart); + } + + public String GetRelationShipType () + { + UInt32 sizePath = 0; + UInt32 neededPath = 0; + CheckError(Internal.Lib3MFWrapper.Attachment_GetRelationShipType (Handle, sizePath, out neededPath, IntPtr.Zero)); + sizePath = neededPath; + byte[] bytesPath = new byte[sizePath]; + GCHandle dataPath = GCHandle.Alloc(bytesPath, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.Attachment_GetRelationShipType (Handle, sizePath, out neededPath, dataPath.AddrOfPinnedObject())); + dataPath.Free(); + return Encoding.UTF8.GetString(bytesPath).TrimEnd(char.MinValue); + } + + public void SetRelationShipType (String APath) + { + byte[] bytePath = Encoding.UTF8.GetBytes(APath + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.Attachment_SetRelationShipType (Handle, bytePath)); + } + + public void WriteToFile (String AFileName) + { + byte[] byteFileName = Encoding.UTF8.GetBytes(AFileName + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.Attachment_WriteToFile (Handle, byteFileName)); + } + + public void ReadFromFile (String AFileName) + { + byte[] byteFileName = Encoding.UTF8.GetBytes(AFileName + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.Attachment_ReadFromFile (Handle, byteFileName)); + } + + public void ReadFromCallback (IntPtr ATheReadCallback, UInt64 AStreamSize, IntPtr ATheSeekCallback, UInt64 AUserData) + { + + CheckError(Internal.Lib3MFWrapper.Attachment_ReadFromCallback (Handle, ATheReadCallback, AStreamSize, ATheSeekCallback, AUserData)); + } + + public UInt64 GetStreamSize () + { + UInt64 resultStreamSize = 0; + + CheckError(Internal.Lib3MFWrapper.Attachment_GetStreamSize (Handle, out resultStreamSize)); + return resultStreamSize; + } + + public void WriteToBuffer (out Byte[] ABuffer) + { + UInt64 sizeBuffer = 0; + UInt64 neededBuffer = 0; + CheckError(Internal.Lib3MFWrapper.Attachment_WriteToBuffer (Handle, sizeBuffer, out neededBuffer, IntPtr.Zero)); + sizeBuffer = neededBuffer; + ABuffer = new Byte[sizeBuffer]; + GCHandle dataBuffer = GCHandle.Alloc(ABuffer, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.Attachment_WriteToBuffer (Handle, sizeBuffer, out neededBuffer, dataBuffer.AddrOfPinnedObject())); + dataBuffer.Free(); + } + + public void ReadFromBuffer (Byte[] ABuffer) + { + GCHandle dataBuffer = GCHandle.Alloc(ABuffer, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.Attachment_ReadFromBuffer (Handle, (UInt64) ABuffer.Length, dataBuffer.AddrOfPinnedObject())); + dataBuffer.Free (); + } + + } + + public class CTexture2D : CResource + { + public CTexture2D (IntPtr NewHandle) : base (NewHandle) + { + } + + public CAttachment GetAttachment () + { + IntPtr newAttachment = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Texture2D_GetAttachment (Handle, out newAttachment)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newAttachment); + } + + public void SetAttachment (CAttachment AAttachment) + { + IntPtr AAttachmentHandle = IntPtr.Zero; + if (AAttachment != null) + AAttachmentHandle = AAttachment.GetHandle(); + + CheckError(Internal.Lib3MFWrapper.Texture2D_SetAttachment (Handle, AAttachmentHandle)); + } + + public eTextureType GetContentType () + { + Int32 resultContentType = 0; + + CheckError(Internal.Lib3MFWrapper.Texture2D_GetContentType (Handle, out resultContentType)); + return (eTextureType) (resultContentType); + } + + public void SetContentType (eTextureType AContentType) + { + Int32 enumContentType = (Int32) AContentType; + + CheckError(Internal.Lib3MFWrapper.Texture2D_SetContentType (Handle, enumContentType)); + } + + public void GetTileStyleUV (out eTextureTileStyle ATileStyleU, out eTextureTileStyle ATileStyleV) + { + Int32 resultTileStyleU = 0; + Int32 resultTileStyleV = 0; + + CheckError(Internal.Lib3MFWrapper.Texture2D_GetTileStyleUV (Handle, out resultTileStyleU, out resultTileStyleV)); + ATileStyleU = (eTextureTileStyle) (resultTileStyleU); + ATileStyleV = (eTextureTileStyle) (resultTileStyleV); + } + + public void SetTileStyleUV (eTextureTileStyle ATileStyleU, eTextureTileStyle ATileStyleV) + { + Int32 enumTileStyleU = (Int32) ATileStyleU; + Int32 enumTileStyleV = (Int32) ATileStyleV; + + CheckError(Internal.Lib3MFWrapper.Texture2D_SetTileStyleUV (Handle, enumTileStyleU, enumTileStyleV)); + } + + public eTextureFilter GetFilter () + { + Int32 resultFilter = 0; + + CheckError(Internal.Lib3MFWrapper.Texture2D_GetFilter (Handle, out resultFilter)); + return (eTextureFilter) (resultFilter); + } + + public void SetFilter (eTextureFilter AFilter) + { + Int32 enumFilter = (Int32) AFilter; + + CheckError(Internal.Lib3MFWrapper.Texture2D_SetFilter (Handle, enumFilter)); + } + + } + + public class CImplicitPort : CBase + { + public CImplicitPort (IntPtr NewHandle) : base (NewHandle) + { + } + + public String GetIdentifier () + { + UInt32 sizeIdentifier = 0; + UInt32 neededIdentifier = 0; + CheckError(Internal.Lib3MFWrapper.ImplicitPort_GetIdentifier (Handle, sizeIdentifier, out neededIdentifier, IntPtr.Zero)); + sizeIdentifier = neededIdentifier; + byte[] bytesIdentifier = new byte[sizeIdentifier]; + GCHandle dataIdentifier = GCHandle.Alloc(bytesIdentifier, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.ImplicitPort_GetIdentifier (Handle, sizeIdentifier, out neededIdentifier, dataIdentifier.AddrOfPinnedObject())); + dataIdentifier.Free(); + return Encoding.UTF8.GetString(bytesIdentifier).TrimEnd(char.MinValue); + } + + public void SetIdentifier (String AIdentifier) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.ImplicitPort_SetIdentifier (Handle, byteIdentifier)); + } + + public String GetDisplayName () + { + UInt32 sizeDisplayName = 0; + UInt32 neededDisplayName = 0; + CheckError(Internal.Lib3MFWrapper.ImplicitPort_GetDisplayName (Handle, sizeDisplayName, out neededDisplayName, IntPtr.Zero)); + sizeDisplayName = neededDisplayName; + byte[] bytesDisplayName = new byte[sizeDisplayName]; + GCHandle dataDisplayName = GCHandle.Alloc(bytesDisplayName, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.ImplicitPort_GetDisplayName (Handle, sizeDisplayName, out neededDisplayName, dataDisplayName.AddrOfPinnedObject())); + dataDisplayName.Free(); + return Encoding.UTF8.GetString(bytesDisplayName).TrimEnd(char.MinValue); + } + + public void SetDisplayName (String ADisplayName) + { + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.ImplicitPort_SetDisplayName (Handle, byteDisplayName)); + } + + public void SetType (eImplicitPortType AImplicitPortType) + { + Int32 enumImplicitPortType = (Int32) AImplicitPortType; + + CheckError(Internal.Lib3MFWrapper.ImplicitPort_SetType (Handle, enumImplicitPortType)); + } + + public eImplicitPortType GetType () + { + Int32 resultImplicitPortType = 0; + + CheckError(Internal.Lib3MFWrapper.ImplicitPort_GetType (Handle, out resultImplicitPortType)); + return (eImplicitPortType) (resultImplicitPortType); + } + + public String GetReference () + { + UInt32 sizeReference = 0; + UInt32 neededReference = 0; + CheckError(Internal.Lib3MFWrapper.ImplicitPort_GetReference (Handle, sizeReference, out neededReference, IntPtr.Zero)); + sizeReference = neededReference; + byte[] bytesReference = new byte[sizeReference]; + GCHandle dataReference = GCHandle.Alloc(bytesReference, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.ImplicitPort_GetReference (Handle, sizeReference, out neededReference, dataReference.AddrOfPinnedObject())); + dataReference.Free(); + return Encoding.UTF8.GetString(bytesReference).TrimEnd(char.MinValue); + } + + public void SetReference (String AReference) + { + byte[] byteReference = Encoding.UTF8.GetBytes(AReference + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.ImplicitPort_SetReference (Handle, byteReference)); + } + + } + + public class CIterator : CBase + { + public CIterator (IntPtr NewHandle) : base (NewHandle) + { + } + + public bool MoveNext () + { + Byte resultHasNext = 0; + + CheckError(Internal.Lib3MFWrapper.Iterator_MoveNext (Handle, out resultHasNext)); + return (resultHasNext != 0); + } + + public bool MovePrevious () + { + Byte resultHasPrevious = 0; + + CheckError(Internal.Lib3MFWrapper.Iterator_MovePrevious (Handle, out resultHasPrevious)); + return (resultHasPrevious != 0); + } + + public UInt64 Count () + { + UInt64 resultCount = 0; + + CheckError(Internal.Lib3MFWrapper.Iterator_Count (Handle, out resultCount)); + return resultCount; + } + + } + + public class CImplicitPortIterator : CIterator + { + public CImplicitPortIterator (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitPort GetCurrent () + { + IntPtr newPort = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitPortIterator_GetCurrent (Handle, out newPort)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newPort); + } + + } + + public class CImplicitNode : CBase + { + public CImplicitNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public String GetIdentifier () + { + UInt32 sizeIdentifier = 0; + UInt32 neededIdentifier = 0; + CheckError(Internal.Lib3MFWrapper.ImplicitNode_GetIdentifier (Handle, sizeIdentifier, out neededIdentifier, IntPtr.Zero)); + sizeIdentifier = neededIdentifier; + byte[] bytesIdentifier = new byte[sizeIdentifier]; + GCHandle dataIdentifier = GCHandle.Alloc(bytesIdentifier, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_GetIdentifier (Handle, sizeIdentifier, out neededIdentifier, dataIdentifier.AddrOfPinnedObject())); + dataIdentifier.Free(); + return Encoding.UTF8.GetString(bytesIdentifier).TrimEnd(char.MinValue); + } + + public void SetIdentifier (String AIdentifier) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_SetIdentifier (Handle, byteIdentifier)); + } + + public String GetDisplayName () + { + UInt32 sizeDisplayName = 0; + UInt32 neededDisplayName = 0; + CheckError(Internal.Lib3MFWrapper.ImplicitNode_GetDisplayName (Handle, sizeDisplayName, out neededDisplayName, IntPtr.Zero)); + sizeDisplayName = neededDisplayName; + byte[] bytesDisplayName = new byte[sizeDisplayName]; + GCHandle dataDisplayName = GCHandle.Alloc(bytesDisplayName, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_GetDisplayName (Handle, sizeDisplayName, out neededDisplayName, dataDisplayName.AddrOfPinnedObject())); + dataDisplayName.Free(); + return Encoding.UTF8.GetString(bytesDisplayName).TrimEnd(char.MinValue); + } + + public void SetDisplayName (String ADisplayName) + { + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_SetDisplayName (Handle, byteDisplayName)); + } + + public String GetTag () + { + UInt32 sizeTag = 0; + UInt32 neededTag = 0; + CheckError(Internal.Lib3MFWrapper.ImplicitNode_GetTag (Handle, sizeTag, out neededTag, IntPtr.Zero)); + sizeTag = neededTag; + byte[] bytesTag = new byte[sizeTag]; + GCHandle dataTag = GCHandle.Alloc(bytesTag, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_GetTag (Handle, sizeTag, out neededTag, dataTag.AddrOfPinnedObject())); + dataTag.Free(); + return Encoding.UTF8.GetString(bytesTag).TrimEnd(char.MinValue); + } + + public void SetTag (String ATag) + { + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_SetTag (Handle, byteTag)); + } + + public eImplicitNodeType GetNodeType () + { + Int32 resultType = 0; + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_GetNodeType (Handle, out resultType)); + return (eImplicitNodeType) (resultType); + } + + public CImplicitPort AddInput (String AIdentifier, String ADisplayName) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + IntPtr newPort = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_AddInput (Handle, byteIdentifier, byteDisplayName, out newPort)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newPort); + } + + public CImplicitPortIterator GetInputs () + { + IntPtr newIterator = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_GetInputs (Handle, out newIterator)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newIterator); + } + + public CImplicitPort AddOutput (String AIdentifier, String ADisplayName) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + IntPtr newPort = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_AddOutput (Handle, byteIdentifier, byteDisplayName, out newPort)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newPort); + } + + public CImplicitPortIterator GetOutputs () + { + IntPtr newIterator = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_GetOutputs (Handle, out newIterator)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newIterator); + } + + public CImplicitPort FindInput (String AIdentifier) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + IntPtr newInput = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_FindInput (Handle, byteIdentifier, out newInput)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newInput); + } + + public CImplicitPort FindOutput (String AIdentifier) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + IntPtr newOutput = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_FindOutput (Handle, byteIdentifier, out newOutput)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newOutput); + } + + public bool AreTypesValid () + { + Byte resultValid = 0; + + CheckError(Internal.Lib3MFWrapper.ImplicitNode_AreTypesValid (Handle, out resultValid)); + return (resultValid != 0); + } + + } + + public class COneInputNode : CImplicitNode + { + public COneInputNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitPort GetInputA () + { + IntPtr newInput = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.OneInputNode_GetInputA (Handle, out newInput)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newInput); + } + + public CImplicitPort GetOutputResult () + { + IntPtr newResult = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.OneInputNode_GetOutputResult (Handle, out newResult)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newResult); + } + + } + + public class CSinNode : COneInputNode + { + public CSinNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CCosNode : COneInputNode + { + public CCosNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CTanNode : COneInputNode + { + public CTanNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CArcSinNode : COneInputNode + { + public CArcSinNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CArcCosNode : COneInputNode + { + public CArcCosNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CArcTanNode : COneInputNode + { + public CArcTanNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CSinhNode : COneInputNode + { + public CSinhNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CCoshNode : COneInputNode + { + public CCoshNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CTanhNode : COneInputNode + { + public CTanhNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CRoundNode : COneInputNode + { + public CRoundNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CCeilNode : COneInputNode + { + public CCeilNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CFloorNode : COneInputNode + { + public CFloorNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CSignNode : COneInputNode + { + public CSignNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CFractNode : COneInputNode + { + public CFractNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CAbsNode : COneInputNode + { + public CAbsNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CExpNode : COneInputNode + { + public CExpNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CLogNode : COneInputNode + { + public CLogNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CLog2Node : COneInputNode + { + public CLog2Node (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CLog10Node : COneInputNode + { + public CLog10Node (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CLengthNode : COneInputNode + { + public CLengthNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CTransposeNode : COneInputNode + { + public CTransposeNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CInverseNode : COneInputNode + { + public CInverseNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CSqrtNode : COneInputNode + { + public CSqrtNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CResourceIdNode : CImplicitNode + { + public CResourceIdNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public void SetResource (CResource AResource) + { + IntPtr AResourceHandle = IntPtr.Zero; + if (AResource != null) + AResourceHandle = AResource.GetHandle(); + + CheckError(Internal.Lib3MFWrapper.ResourceIdNode_SetResource (Handle, AResourceHandle)); + } + + public CResource GetResource () + { + IntPtr newResource = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ResourceIdNode_GetResource (Handle, out newResource)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newResource); + } + + public CImplicitPort GetOutputValue () + { + IntPtr newValue = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ResourceIdNode_GetOutputValue (Handle, out newValue)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newValue); + } + + } + + public class CTwoInputNode : COneInputNode + { + public CTwoInputNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitPort GetInputB () + { + IntPtr newB = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.TwoInputNode_GetInputB (Handle, out newB)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newB); + } + + } + + public class CAdditionNode : CTwoInputNode + { + public CAdditionNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CSubtractionNode : CTwoInputNode + { + public CSubtractionNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CMultiplicationNode : CTwoInputNode + { + public CMultiplicationNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CDivisionNode : CTwoInputNode + { + public CDivisionNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CDotNode : CTwoInputNode + { + public CDotNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CCrossNode : CTwoInputNode + { + public CCrossNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CArcTan2Node : CTwoInputNode + { + public CArcTan2Node (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CMatVecMultiplicationNode : CTwoInputNode + { + public CMatVecMultiplicationNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CMinNode : CTwoInputNode + { + public CMinNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CMaxNode : CTwoInputNode + { + public CMaxNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CFmodNode : CTwoInputNode + { + public CFmodNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CModNode : CTwoInputNode + { + public CModNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CPowNode : CTwoInputNode + { + public CPowNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CSelectNode : COneInputNode + { + public CSelectNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitPort GetInputB () + { + IntPtr newB = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.SelectNode_GetInputB (Handle, out newB)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newB); + } + + public CImplicitPort GetInputC () + { + IntPtr newC = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.SelectNode_GetInputC (Handle, out newC)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newC); + } + + public CImplicitPort GetInputD () + { + IntPtr newD = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.SelectNode_GetInputD (Handle, out newD)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newD); + } + + } + + public class CClampNode : COneInputNode + { + public CClampNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitPort GetInputMin () + { + IntPtr newMin = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ClampNode_GetInputMin (Handle, out newMin)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newMin); + } + + public CImplicitPort GetInputMax () + { + IntPtr newMax = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ClampNode_GetInputMax (Handle, out newMax)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newMax); + } + + } + + public class CComposeVectorNode : CImplicitNode + { + public CComposeVectorNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitPort GetInputX () + { + IntPtr newX = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeVectorNode_GetInputX (Handle, out newX)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newX); + } + + public CImplicitPort GetInputY () + { + IntPtr newY = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeVectorNode_GetInputY (Handle, out newY)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newY); + } + + public CImplicitPort GetInputZ () + { + IntPtr newZ = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeVectorNode_GetInputZ (Handle, out newZ)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newZ); + } + + public CImplicitPort GetOutputResult () + { + IntPtr newResult = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeVectorNode_GetOutputResult (Handle, out newResult)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newResult); + } + + } + + public class CVectorFromScalarNode : COneInputNode + { + public CVectorFromScalarNode (IntPtr NewHandle) : base (NewHandle) + { + } + + } + + public class CDecomposeVectorNode : CImplicitNode + { + public CDecomposeVectorNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitPort GetInputA () + { + IntPtr newA = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.DecomposeVectorNode_GetInputA (Handle, out newA)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newA); + } + + public CImplicitPort GetOutputX () + { + IntPtr newX = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.DecomposeVectorNode_GetOutputX (Handle, out newX)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newX); + } + + public CImplicitPort GetOutputY () + { + IntPtr newY = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.DecomposeVectorNode_GetOutputY (Handle, out newY)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newY); + } + + public CImplicitPort GetOutputZ () + { + IntPtr newZ = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.DecomposeVectorNode_GetOutputZ (Handle, out newZ)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newZ); + } + + } + + public class CComposeMatrixNode : CImplicitNode + { + public CComposeMatrixNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitPort GetInputM00 () + { + IntPtr newM00 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM00 (Handle, out newM00)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM00); + } + + public CImplicitPort GetInputM01 () + { + IntPtr newM01 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM01 (Handle, out newM01)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM01); + } + + public CImplicitPort GetInputM02 () + { + IntPtr newM02 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM02 (Handle, out newM02)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM02); + } + + public CImplicitPort GetInputM03 () + { + IntPtr newM03 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM03 (Handle, out newM03)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM03); + } + + public CImplicitPort GetInputM10 () + { + IntPtr newM10 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM10 (Handle, out newM10)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM10); + } + + public CImplicitPort GetInputM11 () + { + IntPtr newM11 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM11 (Handle, out newM11)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM11); + } + + public CImplicitPort GetInputM12 () + { + IntPtr newM12 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM12 (Handle, out newM12)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM12); + } + + public CImplicitPort GetInputM13 () + { + IntPtr newM13 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM13 (Handle, out newM13)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM13); + } + + public CImplicitPort GetInputM20 () + { + IntPtr newM20 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM20 (Handle, out newM20)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM20); + } + + public CImplicitPort GetInputM21 () + { + IntPtr newM21 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM21 (Handle, out newM21)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM21); + } + + public CImplicitPort GetInputM22 () + { + IntPtr newM22 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM22 (Handle, out newM22)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM22); + } + + public CImplicitPort GetInputM23 () + { + IntPtr newM23 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM23 (Handle, out newM23)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM23); + } + + public CImplicitPort GetInputM30 () + { + IntPtr newM30 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM30 (Handle, out newM30)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM30); + } + + public CImplicitPort GetInputM31 () + { + IntPtr newM31 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM31 (Handle, out newM31)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM31); + } + + public CImplicitPort GetInputM32 () + { + IntPtr newM32 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM32 (Handle, out newM32)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM32); + } + + public CImplicitPort GetInputM33 () + { + IntPtr newM33 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetInputM33 (Handle, out newM33)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newM33); + } + + public CImplicitPort GetOutputResult () + { + IntPtr newResult = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ComposeMatrixNode_GetOutputResult (Handle, out newResult)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newResult); + } + + } + + public class CMatrixFromRowsNode : CImplicitNode + { + public CMatrixFromRowsNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitPort GetInputA () + { + IntPtr newRow0 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MatrixFromRowsNode_GetInputA (Handle, out newRow0)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newRow0); + } + + public CImplicitPort GetInputB () + { + IntPtr newRow1 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MatrixFromRowsNode_GetInputB (Handle, out newRow1)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newRow1); + } + + public CImplicitPort GetInputC () + { + IntPtr newRow2 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MatrixFromRowsNode_GetInputC (Handle, out newRow2)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newRow2); + } + + public CImplicitPort GetInputD () + { + IntPtr newRow3 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MatrixFromRowsNode_GetInputD (Handle, out newRow3)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newRow3); + } + + public CImplicitPort GetOutputResult () + { + IntPtr newResult = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MatrixFromRowsNode_GetOutputResult (Handle, out newResult)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newResult); + } + + } + + public class CMatrixFromColumnsNode : CImplicitNode + { + public CMatrixFromColumnsNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitPort GetInputA () + { + IntPtr newColumn0 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MatrixFromColumnsNode_GetInputA (Handle, out newColumn0)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newColumn0); + } + + public CImplicitPort GetInputB () + { + IntPtr newColumn1 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MatrixFromColumnsNode_GetInputB (Handle, out newColumn1)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newColumn1); + } + + public CImplicitPort GetInputC () + { + IntPtr newColumn2 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MatrixFromColumnsNode_GetInputC (Handle, out newColumn2)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newColumn2); + } + + public CImplicitPort GetInputD () + { + IntPtr newColumn3 = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MatrixFromColumnsNode_GetInputD (Handle, out newColumn3)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newColumn3); + } + + public CImplicitPort GetOutputResult () + { + IntPtr newResult = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MatrixFromColumnsNode_GetOutputResult (Handle, out newResult)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newResult); + } + + } + + public class CConstantNode : CImplicitNode + { + public CConstantNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public void SetConstant (Double AValue) + { + + CheckError(Internal.Lib3MFWrapper.ConstantNode_SetConstant (Handle, AValue)); + } + + public Double GetConstant () + { + Double resultValue = 0; + + CheckError(Internal.Lib3MFWrapper.ConstantNode_GetConstant (Handle, out resultValue)); + return resultValue; + } + + public CImplicitPort GetOutputValue () + { + IntPtr newValue = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ConstantNode_GetOutputValue (Handle, out newValue)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newValue); + } + + } + + public class CConstVecNode : CImplicitNode + { + public CConstVecNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public void SetVector (sVector AValue) + { + Internal.InternalVector intValue = Internal.Lib3MFWrapper.convertStructToInternal_Vector (AValue); + + CheckError(Internal.Lib3MFWrapper.ConstVecNode_SetVector (Handle, intValue)); + } + + public sVector GetVector () + { + Internal.InternalVector intresultValue; + + CheckError(Internal.Lib3MFWrapper.ConstVecNode_GetVector (Handle, out intresultValue)); + return Internal.Lib3MFWrapper.convertInternalToStruct_Vector (intresultValue); + } + + public CImplicitPort GetOutputVector () + { + IntPtr newVector = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ConstVecNode_GetOutputVector (Handle, out newVector)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newVector); + } + + } + + public class CConstMatNode : CImplicitNode + { + public CConstMatNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public void SetMatrix (sMatrix4x4 AValue) + { + Internal.InternalMatrix4x4 intValue = Internal.Lib3MFWrapper.convertStructToInternal_Matrix4x4 (AValue); + + CheckError(Internal.Lib3MFWrapper.ConstMatNode_SetMatrix (Handle, intValue)); + } + + public sMatrix4x4 GetMatrix () + { + Internal.InternalMatrix4x4 intresultValue; + + CheckError(Internal.Lib3MFWrapper.ConstMatNode_GetMatrix (Handle, out intresultValue)); + return Internal.Lib3MFWrapper.convertInternalToStruct_Matrix4x4 (intresultValue); + } + + public CImplicitPort GetOutputMatrix () + { + IntPtr newMatrix = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ConstMatNode_GetOutputMatrix (Handle, out newMatrix)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newMatrix); + } + + } + + public class CMeshNode : CImplicitNode + { + public CMeshNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitPort GetInputMesh () + { + IntPtr newMesh = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MeshNode_GetInputMesh (Handle, out newMesh)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newMesh); + } + + public CImplicitPort GetInputPos () + { + IntPtr newPos = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MeshNode_GetInputPos (Handle, out newPos)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newPos); + } + + public CImplicitPort GetOutputDistance () + { + IntPtr newDistance = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.MeshNode_GetOutputDistance (Handle, out newDistance)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newDistance); + } + + } + + public class CUnsignedMeshNode : CImplicitNode + { + public CUnsignedMeshNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitPort GetInputMesh () + { + IntPtr newMesh = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.UnsignedMeshNode_GetInputMesh (Handle, out newMesh)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newMesh); + } + + public CImplicitPort GetInputPos () + { + IntPtr newPos = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.UnsignedMeshNode_GetInputPos (Handle, out newPos)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newPos); + } + + public CImplicitPort GetOutputDistance () + { + IntPtr newDistance = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.UnsignedMeshNode_GetOutputDistance (Handle, out newDistance)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newDistance); + } + + } + + public class CFunctionCallNode : CImplicitNode + { + public CFunctionCallNode (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitPort GetInputFunctionID () + { + IntPtr newFunction = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.FunctionCallNode_GetInputFunctionID (Handle, out newFunction)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newFunction); + } + + } + + public class CNodeIterator : CIterator + { + public CNodeIterator (IntPtr NewHandle) : base (NewHandle) + { + } + + public CImplicitNode GetCurrent () + { + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.NodeIterator_GetCurrent (Handle, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + } + + public class CFunction : CResource + { + public CFunction (IntPtr NewHandle) : base (NewHandle) + { + } + + public String GetDisplayName () + { + UInt32 sizeDisplayName = 0; + UInt32 neededDisplayName = 0; + CheckError(Internal.Lib3MFWrapper.Function_GetDisplayName (Handle, sizeDisplayName, out neededDisplayName, IntPtr.Zero)); + sizeDisplayName = neededDisplayName; + byte[] bytesDisplayName = new byte[sizeDisplayName]; + GCHandle dataDisplayName = GCHandle.Alloc(bytesDisplayName, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.Function_GetDisplayName (Handle, sizeDisplayName, out neededDisplayName, dataDisplayName.AddrOfPinnedObject())); + dataDisplayName.Free(); + return Encoding.UTF8.GetString(bytesDisplayName).TrimEnd(char.MinValue); + } + + public void SetDisplayName (String ADisplayName) + { + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.Function_SetDisplayName (Handle, byteDisplayName)); + } + + public CImplicitPort AddInput (String AIdentifier, String ADisplayName, eImplicitPortType AType) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + Int32 enumType = (Int32) AType; + IntPtr newPort = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Function_AddInput (Handle, byteIdentifier, byteDisplayName, enumType, out newPort)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newPort); + } + + public CImplicitPortIterator GetInputs () + { + IntPtr newIterator = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Function_GetInputs (Handle, out newIterator)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newIterator); + } + + public void RemoveInput (CImplicitPort AInput) + { + IntPtr AInputHandle = IntPtr.Zero; + if (AInput != null) + AInputHandle = AInput.GetHandle(); + + CheckError(Internal.Lib3MFWrapper.Function_RemoveInput (Handle, AInputHandle)); + } + + public CImplicitPort AddOutput (String AIdentifier, String ADisplayName, eImplicitPortType AType) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + Int32 enumType = (Int32) AType; + IntPtr newPort = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Function_AddOutput (Handle, byteIdentifier, byteDisplayName, enumType, out newPort)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newPort); + } + + public CImplicitPortIterator GetOutputs () + { + IntPtr newIterator = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Function_GetOutputs (Handle, out newIterator)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newIterator); + } + + public void RemoveOutput (CImplicitPort AOutput) + { + IntPtr AOutputHandle = IntPtr.Zero; + if (AOutput != null) + AOutputHandle = AOutput.GetHandle(); + + CheckError(Internal.Lib3MFWrapper.Function_RemoveOutput (Handle, AOutputHandle)); + } + + public CImplicitPort FindInput (String AIdentifier) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + IntPtr newInput = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Function_FindInput (Handle, byteIdentifier, out newInput)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newInput); + } + + public CImplicitPort FindOutput (String AIdentifier) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + IntPtr newOutput = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Function_FindOutput (Handle, byteIdentifier, out newOutput)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newOutput); + } + + } + + public class CImplicitFunction : CFunction + { + public CImplicitFunction (IntPtr NewHandle) : base (NewHandle) + { + } + + public String GetIdentifier () + { + UInt32 sizeIdentifier = 0; + UInt32 neededIdentifier = 0; + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_GetIdentifier (Handle, sizeIdentifier, out neededIdentifier, IntPtr.Zero)); + sizeIdentifier = neededIdentifier; + byte[] bytesIdentifier = new byte[sizeIdentifier]; + GCHandle dataIdentifier = GCHandle.Alloc(bytesIdentifier, GCHandleType.Pinned); + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_GetIdentifier (Handle, sizeIdentifier, out neededIdentifier, dataIdentifier.AddrOfPinnedObject())); + dataIdentifier.Free(); + return Encoding.UTF8.GetString(bytesIdentifier).TrimEnd(char.MinValue); + } + + public void SetIdentifier (String AIdentifier) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_SetIdentifier (Handle, byteIdentifier)); + } + + public CImplicitNode AddNode (eImplicitNodeType ANodeType, String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + Int32 enumNodeType = (Int32) ANodeType; + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddNode (Handle, enumNodeType, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CSinNode AddSinNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddSinNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CCosNode AddCosNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddCosNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CTanNode AddTanNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddTanNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CArcSinNode AddArcSinNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddArcSinNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CArcCosNode AddArcCosNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddArcCosNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CArcTan2Node AddArcTan2Node (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddArcTan2Node (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CSinhNode AddSinhNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddSinhNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CCoshNode AddCoshNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddCoshNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CTanhNode AddTanhNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddTanhNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CRoundNode AddRoundNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddRoundNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CCeilNode AddCeilNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddCeilNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CFloorNode AddFloorNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddFloorNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CSignNode AddSignNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddSignNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CFractNode AddFractNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddFractNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CAbsNode AddAbsNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddAbsNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CExpNode AddExpNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddExpNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CLogNode AddLogNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddLogNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CLog2Node AddLog2Node (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddLog2Node (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CLog10Node AddLog10Node (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddLog10Node (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CLengthNode AddLengthNode (String AIdentifier, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddLengthNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CTransposeNode AddTransposeNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddTransposeNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CInverseNode InverseNode (String AIdentifier, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_InverseNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CSqrtNode AddSqrtNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddSqrtNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CResourceIdNode AddResourceIdNode (String AIdentifier, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddResourceIdNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CAdditionNode AddAdditionNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddAdditionNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CSubtractionNode AddSubtractionNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddSubtractionNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CMultiplicationNode AddMultiplicationNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddMultiplicationNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CDivisionNode AddDivisionNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddDivisionNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CDotNode AddDotNode (String AIdentifier, String ADisplayName, String ATag) + { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddDotNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); + } + + public CCrossNode AddCrossNode (String AIdentifier, String ADisplayName, String ATag) { - Internal.InternalCompositeConstituent[] intdataComposite = new Internal.InternalCompositeConstituent[AComposite.Length]; - for (int index = 0; index < AComposite.Length; index++) - intdataComposite[index] = Internal.Lib3MFWrapper.convertStructToInternal_CompositeConstituent(AComposite[index]); - GCHandle dataComposite = GCHandle.Alloc(intdataComposite, GCHandleType.Pinned); - UInt32 resultPropertyID = 0; + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.CompositeMaterials_AddComposite (Handle, (UInt64) AComposite.Length, dataComposite.AddrOfPinnedObject(), out resultPropertyID)); - dataComposite.Free (); - return resultPropertyID; + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddCrossNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public void RemoveComposite (UInt32 APropertyID) + public CMatVecMultiplicationNode AddMatVecMultiplicationNode (String AIdentifier, String ADisplayName, String ATag) { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.CompositeMaterials_RemoveComposite (Handle, APropertyID)); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddMatVecMultiplicationNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public void GetComposite (UInt32 APropertyID, out sCompositeConstituent[] AComposite) + public CMinNode AddMinNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) { - UInt64 sizeComposite = 0; - UInt64 neededComposite = 0; - CheckError(Internal.Lib3MFWrapper.CompositeMaterials_GetComposite (Handle, APropertyID, sizeComposite, out neededComposite, IntPtr.Zero)); - sizeComposite = neededComposite; - var arrayComposite = new Internal.InternalCompositeConstituent[sizeComposite]; - GCHandle dataComposite = GCHandle.Alloc(arrayComposite, GCHandleType.Pinned); + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.CompositeMaterials_GetComposite (Handle, APropertyID, sizeComposite, out neededComposite, dataComposite.AddrOfPinnedObject())); - dataComposite.Free(); - AComposite = new sCompositeConstituent[sizeComposite]; - for (int index = 0; index < AComposite.Length; index++) - AComposite[index] = Internal.Lib3MFWrapper.convertInternalToStruct_CompositeConstituent(arrayComposite[index]); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddMinNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - } - - public class CMultiPropertyGroup : CResource - { - public CMultiPropertyGroup (IntPtr NewHandle) : base (NewHandle) + public CMaxNode AddMaxNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddMaxNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public UInt32 GetCount () + public CFmodNode AddFmodNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) { - UInt32 resultCount = 0; + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetCount (Handle, out resultCount)); - return resultCount; + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddFmodNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public void GetAllPropertyIDs (out UInt32[] APropertyIDs) + public CPowNode AddPowNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) { - UInt64 sizePropertyIDs = 0; - UInt64 neededPropertyIDs = 0; - CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetAllPropertyIDs (Handle, sizePropertyIDs, out neededPropertyIDs, IntPtr.Zero)); - sizePropertyIDs = neededPropertyIDs; - APropertyIDs = new UInt32[sizePropertyIDs]; - GCHandle dataPropertyIDs = GCHandle.Alloc(APropertyIDs, GCHandleType.Pinned); + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetAllPropertyIDs (Handle, sizePropertyIDs, out neededPropertyIDs, dataPropertyIDs.AddrOfPinnedObject())); - dataPropertyIDs.Free(); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddPowNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public UInt32 AddMultiProperty (UInt32[] APropertyIDs) + public CSelectNode AddSelectNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) { - GCHandle dataPropertyIDs = GCHandle.Alloc(APropertyIDs, GCHandleType.Pinned); - UInt32 resultPropertyID = 0; + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_AddMultiProperty (Handle, (UInt64) APropertyIDs.Length, dataPropertyIDs.AddrOfPinnedObject(), out resultPropertyID)); - dataPropertyIDs.Free (); - return resultPropertyID; + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddSelectNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public void SetMultiProperty (UInt32 APropertyID, UInt32[] APropertyIDs) + public CClampNode AddClampNode (String AIdentifier, eImplicitNodeConfiguration AConfiguration, String ADisplayName, String ATag) { - GCHandle dataPropertyIDs = GCHandle.Alloc(APropertyIDs, GCHandleType.Pinned); + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + Int32 enumConfiguration = (Int32) AConfiguration; + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_SetMultiProperty (Handle, APropertyID, (UInt64) APropertyIDs.Length, dataPropertyIDs.AddrOfPinnedObject())); - dataPropertyIDs.Free (); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddClampNode (Handle, byteIdentifier, enumConfiguration, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public void GetMultiProperty (UInt32 APropertyID, out UInt32[] APropertyIDs) + public CComposeVectorNode AddComposeVectorNode (String AIdentifier, String ADisplayName, String ATag) { - UInt64 sizePropertyIDs = 0; - UInt64 neededPropertyIDs = 0; - CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetMultiProperty (Handle, APropertyID, sizePropertyIDs, out neededPropertyIDs, IntPtr.Zero)); - sizePropertyIDs = neededPropertyIDs; - APropertyIDs = new UInt32[sizePropertyIDs]; - GCHandle dataPropertyIDs = GCHandle.Alloc(APropertyIDs, GCHandleType.Pinned); + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetMultiProperty (Handle, APropertyID, sizePropertyIDs, out neededPropertyIDs, dataPropertyIDs.AddrOfPinnedObject())); - dataPropertyIDs.Free(); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddComposeVectorNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public void RemoveMultiProperty (UInt32 APropertyID) + public CVectorFromScalarNode AddVectorFromScalarNode (String AIdentifier, String ADisplayName, String ATag) { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_RemoveMultiProperty (Handle, APropertyID)); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddVectorFromScalarNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public UInt32 GetLayerCount () + public CDecomposeVectorNode AddDecomposeVectorNode (String AIdentifier, String ADisplayName, String ATag) { - UInt32 resultCount = 0; + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetLayerCount (Handle, out resultCount)); - return resultCount; + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddDecomposeVectorNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public UInt32 AddLayer (sMultiPropertyLayer ATheLayer) + public CComposeMatrixNode AddComposeMatrixNode (String AIdentifier, String ADisplayName, String ATag) { - Internal.InternalMultiPropertyLayer intTheLayer = Internal.Lib3MFWrapper.convertStructToInternal_MultiPropertyLayer (ATheLayer); - UInt32 resultLayerIndex = 0; + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_AddLayer (Handle, intTheLayer, out resultLayerIndex)); - return resultLayerIndex; + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddComposeMatrixNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public sMultiPropertyLayer GetLayer (UInt32 ALayerIndex) + public CMatrixFromRowsNode AddMatrixFromRowsNode (String AIdentifier, String ADisplayName, String ATag) { - Internal.InternalMultiPropertyLayer intresultTheLayer; + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_GetLayer (Handle, ALayerIndex, out intresultTheLayer)); - return Internal.Lib3MFWrapper.convertInternalToStruct_MultiPropertyLayer (intresultTheLayer); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddMatrixFromRowsNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public void RemoveLayer (UInt32 ALayerIndex) + public CMatrixFromColumnsNode AddMatrixFromColumnsNode (String AIdentifier, String ADisplayName, String ATag) { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.MultiPropertyGroup_RemoveLayer (Handle, ALayerIndex)); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddMatrixFromColumnsNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - } - - public class CAttachment : CBase - { - public CAttachment (IntPtr NewHandle) : base (NewHandle) + public CConstantNode AddConstantNode (String AIdentifier, String ADisplayName, String ATag) { + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddConstantNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public String GetPath () + public CConstVecNode AddConstVecNode (String AIdentifier, String ADisplayName, String ATag) { - UInt32 sizePath = 0; - UInt32 neededPath = 0; - CheckError(Internal.Lib3MFWrapper.Attachment_GetPath (Handle, sizePath, out neededPath, IntPtr.Zero)); - sizePath = neededPath; - byte[] bytesPath = new byte[sizePath]; - GCHandle dataPath = GCHandle.Alloc(bytesPath, GCHandleType.Pinned); + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.Attachment_GetPath (Handle, sizePath, out neededPath, dataPath.AddrOfPinnedObject())); - dataPath.Free(); - return Encoding.UTF8.GetString(bytesPath).TrimEnd(char.MinValue); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddConstVecNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public void SetPath (String APath) + public CConstMatNode AddConstMatNode (String AIdentifier, String ADisplayName, String ATag) { - byte[] bytePath = Encoding.UTF8.GetBytes(APath + char.MinValue); + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.Attachment_SetPath (Handle, bytePath)); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddConstMatNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public CPackagePart PackagePart () + public CMeshNode AddMeshNode (String AIdentifier, String ADisplayName, String ATag) { - IntPtr newPackagePart = IntPtr.Zero; + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.Attachment_PackagePart (Handle, out newPackagePart)); - return Internal.Lib3MFWrapper.PolymorphicFactory(newPackagePart); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddMeshNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public String GetRelationShipType () + public CUnsignedMeshNode AddUnsignedMeshNode (String AIdentifier, String ADisplayName, String ATag) { - UInt32 sizePath = 0; - UInt32 neededPath = 0; - CheckError(Internal.Lib3MFWrapper.Attachment_GetRelationShipType (Handle, sizePath, out neededPath, IntPtr.Zero)); - sizePath = neededPath; - byte[] bytesPath = new byte[sizePath]; - GCHandle dataPath = GCHandle.Alloc(bytesPath, GCHandleType.Pinned); + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.Attachment_GetRelationShipType (Handle, sizePath, out neededPath, dataPath.AddrOfPinnedObject())); - dataPath.Free(); - return Encoding.UTF8.GetString(bytesPath).TrimEnd(char.MinValue); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddUnsignedMeshNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public void SetRelationShipType (String APath) + public CFunctionCallNode AddFunctionCallNode (String AIdentifier, String ADisplayName, String ATag) { - byte[] bytePath = Encoding.UTF8.GetBytes(APath + char.MinValue); + byte[] byteIdentifier = Encoding.UTF8.GetBytes(AIdentifier + char.MinValue); + byte[] byteDisplayName = Encoding.UTF8.GetBytes(ADisplayName + char.MinValue); + byte[] byteTag = Encoding.UTF8.GetBytes(ATag + char.MinValue); + IntPtr newNode = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.Attachment_SetRelationShipType (Handle, bytePath)); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddFunctionCallNode (Handle, byteIdentifier, byteDisplayName, byteTag, out newNode)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newNode); } - public void WriteToFile (String AFileName) + public CNodeIterator GetNodes () { - byte[] byteFileName = Encoding.UTF8.GetBytes(AFileName + char.MinValue); + IntPtr newIterator = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.Attachment_WriteToFile (Handle, byteFileName)); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_GetNodes (Handle, out newIterator)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newIterator); } - public void ReadFromFile (String AFileName) + public void RemoveNode (CImplicitNode ANode) { - byte[] byteFileName = Encoding.UTF8.GetBytes(AFileName + char.MinValue); + IntPtr ANodeHandle = IntPtr.Zero; + if (ANode != null) + ANodeHandle = ANode.GetHandle(); - CheckError(Internal.Lib3MFWrapper.Attachment_ReadFromFile (Handle, byteFileName)); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_RemoveNode (Handle, ANodeHandle)); } - public void ReadFromCallback (IntPtr ATheReadCallback, UInt64 AStreamSize, IntPtr ATheSeekCallback, UInt64 AUserData) + public void AddLink (CImplicitPort ASource, CImplicitPort ATarget) { + IntPtr ASourceHandle = IntPtr.Zero; + if (ASource != null) + ASourceHandle = ASource.GetHandle(); + IntPtr ATargetHandle = IntPtr.Zero; + if (ATarget != null) + ATargetHandle = ATarget.GetHandle(); - CheckError(Internal.Lib3MFWrapper.Attachment_ReadFromCallback (Handle, ATheReadCallback, AStreamSize, ATheSeekCallback, AUserData)); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddLink (Handle, ASourceHandle, ATargetHandle)); } - public UInt64 GetStreamSize () + public void AddLinkByNames (String ASource, String ATarget) { - UInt64 resultStreamSize = 0; + byte[] byteSource = Encoding.UTF8.GetBytes(ASource + char.MinValue); + byte[] byteTarget = Encoding.UTF8.GetBytes(ATarget + char.MinValue); - CheckError(Internal.Lib3MFWrapper.Attachment_GetStreamSize (Handle, out resultStreamSize)); - return resultStreamSize; + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_AddLinkByNames (Handle, byteSource, byteTarget)); } - public void WriteToBuffer (out Byte[] ABuffer) + public void Clear () { - UInt64 sizeBuffer = 0; - UInt64 neededBuffer = 0; - CheckError(Internal.Lib3MFWrapper.Attachment_WriteToBuffer (Handle, sizeBuffer, out neededBuffer, IntPtr.Zero)); - sizeBuffer = neededBuffer; - ABuffer = new Byte[sizeBuffer]; - GCHandle dataBuffer = GCHandle.Alloc(ABuffer, GCHandleType.Pinned); - CheckError(Internal.Lib3MFWrapper.Attachment_WriteToBuffer (Handle, sizeBuffer, out neededBuffer, dataBuffer.AddrOfPinnedObject())); - dataBuffer.Free(); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_Clear (Handle)); } - public void ReadFromBuffer (Byte[] ABuffer) + public void SortNodesTopologically () { - GCHandle dataBuffer = GCHandle.Alloc(ABuffer, GCHandleType.Pinned); - CheckError(Internal.Lib3MFWrapper.Attachment_ReadFromBuffer (Handle, (UInt64) ABuffer.Length, dataBuffer.AddrOfPinnedObject())); - dataBuffer.Free (); + CheckError(Internal.Lib3MFWrapper.ImplicitFunction_SortNodesTopologically (Handle)); } } - public class CTexture2D : CResource + public class CFunctionFromImage3D : CFunction { - public CTexture2D (IntPtr NewHandle) : base (NewHandle) + public CFunctionFromImage3D (IntPtr NewHandle) : base (NewHandle) { } - public CAttachment GetAttachment () + public CImage3D GetImage3D () { - IntPtr newAttachment = IntPtr.Zero; + IntPtr newImage3D = IntPtr.Zero; - CheckError(Internal.Lib3MFWrapper.Texture2D_GetAttachment (Handle, out newAttachment)); - return Internal.Lib3MFWrapper.PolymorphicFactory(newAttachment); + CheckError(Internal.Lib3MFWrapper.FunctionFromImage3D_GetImage3D (Handle, out newImage3D)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newImage3D); } - public void SetAttachment (CAttachment AAttachment) + public void SetImage3D (CImage3D AImage3D) { - IntPtr AAttachmentHandle = IntPtr.Zero; - if (AAttachment != null) - AAttachmentHandle = AAttachment.GetHandle(); + IntPtr AImage3DHandle = IntPtr.Zero; + if (AImage3D != null) + AImage3DHandle = AImage3D.GetHandle(); - CheckError(Internal.Lib3MFWrapper.Texture2D_SetAttachment (Handle, AAttachmentHandle)); + CheckError(Internal.Lib3MFWrapper.FunctionFromImage3D_SetImage3D (Handle, AImage3DHandle)); } - public eTextureType GetContentType () + public void SetFilter (eTextureFilter AFilter) { - Int32 resultContentType = 0; + Int32 enumFilter = (Int32) AFilter; - CheckError(Internal.Lib3MFWrapper.Texture2D_GetContentType (Handle, out resultContentType)); - return (eTextureType) (resultContentType); + CheckError(Internal.Lib3MFWrapper.FunctionFromImage3D_SetFilter (Handle, enumFilter)); } - public void SetContentType (eTextureType AContentType) + public eTextureFilter GetFilter () { - Int32 enumContentType = (Int32) AContentType; + Int32 resultFilter = 0; - CheckError(Internal.Lib3MFWrapper.Texture2D_SetContentType (Handle, enumContentType)); + CheckError(Internal.Lib3MFWrapper.FunctionFromImage3D_GetFilter (Handle, out resultFilter)); + return (eTextureFilter) (resultFilter); } - public void GetTileStyleUV (out eTextureTileStyle ATileStyleU, out eTextureTileStyle ATileStyleV) + public void SetTileStyles (eTextureTileStyle ATileStyleU, eTextureTileStyle ATileStyleV, eTextureTileStyle ATileStyleW) + { + Int32 enumTileStyleU = (Int32) ATileStyleU; + Int32 enumTileStyleV = (Int32) ATileStyleV; + Int32 enumTileStyleW = (Int32) ATileStyleW; + + CheckError(Internal.Lib3MFWrapper.FunctionFromImage3D_SetTileStyles (Handle, enumTileStyleU, enumTileStyleV, enumTileStyleW)); + } + + public void GetTileStyles (out eTextureTileStyle ATileStyleU, out eTextureTileStyle ATileStyleV, out eTextureTileStyle ATileStyleW) { Int32 resultTileStyleU = 0; Int32 resultTileStyleV = 0; + Int32 resultTileStyleW = 0; - CheckError(Internal.Lib3MFWrapper.Texture2D_GetTileStyleUV (Handle, out resultTileStyleU, out resultTileStyleV)); + CheckError(Internal.Lib3MFWrapper.FunctionFromImage3D_GetTileStyles (Handle, out resultTileStyleU, out resultTileStyleV, out resultTileStyleW)); ATileStyleU = (eTextureTileStyle) (resultTileStyleU); ATileStyleV = (eTextureTileStyle) (resultTileStyleV); + ATileStyleW = (eTextureTileStyle) (resultTileStyleW); } - public void SetTileStyleUV (eTextureTileStyle ATileStyleU, eTextureTileStyle ATileStyleV) + public Double GetOffset () { - Int32 enumTileStyleU = (Int32) ATileStyleU; - Int32 enumTileStyleV = (Int32) ATileStyleV; + Double resultOffset = 0; - CheckError(Internal.Lib3MFWrapper.Texture2D_SetTileStyleUV (Handle, enumTileStyleU, enumTileStyleV)); + CheckError(Internal.Lib3MFWrapper.FunctionFromImage3D_GetOffset (Handle, out resultOffset)); + return resultOffset; } - public eTextureFilter GetFilter () + public void SetOffset (Double AOffset) { - Int32 resultFilter = 0; - CheckError(Internal.Lib3MFWrapper.Texture2D_GetFilter (Handle, out resultFilter)); - return (eTextureFilter) (resultFilter); + CheckError(Internal.Lib3MFWrapper.FunctionFromImage3D_SetOffset (Handle, AOffset)); } - public void SetFilter (eTextureFilter AFilter) + public Double GetScale () { - Int32 enumFilter = (Int32) AFilter; + Double resultScale = 0; - CheckError(Internal.Lib3MFWrapper.Texture2D_SetFilter (Handle, enumFilter)); + CheckError(Internal.Lib3MFWrapper.FunctionFromImage3D_GetScale (Handle, out resultScale)); + return resultScale; + } + + public void SetScale (Double AScale) + { + + CheckError(Internal.Lib3MFWrapper.FunctionFromImage3D_SetScale (Handle, AScale)); } } @@ -4829,6 +8470,14 @@ public CSliceStack GetSliceStackByID (UInt32 AUniqueResourceID) return Internal.Lib3MFWrapper.PolymorphicFactory(newSliceStacInstance); } + public CLevelSet GetLevelSetByID (UInt32 AUniqueResourceID) + { + IntPtr newLevelSetObjectInstance = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Model_GetLevelSetByID (Handle, AUniqueResourceID, out newLevelSetObjectInstance)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newLevelSetObjectInstance); + } + public String GetBuildUUID (out bool AHasUUID) { Byte resultHasUUID = 0; @@ -4956,6 +8605,14 @@ public CSliceStackIterator GetSliceStacks () return Internal.Lib3MFWrapper.PolymorphicFactory(newResourceIterator); } + public CImage3DIterator GetImage3Ds () + { + IntPtr newResourceIterator = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Model_GetImage3Ds (Handle, out newResourceIterator)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newResourceIterator); + } + public CModel MergeToModel () { IntPtr newMergedModelInstance = IntPtr.Zero; @@ -4964,6 +8621,15 @@ public CModel MergeToModel () return Internal.Lib3MFWrapper.PolymorphicFactory(newMergedModelInstance); } + public void MergeFromModel (CModel AModelInstance) + { + IntPtr AModelInstanceHandle = IntPtr.Zero; + if (AModelInstance != null) + AModelInstanceHandle = AModelInstance.GetHandle(); + + CheckError(Internal.Lib3MFWrapper.Model_MergeFromModel (Handle, AModelInstanceHandle)); + } + public CMeshObject AddMeshObject () { IntPtr newMeshObjectInstance = IntPtr.Zero; @@ -5045,6 +8711,22 @@ public CMultiPropertyGroup AddMultiPropertyGroup () return Internal.Lib3MFWrapper.PolymorphicFactory(newMultiPropertyGroupInstance); } + public CImageStack AddImageStack (UInt32 AColumnCount, UInt32 ARowCount, UInt32 ASheetCount) + { + IntPtr newInstance = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Model_AddImageStack (Handle, AColumnCount, ARowCount, ASheetCount, out newInstance)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newInstance); + } + + public CImageStack GetImageStackByID (UInt32 AUniqueResourceID) + { + IntPtr newImageStackInstance = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Model_GetImageStackByID (Handle, AUniqueResourceID, out newImageStackInstance)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newImageStackInstance); + } + public CBuildItem AddBuildItem (CObject AObject, sTransform ATransform) { IntPtr AObjectHandle = IntPtr.Zero; @@ -5177,6 +8859,66 @@ public CKeyStore GetKeyStore () return Internal.Lib3MFWrapper.PolymorphicFactory(newKeyStore); } + public CFunctionIterator GetFunctions () + { + IntPtr newTheResourceIterator = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Model_GetFunctions (Handle, out newTheResourceIterator)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newTheResourceIterator); + } + + public CImplicitFunction AddImplicitFunction () + { + IntPtr newFunctionInstance = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Model_AddImplicitFunction (Handle, out newFunctionInstance)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newFunctionInstance); + } + + public CFunctionFromImage3D AddFunctionFromImage3D (CImage3D AImage3DInstance) + { + IntPtr AImage3DInstanceHandle = IntPtr.Zero; + if (AImage3DInstance != null) + AImage3DInstanceHandle = AImage3DInstance.GetHandle(); + IntPtr newFunctionInstance = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Model_AddFunctionFromImage3D (Handle, AImage3DInstanceHandle, out newFunctionInstance)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newFunctionInstance); + } + + public CVolumeData AddVolumeData () + { + IntPtr newVolumeDataInstance = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Model_AddVolumeData (Handle, out newVolumeDataInstance)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newVolumeDataInstance); + } + + public CLevelSet AddLevelSet () + { + IntPtr newLevelSetInstance = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Model_AddLevelSet (Handle, out newLevelSetInstance)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newLevelSetInstance); + } + + public CLevelSetIterator GetLevelSets () + { + IntPtr newResourceIterator = IntPtr.Zero; + + CheckError(Internal.Lib3MFWrapper.Model_GetLevelSets (Handle, out newResourceIterator)); + return Internal.Lib3MFWrapper.PolymorphicFactory(newResourceIterator); + } + + public void RemoveResource (CResource AResource) + { + IntPtr AResourceHandle = IntPtr.Zero; + if (AResource != null) + AResourceHandle = AResource.GetHandle(); + + CheckError(Internal.Lib3MFWrapper.Model_RemoveResource (Handle, AResourceHandle)); + } + } class Wrapper diff --git a/Autogenerated/Bindings/Cpp/lib3mf_abi.hpp b/Autogenerated/Bindings/Cpp/lib3mf_abi.hpp index 44b8273b8..f79071d19 100644 --- a/Autogenerated/Bindings/Cpp/lib3mf_abi.hpp +++ b/Autogenerated/Bindings/Cpp/lib3mf_abi.hpp @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++-Header file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -575,6 +575,45 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerialsiterator_getcurrentcomposi */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup(Lib3MF_MultiPropertyGroupIterator pMultiPropertyGroupIterator, Lib3MF_MultiPropertyGroup * pResource); +/************************************************************************************************************************* + Class definition for Image3DIterator +**************************************************************************************************************************/ + +/** +* Returns the Image3D the iterator points at. +* +* @param[in] pImage3DIterator - Image3DIterator instance. +* @param[out] pResource - returns the Image3D instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3diterator_getcurrentimage3d(Lib3MF_Image3DIterator pImage3DIterator, Lib3MF_Image3D * pResource); + +/************************************************************************************************************************* + Class definition for FunctionIterator +**************************************************************************************************************************/ + +/** +* Returns the Function the iterator points at. +* +* @param[in] pFunctionIterator - FunctionIterator instance. +* @param[out] pResource - returns the Function instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functioniterator_getcurrentfunction(Lib3MF_FunctionIterator pFunctionIterator, Lib3MF_Function * pResource); + +/************************************************************************************************************************* + Class definition for LevelSetIterator +**************************************************************************************************************************/ + +/** +* Returns the LevelSet the iterator points at. +* +* @param[in] pLevelSetIterator - LevelSetIterator instance. +* @param[out] pResource - returns the MeshObject instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelsetiterator_getcurrentlevelset(Lib3MF_LevelSetIterator pLevelSetIterator, Lib3MF_LevelSet * pResource); + /************************************************************************************************************************* Class definition for MetaData **************************************************************************************************************************/ @@ -834,6 +873,15 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_object_ismeshobject(Lib3MF_Object pObject, b */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_object_iscomponentsobject(Lib3MF_Object pObject, bool * pIsComponentsObject); +/** +* Retrieves, if an object is a level set object +* +* @param[in] pObject - Object instance. +* @param[out] pIsLevelSetObject - returns, whether the object is a level set object +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_object_islevelsetobject(Lib3MF_Object pObject, bool * pIsLevelSetObject); + /** * Retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. * @@ -1166,6 +1214,174 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_ismanifoldandoriented(Lib3MF_Mesh */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_beamlattice(Lib3MF_MeshObject pMeshObject, Lib3MF_BeamLattice * pTheBeamLattice); +/** +* Retrieves the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[out] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_getvolumedata(Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_setvolumedata(Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData pTheVolumeData); + +/************************************************************************************************************************* + Class definition for LevelSet +**************************************************************************************************************************/ + +/** +* Returns the function that is used as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getfunction(Lib3MF_LevelSet pLevelSet, Lib3MF_Function * pTheFunction); + +/** +* Sets the function to use as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setfunction(Lib3MF_LevelSet pLevelSet, Lib3MF_Function pTheFunction); + +/** +* Returns the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTransform - the transformation matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_gettransform(Lib3MF_LevelSet pLevelSet, Lib3MF::sTransform * pTransform); + +/** +* Sets the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_settransform(Lib3MF_LevelSet pLevelSet, const Lib3MF::sTransform * pTransform); + +/** +* Returns the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getchannelname(Lib3MF_LevelSet pLevelSet, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); + +/** +* Sets the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pChannelName - new name of the function output channel +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setchannelname(Lib3MF_LevelSet pLevelSet, const char * pChannelName); + +/** +* Sets the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setminfeaturesize(Lib3MF_LevelSet pLevelSet, Lib3MF_double dMinFeatureSize); + +/** +* Returns the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getminfeaturesize(Lib3MF_LevelSet pLevelSet, Lib3MF_double * pMinFeatureSize); + +/** +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dFallBackValue - fallback value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setfallbackvalue(Lib3MF_LevelSet pLevelSet, Lib3MF_double dFallBackValue); + +/** +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pFallBackValue - fallback value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getfallbackvalue(Lib3MF_LevelSet pLevelSet, Lib3MF_double * pFallBackValue); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] bMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setmeshbboxonly(Lib3MF_LevelSet pLevelSet, bool bMeshBBoxOnly); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getmeshbboxonly(Lib3MF_LevelSet pLevelSet, bool * pMeshBBoxOnly); + +/** +* Sets the mesh to use as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setmesh(Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject pTheMesh); + +/** +* Returns the mesh that is used as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getmesh(Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject * pTheMesh); + +/** +* Retrieves the VolumeData this Object. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheVolumeData - the VolumeData of this Object +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getvolumedata(Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this LevelSet. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setvolumedata(Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData pTheVolumeData); + /************************************************************************************************************************* Class definition for BeamLattice **************************************************************************************************************************/ @@ -1396,784 +1612,3179 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_addbeamset(Lib3MF_BeamLattice pB LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getbeamset(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF_BeamSet * pBeamSet); /************************************************************************************************************************* - Class definition for Component + Class definition for FunctionReference **************************************************************************************************************************/ /** -* Returns the Resource Instance of the component. +* Returns the UniqueResourceID of the Function. Only functions with a 'pos'-input are allowed. * -* @param[in] pComponent - Component instance. -* @param[out] pObjectResource - filled with the Resource Instance. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getobjectresource(Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_getfunctionresourceid(Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 * pUniqueResourceID); /** -* Returns the UniqueResourceID of the component. +* Sets the UniqueResourceID to refer to. * -* @param[in] pComponent - Component instance. -* @param[out] pUniqueResourceID - returns the UniqueResourceID. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nUniqueResourceID - UniqueResourceID of the function * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getobjectresourceid(Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_setfunctionresourceid(Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 nUniqueResourceID); /** -* returns, whether a component has a UUID and, if true, the component's UUID +* Returns the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[out] pHasUUID - flag whether the component has a UUID -* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) -* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pTransform - the transformation matrix * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getuuid(Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_gettransform(Lib3MF_FunctionReference pFunctionReference, Lib3MF::sTransform * pTransform); /** -* sets the component's UUID +* Sets the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pTransform - new transformation matrix * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_setuuid(Lib3MF_Component pComponent, const char * pUUID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_settransform(Lib3MF_FunctionReference pFunctionReference, const Lib3MF::sTransform * pTransform); /** -* Returns, if the component has a different transformation than the identity matrix +* Returns the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_hastransform(Lib3MF_Component pComponent, bool * pHasTransform); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_getchannelname(Lib3MF_FunctionReference pFunctionReference, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); /** -* Returns the transformation matrix of the component. +* Sets the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pTransform - filled with the component transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pChannelName - new name of the function output channel * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_gettransform(Lib3MF_Component pComponent, Lib3MF::sTransform * pTransform); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_setchannelname(Lib3MF_FunctionReference pFunctionReference, const char * pChannelName); /** -* Sets the transformation matrix of the component. +* Sets the minimal feature size as a hint for the function evaluator * -* @param[in] pComponent - Component instance. -* @param[in] pTransform - new transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_settransform(Lib3MF_Component pComponent, const Lib3MF::sTransform * pTransform); - -/************************************************************************************************************************* - Class definition for ComponentsObject -**************************************************************************************************************************/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_setminfeaturesize(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dMinFeatureSize); /** -* Adds a new component to a components object. +* Returns the minimal feature size as a hint for the function evaluator * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] pObjectResource - object to add as component. Must not lead to circular references! -* @param[in] pTransform - optional transform matrix for the component. -* @param[out] pComponentInstance - new component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_addcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const Lib3MF::sTransform * pTransform, Lib3MF_Component * pComponentInstance); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_getminfeaturesize(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pMinFeatureSize); /** -* Retrieves a component from a component object. +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) -* @param[out] pComponentInstance - component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dFallBackValue - fallback value * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_getcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_setfallbackvalue(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dFallBackValue); /** -* Retrieves a component count of a component object. +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[out] pCount - returns the component count +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pFallBackValue - fallback value * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_getcomponentcount(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_getfallbackvalue(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pFallBackValue); /************************************************************************************************************************* - Class definition for BeamSet + Class definition for VolumeDataColor **************************************************************************************************************************/ -/** -* Sets a beamset's name string -* -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pName - new name of the beamset. -* @return error code or 0 (success) -*/ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setname(Lib3MF_BeamSet pBeamSet, const char * pName); +/************************************************************************************************************************* + Class definition for MaterialMapping +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for VolumeDataComposite +**************************************************************************************************************************/ /** -* Retrieves a beamset's name string +* Returns the BaseMaterialGroup used within this volume data item * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pBaseMaterialGroupInstance - The BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getname(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_getbasematerialgroup(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); /** -* Sets a beamset's identifier string +* Sets the BaseMaterialGroup to use within this volume data item. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pIdentifier - new name of the beamset. +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pBaseMaterialGroupInstance - The new BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setidentifier(Lib3MF_BeamSet pBeamSet, const char * pIdentifier); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_setbasematerialgroup(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance); /** -* Retrieves a beamset's identifier string +* Returns the number of material mappings of this VolumeDataComposite element * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) -* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pCount - the number of material mappings. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getidentifier(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_getmaterialmappingcount(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 * pCount); /** -* Retrieves the reference count of a beamset +* Returns MaterialMappting with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the reference count +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - Index of the MaterialMapping in question. +* @param[out] pTheMaterialMapping - MaterialMapping used in this element * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_getmaterialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Sets the references of a beamset +* Adds a the MaterialMapping * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pTransform - new transformation matrix +* @param[out] pTheMaterialMapping - The new MaterialMapping * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_addmaterialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, const Lib3MF::sTransform * pTransform, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Retrieves the references of a beamset +* Removes the MaterialMapping with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - The index of the MaterialMapping to be removed. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_removematerialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex); + +/************************************************************************************************************************* + Class definition for VolumeDataProperty +**************************************************************************************************************************/ /** -* Retrieves the ball reference count of a beamset +* Gets the qualified name of this property. * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the ball reference count +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] nPropertyNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pPropertyNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPropertyNameBuffer - buffer of The qualified name of this property., may be NULL * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getballreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataproperty_getname(Lib3MF_VolumeDataProperty pVolumeDataProperty, const Lib3MF_uint32 nPropertyNameBufferSize, Lib3MF_uint32* pPropertyNameNeededChars, char * pPropertyNameBuffer); /** -* Sets the ball references of a beamset +* Sets whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] bIsRequired - New value for whether this property is required to process this 3MF document instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setballreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataproperty_setisrequired(Lib3MF_VolumeDataProperty pVolumeDataProperty, bool bIsRequired); /** -* Retrieves the ball references of a beamset +* Returns whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[out] pIsRequired - Is this property required to process this 3MF document instance? * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getballreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataproperty_isrequired(Lib3MF_VolumeDataProperty pVolumeDataProperty, bool * pIsRequired); /************************************************************************************************************************* - Class definition for BaseMaterialGroup + Class definition for VolumeData **************************************************************************************************************************/ /** -* Retrieves the count of base materials in the material group. +* Returns the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[out] pCount - returns the count of base materials. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - filled with the VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getcount(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getcomposite(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* returns all the PropertyIDs of all materials in this group +* Creates a new VolumeDataComposite for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - The new VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getallpropertyids(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_createnewcomposite(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* Adds a new material to the material group +* Removes the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] pName - new name of the base material. -* @param[in] pDisplayColor - Display color of the material -* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_addmaterial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const Lib3MF::sColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_removecomposite(Lib3MF_VolumeData pVolumeData); /** -* Removes a material from the material group. +* Returns the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheColorData - filled with the VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_removematerial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getcolor(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataColor * pTheColorData); /** -* Returns the base material's name +* Creates a new VolumeDataColor for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheColorData - The new VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_createnewcolor(Lib3MF_VolumeData pVolumeData, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataColor * pTheColorData); /** -* Sets a base material's name +* Removes the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pName - new name of the base material. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_setname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_removecolor(Lib3MF_VolumeData pVolumeData); /** -* Sets a base material's display color. +* Returns the number of VolumeDataProperty * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pCount - the number of VolumeDataProperty-elements within this VolumdeData * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_setdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF::sColor * pTheColor); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getpropertycount(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 * pCount); /** -* Returns a base material's display color. +* Returns the VolumeDataProperty at a given Index * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[out] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be returned. +* @param[out] pTheVolumeDataProperty - the VolumeDataProperty at the given index. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sColor * pTheColor); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getproperty(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Adds a new VolumeDataProperty from a Function +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pName - the qualified name (namespace+name) of the Property +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheVolumeDataProperty - the newly created VolumeDataProperty. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_addpropertyfromfunction(Lib3MF_VolumeData pVolumeData, const char * pName, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Removes the VolumeDataProperty with a given index +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be removed. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_removeproperty(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex); /************************************************************************************************************************* - Class definition for ColorGroup + Class definition for Component **************************************************************************************************************************/ /** -* Retrieves the count of base materials in this Color Group. +* Returns the Resource Instance of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[out] pCount - returns the count of colors within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pObjectResource - filled with the Resource Instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getcount(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getobjectresource(Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); /** -* returns all the PropertyIDs of all colors within this group +* Returns the UniqueResourceID of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @param[in] pComponent - Component instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getallpropertyids(Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getobjectresourceid(Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); /** -* Adds a new value. +* returns, whether a component has a UUID and, if true, the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] pTheColor - The new color -* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pHasUUID - flag whether the component has a UUID +* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) +* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_addcolor(Lib3MF_ColorGroup pColorGroup, const Lib3MF::sColor * pTheColor, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getuuid(Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); /** -* Removes a color from the color group. +* sets the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @param[in] pComponent - Component instance. +* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_removecolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_setuuid(Lib3MF_Component pComponent, const char * pUUID); /** -* Sets a color value. +* Returns, if the component has a different transformation than the identity matrix * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[in] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_setcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const Lib3MF::sColor * pTheColor); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_hastransform(Lib3MF_Component pComponent, bool * pHasTransform); /** -* Sets a color value. +* Returns the transformation matrix of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[out] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pTransform - filled with the component transformation matrix * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sColor * pTheColor); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_gettransform(Lib3MF_Component pComponent, Lib3MF::sTransform * pTransform); + +/** +* Sets the transformation matrix of the component. +* +* @param[in] pComponent - Component instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_settransform(Lib3MF_Component pComponent, const Lib3MF::sTransform * pTransform); /************************************************************************************************************************* - Class definition for Texture2DGroup + Class definition for ComponentsObject **************************************************************************************************************************/ /** -* Retrieves the count of tex2coords in the Texture2DGroup. +* Adds a new component to a components object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pCount - returns the count of tex2coords. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] pObjectResource - object to add as component. Must not lead to circular references! +* @param[in] pTransform - optional transform matrix for the component. +* @param[out] pComponentInstance - new component instance * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_getcount(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_addcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const Lib3MF::sTransform * pTransform, Lib3MF_Component * pComponentInstance); /** -* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* Retrieves a component from a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) +* @param[out] pComponentInstance - component instance * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_getallpropertyids(Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_getcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); /** -* Adds a new tex2coord to the Texture2DGroup +* Retrieves a component count of a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. -* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[out] pCount - returns the component count * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_addtex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF::sTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_getcomponentcount(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); + +/************************************************************************************************************************* + Class definition for BeamSet +**************************************************************************************************************************/ /** -* Obtains a tex2coord to the Texture2DGroup +* Sets a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. -* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pName - new name of the beamset. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_gettex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sTex2Coord * pUVCoordinate); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setname(Lib3MF_BeamSet pBeamSet, const char * pName); /** -* Removes a tex2coords from the Texture2DGroup. +* Retrieves a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_removetex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getname(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); /** -* Obtains the texture2D instance of this group. +* Sets a beamset's identifier string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pIdentifier - new name of the beamset. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_gettexture2d(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setidentifier(Lib3MF_BeamSet pBeamSet, const char * pIdentifier); + +/** +* Retrieves a beamset's identifier string +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getidentifier(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Retrieves the reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the reference count +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the ball reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the ball reference count +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getballreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setballreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); + +/** +* Retrieves the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getballreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); /************************************************************************************************************************* - Class definition for CompositeMaterials + Class definition for BaseMaterialGroup **************************************************************************************************************************/ /** -* Retrieves the count of Composite-s in the CompositeMaterials. +* Retrieves the count of base materials in the material group. * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pCount - returns the count of Composite-s +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[out] pCount - returns the count of base materials. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getcount(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getcount(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); /** -* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* returns all the PropertyIDs of all materials in this group * -* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getallpropertyids(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new material to the material group +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] pName - new name of the base material. +* @param[in] pDisplayColor - Display color of the material +* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_addmaterial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const Lib3MF::sColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a material from the material group. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_removematerial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); + +/** +* Returns the base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* Sets a base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pName - new name of the base material. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_setname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); + +/** +* Sets a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_setdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF::sColor * pTheColor); + +/** +* Returns a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[out] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sColor * pTheColor); + +/************************************************************************************************************************* + Class definition for ColorGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of base materials in this Color Group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[out] pCount - returns the count of colors within this color group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getcount(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all colors within this group +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getallpropertyids(Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] pTheColor - The new color +* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_addcolor(Lib3MF_ColorGroup pColorGroup, const Lib3MF::sColor * pTheColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a color from the color group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_removecolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[in] pTheColor - The color +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_setcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const Lib3MF::sColor * pTheColor); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[out] pTheColor - The color +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sColor * pTheColor); + +/************************************************************************************************************************* + Class definition for Texture2DGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of tex2coords in the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pCount - returns the count of tex2coords. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_getcount(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_getallpropertyids(Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_addtex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF::sTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); + +/** +* Obtains a tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. +* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_gettex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sTex2Coord * pUVCoordinate); + +/** +* Removes a tex2coords from the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_removetex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); + +/** +* Obtains the texture2D instance of this group. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_gettexture2d(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); + +/************************************************************************************************************************* + Class definition for CompositeMaterials +**************************************************************************************************************************/ + +/** +* Retrieves the count of Composite-s in the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pCount - returns the count of Composite-s +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getcount(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. * @param[in] nPropertyIDsBufferSize - Number of elements in buffer * @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. * @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the Composite-Mixing Values in the CompositeMaterials. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getallpropertyids(Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getallpropertyids(Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getbasematerialgroup(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); + +/** +* Adds a new Composite-Mixing Values to the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite +* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_addcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const Lib3MF::sCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_removecomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); + +/** +* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, Lib3MF::sCompositeConstituent * pCompositeBuffer); + +/************************************************************************************************************************* + Class definition for MultiPropertyGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the count of MultiProperty-s +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getcount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getallpropertyids(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new MultiProperty to the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. +* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_addmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Sets the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_setmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Removes a MultiProperty from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_removemultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); + +/** +* Retrieves the number of layers of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the number of layers +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getlayercount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup +* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_addlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF::sMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); + +/** +* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried +* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, Lib3MF::sMultiPropertyLayer * pTheLayer); + +/** +* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_removelayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); + +/************************************************************************************************************************* + Class definition for Image3D +**************************************************************************************************************************/ + +/** +* returns the name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of the name of this Image3D, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3d_getname(Lib3MF_Image3D pImage3D, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* sets a new name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] pName - the new name of this Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3d_setname(Lib3MF_Image3D pImage3D, const char * pName); + +/** +* Retrieves, if this Image3D is a ImageStack +* +* @param[in] pImage3D - Image3D instance. +* @param[out] pIsImageStack - returns, whether the Image3D is an ImageStack +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3d_isimagestack(Lib3MF_Image3D pImage3D, bool * pIsImageStack); + +/************************************************************************************************************************* + Class definition for ImageStack +**************************************************************************************************************************/ + +/** +* Retrieves the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pRowCount - number of rows +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getrowcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pRowCount); + +/** +* Sets the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nRowCount - number of rows +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_setrowcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nRowCount); + +/** +* Retrieves the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pColumnCount - number of columns +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getcolumncount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pColumnCount); + +/** +* Sets the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nColumnCount - number of columns +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_setcolumncount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nColumnCount); + +/** +* Retrieves the number of images in the stack. +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pSheetCount - number of images +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getsheetcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pSheetCount); + +/** +* Retrieves a sheet of the stack. Raises an error if sheet is not set. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getsheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment * pSheet); + +/** +* Sets a sheet to an existing attachment. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_setsheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment pSheet); + +/** +* Creates a new sheet attachment with empty data. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_createemptysheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a memory buffer. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] nDataBufferSize - Number of elements in buffer +* @param[in] pDataBuffer - uint8 buffer of binary image data +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_createsheetfrombuffer(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_uint64 nDataBufferSize, const Lib3MF_uint8 * pDataBuffer, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a file on disk. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] pFileName - file name to read from +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_createsheetfromfile(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, const char * pFileName, Lib3MF_Attachment * pSheet); + +/************************************************************************************************************************* + Class definition for Attachment +**************************************************************************************************************************/ + +/** +* Retrieves an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getpath(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new path of the attachment. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_setpath(Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Returns the PackagePart that is this attachment. +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pPackagePart - The PackagePart of this attachment. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_packagepart(Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); + +/** +* Retrieves an attachment's relationship type +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getrelationshiptype(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's relationship type. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new relationship type string. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_setrelationshiptype(Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Writes out the attachment as file. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to write into. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_writetofile(Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to read from. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfromfile(Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pTheReadCallback - Callback to call for reading a data chunk +* @param[in] nStreamSize - number of bytes the callback returns +* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. +* @param[in] pUserData - Userdata that is passed to the callback function +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfromcallback(Lib3MF_Attachment pAttachment, Lib3MF::ReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MF::SeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); + +/** +* Retrieves the size of the attachment stream +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pStreamSize - the stream size +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getstreamsize(Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); + +/** +* Writes out the attachment into a buffer +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_writetobuffer(Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); + +/** +* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfrombuffer(Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); + +/************************************************************************************************************************* + Class definition for Texture2D +**************************************************************************************************************************/ + +/** +* Retrieves the attachment located at the path of the texture. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); + +/** +* Sets the texture's package path to the path of the attachment. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pContentType - returns content type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getcontenttype(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureType * pContentType); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eContentType - new Content Type +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setcontenttype(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureType eContentType); + +/** +* Retrieves a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pTileStyleU - returns tilestyle type enum. +* @param[out] pTileStyleV - returns tilestyle type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_gettilestyleuv(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureTileStyle * pTileStyleU, Lib3MF::eTextureTileStyle * pTileStyleV); + +/** +* Sets a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eTileStyleU - new tilestyle type enum. +* @param[in] eTileStyleV - new tilestyle type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_settilestyleuv(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureTileStyle eTileStyleU, Lib3MF::eTextureTileStyle eTileStyleV); + +/** +* Retrieves a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pFilter - returns filter type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getfilter(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureFilter * pFilter); + +/** +* Sets a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eFilter - sets new filter type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setfilter(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureFilter eFilter); + +/************************************************************************************************************************* + Class definition for ImplicitPort +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_getidentifier(Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_setidentifier(Lib3MF_ImplicitPort pImplicitPort, const char * pIdentifier); + +/** +* Retrieves the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_getdisplayname(Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_setdisplayname(Lib3MF_ImplicitPort pImplicitPort, const char * pDisplayName); + +/** +* Sets the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] eImplicitPortType - the type +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_settype(Lib3MF_ImplicitPort pImplicitPort, Lib3MF::eImplicitPortType eImplicitPortType); + +/** +* Retrieves the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[out] pImplicitPortType - the type +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_gettype(Lib3MF_ImplicitPort pImplicitPort, Lib3MF::eImplicitPortType * pImplicitPortType); + +/** +* Retrieves the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nReferenceBufferSize - size of the buffer (including trailing 0) +* @param[out] pReferenceNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pReferenceBuffer - buffer of the reference, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_getreference(Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nReferenceBufferSize, Lib3MF_uint32* pReferenceNeededChars, char * pReferenceBuffer); + +/** +* Sets the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pReference - the reference +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_setreference(Lib3MF_ImplicitPort pImplicitPort, const char * pReference); + +/************************************************************************************************************************* + Class definition for Iterator +**************************************************************************************************************************/ + +/** +* Iterates to the next item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasNext - Iterates to the next item in the list. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_iterator_movenext(Lib3MF_Iterator pIterator, bool * pHasNext); + +/** +* Iterates to the previous item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasPrevious - Iterates to the previous item in the list. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_iterator_moveprevious(Lib3MF_Iterator pIterator, bool * pHasPrevious); + +/** +* Returns the number of items the iterator captures. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pCount - returns the number of items the iterator captures. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_iterator_count(Lib3MF_Iterator pIterator, Lib3MF_uint64 * pCount); + +/************************************************************************************************************************* + Class definition for ImplicitPortIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pImplicitPortIterator - ImplicitPortIterator instance. +* @param[out] pPort - The current element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitportiterator_getcurrent(Lib3MF_ImplicitPortIterator pImplicitPortIterator, Lib3MF_ImplicitPort * pPort); + +/************************************************************************************************************************* + Class definition for ImplicitNode +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getidentifier(Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_setidentifier(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier); + +/** +* Retrieves the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getdisplayname(Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_setdisplayname(Lib3MF_ImplicitNode pImplicitNode, const char * pDisplayName); + +/** +* Retrieves the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nTagBufferSize - size of the buffer (including trailing 0) +* @param[out] pTagNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pTagBuffer - buffer of the tag, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_gettag(Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nTagBufferSize, Lib3MF_uint32* pTagNeededChars, char * pTagBuffer); + +/** +* Sets the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pTag - the tag +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_settag(Lib3MF_ImplicitNode pImplicitNode, const char * pTag); + +/** +* Retrieves the type of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pType - the type of the node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getnodetype(Lib3MF_ImplicitNode pImplicitNode, Lib3MF::eImplicitNodeType * pType); + +/** +* Add an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[out] pPort - +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_addinput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator for the inputs +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getinputs(Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Add an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[out] pPort - +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_addoutput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator the outputs +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getoutputs(Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Retrieves an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_findinput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_findoutput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/** +* Checks if the types of the input and output ports are valid for the node type +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pValid - true, if the types are valid +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_aretypesvalid(Lib3MF_ImplicitNode pImplicitNode, bool * pValid); + +/************************************************************************************************************************* + Class definition for OneInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pInput - the input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_oneinputnode_getinputa(Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves the output +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_oneinputnode_getoutputresult(Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for SinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcSinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcCosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SinhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CoshNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for RoundNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CeilNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FloorNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SignNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FractNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for AbsNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ExpNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LogNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log10Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LengthNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TransposeNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for InverseNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SqrtNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ResourceIdNode +**************************************************************************************************************************/ + +/** +* Sets the Resource that the resourceid attribute of the node will point to +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[in] pResource - the resource +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_resourceidnode_setresource(Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource pResource); + +/** +* Retrieves the resource of the node +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pResource - the resource +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_resourceidnode_getresource(Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource * pResource); + +/** +* Retrieves the output +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_resourceidnode_getoutputvalue(Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for TwoInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pTwoInputNode - TwoInputNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_twoinputnode_getinputb(Lib3MF_TwoInputNode pTwoInputNode, Lib3MF_ImplicitPort * pB); + +/************************************************************************************************************************* + Class definition for AdditionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SubtractionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DivisionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DotNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CrossNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTan2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MatVecMultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MaxNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FmodNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ModNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for PowNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SelectNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_selectnode_getinputb(Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pB); + +/** +* Retrieves the third input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pC - the third input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_selectnode_getinputc(Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pC); + +/** +* Retrieves the fourth input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pD - the fourth input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_selectnode_getinputd(Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pD); + +/************************************************************************************************************************* + Class definition for ClampNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the lower limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMin - the input for the lower limit +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_clampnode_getinputmin(Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMin); + +/** +* Retrieves the input for the upper limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMax - the input for the upper limit +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_clampnode_getinputmax(Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMax); + +/************************************************************************************************************************* + Class definition for ComposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the x component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pX - the input for the x component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composevectornode_getinputx(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the input for the y component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pY - the input for the y component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composevectornode_getinputy(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the input for the z component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pZ - the input for the z component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composevectornode_getinputz(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/** +* Retrieves the output +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composevectornode_getoutputresult(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for VectorFromScalarNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DecomposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pA - the input port for the vector to decompose +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_decomposevectornode_getinputa(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pA); + +/** +* Retrieves the output for the x component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pX - the output for the x component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_decomposevectornode_getoutputx(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the output for the y component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pY - the output for the y component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_decomposevectornode_getoutputy(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the output for the z component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pZ - the output for the z component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_decomposevectornode_getoutputz(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/************************************************************************************************************************* + Class definition for ComposeMatrixNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the element 0 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM00 - the input for the m00 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm00(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM00); + +/** +* Retrieves the input for the element 0 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM01 - the input for the m01 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm01(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM01); + +/** +* Retrieves the input for the element 0 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM02 - the input for the m02 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm02(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM02); + +/** +* Retrieves the input for the element 0 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM03 - the input for the m03 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm03(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM03); + +/** +* Retrieves the input for the element 1 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM10 - the input for the m10 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm10(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM10); + +/** +* Retrieves the input for the element 1 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM11 - the input for the m11 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm11(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM11); + +/** +* Retrieves the input for the element 1 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM12 - the input for the m12 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm12(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM12); + +/** +* Retrieves the input for the element 1 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM13 - the input for the m3 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm13(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM13); + +/** +* Retrieves the input for the element 2 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM20 - the input for the m2 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm20(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM20); + +/** +* Retrieves the input for the element 2 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM21 - +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm21(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM21); + +/** +* Retrieves the input for the element 2 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM22 - the input for the m22 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm22(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM22); + +/** +* Retrieves the input for the element 2 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM23 - the input for the m23 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm23(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM23); + +/** +* Retrieves the input for the element 3 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM30 - the input for the m30 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm30(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM30); + +/** +* Retrieves the input for the element 3 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM31 - the input for the m31 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm31(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM31); + +/** +* Retrieves the input for the element 3 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM32 - the input for the m32 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm32(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM32); + +/** +* Retrieves the input for the element 3 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM33 - the input for the m33 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm33(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM33); + +/** +* Retrieves the output +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getoutputresult(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromRowsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow0 - the input for the first row +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getinputa(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow0); + +/** +* Retrieves the input for the second row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow1 - the input for the second row +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getinputb(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow1); + +/** +* Retrieves the input for the third row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow2 - the input for the third row +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getinputc(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow2); + +/** +* Retrieves the input for the fourth row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow3 - the input for the fourth row +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getinputd(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getoutputresult(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromColumnsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn0 - the input for the first column +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputa(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn0); + +/** +* Retrieves the input for the second column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn1 - the input for the second column +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputb(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn1); + +/** +* Retrieves the input for the third column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn2 - the input for the third column +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputc(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn2); + +/** +* Retrieves the input for the fourth column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn3 - the input for the fourth column +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputd(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getoutputresult(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for ConstantNode +**************************************************************************************************************************/ + +/** +* Sets the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[in] dValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constantnode_setconstant(Lib3MF_ConstantNode pConstantNode, Lib3MF_double dValue); + +/** +* Retrieves the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constantnode_getconstant(Lib3MF_ConstantNode pConstantNode, Lib3MF_double * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constantnode_getoutputvalue(Lib3MF_ConstantNode pConstantNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for ConstVecNode +**************************************************************************************************************************/ + +/** +* Sets the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constvecnode_setvector(Lib3MF_ConstVecNode pConstVecNode, const Lib3MF::sVector * pValue); + +/** +* Retrieves the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constvecnode_getvector(Lib3MF_ConstVecNode pConstVecNode, Lib3MF::sVector * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pVector - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constvecnode_getoutputvector(Lib3MF_ConstVecNode pConstVecNode, Lib3MF_ImplicitPort * pVector); + +/************************************************************************************************************************* + Class definition for ConstMatNode +**************************************************************************************************************************/ + +/** +* Sets the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constmatnode_setmatrix(Lib3MF_ConstMatNode pConstMatNode, const Lib3MF::sMatrix4x4 * pValue); + +/** +* Retrieves the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pValue - the matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constmatnode_getmatrix(Lib3MF_ConstMatNode pConstMatNode, Lib3MF::sMatrix4x4 * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pMatrix - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constmatnode_getoutputmatrix(Lib3MF_ConstMatNode pConstMatNode, Lib3MF_ImplicitPort * pMatrix); + +/************************************************************************************************************************* + Class definition for MeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshnode_getinputmesh(Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshnode_getinputpos(Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pDistance - the output port for the signed distance to the mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshnode_getoutputdistance(Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for UnsignedMeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_unsignedmeshnode_getinputmesh(Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_unsignedmeshnode_getinputpos(Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pDistance - the output port for the unsigned distance to the mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_unsignedmeshnode_getoutputdistance(Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for FunctionCallNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the function id +* +* @param[in] pFunctionCallNode - FunctionCallNode instance. +* @param[out] pFunction - the input port for the function +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functioncallnode_getinputfunctionid(Lib3MF_FunctionCallNode pFunctionCallNode, Lib3MF_ImplicitPort * pFunction); + +/************************************************************************************************************************* + Class definition for NodeIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pNodeIterator - NodeIterator instance. +* @param[out] pNode - The current element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_nodeiterator_getcurrent(Lib3MF_NodeIterator pNodeIterator, Lib3MF_ImplicitNode * pNode); + +/************************************************************************************************************************* + Class definition for Function +**************************************************************************************************************************/ + +/** +* Retrieves the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_getdisplayname(Lib3MF_Function pFunction, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_setdisplayname(Lib3MF_Function pFunction, const char * pDisplayName); + +/** +* Add an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_addinput(Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, Lib3MF::eImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the list of inputs +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_getinputs(Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an input +* +* @param[in] pFunction - Function instance. +* @param[in] pInput - The input to be removed +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_removeinput(Lib3MF_Function pFunction, Lib3MF_ImplicitPort pInput); + +/** +* Add an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_addoutput(Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, Lib3MF::eImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the outputs +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_getoutputs(Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an output +* +* @param[in] pFunction - Function instance. +* @param[in] pOutput - The output to be removed +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_removeoutput(Lib3MF_Function pFunction, Lib3MF_ImplicitPort pOutput); + +/** +* Retrieves an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_findinput(Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_findoutput(Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/************************************************************************************************************************* + Class definition for ImplicitFunction +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_getidentifier(Lib3MF_ImplicitFunction pImplicitFunction, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_setidentifier(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier); + +/** +* Add a node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] eNodeType - the type of the node +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addnode(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF::eImplicitNodeType eNodeType, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ImplicitNode * pNode); + +/** +* Add a SinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsinnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinNode * pNode); + +/** +* Add a CosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcosnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CosNode * pNode); + +/** +* Add a TanNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addtannode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanNode * pNode); + +/** +* Add a ArcSinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addarcsinnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcSinNode * pNode); + +/** +* Add a ArcCosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addarccosnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcCosNode * pNode); + +/** +* Add a ArcTan2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addarctan2node(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcTan2Node * pNode); + +/** +* Add a SinhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsinhnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinhNode * pNode); + +/** +* Add a CoshNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcoshnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CoshNode * pNode); + +/** +* Add a TanhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addtanhnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanhNode * pNode); + +/** +* Add a RoundNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addroundnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_RoundNode * pNode); + +/** +* Add a CeilNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addceilnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CeilNode * pNode); + +/** +* Add a FloorNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addfloornode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FloorNode * pNode); + +/** +* Add a SignNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsignnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SignNode * pNode); + +/** +* Add a FractNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addfractnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FractNode * pNode); + +/** +* Add a AbsNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addabsnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AbsNode * pNode); + +/** +* Add a ExpNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addexpnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ExpNode * pNode); + +/** +* Add a LogNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlognode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_LogNode * pNode); + +/** +* Add a Log2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlog2node(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log2Node * pNode); + +/** +* Add a Log10Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlog10node(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log10Node * pNode); + +/** +* Add a LengthNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlengthnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_LengthNode * pNode); + +/** +* Add a TransposeNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addtransposenode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TransposeNode * pNode); + +/** +* Add a InverseNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_inversenode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_InverseNode * pNode); + +/** +* Add a SqrtNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsqrtnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SqrtNode * pNode); + +/** +* Add a ResourceIdNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addresourceidnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ResourceIdNode * pNode); + +/** +* Add an AdditionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addadditionnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AdditionNode * pNode); + +/** +* Add a SubtractionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsubtractionnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SubtractionNode * pNode); + +/** +* Add a MultiplicationNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmultiplicationnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MultiplicationNode * pNode); + +/** +* Add a DivisionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_adddivisionnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_DivisionNode * pNode); + +/** +* Add a DotNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_adddotnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DotNode * pNode); + +/** +* Add a CrossNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcrossnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_CrossNode * pNode); /** -* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* Add a MatVecMultiplicationNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getbasematerialgroup(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmatvecmultiplicationnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatVecMultiplicationNode * pNode); /** -* Adds a new Composite-Mixing Values to the CompositeMaterials. +* Add a MinNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite -* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_addcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const Lib3MF::sCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addminnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MinNode * pNode); /** -* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* Add a MaxNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_removecomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmaxnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MaxNode * pNode); /** -* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* Add a FmodNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, Lib3MF::sCompositeConstituent * pCompositeBuffer); - -/************************************************************************************************************************* - Class definition for MultiPropertyGroup -**************************************************************************************************************************/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addfmodnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FmodNode * pNode); /** -* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* Add a PowNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the count of MultiProperty-s +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getcount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addpownode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_PowNode * pNode); /** -* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* Add a SelectNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getallpropertyids(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addselectnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SelectNode * pNode); /** -* Adds a new MultiProperty to the MultiPropertyGroup. +* Add a ClampNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. -* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_addmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addclampnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ClampNode * pNode); /** -* Sets the PropertyIDs of a MultiProperty. +* Add a ComposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_setmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcomposevectornode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeVectorNode * pNode); /** -* Obtains the PropertyIDs of a MultiProperty. +* Add a VectorFromScalar * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addvectorfromscalarnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_VectorFromScalarNode * pNode); /** -* Removes a MultiProperty from this MultiPropertyGroup. +* Add a DecomposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_removemultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_adddecomposevectornode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DecomposeVectorNode * pNode); /** -* Retrieves the number of layers of this MultiPropertyGroup. +* Add a ComposeMatrixNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the number of layers +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getlayercount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcomposematrixnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeMatrixNode * pNode); /** -* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* Add a MatrixFromRowsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup -* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_addlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF::sMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmatrixfromrowsnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromRowsNode * pNode); /** -* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* Add a MatrixFromColumnsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried -* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, Lib3MF::sMultiPropertyLayer * pTheLayer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmatrixfromcolumnsnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromColumnsNode * pNode); /** -* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* Add a ConstantNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_removelayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); - -/************************************************************************************************************************* - Class definition for Attachment -**************************************************************************************************************************/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addconstantnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstantNode * pNode); /** -* Retrieves an attachment's package path. This function will be removed in a later release. +* Add a ConstVecNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getpath(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addconstvecnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstVecNode * pNode); /** -* Sets an attachment's package path. This function will be removed in a later release. +* Add a ConstMatNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new path of the attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_setpath(Lib3MF_Attachment pAttachment, const char * pPath); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addconstmatnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstMatNode * pNode); /** -* Returns the PackagePart that is this attachment. +* Add a MeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[out] pPackagePart - The PackagePart of this attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_packagepart(Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmeshnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MeshNode * pNode); /** -* Retrieves an attachment's relationship type +* Add a UnsignedMeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getrelationshiptype(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addunsignedmeshnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_UnsignedMeshNode * pNode); /** -* Sets an attachment's relationship type. +* Add a FunctionCallNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new relationship type string. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_setrelationshiptype(Lib3MF_Attachment pAttachment, const char * pPath); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addfunctioncallnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_FunctionCallNode * pNode); /** -* Writes out the attachment as file. +* Retrieves the nodes * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to write into. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[out] pIterator - iterator for the list of nodes * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_writetofile(Lib3MF_Attachment pAttachment, const char * pFileName); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_getnodes(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_NodeIterator * pIterator); /** -* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Removes a node * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to read from. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pNode - The node to be removed * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfromfile(Lib3MF_Attachment pAttachment, const char * pFileName); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_removenode(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitNode pNode); /** -* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[in] pTheReadCallback - Callback to call for reading a data chunk -* @param[in] nStreamSize - number of bytes the callback returns -* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. -* @param[in] pUserData - Userdata that is passed to the callback function +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - the source port +* @param[in] pTarget - the target port * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfromcallback(Lib3MF_Attachment pAttachment, Lib3MF::ReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MF::SeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlink(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitPort pSource, Lib3MF_ImplicitPort pTarget); /** -* Retrieves the size of the attachment stream +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[out] pStreamSize - the stream size +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - name of the source port in the format nodename.portname +* @param[in] pTarget - name of the target port in the format nodename.portname * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getstreamsize(Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlinkbynames(Lib3MF_ImplicitFunction pImplicitFunction, const char * pSource, const char * pTarget); /** -* Writes out the attachment into a buffer +* Clears the function * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_writetobuffer(Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_clear(Lib3MF_ImplicitFunction pImplicitFunction); /** -* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* Sorts the nodes topologically * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfrombuffer(Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_sortnodestopologically(Lib3MF_ImplicitFunction pImplicitFunction); /************************************************************************************************************************* - Class definition for Texture2D + Class definition for FunctionFromImage3D **************************************************************************************************************************/ /** -* Retrieves the attachment located at the path of the texture. +* Returns the selected 3D image. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pImage3D - image instance * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_getimage3d(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D * pImage3D); /** -* Sets the texture's package path to the path of the attachment. +* Sets the 3D image of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] pImage3D - image instance * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_setimage3d(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D pImage3D); /** -* Retrieves a texture's content type. +* Sets the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pContentType - returns content type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eFilter - texture filter * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getcontenttype(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureType * pContentType); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_setfilter(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF::eTextureFilter eFilter); /** -* Retrieves a texture's content type. +* Returns the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eContentType - new Content Type +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pFilter - texture filter * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setcontenttype(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureType eContentType); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_getfilter(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF::eTextureFilter * pFilter); /** -* Retrieves a texture's tilestyle type. +* Sets the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pTileStyleU - returns tilestyle type enum. -* @param[out] pTileStyleV - returns tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eTileStyleU - tile style in U +* @param[in] eTileStyleV - tile style in V +* @param[in] eTileStyleW - tile style in W * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_gettilestyleuv(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureTileStyle * pTileStyleU, Lib3MF::eTextureTileStyle * pTileStyleV); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_settilestyles(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF::eTextureTileStyle eTileStyleU, Lib3MF::eTextureTileStyle eTileStyleV, Lib3MF::eTextureTileStyle eTileStyleW); /** -* Sets a texture's tilestyle type. +* Retrieves the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eTileStyleU - new tilestyle type enum. -* @param[in] eTileStyleV - new tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pTileStyleU - tile style in U +* @param[out] pTileStyleV - tile style in V +* @param[out] pTileStyleW - tile style in W * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_settilestyleuv(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureTileStyle eTileStyleU, Lib3MF::eTextureTileStyle eTileStyleV); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_gettilestyles(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF::eTextureTileStyle * pTileStyleU, Lib3MF::eTextureTileStyle * pTileStyleV, Lib3MF::eTextureTileStyle * pTileStyleW); /** -* Retrieves a texture's filter type. +* returns the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pFilter - returns filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getfilter(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureFilter * pFilter); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_getoffset(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pOffset); /** -* Sets a texture's filter type. +* Sets the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eFilter - sets new filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setfilter(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureFilter eFilter); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_setoffset(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dOffset); + +/** +* returns the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_getscale(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pScale); + +/** +* Sets the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_setscale(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dScale); /************************************************************************************************************************* Class definition for BuildItem @@ -3145,6 +5756,16 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getcolorgroupbyid(Lib3MF_Model pModel, */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getslicestackbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_SliceStack * pSliceStacInstance); +/** +* finds a level set object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pLevelSetObjectInstance - returns the level set object instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getlevelsetbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_LevelSet * pLevelSetObjectInstance); + /** * returns, whether a build has a UUID and, if true, the build's UUID * @@ -3283,6 +5904,15 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getmultipropertygroups(Lib3MF_Model pM */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getslicestacks(Lib3MF_Model pModel, Lib3MF_SliceStackIterator * pResourceIterator); +/** +* creates a resource iterator instance with all image3d resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getimage3ds(Lib3MF_Model pModel, Lib3MF_Image3DIterator * pResourceIterator); + /** * Merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. * @@ -3292,6 +5922,15 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getslicestacks(Lib3MF_Model pModel, Li */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_mergetomodel(Lib3MF_Model pModel, Lib3MF_Model * pMergedModelInstance); +/** +* Merges the given model into this model. +* +* @param[in] pModel - Model instance. +* @param[in] pModelInstance - model to be merged +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_mergefrommodel(Lib3MF_Model pModel, Lib3MF_Model pModelInstance); + /** * adds an empty mesh object to the model. * @@ -3377,6 +6016,28 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addcompositematerials(Lib3MF_Model pMo */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addmultipropertygroup(Lib3MF_Model pModel, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance); +/** +* creates a new 3D Image Resource +* +* @param[in] pModel - Model instance. +* @param[in] nColumnCount - the number of columns in each sheet. +* @param[in] nRowCount - the number of rows in each sheet. +* @param[in] nSheetCount - the number of sheets in the image stack. +* @param[out] pInstance - returns the new ImageStack instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addimagestack(Lib3MF_Model pModel, Lib3MF_uint32 nColumnCount, Lib3MF_uint32 nRowCount, Lib3MF_uint32 nSheetCount, Lib3MF_ImageStack * pInstance); + +/** +* finds an ImageStack object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pImageStackInstance - returns the image stack instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getimagestackbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ImageStack * pImageStackInstance); + /** * adds a build item to the model. * @@ -3528,6 +6189,70 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_setrandomnumbercallback(Lib3MF_Model p */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getkeystore(Lib3MF_Model pModel, Lib3MF_KeyStore * pKeyStore); +/** +* creates a resource iterator for all functions +* +* @param[in] pModel - Model instance. +* @param[out] pTheResourceIterator - returns the resource iterator +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getfunctions(Lib3MF_Model pModel, Lib3MF_FunctionIterator * pTheResourceIterator); + +/** +* adds a function described by nodes to the model +* +* @param[in] pModel - Model instance. +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addimplicitfunction(Lib3MF_Model pModel, Lib3MF_ImplicitFunction * pFunctionInstance); + +/** +* adds a function defined by an image3d to the model +* +* @param[in] pModel - Model instance. +* @param[in] pImage3DInstance - the Image3D-instance used for this function +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addfunctionfromimage3d(Lib3MF_Model pModel, Lib3MF_Image3D pImage3DInstance, Lib3MF_FunctionFromImage3D * pFunctionInstance); + +/** +* adds a volume data resource to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pVolumeDataInstance - returns the new volume data instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addvolumedata(Lib3MF_Model pModel, Lib3MF_VolumeData * pVolumeDataInstance); + +/** +* adds an empty boundary shape object to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pLevelSetInstance - returns the mesh object instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addlevelset(Lib3MF_Model pModel, Lib3MF_LevelSet * pLevelSetInstance); + +/** +* creates a resource iterator instance with all boundary shape resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getlevelsets(Lib3MF_Model pModel, Lib3MF_LevelSetIterator * pResourceIterator); + +/** +* Removes a resource from the model +* +* @param[in] pModel - Model instance. +* @param[in] pResource - The resource to remove +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_removeresource(Lib3MF_Model pModel, Lib3MF_Resource pResource); + /************************************************************************************************************************* Global functions **************************************************************************************************************************/ diff --git a/Autogenerated/Bindings/Cpp/lib3mf_implicit.hpp b/Autogenerated/Bindings/Cpp/lib3mf_implicit.hpp index c69787d70..3865faa33 100644 --- a/Autogenerated/Bindings/Cpp/lib3mf_implicit.hpp +++ b/Autogenerated/Bindings/Cpp/lib3mf_implicit.hpp @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++-Header file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -73,11 +73,21 @@ class CColorGroupIterator; class CTexture2DGroupIterator; class CCompositeMaterialsIterator; class CMultiPropertyGroupIterator; +class CImage3DIterator; +class CFunctionIterator; +class CLevelSetIterator; class CMetaData; class CMetaDataGroup; class CObject; class CMeshObject; +class CLevelSet; class CBeamLattice; +class CFunctionReference; +class CVolumeDataColor; +class CMaterialMapping; +class CVolumeDataComposite; +class CVolumeDataProperty; +class CVolumeData; class CComponent; class CComponentsObject; class CBeamSet; @@ -86,8 +96,71 @@ class CColorGroup; class CTexture2DGroup; class CCompositeMaterials; class CMultiPropertyGroup; +class CImage3D; +class CImageStack; class CAttachment; class CTexture2D; +class CImplicitPort; +class CIterator; +class CImplicitPortIterator; +class CImplicitNode; +class COneInputNode; +class CSinNode; +class CCosNode; +class CTanNode; +class CArcSinNode; +class CArcCosNode; +class CArcTanNode; +class CSinhNode; +class CCoshNode; +class CTanhNode; +class CRoundNode; +class CCeilNode; +class CFloorNode; +class CSignNode; +class CFractNode; +class CAbsNode; +class CExpNode; +class CLogNode; +class CLog2Node; +class CLog10Node; +class CLengthNode; +class CTransposeNode; +class CInverseNode; +class CSqrtNode; +class CResourceIdNode; +class CTwoInputNode; +class CAdditionNode; +class CSubtractionNode; +class CMultiplicationNode; +class CDivisionNode; +class CDotNode; +class CCrossNode; +class CArcTan2Node; +class CMatVecMultiplicationNode; +class CMinNode; +class CMaxNode; +class CFmodNode; +class CModNode; +class CPowNode; +class CSelectNode; +class CClampNode; +class CComposeVectorNode; +class CVectorFromScalarNode; +class CDecomposeVectorNode; +class CComposeMatrixNode; +class CMatrixFromRowsNode; +class CMatrixFromColumnsNode; +class CConstantNode; +class CConstVecNode; +class CConstMatNode; +class CMeshNode; +class CUnsignedMeshNode; +class CFunctionCallNode; +class CNodeIterator; +class CFunction; +class CImplicitFunction; +class CFunctionFromImage3D; class CBuildItem; class CBuildItemIterator; class CSlice; @@ -120,11 +193,21 @@ typedef CColorGroupIterator CLib3MFColorGroupIterator; typedef CTexture2DGroupIterator CLib3MFTexture2DGroupIterator; typedef CCompositeMaterialsIterator CLib3MFCompositeMaterialsIterator; typedef CMultiPropertyGroupIterator CLib3MFMultiPropertyGroupIterator; +typedef CImage3DIterator CLib3MFImage3DIterator; +typedef CFunctionIterator CLib3MFFunctionIterator; +typedef CLevelSetIterator CLib3MFLevelSetIterator; typedef CMetaData CLib3MFMetaData; typedef CMetaDataGroup CLib3MFMetaDataGroup; typedef CObject CLib3MFObject; typedef CMeshObject CLib3MFMeshObject; +typedef CLevelSet CLib3MFLevelSet; typedef CBeamLattice CLib3MFBeamLattice; +typedef CFunctionReference CLib3MFFunctionReference; +typedef CVolumeDataColor CLib3MFVolumeDataColor; +typedef CMaterialMapping CLib3MFMaterialMapping; +typedef CVolumeDataComposite CLib3MFVolumeDataComposite; +typedef CVolumeDataProperty CLib3MFVolumeDataProperty; +typedef CVolumeData CLib3MFVolumeData; typedef CComponent CLib3MFComponent; typedef CComponentsObject CLib3MFComponentsObject; typedef CBeamSet CLib3MFBeamSet; @@ -133,8 +216,71 @@ typedef CColorGroup CLib3MFColorGroup; typedef CTexture2DGroup CLib3MFTexture2DGroup; typedef CCompositeMaterials CLib3MFCompositeMaterials; typedef CMultiPropertyGroup CLib3MFMultiPropertyGroup; +typedef CImage3D CLib3MFImage3D; +typedef CImageStack CLib3MFImageStack; typedef CAttachment CLib3MFAttachment; typedef CTexture2D CLib3MFTexture2D; +typedef CImplicitPort CLib3MFImplicitPort; +typedef CIterator CLib3MFIterator; +typedef CImplicitPortIterator CLib3MFImplicitPortIterator; +typedef CImplicitNode CLib3MFImplicitNode; +typedef COneInputNode CLib3MFOneInputNode; +typedef CSinNode CLib3MFSinNode; +typedef CCosNode CLib3MFCosNode; +typedef CTanNode CLib3MFTanNode; +typedef CArcSinNode CLib3MFArcSinNode; +typedef CArcCosNode CLib3MFArcCosNode; +typedef CArcTanNode CLib3MFArcTanNode; +typedef CSinhNode CLib3MFSinhNode; +typedef CCoshNode CLib3MFCoshNode; +typedef CTanhNode CLib3MFTanhNode; +typedef CRoundNode CLib3MFRoundNode; +typedef CCeilNode CLib3MFCeilNode; +typedef CFloorNode CLib3MFFloorNode; +typedef CSignNode CLib3MFSignNode; +typedef CFractNode CLib3MFFractNode; +typedef CAbsNode CLib3MFAbsNode; +typedef CExpNode CLib3MFExpNode; +typedef CLogNode CLib3MFLogNode; +typedef CLog2Node CLib3MFLog2Node; +typedef CLog10Node CLib3MFLog10Node; +typedef CLengthNode CLib3MFLengthNode; +typedef CTransposeNode CLib3MFTransposeNode; +typedef CInverseNode CLib3MFInverseNode; +typedef CSqrtNode CLib3MFSqrtNode; +typedef CResourceIdNode CLib3MFResourceIdNode; +typedef CTwoInputNode CLib3MFTwoInputNode; +typedef CAdditionNode CLib3MFAdditionNode; +typedef CSubtractionNode CLib3MFSubtractionNode; +typedef CMultiplicationNode CLib3MFMultiplicationNode; +typedef CDivisionNode CLib3MFDivisionNode; +typedef CDotNode CLib3MFDotNode; +typedef CCrossNode CLib3MFCrossNode; +typedef CArcTan2Node CLib3MFArcTan2Node; +typedef CMatVecMultiplicationNode CLib3MFMatVecMultiplicationNode; +typedef CMinNode CLib3MFMinNode; +typedef CMaxNode CLib3MFMaxNode; +typedef CFmodNode CLib3MFFmodNode; +typedef CModNode CLib3MFModNode; +typedef CPowNode CLib3MFPowNode; +typedef CSelectNode CLib3MFSelectNode; +typedef CClampNode CLib3MFClampNode; +typedef CComposeVectorNode CLib3MFComposeVectorNode; +typedef CVectorFromScalarNode CLib3MFVectorFromScalarNode; +typedef CDecomposeVectorNode CLib3MFDecomposeVectorNode; +typedef CComposeMatrixNode CLib3MFComposeMatrixNode; +typedef CMatrixFromRowsNode CLib3MFMatrixFromRowsNode; +typedef CMatrixFromColumnsNode CLib3MFMatrixFromColumnsNode; +typedef CConstantNode CLib3MFConstantNode; +typedef CConstVecNode CLib3MFConstVecNode; +typedef CConstMatNode CLib3MFConstMatNode; +typedef CMeshNode CLib3MFMeshNode; +typedef CUnsignedMeshNode CLib3MFUnsignedMeshNode; +typedef CFunctionCallNode CLib3MFFunctionCallNode; +typedef CNodeIterator CLib3MFNodeIterator; +typedef CFunction CLib3MFFunction; +typedef CImplicitFunction CLib3MFImplicitFunction; +typedef CFunctionFromImage3D CLib3MFFunctionFromImage3D; typedef CBuildItem CLib3MFBuildItem; typedef CBuildItemIterator CLib3MFBuildItemIterator; typedef CSlice CLib3MFSlice; @@ -167,11 +313,21 @@ typedef std::shared_ptr PColorGroupIterator; typedef std::shared_ptr PTexture2DGroupIterator; typedef std::shared_ptr PCompositeMaterialsIterator; typedef std::shared_ptr PMultiPropertyGroupIterator; +typedef std::shared_ptr PImage3DIterator; +typedef std::shared_ptr PFunctionIterator; +typedef std::shared_ptr PLevelSetIterator; typedef std::shared_ptr PMetaData; typedef std::shared_ptr PMetaDataGroup; typedef std::shared_ptr PObject; typedef std::shared_ptr PMeshObject; +typedef std::shared_ptr PLevelSet; typedef std::shared_ptr PBeamLattice; +typedef std::shared_ptr PFunctionReference; +typedef std::shared_ptr PVolumeDataColor; +typedef std::shared_ptr PMaterialMapping; +typedef std::shared_ptr PVolumeDataComposite; +typedef std::shared_ptr PVolumeDataProperty; +typedef std::shared_ptr PVolumeData; typedef std::shared_ptr PComponent; typedef std::shared_ptr PComponentsObject; typedef std::shared_ptr PBeamSet; @@ -180,8 +336,71 @@ typedef std::shared_ptr PColorGroup; typedef std::shared_ptr PTexture2DGroup; typedef std::shared_ptr PCompositeMaterials; typedef std::shared_ptr PMultiPropertyGroup; +typedef std::shared_ptr PImage3D; +typedef std::shared_ptr PImageStack; typedef std::shared_ptr PAttachment; typedef std::shared_ptr PTexture2D; +typedef std::shared_ptr PImplicitPort; +typedef std::shared_ptr PIterator; +typedef std::shared_ptr PImplicitPortIterator; +typedef std::shared_ptr PImplicitNode; +typedef std::shared_ptr POneInputNode; +typedef std::shared_ptr PSinNode; +typedef std::shared_ptr PCosNode; +typedef std::shared_ptr PTanNode; +typedef std::shared_ptr PArcSinNode; +typedef std::shared_ptr PArcCosNode; +typedef std::shared_ptr PArcTanNode; +typedef std::shared_ptr PSinhNode; +typedef std::shared_ptr PCoshNode; +typedef std::shared_ptr PTanhNode; +typedef std::shared_ptr PRoundNode; +typedef std::shared_ptr PCeilNode; +typedef std::shared_ptr PFloorNode; +typedef std::shared_ptr PSignNode; +typedef std::shared_ptr PFractNode; +typedef std::shared_ptr PAbsNode; +typedef std::shared_ptr PExpNode; +typedef std::shared_ptr PLogNode; +typedef std::shared_ptr PLog2Node; +typedef std::shared_ptr PLog10Node; +typedef std::shared_ptr PLengthNode; +typedef std::shared_ptr PTransposeNode; +typedef std::shared_ptr PInverseNode; +typedef std::shared_ptr PSqrtNode; +typedef std::shared_ptr PResourceIdNode; +typedef std::shared_ptr PTwoInputNode; +typedef std::shared_ptr PAdditionNode; +typedef std::shared_ptr PSubtractionNode; +typedef std::shared_ptr PMultiplicationNode; +typedef std::shared_ptr PDivisionNode; +typedef std::shared_ptr PDotNode; +typedef std::shared_ptr PCrossNode; +typedef std::shared_ptr PArcTan2Node; +typedef std::shared_ptr PMatVecMultiplicationNode; +typedef std::shared_ptr PMinNode; +typedef std::shared_ptr PMaxNode; +typedef std::shared_ptr PFmodNode; +typedef std::shared_ptr PModNode; +typedef std::shared_ptr PPowNode; +typedef std::shared_ptr PSelectNode; +typedef std::shared_ptr PClampNode; +typedef std::shared_ptr PComposeVectorNode; +typedef std::shared_ptr PVectorFromScalarNode; +typedef std::shared_ptr PDecomposeVectorNode; +typedef std::shared_ptr PComposeMatrixNode; +typedef std::shared_ptr PMatrixFromRowsNode; +typedef std::shared_ptr PMatrixFromColumnsNode; +typedef std::shared_ptr PConstantNode; +typedef std::shared_ptr PConstVecNode; +typedef std::shared_ptr PConstMatNode; +typedef std::shared_ptr PMeshNode; +typedef std::shared_ptr PUnsignedMeshNode; +typedef std::shared_ptr PFunctionCallNode; +typedef std::shared_ptr PNodeIterator; +typedef std::shared_ptr PFunction; +typedef std::shared_ptr PImplicitFunction; +typedef std::shared_ptr PFunctionFromImage3D; typedef std::shared_ptr PBuildItem; typedef std::shared_ptr PBuildItemIterator; typedef std::shared_ptr PSlice; @@ -214,11 +433,21 @@ typedef PColorGroupIterator PLib3MFColorGroupIterator; typedef PTexture2DGroupIterator PLib3MFTexture2DGroupIterator; typedef PCompositeMaterialsIterator PLib3MFCompositeMaterialsIterator; typedef PMultiPropertyGroupIterator PLib3MFMultiPropertyGroupIterator; +typedef PImage3DIterator PLib3MFImage3DIterator; +typedef PFunctionIterator PLib3MFFunctionIterator; +typedef PLevelSetIterator PLib3MFLevelSetIterator; typedef PMetaData PLib3MFMetaData; typedef PMetaDataGroup PLib3MFMetaDataGroup; typedef PObject PLib3MFObject; typedef PMeshObject PLib3MFMeshObject; +typedef PLevelSet PLib3MFLevelSet; typedef PBeamLattice PLib3MFBeamLattice; +typedef PFunctionReference PLib3MFFunctionReference; +typedef PVolumeDataColor PLib3MFVolumeDataColor; +typedef PMaterialMapping PLib3MFMaterialMapping; +typedef PVolumeDataComposite PLib3MFVolumeDataComposite; +typedef PVolumeDataProperty PLib3MFVolumeDataProperty; +typedef PVolumeData PLib3MFVolumeData; typedef PComponent PLib3MFComponent; typedef PComponentsObject PLib3MFComponentsObject; typedef PBeamSet PLib3MFBeamSet; @@ -227,8 +456,71 @@ typedef PColorGroup PLib3MFColorGroup; typedef PTexture2DGroup PLib3MFTexture2DGroup; typedef PCompositeMaterials PLib3MFCompositeMaterials; typedef PMultiPropertyGroup PLib3MFMultiPropertyGroup; +typedef PImage3D PLib3MFImage3D; +typedef PImageStack PLib3MFImageStack; typedef PAttachment PLib3MFAttachment; typedef PTexture2D PLib3MFTexture2D; +typedef PImplicitPort PLib3MFImplicitPort; +typedef PIterator PLib3MFIterator; +typedef PImplicitPortIterator PLib3MFImplicitPortIterator; +typedef PImplicitNode PLib3MFImplicitNode; +typedef POneInputNode PLib3MFOneInputNode; +typedef PSinNode PLib3MFSinNode; +typedef PCosNode PLib3MFCosNode; +typedef PTanNode PLib3MFTanNode; +typedef PArcSinNode PLib3MFArcSinNode; +typedef PArcCosNode PLib3MFArcCosNode; +typedef PArcTanNode PLib3MFArcTanNode; +typedef PSinhNode PLib3MFSinhNode; +typedef PCoshNode PLib3MFCoshNode; +typedef PTanhNode PLib3MFTanhNode; +typedef PRoundNode PLib3MFRoundNode; +typedef PCeilNode PLib3MFCeilNode; +typedef PFloorNode PLib3MFFloorNode; +typedef PSignNode PLib3MFSignNode; +typedef PFractNode PLib3MFFractNode; +typedef PAbsNode PLib3MFAbsNode; +typedef PExpNode PLib3MFExpNode; +typedef PLogNode PLib3MFLogNode; +typedef PLog2Node PLib3MFLog2Node; +typedef PLog10Node PLib3MFLog10Node; +typedef PLengthNode PLib3MFLengthNode; +typedef PTransposeNode PLib3MFTransposeNode; +typedef PInverseNode PLib3MFInverseNode; +typedef PSqrtNode PLib3MFSqrtNode; +typedef PResourceIdNode PLib3MFResourceIdNode; +typedef PTwoInputNode PLib3MFTwoInputNode; +typedef PAdditionNode PLib3MFAdditionNode; +typedef PSubtractionNode PLib3MFSubtractionNode; +typedef PMultiplicationNode PLib3MFMultiplicationNode; +typedef PDivisionNode PLib3MFDivisionNode; +typedef PDotNode PLib3MFDotNode; +typedef PCrossNode PLib3MFCrossNode; +typedef PArcTan2Node PLib3MFArcTan2Node; +typedef PMatVecMultiplicationNode PLib3MFMatVecMultiplicationNode; +typedef PMinNode PLib3MFMinNode; +typedef PMaxNode PLib3MFMaxNode; +typedef PFmodNode PLib3MFFmodNode; +typedef PModNode PLib3MFModNode; +typedef PPowNode PLib3MFPowNode; +typedef PSelectNode PLib3MFSelectNode; +typedef PClampNode PLib3MFClampNode; +typedef PComposeVectorNode PLib3MFComposeVectorNode; +typedef PVectorFromScalarNode PLib3MFVectorFromScalarNode; +typedef PDecomposeVectorNode PLib3MFDecomposeVectorNode; +typedef PComposeMatrixNode PLib3MFComposeMatrixNode; +typedef PMatrixFromRowsNode PLib3MFMatrixFromRowsNode; +typedef PMatrixFromColumnsNode PLib3MFMatrixFromColumnsNode; +typedef PConstantNode PLib3MFConstantNode; +typedef PConstVecNode PLib3MFConstVecNode; +typedef PConstMatNode PLib3MFConstMatNode; +typedef PMeshNode PLib3MFMeshNode; +typedef PUnsignedMeshNode PLib3MFUnsignedMeshNode; +typedef PFunctionCallNode PLib3MFFunctionCallNode; +typedef PNodeIterator PLib3MFNodeIterator; +typedef PFunction PLib3MFFunction; +typedef PImplicitFunction PLib3MFImplicitFunction; +typedef PFunctionFromImage3D PLib3MFFunctionFromImage3D; typedef PBuildItem PLib3MFBuildItem; typedef PBuildItemIterator PLib3MFBuildItemIterator; typedef PSlice PLib3MFSlice; @@ -355,6 +647,7 @@ class ELib3MFException : public std::exception { case LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: return "UNKOWNPROGRESSIDENTIFIER"; case LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: return "ELEMENTCOUNTEXCEEDSLIMIT"; case LIB3MF_ERROR_INVALIDRESOURCE: return "INVALIDRESOURCE"; + case LIB3MF_ERROR_INVALIDLEVELSET: return "INVALIDLEVELSET"; case LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: return "BEAMLATTICE_INVALID_OBJECTTYPE"; case LIB3MF_ERROR_INVALIDKEYSTORE: return "INVALIDKEYSTORE"; case LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: return "INVALIDKEYSTORECONSUMER"; @@ -362,6 +655,10 @@ class ELib3MFException : public std::exception { case LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: return "KEYSTORERESOURCEDATANOTFOUND"; case LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: return "SECURECONTEXTNOTREGISTERED"; case LIB3MF_ERROR_INVALIDKEYSIZE: return "INVALIDKEYSIZE"; + case LIB3MF_ERROR_INCOMPATIBLEPORTTYPES: return "INCOMPATIBLEPORTTYPES"; + case LIB3MF_ERROR_GRAPHISCYCLIC: return "GRAPHISCYCLIC"; + case LIB3MF_ERROR_INPUTNOTSET: return "INPUTNOTSET"; + case LIB3MF_ERROR_INVALIDNODECONFIGURATION: return "INVALIDNODECONFIGURATION"; } return "UNKNOWN"; } @@ -406,13 +703,18 @@ class ELib3MFException : public std::exception { case LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: return "A progress identifier is unknown"; case LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: return "An element buffer exceeds its spec limit"; case LIB3MF_ERROR_INVALIDRESOURCE: return "A resource is invalid"; + case LIB3MF_ERROR_INVALIDLEVELSET: return "A level set is invalid"; case LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: return "This object type is not valid for beamlattices"; case LIB3MF_ERROR_INVALIDKEYSTORE: return "The keystore object is invalid"; case LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: return "The consumer keystore object is invalid"; case LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND: return "A consumer has not been found"; case LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: return "A resource data has not been found"; case LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: return "A Key or Conentent encryption callback has not been registered"; - case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key siue is invalid"; + case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key size is invalid"; + case LIB3MF_ERROR_INCOMPATIBLEPORTTYPES: return "Link could not be added, the port types are incompatible"; + case LIB3MF_ERROR_GRAPHISCYCLIC: return "The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted."; + case LIB3MF_ERROR_INPUTNOTSET: return "The input of a node is not set."; + case LIB3MF_ERROR_INVALIDNODECONFIGURATION: return "The selected node configuration is not supported"; } return "unknown error"; } @@ -537,11 +839,21 @@ class CWrapper { friend class CTexture2DGroupIterator; friend class CCompositeMaterialsIterator; friend class CMultiPropertyGroupIterator; + friend class CImage3DIterator; + friend class CFunctionIterator; + friend class CLevelSetIterator; friend class CMetaData; friend class CMetaDataGroup; friend class CObject; friend class CMeshObject; + friend class CLevelSet; friend class CBeamLattice; + friend class CFunctionReference; + friend class CVolumeDataColor; + friend class CMaterialMapping; + friend class CVolumeDataComposite; + friend class CVolumeDataProperty; + friend class CVolumeData; friend class CComponent; friend class CComponentsObject; friend class CBeamSet; @@ -550,8 +862,71 @@ class CWrapper { friend class CTexture2DGroup; friend class CCompositeMaterials; friend class CMultiPropertyGroup; + friend class CImage3D; + friend class CImageStack; friend class CAttachment; friend class CTexture2D; + friend class CImplicitPort; + friend class CIterator; + friend class CImplicitPortIterator; + friend class CImplicitNode; + friend class COneInputNode; + friend class CSinNode; + friend class CCosNode; + friend class CTanNode; + friend class CArcSinNode; + friend class CArcCosNode; + friend class CArcTanNode; + friend class CSinhNode; + friend class CCoshNode; + friend class CTanhNode; + friend class CRoundNode; + friend class CCeilNode; + friend class CFloorNode; + friend class CSignNode; + friend class CFractNode; + friend class CAbsNode; + friend class CExpNode; + friend class CLogNode; + friend class CLog2Node; + friend class CLog10Node; + friend class CLengthNode; + friend class CTransposeNode; + friend class CInverseNode; + friend class CSqrtNode; + friend class CResourceIdNode; + friend class CTwoInputNode; + friend class CAdditionNode; + friend class CSubtractionNode; + friend class CMultiplicationNode; + friend class CDivisionNode; + friend class CDotNode; + friend class CCrossNode; + friend class CArcTan2Node; + friend class CMatVecMultiplicationNode; + friend class CMinNode; + friend class CMaxNode; + friend class CFmodNode; + friend class CModNode; + friend class CPowNode; + friend class CSelectNode; + friend class CClampNode; + friend class CComposeVectorNode; + friend class CVectorFromScalarNode; + friend class CDecomposeVectorNode; + friend class CComposeMatrixNode; + friend class CMatrixFromRowsNode; + friend class CMatrixFromColumnsNode; + friend class CConstantNode; + friend class CConstVecNode; + friend class CConstMatNode; + friend class CMeshNode; + friend class CUnsignedMeshNode; + friend class CFunctionCallNode; + friend class CNodeIterator; + friend class CFunction; + friend class CImplicitFunction; + friend class CFunctionFromImage3D; friend class CBuildItem; friend class CBuildItemIterator; friend class CSlice; @@ -911,6 +1286,57 @@ class CMultiPropertyGroupIterator : public CResourceIterator { inline PMultiPropertyGroup GetCurrentMultiPropertyGroup(); }; +/************************************************************************************************************************* + Class CImage3DIterator +**************************************************************************************************************************/ +class CImage3DIterator : public CResourceIterator { +public: + + /** + * CImage3DIterator::CImage3DIterator - Constructor for Image3DIterator class. + */ + CImage3DIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResourceIterator(pWrapper, pHandle) + { + } + + inline PImage3D GetCurrentImage3D(); +}; + +/************************************************************************************************************************* + Class CFunctionIterator +**************************************************************************************************************************/ +class CFunctionIterator : public CResourceIterator { +public: + + /** + * CFunctionIterator::CFunctionIterator - Constructor for FunctionIterator class. + */ + CFunctionIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResourceIterator(pWrapper, pHandle) + { + } + + inline PFunction GetCurrentFunction(); +}; + +/************************************************************************************************************************* + Class CLevelSetIterator +**************************************************************************************************************************/ +class CLevelSetIterator : public CResourceIterator { +public: + + /** + * CLevelSetIterator::CLevelSetIterator - Constructor for LevelSetIterator class. + */ + CLevelSetIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResourceIterator(pWrapper, pHandle) + { + } + + inline PLevelSet GetCurrentLevelSet(); +}; + /************************************************************************************************************************* Class CMetaData **************************************************************************************************************************/ @@ -982,6 +1408,7 @@ class CObject : public CResource { inline void SetPartNumber(const std::string & sPartNumber); inline bool IsMeshObject(); inline bool IsComponentsObject(); + inline bool IsLevelSetObject(); inline bool IsValid(); inline void SetAttachmentAsThumbnail(classParam pAttachment); inline PAttachment GetThumbnailAttachment(); @@ -1032,6 +1459,40 @@ class CMeshObject : public CObject { inline void SetGeometry(const CInputVector & VerticesBuffer, const CInputVector & IndicesBuffer); inline bool IsManifoldAndOriented(); inline PBeamLattice BeamLattice(); + inline PVolumeData GetVolumeData(); + inline void SetVolumeData(classParam pTheVolumeData); +}; + +/************************************************************************************************************************* + Class CLevelSet +**************************************************************************************************************************/ +class CLevelSet : public CObject { +public: + + /** + * CLevelSet::CLevelSet - Constructor for LevelSet class. + */ + CLevelSet(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CObject(pWrapper, pHandle) + { + } + + inline PFunction GetFunction(); + inline void SetFunction(classParam pTheFunction); + inline sTransform GetTransform(); + inline void SetTransform(const sTransform & Transform); + inline std::string GetChannelName(); + inline void SetChannelName(const std::string & sChannelName); + inline void SetMinFeatureSize(const Lib3MF_double dMinFeatureSize); + inline Lib3MF_double GetMinFeatureSize(); + inline void SetFallBackValue(const Lib3MF_double dFallBackValue); + inline Lib3MF_double GetFallBackValue(); + inline void SetMeshBBoxOnly(const bool bMeshBBoxOnly); + inline bool GetMeshBBoxOnly(); + inline void SetMesh(classParam pTheMesh); + inline PMeshObject GetMesh(); + inline PVolumeData GetVolumeData(); + inline void SetVolumeData(classParam pTheVolumeData); }; /************************************************************************************************************************* @@ -1073,6 +1534,131 @@ class CBeamLattice : public CBase { inline PBeamSet GetBeamSet(const Lib3MF_uint32 nIndex); }; +/************************************************************************************************************************* + Class CFunctionReference +**************************************************************************************************************************/ +class CFunctionReference : public CBase { +public: + + /** + * CFunctionReference::CFunctionReference - Constructor for FunctionReference class. + */ + CFunctionReference(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline Lib3MF_uint32 GetFunctionResourceID(); + inline void SetFunctionResourceID(const Lib3MF_uint32 nUniqueResourceID); + inline sTransform GetTransform(); + inline void SetTransform(const sTransform & Transform); + inline std::string GetChannelName(); + inline void SetChannelName(const std::string & sChannelName); + inline void SetMinFeatureSize(const Lib3MF_double dMinFeatureSize); + inline Lib3MF_double GetMinFeatureSize(); + inline void SetFallBackValue(const Lib3MF_double dFallBackValue); + inline Lib3MF_double GetFallBackValue(); +}; + +/************************************************************************************************************************* + Class CVolumeDataColor +**************************************************************************************************************************/ +class CVolumeDataColor : public CFunctionReference { +public: + + /** + * CVolumeDataColor::CVolumeDataColor - Constructor for VolumeDataColor class. + */ + CVolumeDataColor(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CFunctionReference(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CMaterialMapping +**************************************************************************************************************************/ +class CMaterialMapping : public CFunctionReference { +public: + + /** + * CMaterialMapping::CMaterialMapping - Constructor for MaterialMapping class. + */ + CMaterialMapping(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CFunctionReference(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CVolumeDataComposite +**************************************************************************************************************************/ +class CVolumeDataComposite : public CBase { +public: + + /** + * CVolumeDataComposite::CVolumeDataComposite - Constructor for VolumeDataComposite class. + */ + CVolumeDataComposite(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline PBaseMaterialGroup GetBaseMaterialGroup(); + inline void SetBaseMaterialGroup(classParam pBaseMaterialGroupInstance); + inline Lib3MF_uint32 GetMaterialMappingCount(); + inline PMaterialMapping GetMaterialMapping(const Lib3MF_uint32 nIndex); + inline PMaterialMapping AddMaterialMapping(const sTransform & Transform); + inline void RemoveMaterialMapping(const Lib3MF_uint32 nIndex); +}; + +/************************************************************************************************************************* + Class CVolumeDataProperty +**************************************************************************************************************************/ +class CVolumeDataProperty : public CFunctionReference { +public: + + /** + * CVolumeDataProperty::CVolumeDataProperty - Constructor for VolumeDataProperty class. + */ + CVolumeDataProperty(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CFunctionReference(pWrapper, pHandle) + { + } + + inline std::string GetName(); + inline void SetIsRequired(const bool bIsRequired); + inline bool IsRequired(); +}; + +/************************************************************************************************************************* + Class CVolumeData +**************************************************************************************************************************/ +class CVolumeData : public CResource { +public: + + /** + * CVolumeData::CVolumeData - Constructor for VolumeData class. + */ + CVolumeData(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResource(pWrapper, pHandle) + { + } + + inline PVolumeDataComposite GetComposite(); + inline PVolumeDataComposite CreateNewComposite(); + inline void RemoveComposite(); + inline PVolumeDataColor GetColor(); + inline PVolumeDataColor CreateNewColor(classParam pTheFunction); + inline void RemoveColor(); + inline Lib3MF_uint32 GetPropertyCount(); + inline PVolumeDataProperty GetProperty(const Lib3MF_uint32 nIndex); + inline PVolumeDataProperty AddPropertyFromFunction(const std::string & sName, classParam pTheFunction); + inline void RemoveProperty(const Lib3MF_uint32 nIndex); +}; + /************************************************************************************************************************* Class CComponent **************************************************************************************************************************/ @@ -1257,6 +1843,51 @@ class CMultiPropertyGroup : public CResource { inline void RemoveLayer(const Lib3MF_uint32 nLayerIndex); }; +/************************************************************************************************************************* + Class CImage3D +**************************************************************************************************************************/ +class CImage3D : public CResource { +public: + + /** + * CImage3D::CImage3D - Constructor for Image3D class. + */ + CImage3D(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResource(pWrapper, pHandle) + { + } + + inline std::string GetName(); + inline void SetName(const std::string & sName); + inline bool IsImageStack(); +}; + +/************************************************************************************************************************* + Class CImageStack +**************************************************************************************************************************/ +class CImageStack : public CImage3D { +public: + + /** + * CImageStack::CImageStack - Constructor for ImageStack class. + */ + CImageStack(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImage3D(pWrapper, pHandle) + { + } + + inline Lib3MF_uint32 GetRowCount(); + inline void SetRowCount(const Lib3MF_uint32 nRowCount); + inline Lib3MF_uint32 GetColumnCount(); + inline void SetColumnCount(const Lib3MF_uint32 nColumnCount); + inline Lib3MF_uint32 GetSheetCount(); + inline PAttachment GetSheet(const Lib3MF_uint32 nIndex); + inline void SetSheet(const Lib3MF_uint32 nIndex, classParam pSheet); + inline PAttachment CreateEmptySheet(const Lib3MF_uint32 nIndex, const std::string & sPath); + inline PAttachment CreateSheetFromBuffer(const Lib3MF_uint32 nIndex, const std::string & sPath, const CInputVector & DataBuffer); + inline PAttachment CreateSheetFromFile(const Lib3MF_uint32 nIndex, const std::string & sPath, const std::string & sFileName); +}; + /************************************************************************************************************************* Class CAttachment **************************************************************************************************************************/ @@ -1309,1019 +1940,5124 @@ class CTexture2D : public CResource { }; /************************************************************************************************************************* - Class CBuildItem + Class CImplicitPort **************************************************************************************************************************/ -class CBuildItem : public CBase { +class CImplicitPort : public CBase { public: /** - * CBuildItem::CBuildItem - Constructor for BuildItem class. + * CImplicitPort::CImplicitPort - Constructor for ImplicitPort class. */ - CBuildItem(CWrapper* pWrapper, Lib3MFHandle pHandle) + CImplicitPort(CWrapper* pWrapper, Lib3MFHandle pHandle) : CBase(pWrapper, pHandle) { } - inline PObject GetObjectResource(); - inline std::string GetUUID(bool & bHasUUID); - inline void SetUUID(const std::string & sUUID); - inline Lib3MF_uint32 GetObjectResourceID(); - inline bool HasObjectTransform(); - inline sTransform GetObjectTransform(); - inline void SetObjectTransform(const sTransform & Transform); - inline std::string GetPartNumber(); - inline void SetPartNumber(const std::string & sSetPartnumber); - inline PMetaDataGroup GetMetaDataGroup(); - inline sBox GetOutbox(); + inline std::string GetIdentifier(); + inline void SetIdentifier(const std::string & sIdentifier); + inline std::string GetDisplayName(); + inline void SetDisplayName(const std::string & sDisplayName); + inline void SetType(const eImplicitPortType eImplicitPortType); + inline eImplicitPortType GetType(); + inline std::string GetReference(); + inline void SetReference(const std::string & sReference); }; /************************************************************************************************************************* - Class CBuildItemIterator + Class CIterator **************************************************************************************************************************/ -class CBuildItemIterator : public CBase { +class CIterator : public CBase { public: /** - * CBuildItemIterator::CBuildItemIterator - Constructor for BuildItemIterator class. + * CIterator::CIterator - Constructor for Iterator class. */ - CBuildItemIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + CIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) : CBase(pWrapper, pHandle) { } inline bool MoveNext(); inline bool MovePrevious(); - inline PBuildItem GetCurrent(); - inline PBuildItemIterator Clone(); inline Lib3MF_uint64 Count(); }; /************************************************************************************************************************* - Class CSlice + Class CImplicitPortIterator **************************************************************************************************************************/ -class CSlice : public CBase { +class CImplicitPortIterator : public CIterator { public: /** - * CSlice::CSlice - Constructor for Slice class. + * CImplicitPortIterator::CImplicitPortIterator - Constructor for ImplicitPortIterator class. */ - CSlice(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CImplicitPortIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CIterator(pWrapper, pHandle) { } - inline void SetVertices(const CInputVector & VerticesBuffer); - inline void GetVertices(std::vector & VerticesBuffer); - inline Lib3MF_uint64 GetVertexCount(); - inline Lib3MF_uint64 AddPolygon(const CInputVector & IndicesBuffer); - inline Lib3MF_uint64 GetPolygonCount(); - inline void SetPolygonIndices(const Lib3MF_uint64 nIndex, const CInputVector & IndicesBuffer); - inline void GetPolygonIndices(const Lib3MF_uint64 nIndex, std::vector & IndicesBuffer); - inline Lib3MF_uint64 GetPolygonIndexCount(const Lib3MF_uint64 nIndex); - inline Lib3MF_double GetZTop(); + inline PImplicitPort GetCurrent(); }; /************************************************************************************************************************* - Class CSliceStack + Class CImplicitNode **************************************************************************************************************************/ -class CSliceStack : public CResource { +class CImplicitNode : public CBase { public: /** - * CSliceStack::CSliceStack - Constructor for SliceStack class. + * CImplicitNode::CImplicitNode - Constructor for ImplicitNode class. */ - CSliceStack(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CResource(pWrapper, pHandle) + CImplicitNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) { } - inline Lib3MF_double GetBottomZ(); - inline Lib3MF_uint64 GetSliceCount(); - inline PSlice GetSlice(const Lib3MF_uint64 nSliceIndex); - inline PSlice AddSlice(const Lib3MF_double dZTop); - inline Lib3MF_uint64 GetSliceRefCount(); - inline void AddSliceStackReference(classParam pTheSliceStack); - inline PSliceStack GetSliceStackReference(const Lib3MF_uint64 nSliceRefIndex); - inline void CollapseSliceReferences(); - inline void SetOwnPath(const std::string & sPath); - inline std::string GetOwnPath(); + inline std::string GetIdentifier(); + inline void SetIdentifier(const std::string & sIdentifier); + inline std::string GetDisplayName(); + inline void SetDisplayName(const std::string & sDisplayName); + inline std::string GetTag(); + inline void SetTag(const std::string & sTag); + inline eImplicitNodeType GetNodeType(); + inline PImplicitPort AddInput(const std::string & sIdentifier, const std::string & sDisplayName); + inline PImplicitPortIterator GetInputs(); + inline PImplicitPort AddOutput(const std::string & sIdentifier, const std::string & sDisplayName); + inline PImplicitPortIterator GetOutputs(); + inline PImplicitPort FindInput(const std::string & sIdentifier); + inline PImplicitPort FindOutput(const std::string & sIdentifier); + inline bool AreTypesValid(); }; /************************************************************************************************************************* - Class CConsumer + Class COneInputNode **************************************************************************************************************************/ -class CConsumer : public CBase { +class COneInputNode : public CImplicitNode { public: /** - * CConsumer::CConsumer - Constructor for Consumer class. + * COneInputNode::COneInputNode - Constructor for OneInputNode class. */ - CConsumer(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + COneInputNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) { } - inline std::string GetConsumerID(); - inline std::string GetKeyID(); - inline std::string GetKeyValue(); + inline PImplicitPort GetInputA(); + inline PImplicitPort GetOutputResult(); }; /************************************************************************************************************************* - Class CAccessRight + Class CSinNode **************************************************************************************************************************/ -class CAccessRight : public CBase { +class CSinNode : public COneInputNode { public: /** - * CAccessRight::CAccessRight - Constructor for AccessRight class. + * CSinNode::CSinNode - Constructor for SinNode class. */ - CAccessRight(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CSinNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { } - inline PConsumer GetConsumer(); - inline eWrappingAlgorithm GetWrappingAlgorithm(); - inline eMgfAlgorithm GetMgfAlgorithm(); - inline eDigestMethod GetDigestMethod(); }; /************************************************************************************************************************* - Class CContentEncryptionParams + Class CCosNode **************************************************************************************************************************/ -class CContentEncryptionParams : public CBase { +class CCosNode : public COneInputNode { public: /** - * CContentEncryptionParams::CContentEncryptionParams - Constructor for ContentEncryptionParams class. + * CCosNode::CCosNode - Constructor for CosNode class. */ - CContentEncryptionParams(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CCosNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { } - inline eEncryptionAlgorithm GetEncryptionAlgorithm(); - inline void GetKey(std::vector & ByteDataBuffer); - inline void GetInitializationVector(std::vector & ByteDataBuffer); - inline void GetAuthenticationTag(std::vector & ByteDataBuffer); - inline void SetAuthenticationTag(const CInputVector & ByteDataBuffer); - inline void GetAdditionalAuthenticationData(std::vector & ByteDataBuffer); - inline Lib3MF_uint64 GetDescriptor(); - inline std::string GetKeyUUID(); }; /************************************************************************************************************************* - Class CResourceData + Class CTanNode **************************************************************************************************************************/ -class CResourceData : public CBase { +class CTanNode : public COneInputNode { public: /** - * CResourceData::CResourceData - Constructor for ResourceData class. + * CTanNode::CTanNode - Constructor for TanNode class. */ - CResourceData(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CTanNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { } - inline PPackagePart GetPath(); - inline eEncryptionAlgorithm GetEncryptionAlgorithm(); - inline eCompression GetCompression(); - inline void GetAdditionalAuthenticationData(std::vector & ByteDataBuffer); }; /************************************************************************************************************************* - Class CResourceDataGroup + Class CArcSinNode **************************************************************************************************************************/ -class CResourceDataGroup : public CBase { +class CArcSinNode : public COneInputNode { public: /** - * CResourceDataGroup::CResourceDataGroup - Constructor for ResourceDataGroup class. + * CArcSinNode::CArcSinNode - Constructor for ArcSinNode class. */ - CResourceDataGroup(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CArcSinNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { } - inline std::string GetKeyUUID(); - inline PAccessRight AddAccessRight(classParam pConsumer, const eWrappingAlgorithm eWrappingAlgorithm, const eMgfAlgorithm eMgfAlgorithm, const eDigestMethod eDigestMethod); - inline PAccessRight FindAccessRightByConsumer(classParam pConsumer); - inline void RemoveAccessRight(classParam pConsumer); }; /************************************************************************************************************************* - Class CKeyStore + Class CArcCosNode **************************************************************************************************************************/ -class CKeyStore : public CBase { +class CArcCosNode : public COneInputNode { public: /** - * CKeyStore::CKeyStore - Constructor for KeyStore class. + * CArcCosNode::CArcCosNode - Constructor for ArcCosNode class. */ - CKeyStore(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CArcCosNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { } - inline PConsumer AddConsumer(const std::string & sConsumerID, const std::string & sKeyID, const std::string & sKeyValue); - inline Lib3MF_uint64 GetConsumerCount(); - inline PConsumer GetConsumer(const Lib3MF_uint64 nConsumerIndex); - inline void RemoveConsumer(classParam pConsumer); - inline PConsumer FindConsumer(const std::string & sConsumerID); - inline Lib3MF_uint64 GetResourceDataGroupCount(); - inline PResourceDataGroup AddResourceDataGroup(); - inline PResourceDataGroup GetResourceDataGroup(const Lib3MF_uint64 nResourceDataIndex); - inline void RemoveResourceDataGroup(classParam pResourceDataGroup); - inline PResourceDataGroup FindResourceDataGroup(classParam pPartPath); - inline PResourceData AddResourceData(classParam pResourceDataGroup, classParam pPartPath, const eEncryptionAlgorithm eAlgorithm, const eCompression eCompression, const CInputVector & AdditionalAuthenticationDataBuffer); - inline void RemoveResourceData(classParam pResourceData); - inline PResourceData FindResourceData(classParam pResourcePath); - inline Lib3MF_uint64 GetResourceDataCount(); - inline PResourceData GetResourceData(const Lib3MF_uint64 nResourceDataIndex); - inline std::string GetUUID(bool & bHasUUID); - inline void SetUUID(const std::string & sUUID); }; /************************************************************************************************************************* - Class CModel + Class CArcTanNode **************************************************************************************************************************/ -class CModel : public CBase { +class CArcTanNode : public COneInputNode { public: /** - * CModel::CModel - Constructor for Model class. + * CArcTanNode::CArcTanNode - Constructor for ArcTanNode class. */ - CModel(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CArcTanNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { } - inline PPackagePart RootModelPart(); - inline PPackagePart FindOrCreatePackagePart(const std::string & sAbsolutePath); - inline void SetUnit(const eModelUnit eUnit); - inline eModelUnit GetUnit(); - inline std::string GetLanguage(); - inline void SetLanguage(const std::string & sLanguage); - inline PWriter QueryWriter(const std::string & sWriterClass); - inline PReader QueryReader(const std::string & sReaderClass); - inline PResource GetResourceByID(const Lib3MF_uint32 nUniqueResourceID); - inline PTexture2D GetTexture2DByID(const Lib3MF_uint32 nUniqueResourceID); - inline ePropertyType GetPropertyTypeByID(const Lib3MF_uint32 nUniqueResourceID); - inline PBaseMaterialGroup GetBaseMaterialGroupByID(const Lib3MF_uint32 nUniqueResourceID); - inline PTexture2DGroup GetTexture2DGroupByID(const Lib3MF_uint32 nUniqueResourceID); - inline PCompositeMaterials GetCompositeMaterialsByID(const Lib3MF_uint32 nUniqueResourceID); - inline PMultiPropertyGroup GetMultiPropertyGroupByID(const Lib3MF_uint32 nUniqueResourceID); - inline PMeshObject GetMeshObjectByID(const Lib3MF_uint32 nUniqueResourceID); - inline PComponentsObject GetComponentsObjectByID(const Lib3MF_uint32 nUniqueResourceID); - inline PColorGroup GetColorGroupByID(const Lib3MF_uint32 nUniqueResourceID); - inline PSliceStack GetSliceStackByID(const Lib3MF_uint32 nUniqueResourceID); - inline std::string GetBuildUUID(bool & bHasUUID); - inline void SetBuildUUID(const std::string & sUUID); - inline PBuildItemIterator GetBuildItems(); - inline sBox GetOutbox(); - inline PResourceIterator GetResources(); - inline PObjectIterator GetObjects(); - inline PMeshObjectIterator GetMeshObjects(); - inline PComponentsObjectIterator GetComponentsObjects(); - inline PTexture2DIterator GetTexture2Ds(); - inline PBaseMaterialGroupIterator GetBaseMaterialGroups(); - inline PColorGroupIterator GetColorGroups(); - inline PTexture2DGroupIterator GetTexture2DGroups(); - inline PCompositeMaterialsIterator GetCompositeMaterials(); - inline PMultiPropertyGroupIterator GetMultiPropertyGroups(); - inline PSliceStackIterator GetSliceStacks(); - inline PModel MergeToModel(); - inline PMeshObject AddMeshObject(); - inline PComponentsObject AddComponentsObject(); - inline PSliceStack AddSliceStack(const Lib3MF_double dZBottom); - inline PTexture2D AddTexture2DFromAttachment(classParam pTextureAttachment); - inline PBaseMaterialGroup AddBaseMaterialGroup(); - inline PColorGroup AddColorGroup(); - inline PTexture2DGroup AddTexture2DGroup(classParam pTexture2DInstance); - inline PCompositeMaterials AddCompositeMaterials(classParam pBaseMaterialGroupInstance); - inline PMultiPropertyGroup AddMultiPropertyGroup(); - inline PBuildItem AddBuildItem(classParam pObject, const sTransform & Transform); - inline void RemoveBuildItem(classParam pBuildItemInstance); - inline PMetaDataGroup GetMetaDataGroup(); - inline PAttachment AddAttachment(const std::string & sURI, const std::string & sRelationShipType); - inline void RemoveAttachment(classParam pAttachmentInstance); - inline PAttachment GetAttachment(const Lib3MF_uint32 nIndex); - inline PAttachment FindAttachment(const std::string & sURI); - inline Lib3MF_uint32 GetAttachmentCount(); - inline bool HasPackageThumbnailAttachment(); - inline PAttachment CreatePackageThumbnailAttachment(); - inline PAttachment GetPackageThumbnailAttachment(); - inline void RemovePackageThumbnailAttachment(); - inline void AddCustomContentType(const std::string & sExtension, const std::string & sContentType); - inline void RemoveCustomContentType(const std::string & sExtension); - inline void SetRandomNumberCallback(const RandomNumberCallback pTheCallback, const Lib3MF_pvoid pUserData); - inline PKeyStore GetKeyStore(); }; - + /************************************************************************************************************************* - RTTI: Polymorphic Factory implementation + Class CSinhNode **************************************************************************************************************************/ - -/** -* IMPORTANT: PolymorphicFactory method should not be used by application directly. -* It's designed to be used on Lib3MFHandle object only once. -* If it's used on any existing object as a form of dynamic cast then -* CWrapper::AcquireInstance(CBase object) must be called after instantiating new object. -* This is important to keep reference count matching between application and library sides. -*/ -inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) -{ - Lib3MF_uint64 resultClassTypeId = 0; - CheckError(nullptr, lib3mf_base_classtypeid(pHandle, &resultClassTypeId)); - switch(resultClassTypeId) { - case 0x856632D0BAF1D8B7UL: return new CBase(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Base" - case 0xE76F642F363FD7E9UL: return new CWriter(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Writer" - case 0x2D86831DA59FBE72UL: return new CReader(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Reader" - case 0x0E55A826D377483EUL: return new CPackagePart(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::PackagePart" - case 0xDFE3889D1B269CBBUL: return new CResource(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Resource" - case 0x460F3515E2621DBEUL: return new CResourceIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceIterator" - case 0x69684DB99FA813F6UL: return new CSliceStackIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SliceStackIterator" - case 0xDE92510BD2112288UL: return new CObjectIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ObjectIterator" - case 0xF4196034E2B9FDE6UL: return new CMeshObjectIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MeshObjectIterator" - case 0x564DE4217ED7614AUL: return new CComponentsObjectIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObjectIterator" - case 0x4BD32B4870FFC03BUL: return new CTexture2DIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DIterator" - case 0x65E6EDD9362C79CBUL: return new CBaseMaterialGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroupIterator" - case 0x10274A1757C729C0UL: return new CColorGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ColorGroupIterator" - case 0x30D55F4DB88FE0CAUL: return new CTexture2DGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroupIterator" - case 0xA99CC6C3F70FB6F9UL: return new CCompositeMaterialsIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterialsIterator" - case 0xC2BDF5D8CBBDB1F0UL: return new CMultiPropertyGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroupIterator" - case 0xD17716D063DE2C22UL: return new CMetaData(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MetaData" - case 0x0C3B85369E9B25D3UL: return new CMetaDataGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MetaDataGroup" - case 0x2DA2136F577A779CUL: return new CObject(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Object" - case 0x3B3A6DC6EC610497UL: return new CMeshObject(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MeshObject" - case 0x63B3B461B30B4BA5UL: return new CBeamLattice(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BeamLattice" - case 0x4ECDB6A6F69F2BEBUL: return new CComponent(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Component" - case 0x6522CF04EB283FEDUL: return new CComponentsObject(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObject" - case 0x30CCDBE90E00B55BUL: return new CBeamSet(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BeamSet" - case 0xB27D4656E16609FAUL: return new CBaseMaterialGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroup" - case 0xD085FB2E49CDB5B1UL: return new CColorGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ColorGroup" - case 0xBC1208397E37055DUL: return new CTexture2DGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroup" - case 0xCE16224D688B86F2UL: return new CCompositeMaterials(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterials" - case 0xB989E02E43158FE6UL: return new CMultiPropertyGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroup" - case 0x8CE7A1191A63A35DUL: return new CAttachment(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Attachment" - case 0xE0441CF976B36319UL: return new CTexture2D(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2D" - case 0x68FB2D5FFC4BA12AUL: return new CBuildItem(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItem" - case 0xA7D21BD364910860UL: return new CBuildItemIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItemIterator" - case 0x2198BCF4D8DF9C40UL: return new CSlice(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Slice" - case 0x6594B031B6096238UL: return new CSliceStack(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SliceStack" - case 0xD9E46D5E6D8118EEUL: return new CConsumer(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Consumer" - case 0x385C42FC5609498AUL: return new CAccessRight(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::AccessRight" - case 0x7FB36B91D4CE4671UL: return new CContentEncryptionParams(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ContentEncryptionParams" - case 0x1A47A5E258E22EF9UL: return new CResourceData(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceData" - case 0xD59067227E428AA4UL: return new CResourceDataGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceDataGroup" - case 0x1CC9E0CC082253C6UL: return new CKeyStore(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::KeyStore" - case 0x5A8164ECEDB03F09UL: return new CModel(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Model" +class CSinhNode : public COneInputNode { +public: + + /** + * CSinhNode::CSinhNode - Constructor for SinhNode class. + */ + CSinhNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CCoshNode +**************************************************************************************************************************/ +class CCoshNode : public COneInputNode { +public: + + /** + * CCoshNode::CCoshNode - Constructor for CoshNode class. + */ + CCoshNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CTanhNode +**************************************************************************************************************************/ +class CTanhNode : public COneInputNode { +public: + + /** + * CTanhNode::CTanhNode - Constructor for TanhNode class. + */ + CTanhNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CRoundNode +**************************************************************************************************************************/ +class CRoundNode : public COneInputNode { +public: + + /** + * CRoundNode::CRoundNode - Constructor for RoundNode class. + */ + CRoundNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CCeilNode +**************************************************************************************************************************/ +class CCeilNode : public COneInputNode { +public: + + /** + * CCeilNode::CCeilNode - Constructor for CeilNode class. + */ + CCeilNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CFloorNode +**************************************************************************************************************************/ +class CFloorNode : public COneInputNode { +public: + + /** + * CFloorNode::CFloorNode - Constructor for FloorNode class. + */ + CFloorNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CSignNode +**************************************************************************************************************************/ +class CSignNode : public COneInputNode { +public: + + /** + * CSignNode::CSignNode - Constructor for SignNode class. + */ + CSignNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CFractNode +**************************************************************************************************************************/ +class CFractNode : public COneInputNode { +public: + + /** + * CFractNode::CFractNode - Constructor for FractNode class. + */ + CFractNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CAbsNode +**************************************************************************************************************************/ +class CAbsNode : public COneInputNode { +public: + + /** + * CAbsNode::CAbsNode - Constructor for AbsNode class. + */ + CAbsNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CExpNode +**************************************************************************************************************************/ +class CExpNode : public COneInputNode { +public: + + /** + * CExpNode::CExpNode - Constructor for ExpNode class. + */ + CExpNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CLogNode +**************************************************************************************************************************/ +class CLogNode : public COneInputNode { +public: + + /** + * CLogNode::CLogNode - Constructor for LogNode class. + */ + CLogNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CLog2Node +**************************************************************************************************************************/ +class CLog2Node : public COneInputNode { +public: + + /** + * CLog2Node::CLog2Node - Constructor for Log2Node class. + */ + CLog2Node(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CLog10Node +**************************************************************************************************************************/ +class CLog10Node : public COneInputNode { +public: + + /** + * CLog10Node::CLog10Node - Constructor for Log10Node class. + */ + CLog10Node(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CLengthNode +**************************************************************************************************************************/ +class CLengthNode : public COneInputNode { +public: + + /** + * CLengthNode::CLengthNode - Constructor for LengthNode class. + */ + CLengthNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CTransposeNode +**************************************************************************************************************************/ +class CTransposeNode : public COneInputNode { +public: + + /** + * CTransposeNode::CTransposeNode - Constructor for TransposeNode class. + */ + CTransposeNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CInverseNode +**************************************************************************************************************************/ +class CInverseNode : public COneInputNode { +public: + + /** + * CInverseNode::CInverseNode - Constructor for InverseNode class. + */ + CInverseNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CSqrtNode +**************************************************************************************************************************/ +class CSqrtNode : public COneInputNode { +public: + + /** + * CSqrtNode::CSqrtNode - Constructor for SqrtNode class. + */ + CSqrtNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CResourceIdNode +**************************************************************************************************************************/ +class CResourceIdNode : public CImplicitNode { +public: + + /** + * CResourceIdNode::CResourceIdNode - Constructor for ResourceIdNode class. + */ + CResourceIdNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline void SetResource(classParam pResource); + inline PResource GetResource(); + inline PImplicitPort GetOutputValue(); +}; + +/************************************************************************************************************************* + Class CTwoInputNode +**************************************************************************************************************************/ +class CTwoInputNode : public COneInputNode { +public: + + /** + * CTwoInputNode::CTwoInputNode - Constructor for TwoInputNode class. + */ + CTwoInputNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputB(); +}; + +/************************************************************************************************************************* + Class CAdditionNode +**************************************************************************************************************************/ +class CAdditionNode : public CTwoInputNode { +public: + + /** + * CAdditionNode::CAdditionNode - Constructor for AdditionNode class. + */ + CAdditionNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CSubtractionNode +**************************************************************************************************************************/ +class CSubtractionNode : public CTwoInputNode { +public: + + /** + * CSubtractionNode::CSubtractionNode - Constructor for SubtractionNode class. + */ + CSubtractionNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CMultiplicationNode +**************************************************************************************************************************/ +class CMultiplicationNode : public CTwoInputNode { +public: + + /** + * CMultiplicationNode::CMultiplicationNode - Constructor for MultiplicationNode class. + */ + CMultiplicationNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CDivisionNode +**************************************************************************************************************************/ +class CDivisionNode : public CTwoInputNode { +public: + + /** + * CDivisionNode::CDivisionNode - Constructor for DivisionNode class. + */ + CDivisionNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CDotNode +**************************************************************************************************************************/ +class CDotNode : public CTwoInputNode { +public: + + /** + * CDotNode::CDotNode - Constructor for DotNode class. + */ + CDotNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CCrossNode +**************************************************************************************************************************/ +class CCrossNode : public CTwoInputNode { +public: + + /** + * CCrossNode::CCrossNode - Constructor for CrossNode class. + */ + CCrossNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CArcTan2Node +**************************************************************************************************************************/ +class CArcTan2Node : public CTwoInputNode { +public: + + /** + * CArcTan2Node::CArcTan2Node - Constructor for ArcTan2Node class. + */ + CArcTan2Node(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CMatVecMultiplicationNode +**************************************************************************************************************************/ +class CMatVecMultiplicationNode : public CTwoInputNode { +public: + + /** + * CMatVecMultiplicationNode::CMatVecMultiplicationNode - Constructor for MatVecMultiplicationNode class. + */ + CMatVecMultiplicationNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CMinNode +**************************************************************************************************************************/ +class CMinNode : public CTwoInputNode { +public: + + /** + * CMinNode::CMinNode - Constructor for MinNode class. + */ + CMinNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CMaxNode +**************************************************************************************************************************/ +class CMaxNode : public CTwoInputNode { +public: + + /** + * CMaxNode::CMaxNode - Constructor for MaxNode class. + */ + CMaxNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CFmodNode +**************************************************************************************************************************/ +class CFmodNode : public CTwoInputNode { +public: + + /** + * CFmodNode::CFmodNode - Constructor for FmodNode class. + */ + CFmodNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CModNode +**************************************************************************************************************************/ +class CModNode : public CTwoInputNode { +public: + + /** + * CModNode::CModNode - Constructor for ModNode class. + */ + CModNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CPowNode +**************************************************************************************************************************/ +class CPowNode : public CTwoInputNode { +public: + + /** + * CPowNode::CPowNode - Constructor for PowNode class. + */ + CPowNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CSelectNode +**************************************************************************************************************************/ +class CSelectNode : public COneInputNode { +public: + + /** + * CSelectNode::CSelectNode - Constructor for SelectNode class. + */ + CSelectNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputB(); + inline PImplicitPort GetInputC(); + inline PImplicitPort GetInputD(); +}; + +/************************************************************************************************************************* + Class CClampNode +**************************************************************************************************************************/ +class CClampNode : public COneInputNode { +public: + + /** + * CClampNode::CClampNode - Constructor for ClampNode class. + */ + CClampNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputMin(); + inline PImplicitPort GetInputMax(); +}; + +/************************************************************************************************************************* + Class CComposeVectorNode +**************************************************************************************************************************/ +class CComposeVectorNode : public CImplicitNode { +public: + + /** + * CComposeVectorNode::CComposeVectorNode - Constructor for ComposeVectorNode class. + */ + CComposeVectorNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputX(); + inline PImplicitPort GetInputY(); + inline PImplicitPort GetInputZ(); + inline PImplicitPort GetOutputResult(); +}; + +/************************************************************************************************************************* + Class CVectorFromScalarNode +**************************************************************************************************************************/ +class CVectorFromScalarNode : public COneInputNode { +public: + + /** + * CVectorFromScalarNode::CVectorFromScalarNode - Constructor for VectorFromScalarNode class. + */ + CVectorFromScalarNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CDecomposeVectorNode +**************************************************************************************************************************/ +class CDecomposeVectorNode : public CImplicitNode { +public: + + /** + * CDecomposeVectorNode::CDecomposeVectorNode - Constructor for DecomposeVectorNode class. + */ + CDecomposeVectorNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputA(); + inline PImplicitPort GetOutputX(); + inline PImplicitPort GetOutputY(); + inline PImplicitPort GetOutputZ(); +}; + +/************************************************************************************************************************* + Class CComposeMatrixNode +**************************************************************************************************************************/ +class CComposeMatrixNode : public CImplicitNode { +public: + + /** + * CComposeMatrixNode::CComposeMatrixNode - Constructor for ComposeMatrixNode class. + */ + CComposeMatrixNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputM00(); + inline PImplicitPort GetInputM01(); + inline PImplicitPort GetInputM02(); + inline PImplicitPort GetInputM03(); + inline PImplicitPort GetInputM10(); + inline PImplicitPort GetInputM11(); + inline PImplicitPort GetInputM12(); + inline PImplicitPort GetInputM13(); + inline PImplicitPort GetInputM20(); + inline PImplicitPort GetInputM21(); + inline PImplicitPort GetInputM22(); + inline PImplicitPort GetInputM23(); + inline PImplicitPort GetInputM30(); + inline PImplicitPort GetInputM31(); + inline PImplicitPort GetInputM32(); + inline PImplicitPort GetInputM33(); + inline PImplicitPort GetOutputResult(); +}; + +/************************************************************************************************************************* + Class CMatrixFromRowsNode +**************************************************************************************************************************/ +class CMatrixFromRowsNode : public CImplicitNode { +public: + + /** + * CMatrixFromRowsNode::CMatrixFromRowsNode - Constructor for MatrixFromRowsNode class. + */ + CMatrixFromRowsNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputA(); + inline PImplicitPort GetInputB(); + inline PImplicitPort GetInputC(); + inline PImplicitPort GetInputD(); + inline PImplicitPort GetOutputResult(); +}; + +/************************************************************************************************************************* + Class CMatrixFromColumnsNode +**************************************************************************************************************************/ +class CMatrixFromColumnsNode : public CImplicitNode { +public: + + /** + * CMatrixFromColumnsNode::CMatrixFromColumnsNode - Constructor for MatrixFromColumnsNode class. + */ + CMatrixFromColumnsNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputA(); + inline PImplicitPort GetInputB(); + inline PImplicitPort GetInputC(); + inline PImplicitPort GetInputD(); + inline PImplicitPort GetOutputResult(); +}; + +/************************************************************************************************************************* + Class CConstantNode +**************************************************************************************************************************/ +class CConstantNode : public CImplicitNode { +public: + + /** + * CConstantNode::CConstantNode - Constructor for ConstantNode class. + */ + CConstantNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline void SetConstant(const Lib3MF_double dValue); + inline Lib3MF_double GetConstant(); + inline PImplicitPort GetOutputValue(); +}; + +/************************************************************************************************************************* + Class CConstVecNode +**************************************************************************************************************************/ +class CConstVecNode : public CImplicitNode { +public: + + /** + * CConstVecNode::CConstVecNode - Constructor for ConstVecNode class. + */ + CConstVecNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline void SetVector(const sVector & Value); + inline sVector GetVector(); + inline PImplicitPort GetOutputVector(); +}; + +/************************************************************************************************************************* + Class CConstMatNode +**************************************************************************************************************************/ +class CConstMatNode : public CImplicitNode { +public: + + /** + * CConstMatNode::CConstMatNode - Constructor for ConstMatNode class. + */ + CConstMatNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline void SetMatrix(const sMatrix4x4 & Value); + inline sMatrix4x4 GetMatrix(); + inline PImplicitPort GetOutputMatrix(); +}; + +/************************************************************************************************************************* + Class CMeshNode +**************************************************************************************************************************/ +class CMeshNode : public CImplicitNode { +public: + + /** + * CMeshNode::CMeshNode - Constructor for MeshNode class. + */ + CMeshNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputMesh(); + inline PImplicitPort GetInputPos(); + inline PImplicitPort GetOutputDistance(); +}; + +/************************************************************************************************************************* + Class CUnsignedMeshNode +**************************************************************************************************************************/ +class CUnsignedMeshNode : public CImplicitNode { +public: + + /** + * CUnsignedMeshNode::CUnsignedMeshNode - Constructor for UnsignedMeshNode class. + */ + CUnsignedMeshNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputMesh(); + inline PImplicitPort GetInputPos(); + inline PImplicitPort GetOutputDistance(); +}; + +/************************************************************************************************************************* + Class CFunctionCallNode +**************************************************************************************************************************/ +class CFunctionCallNode : public CImplicitNode { +public: + + /** + * CFunctionCallNode::CFunctionCallNode - Constructor for FunctionCallNode class. + */ + CFunctionCallNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputFunctionID(); +}; + +/************************************************************************************************************************* + Class CNodeIterator +**************************************************************************************************************************/ +class CNodeIterator : public CIterator { +public: + + /** + * CNodeIterator::CNodeIterator - Constructor for NodeIterator class. + */ + CNodeIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CIterator(pWrapper, pHandle) + { + } + + inline PImplicitNode GetCurrent(); +}; + +/************************************************************************************************************************* + Class CFunction +**************************************************************************************************************************/ +class CFunction : public CResource { +public: + + /** + * CFunction::CFunction - Constructor for Function class. + */ + CFunction(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResource(pWrapper, pHandle) + { + } + + inline std::string GetDisplayName(); + inline void SetDisplayName(const std::string & sDisplayName); + inline PImplicitPort AddInput(const std::string & sIdentifier, const std::string & sDisplayName, const eImplicitPortType eType); + inline PImplicitPortIterator GetInputs(); + inline void RemoveInput(classParam pInput); + inline PImplicitPort AddOutput(const std::string & sIdentifier, const std::string & sDisplayName, const eImplicitPortType eType); + inline PImplicitPortIterator GetOutputs(); + inline void RemoveOutput(classParam pOutput); + inline PImplicitPort FindInput(const std::string & sIdentifier); + inline PImplicitPort FindOutput(const std::string & sIdentifier); +}; + +/************************************************************************************************************************* + Class CImplicitFunction +**************************************************************************************************************************/ +class CImplicitFunction : public CFunction { +public: + + /** + * CImplicitFunction::CImplicitFunction - Constructor for ImplicitFunction class. + */ + CImplicitFunction(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CFunction(pWrapper, pHandle) + { + } + + inline std::string GetIdentifier(); + inline void SetIdentifier(const std::string & sIdentifier); + inline PImplicitNode AddNode(const eImplicitNodeType eNodeType, const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PSinNode AddSinNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PCosNode AddCosNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PTanNode AddTanNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PArcSinNode AddArcSinNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PArcCosNode AddArcCosNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PArcTan2Node AddArcTan2Node(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PSinhNode AddSinhNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PCoshNode AddCoshNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PTanhNode AddTanhNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PRoundNode AddRoundNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PCeilNode AddCeilNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PFloorNode AddFloorNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PSignNode AddSignNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PFractNode AddFractNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PAbsNode AddAbsNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PExpNode AddExpNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PLogNode AddLogNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PLog2Node AddLog2Node(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PLog10Node AddLog10Node(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PLengthNode AddLengthNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PTransposeNode AddTransposeNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PInverseNode InverseNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PSqrtNode AddSqrtNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PResourceIdNode AddResourceIdNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PAdditionNode AddAdditionNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PSubtractionNode AddSubtractionNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PMultiplicationNode AddMultiplicationNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PDivisionNode AddDivisionNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PDotNode AddDotNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PCrossNode AddCrossNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PMatVecMultiplicationNode AddMatVecMultiplicationNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PMinNode AddMinNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PMaxNode AddMaxNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PFmodNode AddFmodNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PPowNode AddPowNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PSelectNode AddSelectNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PClampNode AddClampNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PComposeVectorNode AddComposeVectorNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PVectorFromScalarNode AddVectorFromScalarNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PDecomposeVectorNode AddDecomposeVectorNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PComposeMatrixNode AddComposeMatrixNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PMatrixFromRowsNode AddMatrixFromRowsNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PMatrixFromColumnsNode AddMatrixFromColumnsNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PConstantNode AddConstantNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PConstVecNode AddConstVecNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PConstMatNode AddConstMatNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PMeshNode AddMeshNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PUnsignedMeshNode AddUnsignedMeshNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PFunctionCallNode AddFunctionCallNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PNodeIterator GetNodes(); + inline void RemoveNode(classParam pNode); + inline void AddLink(classParam pSource, classParam pTarget); + inline void AddLinkByNames(const std::string & sSource, const std::string & sTarget); + inline void Clear(); + inline void SortNodesTopologically(); +}; + +/************************************************************************************************************************* + Class CFunctionFromImage3D +**************************************************************************************************************************/ +class CFunctionFromImage3D : public CFunction { +public: + + /** + * CFunctionFromImage3D::CFunctionFromImage3D - Constructor for FunctionFromImage3D class. + */ + CFunctionFromImage3D(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CFunction(pWrapper, pHandle) + { + } + + inline PImage3D GetImage3D(); + inline void SetImage3D(classParam pImage3D); + inline void SetFilter(const eTextureFilter eFilter); + inline eTextureFilter GetFilter(); + inline void SetTileStyles(const eTextureTileStyle eTileStyleU, const eTextureTileStyle eTileStyleV, const eTextureTileStyle eTileStyleW); + inline void GetTileStyles(eTextureTileStyle & eTileStyleU, eTextureTileStyle & eTileStyleV, eTextureTileStyle & eTileStyleW); + inline Lib3MF_double GetOffset(); + inline void SetOffset(const Lib3MF_double dOffset); + inline Lib3MF_double GetScale(); + inline void SetScale(const Lib3MF_double dScale); +}; + +/************************************************************************************************************************* + Class CBuildItem +**************************************************************************************************************************/ +class CBuildItem : public CBase { +public: + + /** + * CBuildItem::CBuildItem - Constructor for BuildItem class. + */ + CBuildItem(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline PObject GetObjectResource(); + inline std::string GetUUID(bool & bHasUUID); + inline void SetUUID(const std::string & sUUID); + inline Lib3MF_uint32 GetObjectResourceID(); + inline bool HasObjectTransform(); + inline sTransform GetObjectTransform(); + inline void SetObjectTransform(const sTransform & Transform); + inline std::string GetPartNumber(); + inline void SetPartNumber(const std::string & sSetPartnumber); + inline PMetaDataGroup GetMetaDataGroup(); + inline sBox GetOutbox(); +}; + +/************************************************************************************************************************* + Class CBuildItemIterator +**************************************************************************************************************************/ +class CBuildItemIterator : public CBase { +public: + + /** + * CBuildItemIterator::CBuildItemIterator - Constructor for BuildItemIterator class. + */ + CBuildItemIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline bool MoveNext(); + inline bool MovePrevious(); + inline PBuildItem GetCurrent(); + inline PBuildItemIterator Clone(); + inline Lib3MF_uint64 Count(); +}; + +/************************************************************************************************************************* + Class CSlice +**************************************************************************************************************************/ +class CSlice : public CBase { +public: + + /** + * CSlice::CSlice - Constructor for Slice class. + */ + CSlice(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline void SetVertices(const CInputVector & VerticesBuffer); + inline void GetVertices(std::vector & VerticesBuffer); + inline Lib3MF_uint64 GetVertexCount(); + inline Lib3MF_uint64 AddPolygon(const CInputVector & IndicesBuffer); + inline Lib3MF_uint64 GetPolygonCount(); + inline void SetPolygonIndices(const Lib3MF_uint64 nIndex, const CInputVector & IndicesBuffer); + inline void GetPolygonIndices(const Lib3MF_uint64 nIndex, std::vector & IndicesBuffer); + inline Lib3MF_uint64 GetPolygonIndexCount(const Lib3MF_uint64 nIndex); + inline Lib3MF_double GetZTop(); +}; + +/************************************************************************************************************************* + Class CSliceStack +**************************************************************************************************************************/ +class CSliceStack : public CResource { +public: + + /** + * CSliceStack::CSliceStack - Constructor for SliceStack class. + */ + CSliceStack(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResource(pWrapper, pHandle) + { + } + + inline Lib3MF_double GetBottomZ(); + inline Lib3MF_uint64 GetSliceCount(); + inline PSlice GetSlice(const Lib3MF_uint64 nSliceIndex); + inline PSlice AddSlice(const Lib3MF_double dZTop); + inline Lib3MF_uint64 GetSliceRefCount(); + inline void AddSliceStackReference(classParam pTheSliceStack); + inline PSliceStack GetSliceStackReference(const Lib3MF_uint64 nSliceRefIndex); + inline void CollapseSliceReferences(); + inline void SetOwnPath(const std::string & sPath); + inline std::string GetOwnPath(); +}; + +/************************************************************************************************************************* + Class CConsumer +**************************************************************************************************************************/ +class CConsumer : public CBase { +public: + + /** + * CConsumer::CConsumer - Constructor for Consumer class. + */ + CConsumer(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline std::string GetConsumerID(); + inline std::string GetKeyID(); + inline std::string GetKeyValue(); +}; + +/************************************************************************************************************************* + Class CAccessRight +**************************************************************************************************************************/ +class CAccessRight : public CBase { +public: + + /** + * CAccessRight::CAccessRight - Constructor for AccessRight class. + */ + CAccessRight(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline PConsumer GetConsumer(); + inline eWrappingAlgorithm GetWrappingAlgorithm(); + inline eMgfAlgorithm GetMgfAlgorithm(); + inline eDigestMethod GetDigestMethod(); +}; + +/************************************************************************************************************************* + Class CContentEncryptionParams +**************************************************************************************************************************/ +class CContentEncryptionParams : public CBase { +public: + + /** + * CContentEncryptionParams::CContentEncryptionParams - Constructor for ContentEncryptionParams class. + */ + CContentEncryptionParams(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline eEncryptionAlgorithm GetEncryptionAlgorithm(); + inline void GetKey(std::vector & ByteDataBuffer); + inline void GetInitializationVector(std::vector & ByteDataBuffer); + inline void GetAuthenticationTag(std::vector & ByteDataBuffer); + inline void SetAuthenticationTag(const CInputVector & ByteDataBuffer); + inline void GetAdditionalAuthenticationData(std::vector & ByteDataBuffer); + inline Lib3MF_uint64 GetDescriptor(); + inline std::string GetKeyUUID(); +}; + +/************************************************************************************************************************* + Class CResourceData +**************************************************************************************************************************/ +class CResourceData : public CBase { +public: + + /** + * CResourceData::CResourceData - Constructor for ResourceData class. + */ + CResourceData(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline PPackagePart GetPath(); + inline eEncryptionAlgorithm GetEncryptionAlgorithm(); + inline eCompression GetCompression(); + inline void GetAdditionalAuthenticationData(std::vector & ByteDataBuffer); +}; + +/************************************************************************************************************************* + Class CResourceDataGroup +**************************************************************************************************************************/ +class CResourceDataGroup : public CBase { +public: + + /** + * CResourceDataGroup::CResourceDataGroup - Constructor for ResourceDataGroup class. + */ + CResourceDataGroup(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline std::string GetKeyUUID(); + inline PAccessRight AddAccessRight(classParam pConsumer, const eWrappingAlgorithm eWrappingAlgorithm, const eMgfAlgorithm eMgfAlgorithm, const eDigestMethod eDigestMethod); + inline PAccessRight FindAccessRightByConsumer(classParam pConsumer); + inline void RemoveAccessRight(classParam pConsumer); +}; + +/************************************************************************************************************************* + Class CKeyStore +**************************************************************************************************************************/ +class CKeyStore : public CBase { +public: + + /** + * CKeyStore::CKeyStore - Constructor for KeyStore class. + */ + CKeyStore(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline PConsumer AddConsumer(const std::string & sConsumerID, const std::string & sKeyID, const std::string & sKeyValue); + inline Lib3MF_uint64 GetConsumerCount(); + inline PConsumer GetConsumer(const Lib3MF_uint64 nConsumerIndex); + inline void RemoveConsumer(classParam pConsumer); + inline PConsumer FindConsumer(const std::string & sConsumerID); + inline Lib3MF_uint64 GetResourceDataGroupCount(); + inline PResourceDataGroup AddResourceDataGroup(); + inline PResourceDataGroup GetResourceDataGroup(const Lib3MF_uint64 nResourceDataIndex); + inline void RemoveResourceDataGroup(classParam pResourceDataGroup); + inline PResourceDataGroup FindResourceDataGroup(classParam pPartPath); + inline PResourceData AddResourceData(classParam pResourceDataGroup, classParam pPartPath, const eEncryptionAlgorithm eAlgorithm, const eCompression eCompression, const CInputVector & AdditionalAuthenticationDataBuffer); + inline void RemoveResourceData(classParam pResourceData); + inline PResourceData FindResourceData(classParam pResourcePath); + inline Lib3MF_uint64 GetResourceDataCount(); + inline PResourceData GetResourceData(const Lib3MF_uint64 nResourceDataIndex); + inline std::string GetUUID(bool & bHasUUID); + inline void SetUUID(const std::string & sUUID); +}; + +/************************************************************************************************************************* + Class CModel +**************************************************************************************************************************/ +class CModel : public CBase { +public: + + /** + * CModel::CModel - Constructor for Model class. + */ + CModel(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline PPackagePart RootModelPart(); + inline PPackagePart FindOrCreatePackagePart(const std::string & sAbsolutePath); + inline void SetUnit(const eModelUnit eUnit); + inline eModelUnit GetUnit(); + inline std::string GetLanguage(); + inline void SetLanguage(const std::string & sLanguage); + inline PWriter QueryWriter(const std::string & sWriterClass); + inline PReader QueryReader(const std::string & sReaderClass); + inline PResource GetResourceByID(const Lib3MF_uint32 nUniqueResourceID); + inline PTexture2D GetTexture2DByID(const Lib3MF_uint32 nUniqueResourceID); + inline ePropertyType GetPropertyTypeByID(const Lib3MF_uint32 nUniqueResourceID); + inline PBaseMaterialGroup GetBaseMaterialGroupByID(const Lib3MF_uint32 nUniqueResourceID); + inline PTexture2DGroup GetTexture2DGroupByID(const Lib3MF_uint32 nUniqueResourceID); + inline PCompositeMaterials GetCompositeMaterialsByID(const Lib3MF_uint32 nUniqueResourceID); + inline PMultiPropertyGroup GetMultiPropertyGroupByID(const Lib3MF_uint32 nUniqueResourceID); + inline PMeshObject GetMeshObjectByID(const Lib3MF_uint32 nUniqueResourceID); + inline PComponentsObject GetComponentsObjectByID(const Lib3MF_uint32 nUniqueResourceID); + inline PColorGroup GetColorGroupByID(const Lib3MF_uint32 nUniqueResourceID); + inline PSliceStack GetSliceStackByID(const Lib3MF_uint32 nUniqueResourceID); + inline PLevelSet GetLevelSetByID(const Lib3MF_uint32 nUniqueResourceID); + inline std::string GetBuildUUID(bool & bHasUUID); + inline void SetBuildUUID(const std::string & sUUID); + inline PBuildItemIterator GetBuildItems(); + inline sBox GetOutbox(); + inline PResourceIterator GetResources(); + inline PObjectIterator GetObjects(); + inline PMeshObjectIterator GetMeshObjects(); + inline PComponentsObjectIterator GetComponentsObjects(); + inline PTexture2DIterator GetTexture2Ds(); + inline PBaseMaterialGroupIterator GetBaseMaterialGroups(); + inline PColorGroupIterator GetColorGroups(); + inline PTexture2DGroupIterator GetTexture2DGroups(); + inline PCompositeMaterialsIterator GetCompositeMaterials(); + inline PMultiPropertyGroupIterator GetMultiPropertyGroups(); + inline PSliceStackIterator GetSliceStacks(); + inline PImage3DIterator GetImage3Ds(); + inline PModel MergeToModel(); + inline void MergeFromModel(classParam pModelInstance); + inline PMeshObject AddMeshObject(); + inline PComponentsObject AddComponentsObject(); + inline PSliceStack AddSliceStack(const Lib3MF_double dZBottom); + inline PTexture2D AddTexture2DFromAttachment(classParam pTextureAttachment); + inline PBaseMaterialGroup AddBaseMaterialGroup(); + inline PColorGroup AddColorGroup(); + inline PTexture2DGroup AddTexture2DGroup(classParam pTexture2DInstance); + inline PCompositeMaterials AddCompositeMaterials(classParam pBaseMaterialGroupInstance); + inline PMultiPropertyGroup AddMultiPropertyGroup(); + inline PImageStack AddImageStack(const Lib3MF_uint32 nColumnCount, const Lib3MF_uint32 nRowCount, const Lib3MF_uint32 nSheetCount); + inline PImageStack GetImageStackByID(const Lib3MF_uint32 nUniqueResourceID); + inline PBuildItem AddBuildItem(classParam pObject, const sTransform & Transform); + inline void RemoveBuildItem(classParam pBuildItemInstance); + inline PMetaDataGroup GetMetaDataGroup(); + inline PAttachment AddAttachment(const std::string & sURI, const std::string & sRelationShipType); + inline void RemoveAttachment(classParam pAttachmentInstance); + inline PAttachment GetAttachment(const Lib3MF_uint32 nIndex); + inline PAttachment FindAttachment(const std::string & sURI); + inline Lib3MF_uint32 GetAttachmentCount(); + inline bool HasPackageThumbnailAttachment(); + inline PAttachment CreatePackageThumbnailAttachment(); + inline PAttachment GetPackageThumbnailAttachment(); + inline void RemovePackageThumbnailAttachment(); + inline void AddCustomContentType(const std::string & sExtension, const std::string & sContentType); + inline void RemoveCustomContentType(const std::string & sExtension); + inline void SetRandomNumberCallback(const RandomNumberCallback pTheCallback, const Lib3MF_pvoid pUserData); + inline PKeyStore GetKeyStore(); + inline PFunctionIterator GetFunctions(); + inline PImplicitFunction AddImplicitFunction(); + inline PFunctionFromImage3D AddFunctionFromImage3D(classParam pImage3DInstance); + inline PVolumeData AddVolumeData(); + inline PLevelSet AddLevelSet(); + inline PLevelSetIterator GetLevelSets(); + inline void RemoveResource(classParam pResource); +}; + +/************************************************************************************************************************* + RTTI: Polymorphic Factory implementation +**************************************************************************************************************************/ + +/** +* IMPORTANT: PolymorphicFactory method should not be used by application directly. +* It's designed to be used on Lib3MFHandle object only once. +* If it's used on any existing object as a form of dynamic cast then +* CWrapper::AcquireInstance(CBase object) must be called after instantiating new object. +* This is important to keep reference count matching between application and library sides. +*/ +inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) +{ + Lib3MF_uint64 resultClassTypeId = 0; + CheckError(nullptr, lib3mf_base_classtypeid(pHandle, &resultClassTypeId)); + switch(resultClassTypeId) { + case 0x856632D0BAF1D8B7UL: return new CBase(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Base" + case 0xE76F642F363FD7E9UL: return new CWriter(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Writer" + case 0x2D86831DA59FBE72UL: return new CReader(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Reader" + case 0x0E55A826D377483EUL: return new CPackagePart(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::PackagePart" + case 0xDFE3889D1B269CBBUL: return new CResource(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Resource" + case 0x460F3515E2621DBEUL: return new CResourceIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceIterator" + case 0x69684DB99FA813F6UL: return new CSliceStackIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SliceStackIterator" + case 0xDE92510BD2112288UL: return new CObjectIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ObjectIterator" + case 0xF4196034E2B9FDE6UL: return new CMeshObjectIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MeshObjectIterator" + case 0x564DE4217ED7614AUL: return new CComponentsObjectIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObjectIterator" + case 0x4BD32B4870FFC03BUL: return new CTexture2DIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DIterator" + case 0x65E6EDD9362C79CBUL: return new CBaseMaterialGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroupIterator" + case 0x10274A1757C729C0UL: return new CColorGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ColorGroupIterator" + case 0x30D55F4DB88FE0CAUL: return new CTexture2DGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroupIterator" + case 0xA99CC6C3F70FB6F9UL: return new CCompositeMaterialsIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterialsIterator" + case 0xC2BDF5D8CBBDB1F0UL: return new CMultiPropertyGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroupIterator" + case 0xC4B8EC00A82BF336UL: return new CImage3DIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Image3DIterator" + case 0x40E9035363ACE65EUL: return new CFunctionIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionIterator" + case 0xA0C005C035D5371DUL: return new CLevelSetIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::LevelSetIterator" + case 0xD17716D063DE2C22UL: return new CMetaData(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MetaData" + case 0x0C3B85369E9B25D3UL: return new CMetaDataGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MetaDataGroup" + case 0x2DA2136F577A779CUL: return new CObject(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Object" + case 0x3B3A6DC6EC610497UL: return new CMeshObject(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MeshObject" + case 0xE8A7D9C192EFD0E2UL: return new CLevelSet(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::LevelSet" + case 0x63B3B461B30B4BA5UL: return new CBeamLattice(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BeamLattice" + case 0x4DF17E76926221C2UL: return new CFunctionReference(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionReference" + case 0xD85B5B6143E787E3UL: return new CVolumeDataColor(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataColor" + case 0x241FE6B4817C3FE4UL: return new CMaterialMapping(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MaterialMapping" + case 0x46F1DAC40581B304UL: return new CVolumeDataComposite(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataComposite" + case 0xFC368AA44ACE42DAUL: return new CVolumeDataProperty(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataProperty" + case 0x9200586FB91587A7UL: return new CVolumeData(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeData" + case 0x4ECDB6A6F69F2BEBUL: return new CComponent(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Component" + case 0x6522CF04EB283FEDUL: return new CComponentsObject(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObject" + case 0x30CCDBE90E00B55BUL: return new CBeamSet(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BeamSet" + case 0xB27D4656E16609FAUL: return new CBaseMaterialGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroup" + case 0xD085FB2E49CDB5B1UL: return new CColorGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ColorGroup" + case 0xBC1208397E37055DUL: return new CTexture2DGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroup" + case 0xCE16224D688B86F2UL: return new CCompositeMaterials(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterials" + case 0xB989E02E43158FE6UL: return new CMultiPropertyGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroup" + case 0xBD938FF2D2663D61UL: return new CImage3D(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Image3D" + case 0x13A2561F0CFB712AUL: return new CImageStack(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ImageStack" + case 0x8CE7A1191A63A35DUL: return new CAttachment(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Attachment" + case 0xE0441CF976B36319UL: return new CTexture2D(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2D" + case 0xD5C49B04AF1963CDUL: return new CImplicitPort(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitPort" + case 0x52F06268CD098EFEUL: return new CIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Iterator" + case 0xC62268F2D7C7012CUL: return new CImplicitPortIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitPortIterator" + case 0xE72592A7725AB29BUL: return new CImplicitNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitNode" + case 0xB19B9FDA94B0A5E7UL: return new COneInputNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::OneInputNode" + case 0xD5AEA50A56306722UL: return new CSinNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SinNode" + case 0x59BC328F6FB5C5FFUL: return new CCosNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CosNode" + case 0x2614CC572AF350B7UL: return new CTanNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::TanNode" + case 0xE554C8A7E72AAF4DUL: return new CArcSinNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ArcSinNode" + case 0x943AF6AE0EFD2B8AUL: return new CArcCosNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ArcCosNode" + case 0xE47D547615816BADUL: return new CArcTanNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ArcTanNode" + case 0x3C7756A456F2D089UL: return new CSinhNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SinhNode" + case 0x4A993F91E1DE256DUL: return new CCoshNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CoshNode" + case 0xCF077B19B0B78E9DUL: return new CTanhNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::TanhNode" + case 0xD9F5A53C657765AEUL: return new CRoundNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::RoundNode" + case 0x627E211653E11D93UL: return new CCeilNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CeilNode" + case 0x392A0F4C041D249CUL: return new CFloorNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FloorNode" + case 0x8A45165E6C9646D7UL: return new CSignNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SignNode" + case 0x53E62FD67F4D9A65UL: return new CFractNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FractNode" + case 0x6B641C7060040BE3UL: return new CAbsNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::AbsNode" + case 0x3390243A8E2410F3UL: return new CExpNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ExpNode" + case 0x0070021D73AA89FDUL: return new CLogNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::LogNode" + case 0xE8C0ABF7C5DC7068UL: return new CLog2Node(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Log2Node" + case 0x87740AD53454E0DFUL: return new CLog10Node(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Log10Node" + case 0xD85889E2739A74B1UL: return new CLengthNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::LengthNode" + case 0xA808B7599C158CE6UL: return new CTransposeNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::TransposeNode" + case 0xE8601F66A23A0540UL: return new CInverseNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::InverseNode" + case 0x9F831944A3DE31DAUL: return new CSqrtNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SqrtNode" + case 0xCA86A77C71CD3FAEUL: return new CResourceIdNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceIdNode" + case 0x7DE3951BA4C1064CUL: return new CTwoInputNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::TwoInputNode" + case 0x57A2236998DF5248UL: return new CAdditionNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::AdditionNode" + case 0x6079B12FFF345D02UL: return new CSubtractionNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SubtractionNode" + case 0xA3C27CF54C2AA76CUL: return new CMultiplicationNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MultiplicationNode" + case 0xB896B6413C08CF39UL: return new CDivisionNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::DivisionNode" + case 0xFE60932A66375FADUL: return new CDotNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::DotNode" + case 0x106182D38CA5CFE3UL: return new CCrossNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CrossNode" + case 0xB6153EF5DE7E5E11UL: return new CArcTan2Node(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ArcTan2Node" + case 0x7570C43B9721D0C0UL: return new CMatVecMultiplicationNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MatVecMultiplicationNode" + case 0x846AFDE9A091E997UL: return new CMinNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MinNode" + case 0x073F910381BF250DUL: return new CMaxNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MaxNode" + case 0x1EF703D298223F2AUL: return new CFmodNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FmodNode" + case 0xEA57335849379F22UL: return new CModNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ModNode" + case 0x7700AA17CA1AC0F8UL: return new CPowNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::PowNode" + case 0x1127ED71E05A9BD4UL: return new CSelectNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SelectNode" + case 0x77AF68C971B1485FUL: return new CClampNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ClampNode" + case 0x49C24B8840C01F7EUL: return new CComposeVectorNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ComposeVectorNode" + case 0x2E417B93351375E2UL: return new CVectorFromScalarNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::VectorFromScalarNode" + case 0xCC4F8D561CCE35D4UL: return new CDecomposeVectorNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::DecomposeVectorNode" + case 0x9EF9EB54A53AA40DUL: return new CComposeMatrixNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ComposeMatrixNode" + case 0xD6DFD0A7EB64AC33UL: return new CMatrixFromRowsNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MatrixFromRowsNode" + case 0x0DCBEAFCF83F3AACUL: return new CMatrixFromColumnsNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MatrixFromColumnsNode" + case 0x3F8E5D082F966B1BUL: return new CConstantNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ConstantNode" + case 0x9C9363B3F708D556UL: return new CConstVecNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ConstVecNode" + case 0xF85C90EDCE6F90A4UL: return new CConstMatNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ConstMatNode" + case 0x53601FD432E3DEF4UL: return new CMeshNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MeshNode" + case 0x29985A628251A9CDUL: return new CUnsignedMeshNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::UnsignedMeshNode" + case 0x0765C17C952F24E3UL: return new CFunctionCallNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionCallNode" + case 0xFC006BC888CAB4D0UL: return new CNodeIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::NodeIterator" + case 0x9EFB2757CA1A5231UL: return new CFunction(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Function" + case 0x6CE54469EEA83BC1UL: return new CImplicitFunction(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitFunction" + case 0x9BD7D3C2026B8CE8UL: return new CFunctionFromImage3D(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionFromImage3D" + case 0x68FB2D5FFC4BA12AUL: return new CBuildItem(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItem" + case 0xA7D21BD364910860UL: return new CBuildItemIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItemIterator" + case 0x2198BCF4D8DF9C40UL: return new CSlice(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Slice" + case 0x6594B031B6096238UL: return new CSliceStack(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SliceStack" + case 0xD9E46D5E6D8118EEUL: return new CConsumer(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Consumer" + case 0x385C42FC5609498AUL: return new CAccessRight(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::AccessRight" + case 0x7FB36B91D4CE4671UL: return new CContentEncryptionParams(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ContentEncryptionParams" + case 0x1A47A5E258E22EF9UL: return new CResourceData(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceData" + case 0xD59067227E428AA4UL: return new CResourceDataGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceDataGroup" + case 0x1CC9E0CC082253C6UL: return new CKeyStore(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::KeyStore" + case 0x5A8164ECEDB03F09UL: return new CModel(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Model" + } + return new CBase(this, pHandle); +} + + /** + * CWrapper::GetLibraryVersion - retrieves the binary version of this library. + * @param[out] nMajor - returns the major version of this library + * @param[out] nMinor - returns the minor version of this library + * @param[out] nMicro - returns the micro version of this library + */ + inline void CWrapper::GetLibraryVersion(Lib3MF_uint32 & nMajor, Lib3MF_uint32 & nMinor, Lib3MF_uint32 & nMicro) + { + CheckError(nullptr,lib3mf_getlibraryversion(&nMajor, &nMinor, &nMicro)); + } + + /** + * CWrapper::GetPrereleaseInformation - retrieves prerelease information of this library. + * @return Does the library provide prerelease version? + * @param[out] sPrereleaseInfo - retrieves prerelease information of this library. + */ + inline bool CWrapper::GetPrereleaseInformation(std::string & sPrereleaseInfo) + { + bool resultHasPrereleaseInfo = 0; + Lib3MF_uint32 bytesNeededPrereleaseInfo = 0; + Lib3MF_uint32 bytesWrittenPrereleaseInfo = 0; + CheckError(nullptr,lib3mf_getprereleaseinformation(&resultHasPrereleaseInfo, 0, &bytesNeededPrereleaseInfo, nullptr)); + std::vector bufferPrereleaseInfo(bytesNeededPrereleaseInfo); + CheckError(nullptr,lib3mf_getprereleaseinformation(&resultHasPrereleaseInfo, bytesNeededPrereleaseInfo, &bytesWrittenPrereleaseInfo, &bufferPrereleaseInfo[0])); + sPrereleaseInfo = std::string(&bufferPrereleaseInfo[0]); + + return resultHasPrereleaseInfo; + } + + /** + * CWrapper::GetBuildInformation - retrieves build information of this library. + * @return Does the library provide build version? + * @param[out] sBuildInformation - retrieves build information of this library. + */ + inline bool CWrapper::GetBuildInformation(std::string & sBuildInformation) + { + bool resultHasBuildInfo = 0; + Lib3MF_uint32 bytesNeededBuildInformation = 0; + Lib3MF_uint32 bytesWrittenBuildInformation = 0; + CheckError(nullptr,lib3mf_getbuildinformation(&resultHasBuildInfo, 0, &bytesNeededBuildInformation, nullptr)); + std::vector bufferBuildInformation(bytesNeededBuildInformation); + CheckError(nullptr,lib3mf_getbuildinformation(&resultHasBuildInfo, bytesNeededBuildInformation, &bytesWrittenBuildInformation, &bufferBuildInformation[0])); + sBuildInformation = std::string(&bufferBuildInformation[0]); + + return resultHasBuildInfo; + } + + /** + * CWrapper::GetSpecificationVersion - retrieves whether a specification is supported, and if so, which version. + * @param[in] sSpecificationURL - URL of extension to check + * @param[out] bIsSupported - returns whether this specification is supported + * @param[out] nMajor - returns the major version of the extension (if IsSupported) + * @param[out] nMinor - returns the minor version of the extension (if IsSupported) + * @param[out] nMicro - returns the micro version of the extension (if IsSupported) + */ + inline void CWrapper::GetSpecificationVersion(const std::string & sSpecificationURL, bool & bIsSupported, Lib3MF_uint32 & nMajor, Lib3MF_uint32 & nMinor, Lib3MF_uint32 & nMicro) + { + CheckError(nullptr,lib3mf_getspecificationversion(sSpecificationURL.c_str(), &bIsSupported, &nMajor, &nMinor, &nMicro)); + } + + /** + * CWrapper::CreateModel - creates an empty model instance. + * @return returns an empty model instance + */ + inline PModel CWrapper::CreateModel() + { + Lib3MFHandle hModel = nullptr; + CheckError(nullptr,lib3mf_createmodel(&hModel)); + + if (!hModel) { + CheckError(nullptr,LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(this->polymorphicFactory(hModel))); + } + + /** + * CWrapper::Release - releases shared ownership of an object instance + * @param[in] pInstance - the object instance to release + */ + inline void CWrapper::Release(classParam pInstance) + { + Lib3MFHandle hInstance = pInstance.GetHandle(); + CheckError(nullptr,lib3mf_release(hInstance)); + } + + /** + * CWrapper::Acquire - acquires shared ownership of an object instance + * @param[in] pInstance - the object instance to acquire + */ + inline void CWrapper::Acquire(classParam pInstance) + { + Lib3MFHandle hInstance = pInstance.GetHandle(); + CheckError(nullptr,lib3mf_acquire(hInstance)); + } + + /** + * CWrapper::SetJournal - Sets the journal file path + * @param[in] sJournalPath - File name of the journal file + */ + inline void CWrapper::SetJournal(const std::string & sJournalPath) + { + CheckError(nullptr,lib3mf_setjournal(sJournalPath.c_str())); + } + + /** + * CWrapper::GetLastError - Retrieves the last error string of an instance + * @param[in] pInstance - Object where the error occured. + * @param[out] sLastErrorString - Last Error String + * @return Returns if the instance has a last error. + */ + inline bool CWrapper::GetLastError(classParam pInstance, std::string & sLastErrorString) + { + Lib3MFHandle hInstance = pInstance.GetHandle(); + Lib3MF_uint32 bytesNeededLastErrorString = 0; + Lib3MF_uint32 bytesWrittenLastErrorString = 0; + bool resultHasLastError = 0; + CheckError(nullptr,lib3mf_getlasterror(hInstance, 0, &bytesNeededLastErrorString, nullptr, &resultHasLastError)); + std::vector bufferLastErrorString(bytesNeededLastErrorString); + CheckError(nullptr,lib3mf_getlasterror(hInstance, bytesNeededLastErrorString, &bytesWrittenLastErrorString, &bufferLastErrorString[0], &resultHasLastError)); + sLastErrorString = std::string(&bufferLastErrorString[0]); + + return resultHasLastError; + } + + /** + * CWrapper::GetSymbolLookupMethod - Returns the address of the SymbolLookupMethod + * @return Address of the SymbolAddressMethod + */ + inline Lib3MF_pvoid CWrapper::GetSymbolLookupMethod() + { + Lib3MF_pvoid resultSymbolLookupMethod = 0; + CheckError(nullptr,lib3mf_getsymbollookupmethod(&resultSymbolLookupMethod)); + + return resultSymbolLookupMethod; + } + + /** + * CWrapper::RetrieveProgressMessage - Return an English text for a progress identifier.|Note: this is the only function you can call from your callback function. + * @param[in] eTheProgressIdentifier - the progress identifier that is passed to the callback function + * @param[out] sProgressMessage - English text for the progress identifier + */ + inline void CWrapper::RetrieveProgressMessage(const eProgressIdentifier eTheProgressIdentifier, std::string & sProgressMessage) + { + Lib3MF_uint32 bytesNeededProgressMessage = 0; + Lib3MF_uint32 bytesWrittenProgressMessage = 0; + CheckError(nullptr,lib3mf_retrieveprogressmessage(eTheProgressIdentifier, 0, &bytesNeededProgressMessage, nullptr)); + std::vector bufferProgressMessage(bytesNeededProgressMessage); + CheckError(nullptr,lib3mf_retrieveprogressmessage(eTheProgressIdentifier, bytesNeededProgressMessage, &bytesWrittenProgressMessage, &bufferProgressMessage[0])); + sProgressMessage = std::string(&bufferProgressMessage[0]); + } + + /** + * CWrapper::RGBAToColor - Creates a Color from uint8 RGBA values + * @param[in] nRed - Red value of color (0-255) + * @param[in] nGreen - Green value of color (0-255) + * @param[in] nBlue - Blue value of color (0-255) + * @param[in] nAlpha - Alpha value of color (0-255) + * @return Assembled color + */ + inline sColor CWrapper::RGBAToColor(const Lib3MF_uint8 nRed, const Lib3MF_uint8 nGreen, const Lib3MF_uint8 nBlue, const Lib3MF_uint8 nAlpha) + { + sColor resultTheColor; + CheckError(nullptr,lib3mf_rgbatocolor(nRed, nGreen, nBlue, nAlpha, &resultTheColor)); + + return resultTheColor; + } + + /** + * CWrapper::FloatRGBAToColor - Creates a Color from uint8 RGBA values + * @param[in] fRed - Red value of color (0-1) + * @param[in] fGreen - Green value of color (0-1) + * @param[in] fBlue - Blue value of color (0-1) + * @param[in] fAlpha - Alpha value of color (0-1) + * @return Assembled color + */ + inline sColor CWrapper::FloatRGBAToColor(const Lib3MF_single fRed, const Lib3MF_single fGreen, const Lib3MF_single fBlue, const Lib3MF_single fAlpha) + { + sColor resultTheColor; + CheckError(nullptr,lib3mf_floatrgbatocolor(fRed, fGreen, fBlue, fAlpha, &resultTheColor)); + + return resultTheColor; + } + + /** + * CWrapper::ColorToRGBA - Calculates uint8-RGBA-values from a Color + * @param[in] TheColor - Color to handle + * @param[out] nRed - Red value of color (0-255) + * @param[out] nGreen - Green value of color (0-255) + * @param[out] nBlue - Blue value of color (0-255) + * @param[out] nAlpha - Alpha value of color (0-255) + */ + inline void CWrapper::ColorToRGBA(const sColor & TheColor, Lib3MF_uint8 & nRed, Lib3MF_uint8 & nGreen, Lib3MF_uint8 & nBlue, Lib3MF_uint8 & nAlpha) + { + CheckError(nullptr,lib3mf_colortorgba(&TheColor, &nRed, &nGreen, &nBlue, &nAlpha)); + } + + /** + * CWrapper::ColorToFloatRGBA - Calculates float-RGBA-values from a Color + * @param[in] TheColor - Color to handle + * @param[out] fRed - Red value of color (0-1) + * @param[out] fGreen - Green value of color (0-1) + * @param[out] fBlue - Blue value of color (0-1) + * @param[out] fAlpha - Alpha value of color (0-1) + */ + inline void CWrapper::ColorToFloatRGBA(const sColor & TheColor, Lib3MF_single & fRed, Lib3MF_single & fGreen, Lib3MF_single & fBlue, Lib3MF_single & fAlpha) + { + CheckError(nullptr,lib3mf_colortofloatrgba(&TheColor, &fRed, &fGreen, &fBlue, &fAlpha)); + } + + /** + * CWrapper::GetIdentityTransform - Creates an identity transform + * @return Transformation matrix. + */ + inline sTransform CWrapper::GetIdentityTransform() + { + sTransform resultTransform; + CheckError(nullptr,lib3mf_getidentitytransform(&resultTransform)); + + return resultTransform; + } + + /** + * CWrapper::GetUniformScaleTransform - Creates a uniform scale transform + * @param[in] fFactor - Factor in X, Y and Z + * @return Transformation matrix. + */ + inline sTransform CWrapper::GetUniformScaleTransform(const Lib3MF_single fFactor) + { + sTransform resultTransform; + CheckError(nullptr,lib3mf_getuniformscaletransform(fFactor, &resultTransform)); + + return resultTransform; + } + + /** + * CWrapper::GetScaleTransform - Creates a scale transform + * @param[in] fFactorX - Factor in X + * @param[in] fFactorY - Factor in Y + * @param[in] fFactorZ - Factor in Z + * @return Transformation matrix. + */ + inline sTransform CWrapper::GetScaleTransform(const Lib3MF_single fFactorX, const Lib3MF_single fFactorY, const Lib3MF_single fFactorZ) + { + sTransform resultTransform; + CheckError(nullptr,lib3mf_getscaletransform(fFactorX, fFactorY, fFactorZ, &resultTransform)); + + return resultTransform; + } + + /** + * CWrapper::GetTranslationTransform - Creates an translation transform + * @param[in] fVectorX - Translation in X + * @param[in] fVectorY - Translation in Y + * @param[in] fVectorZ - Translation in Z + * @return Transformation matrix. + */ + inline sTransform CWrapper::GetTranslationTransform(const Lib3MF_single fVectorX, const Lib3MF_single fVectorY, const Lib3MF_single fVectorZ) + { + sTransform resultTransform; + CheckError(nullptr,lib3mf_gettranslationtransform(fVectorX, fVectorY, fVectorZ, &resultTransform)); + + return resultTransform; + } + + inline void CWrapper::CheckError(CBase * pBaseClass, Lib3MFResult nResult) + { + if (nResult != 0) { + std::string sErrorMessage; + if (pBaseClass != nullptr) { + GetLastError(pBaseClass, sErrorMessage); + } + throw ELib3MFException(nResult, sErrorMessage); + } + } + + + + /** + * Method definitions for class CBase + */ + + /** + * CBase::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 CBase::ClassTypeId() + { + Lib3MF_uint64 resultClassTypeId = 0; + CheckError(lib3mf_base_classtypeid(m_pHandle, &resultClassTypeId)); + + return resultClassTypeId; + } + + /** + * Method definitions for class CWriter + */ + + /** + * CWriter::WriteToFile - Writes out the model as file. The file type is specified by the Model Writer class. + * @param[in] sFilename - Filename to write into + */ + void CWriter::WriteToFile(const std::string & sFilename) + { + CheckError(lib3mf_writer_writetofile(m_pHandle, sFilename.c_str())); + } + + /** + * CWriter::GetStreamSize - Retrieves the size of the full 3MF file stream. + * @return the stream size + */ + Lib3MF_uint64 CWriter::GetStreamSize() + { + Lib3MF_uint64 resultStreamSize = 0; + CheckError(lib3mf_writer_getstreamsize(m_pHandle, &resultStreamSize)); + + return resultStreamSize; + } + + /** + * CWriter::WriteToBuffer - Writes out the 3MF file into a memory buffer + * @param[out] BufferBuffer - buffer to write into + */ + void CWriter::WriteToBuffer(std::vector & BufferBuffer) + { + Lib3MF_uint64 elementsNeededBuffer = 0; + Lib3MF_uint64 elementsWrittenBuffer = 0; + CheckError(lib3mf_writer_writetobuffer(m_pHandle, 0, &elementsNeededBuffer, nullptr)); + BufferBuffer.resize((size_t) elementsNeededBuffer); + CheckError(lib3mf_writer_writetobuffer(m_pHandle, elementsNeededBuffer, &elementsWrittenBuffer, BufferBuffer.data())); + } + + /** + * CWriter::WriteToCallback - Writes out the model and passes the data to a provided callback function. The file type is specified by the Model Writer class. + * @param[in] pTheWriteCallback - Callback to call for writing a data chunk + * @param[in] pTheSeekCallback - Callback to call for seeking in the stream + * @param[in] pUserData - Userdata that is passed to the callback function + */ + void CWriter::WriteToCallback(const WriteCallback pTheWriteCallback, const SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) + { + CheckError(lib3mf_writer_writetocallback(m_pHandle, pTheWriteCallback, pTheSeekCallback, pUserData)); + } + + /** + * CWriter::SetProgressCallback - Set the progress callback for calls to this writer + * @param[in] pProgressCallback - pointer to the callback function. + * @param[in] pUserData - pointer to arbitrary user data that is passed without modification to the callback. + */ + void CWriter::SetProgressCallback(const ProgressCallback pProgressCallback, const Lib3MF_pvoid pUserData) + { + CheckError(lib3mf_writer_setprogresscallback(m_pHandle, pProgressCallback, pUserData)); + } + + /** + * CWriter::GetDecimalPrecision - Returns the number of digits after the decimal point to be written in each vertex coordinate-value. + * @return The number of digits to be written in each vertex coordinate-value after the decimal point. + */ + Lib3MF_uint32 CWriter::GetDecimalPrecision() + { + Lib3MF_uint32 resultDecimalPrecision = 0; + CheckError(lib3mf_writer_getdecimalprecision(m_pHandle, &resultDecimalPrecision)); + + return resultDecimalPrecision; + } + + /** + * CWriter::SetDecimalPrecision - Sets the number of digits after the decimal point to be written in each vertex coordinate-value. + * @param[in] nDecimalPrecision - The number of digits to be written in each vertex coordinate-value after the decimal point. + */ + void CWriter::SetDecimalPrecision(const Lib3MF_uint32 nDecimalPrecision) + { + CheckError(lib3mf_writer_setdecimalprecision(m_pHandle, nDecimalPrecision)); + } + + /** + * CWriter::SetStrictModeActive - Activates (deactivates) the strict mode of the reader. + * @param[in] bStrictModeActive - flag whether strict mode is active or not. + */ + void CWriter::SetStrictModeActive(const bool bStrictModeActive) + { + CheckError(lib3mf_writer_setstrictmodeactive(m_pHandle, bStrictModeActive)); + } + + /** + * CWriter::GetStrictModeActive - Queries whether the strict mode of the reader is active or not + * @return returns flag whether strict mode is active or not. + */ + bool CWriter::GetStrictModeActive() + { + bool resultStrictModeActive = 0; + CheckError(lib3mf_writer_getstrictmodeactive(m_pHandle, &resultStrictModeActive)); + + return resultStrictModeActive; + } + + /** + * CWriter::GetWarning - Returns Warning and Error Information of the read process + * @param[in] nIndex - Index of the Warning. Valid values are 0 to WarningCount - 1 + * @param[out] nErrorCode - filled with the error code of the warning + * @return the message of the warning + */ + std::string CWriter::GetWarning(const Lib3MF_uint32 nIndex, Lib3MF_uint32 & nErrorCode) + { + Lib3MF_uint32 bytesNeededWarning = 0; + Lib3MF_uint32 bytesWrittenWarning = 0; + CheckError(lib3mf_writer_getwarning(m_pHandle, nIndex, &nErrorCode, 0, &bytesNeededWarning, nullptr)); + std::vector bufferWarning(bytesNeededWarning); + CheckError(lib3mf_writer_getwarning(m_pHandle, nIndex, &nErrorCode, bytesNeededWarning, &bytesWrittenWarning, &bufferWarning[0])); + + return std::string(&bufferWarning[0]); + } + + /** + * CWriter::GetWarningCount - Returns Warning and Error Count of the read process + * @return filled with the count of the occurred warnings. + */ + Lib3MF_uint32 CWriter::GetWarningCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_writer_getwarningcount(m_pHandle, &resultCount)); + + return resultCount; + } + + /** + * CWriter::AddKeyWrappingCallback - Registers a callback to deal with data key encryption/decryption from keystore + * @param[in] sConsumerID - The ConsumerID to register for + * @param[in] pTheCallback - The callback to be callede for wrapping and encryption key + * @param[in] pUserData - Userdata that is passed to the callback function + */ + void CWriter::AddKeyWrappingCallback(const std::string & sConsumerID, const KeyWrappingCallback pTheCallback, const Lib3MF_pvoid pUserData) + { + CheckError(lib3mf_writer_addkeywrappingcallback(m_pHandle, sConsumerID.c_str(), pTheCallback, pUserData)); + } + + /** + * CWriter::SetContentEncryptionCallback - Registers a callback to deal with encryption of content + * @param[in] pTheCallback - The callback used to encrypt content + * @param[in] pUserData - Userdata that is passed to the callback function + */ + void CWriter::SetContentEncryptionCallback(const ContentEncryptionCallback pTheCallback, const Lib3MF_pvoid pUserData) + { + CheckError(lib3mf_writer_setcontentencryptioncallback(m_pHandle, pTheCallback, pUserData)); + } + + /** + * Method definitions for class CReader + */ + + /** + * CReader::ReadFromFile - Reads a model from a file. The file type is specified by the Model Reader class + * @param[in] sFilename - Filename to read from + */ + void CReader::ReadFromFile(const std::string & sFilename) + { + CheckError(lib3mf_reader_readfromfile(m_pHandle, sFilename.c_str())); + } + + /** + * CReader::ReadFromBuffer - Reads a model from a memory buffer. + * @param[in] BufferBuffer - Buffer to read from + */ + void CReader::ReadFromBuffer(const CInputVector & BufferBuffer) + { + CheckError(lib3mf_reader_readfrombuffer(m_pHandle, (Lib3MF_uint64)BufferBuffer.size(), BufferBuffer.data())); + } + + /** + * CReader::ReadFromCallback - Reads a model and from the data provided by a callback function + * @param[in] pTheReadCallback - Callback to call for reading a data chunk + * @param[in] nStreamSize - number of bytes the callback returns + * @param[in] pTheSeekCallback - Callback to call for seeking in the stream. + * @param[in] pUserData - Userdata that is passed to the callback function + */ + void CReader::ReadFromCallback(const ReadCallback pTheReadCallback, const Lib3MF_uint64 nStreamSize, const SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) + { + CheckError(lib3mf_reader_readfromcallback(m_pHandle, pTheReadCallback, nStreamSize, pTheSeekCallback, pUserData)); + } + + /** + * CReader::SetProgressCallback - Set the progress callback for calls to this writer + * @param[in] pProgressCallback - pointer to the callback function. + * @param[in] pUserData - pointer to arbitrary user data that is passed without modification to the callback. + */ + void CReader::SetProgressCallback(const ProgressCallback pProgressCallback, const Lib3MF_pvoid pUserData) + { + CheckError(lib3mf_reader_setprogresscallback(m_pHandle, pProgressCallback, pUserData)); + } + + /** + * CReader::AddRelationToRead - Adds a relationship type which shall be read as attachment in memory while loading + * @param[in] sRelationShipType - String of the relationship type + */ + void CReader::AddRelationToRead(const std::string & sRelationShipType) + { + CheckError(lib3mf_reader_addrelationtoread(m_pHandle, sRelationShipType.c_str())); + } + + /** + * CReader::RemoveRelationToRead - Removes a relationship type which shall be read as attachment in memory while loading + * @param[in] sRelationShipType - String of the relationship type + */ + void CReader::RemoveRelationToRead(const std::string & sRelationShipType) + { + CheckError(lib3mf_reader_removerelationtoread(m_pHandle, sRelationShipType.c_str())); + } + + /** + * CReader::SetStrictModeActive - Activates (deactivates) the strict mode of the reader. + * @param[in] bStrictModeActive - flag whether strict mode is active or not. + */ + void CReader::SetStrictModeActive(const bool bStrictModeActive) + { + CheckError(lib3mf_reader_setstrictmodeactive(m_pHandle, bStrictModeActive)); + } + + /** + * CReader::GetStrictModeActive - Queries whether the strict mode of the reader is active or not + * @return returns flag whether strict mode is active or not. + */ + bool CReader::GetStrictModeActive() + { + bool resultStrictModeActive = 0; + CheckError(lib3mf_reader_getstrictmodeactive(m_pHandle, &resultStrictModeActive)); + + return resultStrictModeActive; + } + + /** + * CReader::GetWarning - Returns Warning and Error Information of the read process + * @param[in] nIndex - Index of the Warning. Valid values are 0 to WarningCount - 1 + * @param[out] nErrorCode - filled with the error code of the warning + * @return the message of the warning + */ + std::string CReader::GetWarning(const Lib3MF_uint32 nIndex, Lib3MF_uint32 & nErrorCode) + { + Lib3MF_uint32 bytesNeededWarning = 0; + Lib3MF_uint32 bytesWrittenWarning = 0; + CheckError(lib3mf_reader_getwarning(m_pHandle, nIndex, &nErrorCode, 0, &bytesNeededWarning, nullptr)); + std::vector bufferWarning(bytesNeededWarning); + CheckError(lib3mf_reader_getwarning(m_pHandle, nIndex, &nErrorCode, bytesNeededWarning, &bytesWrittenWarning, &bufferWarning[0])); + + return std::string(&bufferWarning[0]); + } + + /** + * CReader::GetWarningCount - Returns Warning and Error Count of the read process + * @return filled with the count of the occurred warnings. + */ + Lib3MF_uint32 CReader::GetWarningCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_reader_getwarningcount(m_pHandle, &resultCount)); + + return resultCount; + } + + /** + * CReader::AddKeyWrappingCallback - Registers a callback to deal with key wrapping mechanism from keystore + * @param[in] sConsumerID - The ConsumerID to register for + * @param[in] pTheCallback - The callback used to decrypt data key + * @param[in] pUserData - Userdata that is passed to the callback function + */ + void CReader::AddKeyWrappingCallback(const std::string & sConsumerID, const KeyWrappingCallback pTheCallback, const Lib3MF_pvoid pUserData) + { + CheckError(lib3mf_reader_addkeywrappingcallback(m_pHandle, sConsumerID.c_str(), pTheCallback, pUserData)); + } + + /** + * CReader::SetContentEncryptionCallback - Registers a callback to deal with encryption of content + * @param[in] pTheCallback - The callback used to encrypt content + * @param[in] pUserData - Userdata that is passed to the callback function + */ + void CReader::SetContentEncryptionCallback(const ContentEncryptionCallback pTheCallback, const Lib3MF_pvoid pUserData) + { + CheckError(lib3mf_reader_setcontentencryptioncallback(m_pHandle, pTheCallback, pUserData)); + } + + /** + * Method definitions for class CPackagePart + */ + + /** + * CPackagePart::GetPath - Returns the absolute path of this PackagePart. + * @return Returns the absolute path of this PackagePart + */ + std::string CPackagePart::GetPath() + { + Lib3MF_uint32 bytesNeededPath = 0; + Lib3MF_uint32 bytesWrittenPath = 0; + CheckError(lib3mf_packagepart_getpath(m_pHandle, 0, &bytesNeededPath, nullptr)); + std::vector bufferPath(bytesNeededPath); + CheckError(lib3mf_packagepart_getpath(m_pHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0])); + + return std::string(&bufferPath[0]); + } + + /** + * CPackagePart::SetPath - Sets the absolute path of this PackagePart. + * @param[in] sPath - Sets the absolute path of this PackagePart. + */ + void CPackagePart::SetPath(const std::string & sPath) + { + CheckError(lib3mf_packagepart_setpath(m_pHandle, sPath.c_str())); + } + + /** + * Method definitions for class CResource + */ + + /** + * CResource::GetResourceID - Retrieves the unique id of this resource within a package. This function will be removed in a later release in favor of GetUniqueResourceID + * @return Retrieves the unique id of this resource within a package. + */ + Lib3MF_uint32 CResource::GetResourceID() + { + Lib3MF_uint32 resultUniqueResourceID = 0; + CheckError(lib3mf_resource_getresourceid(m_pHandle, &resultUniqueResourceID)); + + return resultUniqueResourceID; + } + + /** + * CResource::GetUniqueResourceID - Retrieves the unique id of this resource within a package. + * @return Retrieves the unique id of this resource within a package. + */ + Lib3MF_uint32 CResource::GetUniqueResourceID() + { + Lib3MF_uint32 resultUniqueResourceID = 0; + CheckError(lib3mf_resource_getuniqueresourceid(m_pHandle, &resultUniqueResourceID)); + + return resultUniqueResourceID; + } + + /** + * CResource::PackagePart - Returns the PackagePart within which this resource resides + * @return the PackagePart within which this resource resides. + */ + PPackagePart CResource::PackagePart() + { + Lib3MFHandle hPackagePart = nullptr; + CheckError(lib3mf_resource_packagepart(m_pHandle, &hPackagePart)); + + if (!hPackagePart) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPackagePart))); + } + + /** + * CResource::SetPackagePart - Sets the new PackagePart within which this resource resides + * @param[in] pPackagePart - the new PackagePart within which this resource resides. + */ + void CResource::SetPackagePart(classParam pPackagePart) + { + Lib3MFHandle hPackagePart = pPackagePart.GetHandle(); + CheckError(lib3mf_resource_setpackagepart(m_pHandle, hPackagePart)); + } + + /** + * CResource::GetModelResourceID - Retrieves the id of this resource within a model. + * @return Retrieves the id of this resource within a model. + */ + Lib3MF_uint32 CResource::GetModelResourceID() + { + Lib3MF_uint32 resultModelResourceId = 0; + CheckError(lib3mf_resource_getmodelresourceid(m_pHandle, &resultModelResourceId)); + + return resultModelResourceId; + } + + /** + * Method definitions for class CResourceIterator + */ + + /** + * CResourceIterator::MoveNext - Iterates to the next resource in the list. + * @return Iterates to the next resource in the list. + */ + bool CResourceIterator::MoveNext() + { + bool resultHasNext = 0; + CheckError(lib3mf_resourceiterator_movenext(m_pHandle, &resultHasNext)); + + return resultHasNext; + } + + /** + * CResourceIterator::MovePrevious - Iterates to the previous resource in the list. + * @return Iterates to the previous resource in the list. + */ + bool CResourceIterator::MovePrevious() + { + bool resultHasPrevious = 0; + CheckError(lib3mf_resourceiterator_moveprevious(m_pHandle, &resultHasPrevious)); + + return resultHasPrevious; + } + + /** + * CResourceIterator::GetCurrent - Returns the resource the iterator points at. + * @return returns the resource instance. + */ + PResource CResourceIterator::GetCurrent() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_resourceiterator_getcurrent(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * CResourceIterator::Clone - Creates a new resource iterator with the same resource list. + * @return returns the cloned Iterator instance + */ + PResourceIterator CResourceIterator::Clone() + { + Lib3MFHandle hOutResourceIterator = nullptr; + CheckError(lib3mf_resourceiterator_clone(m_pHandle, &hOutResourceIterator)); + + if (!hOutResourceIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hOutResourceIterator))); + } + + /** + * CResourceIterator::Count - Returns the number of resoucres the iterator captures. + * @return returns the number of resoucres the iterator captures. + */ + Lib3MF_uint64 CResourceIterator::Count() + { + Lib3MF_uint64 resultCount = 0; + CheckError(lib3mf_resourceiterator_count(m_pHandle, &resultCount)); + + return resultCount; + } + + /** + * Method definitions for class CSliceStackIterator + */ + + /** + * CSliceStackIterator::GetCurrentSliceStack - Returns the SliceStack the iterator points at. + * @return returns the SliceStack instance. + */ + PSliceStack CSliceStackIterator::GetCurrentSliceStack() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_slicestackiterator_getcurrentslicestack(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CObjectIterator + */ + + /** + * CObjectIterator::GetCurrentObject - Returns the Object the iterator points at. + * @return returns the Object instance. + */ + PObject CObjectIterator::GetCurrentObject() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_objectiterator_getcurrentobject(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CMeshObjectIterator + */ + + /** + * CMeshObjectIterator::GetCurrentMeshObject - Returns the MeshObject the iterator points at. + * @return returns the MeshObject instance. + */ + PMeshObject CMeshObjectIterator::GetCurrentMeshObject() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_meshobjectiterator_getcurrentmeshobject(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CComponentsObjectIterator + */ + + /** + * CComponentsObjectIterator::GetCurrentComponentsObject - Returns the ComponentsObject the iterator points at. + * @return returns the ComponentsObject instance. + */ + PComponentsObject CComponentsObjectIterator::GetCurrentComponentsObject() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_componentsobjectiterator_getcurrentcomponentsobject(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CTexture2DIterator + */ + + /** + * CTexture2DIterator::GetCurrentTexture2D - Returns the Texture2D the iterator points at. + * @return returns the Texture2D instance. + */ + PTexture2D CTexture2DIterator::GetCurrentTexture2D() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_texture2diterator_getcurrenttexture2d(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CBaseMaterialGroupIterator + */ + + /** + * CBaseMaterialGroupIterator::GetCurrentBaseMaterialGroup - Returns the MaterialGroup the iterator points at. + * @return returns the BaseMaterialGroup instance. + */ + PBaseMaterialGroup CBaseMaterialGroupIterator::GetCurrentBaseMaterialGroup() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CColorGroupIterator + */ + + /** + * CColorGroupIterator::GetCurrentColorGroup - Returns the ColorGroup the iterator points at. + * @return returns the ColorGroup instance. + */ + PColorGroup CColorGroupIterator::GetCurrentColorGroup() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_colorgroupiterator_getcurrentcolorgroup(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CTexture2DGroupIterator + */ + + /** + * CTexture2DGroupIterator::GetCurrentTexture2DGroup - Returns the Texture2DGroup the iterator points at. + * @return returns the Texture2DGroup instance. + */ + PTexture2DGroup CTexture2DGroupIterator::GetCurrentTexture2DGroup() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CCompositeMaterialsIterator + */ + + /** + * CCompositeMaterialsIterator::GetCurrentCompositeMaterials - Returns the CompositeMaterials the iterator points at. + * @return returns the CompositeMaterials instance. + */ + PCompositeMaterials CCompositeMaterialsIterator::GetCurrentCompositeMaterials() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_compositematerialsiterator_getcurrentcompositematerials(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CMultiPropertyGroupIterator + */ + + /** + * CMultiPropertyGroupIterator::GetCurrentMultiPropertyGroup - Returns the MultiPropertyGroup the iterator points at. + * @return returns the MultiPropertyGroup instance. + */ + PMultiPropertyGroup CMultiPropertyGroupIterator::GetCurrentMultiPropertyGroup() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CImage3DIterator + */ + + /** + * CImage3DIterator::GetCurrentImage3D - Returns the Image3D the iterator points at. + * @return returns the Image3D instance. + */ + PImage3D CImage3DIterator::GetCurrentImage3D() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_image3diterator_getcurrentimage3d(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CFunctionIterator + */ + + /** + * CFunctionIterator::GetCurrentFunction - Returns the Function the iterator points at. + * @return returns the Function instance. + */ + PFunction CFunctionIterator::GetCurrentFunction() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_functioniterator_getcurrentfunction(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CLevelSetIterator + */ + + /** + * CLevelSetIterator::GetCurrentLevelSet - Returns the LevelSet the iterator points at. + * @return returns the MeshObject instance. + */ + PLevelSet CLevelSetIterator::GetCurrentLevelSet() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_levelsetiterator_getcurrentlevelset(m_pHandle, &hResource)); + + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CMetaData + */ + + /** + * CMetaData::GetNameSpace - returns the namespace URL of the metadata + * @return the namespace URL of the metadata + */ + std::string CMetaData::GetNameSpace() + { + Lib3MF_uint32 bytesNeededNameSpace = 0; + Lib3MF_uint32 bytesWrittenNameSpace = 0; + CheckError(lib3mf_metadata_getnamespace(m_pHandle, 0, &bytesNeededNameSpace, nullptr)); + std::vector bufferNameSpace(bytesNeededNameSpace); + CheckError(lib3mf_metadata_getnamespace(m_pHandle, bytesNeededNameSpace, &bytesWrittenNameSpace, &bufferNameSpace[0])); + + return std::string(&bufferNameSpace[0]); + } + + /** + * CMetaData::SetNameSpace - sets a new namespace URL of the metadata + * @param[in] sNameSpace - the new namespace URL of the metadata + */ + void CMetaData::SetNameSpace(const std::string & sNameSpace) + { + CheckError(lib3mf_metadata_setnamespace(m_pHandle, sNameSpace.c_str())); + } + + /** + * CMetaData::GetName - returns the name of a metadata + * @return the name of the metadata + */ + std::string CMetaData::GetName() + { + Lib3MF_uint32 bytesNeededName = 0; + Lib3MF_uint32 bytesWrittenName = 0; + CheckError(lib3mf_metadata_getname(m_pHandle, 0, &bytesNeededName, nullptr)); + std::vector bufferName(bytesNeededName); + CheckError(lib3mf_metadata_getname(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); + + return std::string(&bufferName[0]); + } + + /** + * CMetaData::SetName - sets a new name of a metadata + * @param[in] sName - the new name of the metadata + */ + void CMetaData::SetName(const std::string & sName) + { + CheckError(lib3mf_metadata_setname(m_pHandle, sName.c_str())); + } + + /** + * CMetaData::GetKey - returns the (namespace+name) of a metadata + * @return the key (namespace+name) of the metadata + */ + std::string CMetaData::GetKey() + { + Lib3MF_uint32 bytesNeededKey = 0; + Lib3MF_uint32 bytesWrittenKey = 0; + CheckError(lib3mf_metadata_getkey(m_pHandle, 0, &bytesNeededKey, nullptr)); + std::vector bufferKey(bytesNeededKey); + CheckError(lib3mf_metadata_getkey(m_pHandle, bytesNeededKey, &bytesWrittenKey, &bufferKey[0])); + + return std::string(&bufferKey[0]); + } + + /** + * CMetaData::GetMustPreserve - returns, whether a metadata must be preserved + * @return returns, whether a metadata must be preserved + */ + bool CMetaData::GetMustPreserve() + { + bool resultMustPreserve = 0; + CheckError(lib3mf_metadata_getmustpreserve(m_pHandle, &resultMustPreserve)); + + return resultMustPreserve; + } + + /** + * CMetaData::SetMustPreserve - sets whether a metadata must be preserved + * @param[in] bMustPreserve - a new value whether a metadata must be preserved + */ + void CMetaData::SetMustPreserve(const bool bMustPreserve) + { + CheckError(lib3mf_metadata_setmustpreserve(m_pHandle, bMustPreserve)); + } + + /** + * CMetaData::GetType - returns the type of a metadata + * @return the type of the metadata + */ + std::string CMetaData::GetType() + { + Lib3MF_uint32 bytesNeededType = 0; + Lib3MF_uint32 bytesWrittenType = 0; + CheckError(lib3mf_metadata_gettype(m_pHandle, 0, &bytesNeededType, nullptr)); + std::vector bufferType(bytesNeededType); + CheckError(lib3mf_metadata_gettype(m_pHandle, bytesNeededType, &bytesWrittenType, &bufferType[0])); + + return std::string(&bufferType[0]); + } + + /** + * CMetaData::SetType - sets a new type of a metadata. This must be a simple XML type + * @param[in] sType - a new type of the metadata + */ + void CMetaData::SetType(const std::string & sType) + { + CheckError(lib3mf_metadata_settype(m_pHandle, sType.c_str())); + } + + /** + * CMetaData::GetValue - returns the value of the metadata + * @return the value of the metadata + */ + std::string CMetaData::GetValue() + { + Lib3MF_uint32 bytesNeededValue = 0; + Lib3MF_uint32 bytesWrittenValue = 0; + CheckError(lib3mf_metadata_getvalue(m_pHandle, 0, &bytesNeededValue, nullptr)); + std::vector bufferValue(bytesNeededValue); + CheckError(lib3mf_metadata_getvalue(m_pHandle, bytesNeededValue, &bytesWrittenValue, &bufferValue[0])); + + return std::string(&bufferValue[0]); + } + + /** + * CMetaData::SetValue - sets a new value of the metadata + * @param[in] sValue - a new value of the metadata + */ + void CMetaData::SetValue(const std::string & sValue) + { + CheckError(lib3mf_metadata_setvalue(m_pHandle, sValue.c_str())); + } + + /** + * Method definitions for class CMetaDataGroup + */ + + /** + * CMetaDataGroup::GetMetaDataCount - returns the number of metadata in this metadatagroup + * @return returns the number metadata + */ + Lib3MF_uint32 CMetaDataGroup::GetMetaDataCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_metadatagroup_getmetadatacount(m_pHandle, &resultCount)); + + return resultCount; + } + + /** + * CMetaDataGroup::GetMetaData - returns a metadata value within this metadatagroup + * @param[in] nIndex - Index of the Metadata. + * @return an instance of the metadata + */ + PMetaData CMetaDataGroup::GetMetaData(const Lib3MF_uint32 nIndex) + { + Lib3MFHandle hMetaData = nullptr; + CheckError(lib3mf_metadatagroup_getmetadata(m_pHandle, nIndex, &hMetaData)); + + if (!hMetaData) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaData))); + } + + /** + * CMetaDataGroup::GetMetaDataByKey - returns a metadata value within this metadatagroup + * @param[in] sNameSpace - the namespace of the metadata + * @param[in] sName - the name of the Metadata + * @return an instance of the metadata + */ + PMetaData CMetaDataGroup::GetMetaDataByKey(const std::string & sNameSpace, const std::string & sName) + { + Lib3MFHandle hMetaData = nullptr; + CheckError(lib3mf_metadatagroup_getmetadatabykey(m_pHandle, sNameSpace.c_str(), sName.c_str(), &hMetaData)); + + if (!hMetaData) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaData))); + } + + /** + * CMetaDataGroup::RemoveMetaDataByIndex - removes metadata by index from the model. + * @param[in] nIndex - Index of the metadata to remove + */ + void CMetaDataGroup::RemoveMetaDataByIndex(const Lib3MF_uint32 nIndex) + { + CheckError(lib3mf_metadatagroup_removemetadatabyindex(m_pHandle, nIndex)); + } + + /** + * CMetaDataGroup::RemoveMetaData - removes metadata from the model. + * @param[in] pTheMetaData - The metadata to remove + */ + void CMetaDataGroup::RemoveMetaData(classParam pTheMetaData) + { + Lib3MFHandle hTheMetaData = pTheMetaData.GetHandle(); + CheckError(lib3mf_metadatagroup_removemetadata(m_pHandle, hTheMetaData)); + } + + /** + * CMetaDataGroup::AddMetaData - adds a new metadata to this metadatagroup + * @param[in] sNameSpace - the namespace of the metadata + * @param[in] sName - the name of the metadata + * @param[in] sValue - the value of the metadata + * @param[in] sType - the type of the metadata + * @param[in] bMustPreserve - shuold the metadata be preserved + * @return a new instance of the metadata + */ + PMetaData CMetaDataGroup::AddMetaData(const std::string & sNameSpace, const std::string & sName, const std::string & sValue, const std::string & sType, const bool bMustPreserve) + { + Lib3MFHandle hMetaData = nullptr; + CheckError(lib3mf_metadatagroup_addmetadata(m_pHandle, sNameSpace.c_str(), sName.c_str(), sValue.c_str(), sType.c_str(), bMustPreserve, &hMetaData)); + + if (!hMetaData) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaData))); + } + + /** + * Method definitions for class CObject + */ + + /** + * CObject::GetType - Retrieves an object's type + * @return returns object type enum. + */ + eObjectType CObject::GetType() + { + eObjectType resultObjectType = (eObjectType) 0; + CheckError(lib3mf_object_gettype(m_pHandle, &resultObjectType)); + + return resultObjectType; + } + + /** + * CObject::SetType - Sets an object's type + * @param[in] eObjectType - object type enum. + */ + void CObject::SetType(const eObjectType eObjectType) + { + CheckError(lib3mf_object_settype(m_pHandle, eObjectType)); + } + + /** + * CObject::GetName - Retrieves an object's name + * @return returns object name. + */ + std::string CObject::GetName() + { + Lib3MF_uint32 bytesNeededName = 0; + Lib3MF_uint32 bytesWrittenName = 0; + CheckError(lib3mf_object_getname(m_pHandle, 0, &bytesNeededName, nullptr)); + std::vector bufferName(bytesNeededName); + CheckError(lib3mf_object_getname(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); + + return std::string(&bufferName[0]); + } + + /** + * CObject::SetName - Sets an object's name string + * @param[in] sName - new object name. + */ + void CObject::SetName(const std::string & sName) + { + CheckError(lib3mf_object_setname(m_pHandle, sName.c_str())); + } + + /** + * CObject::GetPartNumber - Retrieves an object's part number + * @return returns object part number. + */ + std::string CObject::GetPartNumber() + { + Lib3MF_uint32 bytesNeededPartNumber = 0; + Lib3MF_uint32 bytesWrittenPartNumber = 0; + CheckError(lib3mf_object_getpartnumber(m_pHandle, 0, &bytesNeededPartNumber, nullptr)); + std::vector bufferPartNumber(bytesNeededPartNumber); + CheckError(lib3mf_object_getpartnumber(m_pHandle, bytesNeededPartNumber, &bytesWrittenPartNumber, &bufferPartNumber[0])); + + return std::string(&bufferPartNumber[0]); + } + + /** + * CObject::SetPartNumber - Sets an objects partnumber string + * @param[in] sPartNumber - new object part number. + */ + void CObject::SetPartNumber(const std::string & sPartNumber) + { + CheckError(lib3mf_object_setpartnumber(m_pHandle, sPartNumber.c_str())); + } + + /** + * CObject::IsMeshObject - Retrieves, if an object is a mesh object + * @return returns, whether the object is a mesh object + */ + bool CObject::IsMeshObject() + { + bool resultIsMeshObject = 0; + CheckError(lib3mf_object_ismeshobject(m_pHandle, &resultIsMeshObject)); + + return resultIsMeshObject; + } + + /** + * CObject::IsComponentsObject - Retrieves, if an object is a components object + * @return returns, whether the object is a components object + */ + bool CObject::IsComponentsObject() + { + bool resultIsComponentsObject = 0; + CheckError(lib3mf_object_iscomponentsobject(m_pHandle, &resultIsComponentsObject)); + + return resultIsComponentsObject; + } + + /** + * CObject::IsLevelSetObject - Retrieves, if an object is a level set object + * @return returns, whether the object is a level set object + */ + bool CObject::IsLevelSetObject() + { + bool resultIsLevelSetObject = 0; + CheckError(lib3mf_object_islevelsetobject(m_pHandle, &resultIsLevelSetObject)); + + return resultIsLevelSetObject; + } + + /** + * CObject::IsValid - Retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. + * @return returns whether the object is a valid object description + */ + bool CObject::IsValid() + { + bool resultIsValid = 0; + CheckError(lib3mf_object_isvalid(m_pHandle, &resultIsValid)); + + return resultIsValid; + } + + /** + * CObject::SetAttachmentAsThumbnail - Use an existing attachment as thumbnail for this object + * @param[in] pAttachment - Instance of a new or the existing thumbnailattachment object. + */ + void CObject::SetAttachmentAsThumbnail(classParam pAttachment) + { + Lib3MFHandle hAttachment = pAttachment.GetHandle(); + CheckError(lib3mf_object_setattachmentasthumbnail(m_pHandle, hAttachment)); + } + + /** + * CObject::GetThumbnailAttachment - Get the attachment containing the object thumbnail. + * @return Instance of the thumbnailattachment object or NULL. + */ + PAttachment CObject::GetThumbnailAttachment() + { + Lib3MFHandle hAttachment = nullptr; + CheckError(lib3mf_object_getthumbnailattachment(m_pHandle, &hAttachment)); + + if (hAttachment) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hAttachment))); + } else { + return nullptr; + } + } + + /** + * CObject::ClearThumbnailAttachment - Clears the attachment. The attachment instance is not removed from the package. + */ + void CObject::ClearThumbnailAttachment() + { + CheckError(lib3mf_object_clearthumbnailattachment(m_pHandle)); + } + + /** + * CObject::GetOutbox - Returns the outbox of a build item + * @return Outbox of this build item + */ + sBox CObject::GetOutbox() + { + sBox resultOutbox; + CheckError(lib3mf_object_getoutbox(m_pHandle, &resultOutbox)); + + return resultOutbox; + } + + /** + * CObject::GetUUID - Retrieves an object's uuid string (see production extension specification) + * @param[out] bHasUUID - flag whether the build item has a UUID + * @return returns object uuid. + */ + std::string CObject::GetUUID(bool & bHasUUID) + { + Lib3MF_uint32 bytesNeededUUID = 0; + Lib3MF_uint32 bytesWrittenUUID = 0; + CheckError(lib3mf_object_getuuid(m_pHandle, &bHasUUID, 0, &bytesNeededUUID, nullptr)); + std::vector bufferUUID(bytesNeededUUID); + CheckError(lib3mf_object_getuuid(m_pHandle, &bHasUUID, bytesNeededUUID, &bytesWrittenUUID, &bufferUUID[0])); + + return std::string(&bufferUUID[0]); + } + + /** + * CObject::SetUUID - Sets a build object's uuid string (see production extension specification) + * @param[in] sUUID - new object uuid string. + */ + void CObject::SetUUID(const std::string & sUUID) + { + CheckError(lib3mf_object_setuuid(m_pHandle, sUUID.c_str())); + } + + /** + * CObject::GetMetaDataGroup - Returns the metadatagroup of this object + * @return returns an Instance of the metadatagroup of this object + */ + PMetaDataGroup CObject::GetMetaDataGroup() + { + Lib3MFHandle hMetaDataGroup = nullptr; + CheckError(lib3mf_object_getmetadatagroup(m_pHandle, &hMetaDataGroup)); + + if (!hMetaDataGroup) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaDataGroup))); + } + + /** + * CObject::SetSlicesMeshResolution - set the meshresolution of the mesh object + * @param[in] eMeshResolution - meshresolution of this object + */ + void CObject::SetSlicesMeshResolution(const eSlicesMeshResolution eMeshResolution) + { + CheckError(lib3mf_object_setslicesmeshresolution(m_pHandle, eMeshResolution)); + } + + /** + * CObject::GetSlicesMeshResolution - get the meshresolution of the mesh object + * @return meshresolution of this object + */ + eSlicesMeshResolution CObject::GetSlicesMeshResolution() + { + eSlicesMeshResolution resultMeshResolution = (eSlicesMeshResolution) 0; + CheckError(lib3mf_object_getslicesmeshresolution(m_pHandle, &resultMeshResolution)); + + return resultMeshResolution; + } + + /** + * CObject::HasSlices - returns whether the Object has a slice stack. If Recursive is true, also checks whether any references object has a slice stack + * @param[in] bRecursive - check also all referenced objects? + * @return does the object have a slice stack? + */ + bool CObject::HasSlices(const bool bRecursive) + { + bool resultHasSlices = 0; + CheckError(lib3mf_object_hasslices(m_pHandle, bRecursive, &resultHasSlices)); + + return resultHasSlices; + } + + /** + * CObject::ClearSliceStack - unlinks the attached slicestack from this object. If no slice stack is attached, do noting. + */ + void CObject::ClearSliceStack() + { + CheckError(lib3mf_object_clearslicestack(m_pHandle)); + } + + /** + * CObject::GetSliceStack - get the Slicestack attached to the object + * @return returns the slicestack instance + */ + PSliceStack CObject::GetSliceStack() + { + Lib3MFHandle hSliceStackInstance = nullptr; + CheckError(lib3mf_object_getslicestack(m_pHandle, &hSliceStackInstance)); + + if (!hSliceStackInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSliceStackInstance))); + } + + /** + * CObject::AssignSliceStack - assigns a slicestack to the object + * @param[in] pSliceStackInstance - the new slice stack of this Object + */ + void CObject::AssignSliceStack(classParam pSliceStackInstance) + { + Lib3MFHandle hSliceStackInstance = pSliceStackInstance.GetHandle(); + CheckError(lib3mf_object_assignslicestack(m_pHandle, hSliceStackInstance)); + } + + /** + * Method definitions for class CMeshObject + */ + + /** + * CMeshObject::GetVertexCount - Returns the vertex count of a mesh object. + * @return filled with the vertex count. + */ + Lib3MF_uint32 CMeshObject::GetVertexCount() + { + Lib3MF_uint32 resultVertexCount = 0; + CheckError(lib3mf_meshobject_getvertexcount(m_pHandle, &resultVertexCount)); + + return resultVertexCount; + } + + /** + * CMeshObject::GetTriangleCount - Returns the triangle count of a mesh object. + * @return filled with the triangle count. + */ + Lib3MF_uint32 CMeshObject::GetTriangleCount() + { + Lib3MF_uint32 resultVertexCount = 0; + CheckError(lib3mf_meshobject_gettrianglecount(m_pHandle, &resultVertexCount)); + + return resultVertexCount; + } + + /** + * CMeshObject::GetVertex - Returns the vertex count of a mesh object. + * @param[in] nIndex - Index of the vertex (0 to vertexcount - 1) + * @return filled with the vertex coordinates. + */ + sPosition CMeshObject::GetVertex(const Lib3MF_uint32 nIndex) + { + sPosition resultCoordinates; + CheckError(lib3mf_meshobject_getvertex(m_pHandle, nIndex, &resultCoordinates)); + + return resultCoordinates; + } + + /** + * CMeshObject::SetVertex - Sets the coordinates of a single vertex of a mesh object + * @param[in] nIndex - Index of the vertex (0 to vertexcount - 1) + * @param[in] Coordinates - contains the vertex coordinates. + */ + void CMeshObject::SetVertex(const Lib3MF_uint32 nIndex, const sPosition & Coordinates) + { + CheckError(lib3mf_meshobject_setvertex(m_pHandle, nIndex, &Coordinates)); + } + + /** + * CMeshObject::AddVertex - Adds a single vertex to a mesh object + * @param[in] Coordinates - contains the vertex coordinates. + * @return Index of the new vertex + */ + Lib3MF_uint32 CMeshObject::AddVertex(const sPosition & Coordinates) + { + Lib3MF_uint32 resultNewIndex = 0; + CheckError(lib3mf_meshobject_addvertex(m_pHandle, &Coordinates, &resultNewIndex)); + + return resultNewIndex; + } + + /** + * CMeshObject::GetVertices - Obtains all vertex positions of a mesh object + * @param[out] VerticesBuffer - contains the vertex coordinates. + */ + void CMeshObject::GetVertices(std::vector & VerticesBuffer) + { + Lib3MF_uint64 elementsNeededVertices = 0; + Lib3MF_uint64 elementsWrittenVertices = 0; + CheckError(lib3mf_meshobject_getvertices(m_pHandle, 0, &elementsNeededVertices, nullptr)); + VerticesBuffer.resize((size_t) elementsNeededVertices); + CheckError(lib3mf_meshobject_getvertices(m_pHandle, elementsNeededVertices, &elementsWrittenVertices, VerticesBuffer.data())); + } + + /** + * CMeshObject::GetTriangle - Returns indices of a single triangle of a mesh object. + * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) + * @return filled with the triangle indices. + */ + sTriangle CMeshObject::GetTriangle(const Lib3MF_uint32 nIndex) + { + sTriangle resultIndices; + CheckError(lib3mf_meshobject_gettriangle(m_pHandle, nIndex, &resultIndices)); + + return resultIndices; + } + + /** + * CMeshObject::SetTriangle - Sets the indices of a single triangle of a mesh object. + * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) + * @param[in] Indices - contains the triangle indices. + */ + void CMeshObject::SetTriangle(const Lib3MF_uint32 nIndex, const sTriangle & Indices) + { + CheckError(lib3mf_meshobject_settriangle(m_pHandle, nIndex, &Indices)); + } + + /** + * CMeshObject::AddTriangle - Adds a single triangle to a mesh object + * @param[in] Indices - contains the triangle indices. + * @return Index of the new triangle + */ + Lib3MF_uint32 CMeshObject::AddTriangle(const sTriangle & Indices) + { + Lib3MF_uint32 resultNewIndex = 0; + CheckError(lib3mf_meshobject_addtriangle(m_pHandle, &Indices, &resultNewIndex)); + + return resultNewIndex; + } + + /** + * CMeshObject::GetTriangleIndices - Get all triangles of a mesh object + * @param[out] IndicesBuffer - contains the triangle indices. + */ + void CMeshObject::GetTriangleIndices(std::vector & IndicesBuffer) + { + Lib3MF_uint64 elementsNeededIndices = 0; + Lib3MF_uint64 elementsWrittenIndices = 0; + CheckError(lib3mf_meshobject_gettriangleindices(m_pHandle, 0, &elementsNeededIndices, nullptr)); + IndicesBuffer.resize((size_t) elementsNeededIndices); + CheckError(lib3mf_meshobject_gettriangleindices(m_pHandle, elementsNeededIndices, &elementsWrittenIndices, IndicesBuffer.data())); + } + + /** + * CMeshObject::SetObjectLevelProperty - Sets the property at the object-level of the mesh object. + * @param[in] nUniqueResourceID - the object-level Property UniqueResourceID. + * @param[in] nPropertyID - the object-level PropertyID. + */ + void CMeshObject::SetObjectLevelProperty(const Lib3MF_uint32 nUniqueResourceID, const Lib3MF_uint32 nPropertyID) + { + CheckError(lib3mf_meshobject_setobjectlevelproperty(m_pHandle, nUniqueResourceID, nPropertyID)); + } + + /** + * CMeshObject::GetObjectLevelProperty - Gets the property at the object-level of the mesh object. + * @param[out] nUniqueResourceID - the object-level Property UniqueResourceID. + * @param[out] nPropertyID - the object-level PropertyID. + * @return Has an object-level property been specified? + */ + bool CMeshObject::GetObjectLevelProperty(Lib3MF_uint32 & nUniqueResourceID, Lib3MF_uint32 & nPropertyID) + { + bool resultHasObjectLevelProperty = 0; + CheckError(lib3mf_meshobject_getobjectlevelproperty(m_pHandle, &nUniqueResourceID, &nPropertyID, &resultHasObjectLevelProperty)); + + return resultHasObjectLevelProperty; + } + + /** + * CMeshObject::SetTriangleProperties - Sets the properties of a single triangle of a mesh object. + * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) + * @param[in] Properties - contains the triangle properties. + */ + void CMeshObject::SetTriangleProperties(const Lib3MF_uint32 nIndex, const sTriangleProperties & Properties) + { + CheckError(lib3mf_meshobject_settriangleproperties(m_pHandle, nIndex, &Properties)); + } + + /** + * CMeshObject::GetTriangleProperties - Gets the properties of a single triangle of a mesh object. + * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) + * @param[out] Property - returns the triangle properties. + */ + void CMeshObject::GetTriangleProperties(const Lib3MF_uint32 nIndex, sTriangleProperties & Property) + { + CheckError(lib3mf_meshobject_gettriangleproperties(m_pHandle, nIndex, &Property)); + } + + /** + * CMeshObject::SetAllTriangleProperties - Sets the properties of all triangles of a mesh object. Sets the object level property to the first entry of the passed triangle properties, if not yet specified. + * @param[in] PropertiesArrayBuffer - contains the triangle properties array. Must have trianglecount elements. + */ + void CMeshObject::SetAllTriangleProperties(const CInputVector & PropertiesArrayBuffer) + { + CheckError(lib3mf_meshobject_setalltriangleproperties(m_pHandle, (Lib3MF_uint64)PropertiesArrayBuffer.size(), PropertiesArrayBuffer.data())); + } + + /** + * CMeshObject::GetAllTriangleProperties - Gets the properties of all triangles of a mesh object. + * @param[out] PropertiesArrayBuffer - returns the triangle properties array. Must have trianglecount elements. + */ + void CMeshObject::GetAllTriangleProperties(std::vector & PropertiesArrayBuffer) + { + Lib3MF_uint64 elementsNeededPropertiesArray = 0; + Lib3MF_uint64 elementsWrittenPropertiesArray = 0; + CheckError(lib3mf_meshobject_getalltriangleproperties(m_pHandle, 0, &elementsNeededPropertiesArray, nullptr)); + PropertiesArrayBuffer.resize((size_t) elementsNeededPropertiesArray); + CheckError(lib3mf_meshobject_getalltriangleproperties(m_pHandle, elementsNeededPropertiesArray, &elementsWrittenPropertiesArray, PropertiesArrayBuffer.data())); + } + + /** + * CMeshObject::ClearAllProperties - Clears all properties of this mesh object (triangle and object-level). + */ + void CMeshObject::ClearAllProperties() + { + CheckError(lib3mf_meshobject_clearallproperties(m_pHandle)); + } + + /** + * CMeshObject::SetGeometry - Set all triangles of a mesh object + * @param[in] VerticesBuffer - contains the positions. + * @param[in] IndicesBuffer - contains the triangle indices. + */ + void CMeshObject::SetGeometry(const CInputVector & VerticesBuffer, const CInputVector & IndicesBuffer) + { + CheckError(lib3mf_meshobject_setgeometry(m_pHandle, (Lib3MF_uint64)VerticesBuffer.size(), VerticesBuffer.data(), (Lib3MF_uint64)IndicesBuffer.size(), IndicesBuffer.data())); + } + + /** + * CMeshObject::IsManifoldAndOriented - Retrieves, if an object describes a topologically oriented and manifold mesh, according to the core spec. + * @return returns, if the object is oriented and manifold. + */ + bool CMeshObject::IsManifoldAndOriented() + { + bool resultIsManifoldAndOriented = 0; + CheckError(lib3mf_meshobject_ismanifoldandoriented(m_pHandle, &resultIsManifoldAndOriented)); + + return resultIsManifoldAndOriented; + } + + /** + * CMeshObject::BeamLattice - Retrieves the BeamLattice within this MeshObject. + * @return the BeamLattice within this MeshObject + */ + PBeamLattice CMeshObject::BeamLattice() + { + Lib3MFHandle hTheBeamLattice = nullptr; + CheckError(lib3mf_meshobject_beamlattice(m_pHandle, &hTheBeamLattice)); + + if (!hTheBeamLattice) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheBeamLattice))); + } + + /** + * CMeshObject::GetVolumeData - Retrieves the VolumeData of this MeshObject. + * @return the VolumeData of this MeshObject + */ + PVolumeData CMeshObject::GetVolumeData() + { + Lib3MFHandle hTheVolumeData = nullptr; + CheckError(lib3mf_meshobject_getvolumedata(m_pHandle, &hTheVolumeData)); + + if (hTheVolumeData) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheVolumeData))); + } else { + return nullptr; + } + } + + /** + * CMeshObject::SetVolumeData - Sets the VolumeData of this MeshObject. + * @param[in] pTheVolumeData - the VolumeData of this MeshObject + */ + void CMeshObject::SetVolumeData(classParam pTheVolumeData) + { + Lib3MFHandle hTheVolumeData = pTheVolumeData.GetHandle(); + CheckError(lib3mf_meshobject_setvolumedata(m_pHandle, hTheVolumeData)); + } + + /** + * Method definitions for class CLevelSet + */ + + /** + * CLevelSet::GetFunction - Returns the function that is used as boundary shape. + * @return the function to use as boundary shape + */ + PFunction CLevelSet::GetFunction() + { + Lib3MFHandle hTheFunction = nullptr; + CheckError(lib3mf_levelset_getfunction(m_pHandle, &hTheFunction)); + + if (hTheFunction) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheFunction))); + } else { + return nullptr; + } + } + + /** + * CLevelSet::SetFunction - Sets the function to use as boundary shape. + * @param[in] pTheFunction - the function to use as boundary shape + */ + void CLevelSet::SetFunction(classParam pTheFunction) + { + Lib3MFHandle hTheFunction = pTheFunction.GetHandle(); + CheckError(lib3mf_levelset_setfunction(m_pHandle, hTheFunction)); + } + + /** + * CLevelSet::GetTransform - Returns the transformation matrix into the coordinate system of the referenced Function. + * @return the transformation matrix + */ + sTransform CLevelSet::GetTransform() + { + sTransform resultTransform; + CheckError(lib3mf_levelset_gettransform(m_pHandle, &resultTransform)); + + return resultTransform; + } + + /** + * CLevelSet::SetTransform - Sets the transformation matrix into the coordinate system of the referenced Function. + * @param[in] Transform - new transformation matrix + */ + void CLevelSet::SetTransform(const sTransform & Transform) + { + CheckError(lib3mf_levelset_settransform(m_pHandle, &Transform)); + } + + /** + * CLevelSet::GetChannelName - Returns the name of the function output channel to use. + * @return the name of the function output channel + */ + std::string CLevelSet::GetChannelName() + { + Lib3MF_uint32 bytesNeededChannelName = 0; + Lib3MF_uint32 bytesWrittenChannelName = 0; + CheckError(lib3mf_levelset_getchannelname(m_pHandle, 0, &bytesNeededChannelName, nullptr)); + std::vector bufferChannelName(bytesNeededChannelName); + CheckError(lib3mf_levelset_getchannelname(m_pHandle, bytesNeededChannelName, &bytesWrittenChannelName, &bufferChannelName[0])); + + return std::string(&bufferChannelName[0]); + } + + /** + * CLevelSet::SetChannelName - Sets the name of the function output channel to use. + * @param[in] sChannelName - new name of the function output channel + */ + void CLevelSet::SetChannelName(const std::string & sChannelName) + { + CheckError(lib3mf_levelset_setchannelname(m_pHandle, sChannelName.c_str())); + } + + /** + * CLevelSet::SetMinFeatureSize - Sets the minimal feature size as a hint for the function evaluator + * @param[in] dMinFeatureSize - minimal feature size + */ + void CLevelSet::SetMinFeatureSize(const Lib3MF_double dMinFeatureSize) + { + CheckError(lib3mf_levelset_setminfeaturesize(m_pHandle, dMinFeatureSize)); + } + + /** + * CLevelSet::GetMinFeatureSize - Returns the minimal feature size as a hint for the function evaluator + * @return minimal feature size + */ + Lib3MF_double CLevelSet::GetMinFeatureSize() + { + Lib3MF_double resultMinFeatureSize = 0; + CheckError(lib3mf_levelset_getminfeaturesize(m_pHandle, &resultMinFeatureSize)); + + return resultMinFeatureSize; + } + + /** + * CLevelSet::SetFallBackValue - Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @param[in] dFallBackValue - fallback value + */ + void CLevelSet::SetFallBackValue(const Lib3MF_double dFallBackValue) + { + CheckError(lib3mf_levelset_setfallbackvalue(m_pHandle, dFallBackValue)); + } + + /** + * CLevelSet::GetFallBackValue - Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @return fallback value + */ + Lib3MF_double CLevelSet::GetFallBackValue() + { + Lib3MF_double resultFallBackValue = 0; + CheckError(lib3mf_levelset_getfallbackvalue(m_pHandle, &resultFallBackValue)); + + return resultFallBackValue; + } + + /** + * CLevelSet::SetMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + * @param[in] bMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + */ + void CLevelSet::SetMeshBBoxOnly(const bool bMeshBBoxOnly) + { + CheckError(lib3mf_levelset_setmeshbboxonly(m_pHandle, bMeshBBoxOnly)); + } + + /** + * CLevelSet::GetMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + * @return If set only the bounding box of the mesh is intersected with the boundary + */ + bool CLevelSet::GetMeshBBoxOnly() + { + bool resultMeshBBoxOnly = 0; + CheckError(lib3mf_levelset_getmeshbboxonly(m_pHandle, &resultMeshBBoxOnly)); + + return resultMeshBBoxOnly; + } + + /** + * CLevelSet::SetMesh - Sets the mesh to use as evaluation domain + * @param[in] pTheMesh - The mesh + */ + void CLevelSet::SetMesh(classParam pTheMesh) + { + Lib3MFHandle hTheMesh = pTheMesh.GetHandle(); + CheckError(lib3mf_levelset_setmesh(m_pHandle, hTheMesh)); + } + + /** + * CLevelSet::GetMesh - Returns the mesh that is used as evaluation domain + * @return The mesh + */ + PMeshObject CLevelSet::GetMesh() + { + Lib3MFHandle hTheMesh = nullptr; + CheckError(lib3mf_levelset_getmesh(m_pHandle, &hTheMesh)); + + if (hTheMesh) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheMesh))); + } else { + return nullptr; + } + } + + /** + * CLevelSet::GetVolumeData - Retrieves the VolumeData this Object. + * @return the VolumeData of this Object + */ + PVolumeData CLevelSet::GetVolumeData() + { + Lib3MFHandle hTheVolumeData = nullptr; + CheckError(lib3mf_levelset_getvolumedata(m_pHandle, &hTheVolumeData)); + + if (hTheVolumeData) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheVolumeData))); + } else { + return nullptr; + } + } + + /** + * CLevelSet::SetVolumeData - Sets the VolumeData of this LevelSet. + * @param[in] pTheVolumeData - the VolumeData of this MeshObject + */ + void CLevelSet::SetVolumeData(classParam pTheVolumeData) + { + Lib3MFHandle hTheVolumeData = pTheVolumeData.GetHandle(); + CheckError(lib3mf_levelset_setvolumedata(m_pHandle, hTheVolumeData)); + } + + /** + * Method definitions for class CBeamLattice + */ + + /** + * CBeamLattice::GetMinLength - Returns the minimal length of beams for the beamlattice. + * @return minimal length of beams for the beamlattice + */ + Lib3MF_double CBeamLattice::GetMinLength() + { + Lib3MF_double resultMinLength = 0; + CheckError(lib3mf_beamlattice_getminlength(m_pHandle, &resultMinLength)); + + return resultMinLength; + } + + /** + * CBeamLattice::SetMinLength - Sets the minimal length of beams for the beamlattice. + * @param[in] dMinLength - minimal length of beams for the beamlattice + */ + void CBeamLattice::SetMinLength(const Lib3MF_double dMinLength) + { + CheckError(lib3mf_beamlattice_setminlength(m_pHandle, dMinLength)); + } + + /** + * CBeamLattice::GetClipping - Returns the clipping mode and the clipping-mesh for the beamlattice of this mesh. + * @param[out] eClipMode - contains the clip mode of this mesh + * @param[out] nUniqueResourceID - filled with the UniqueResourceID of the clipping mesh-object or an undefined value if pClipMode is MODELBEAMLATTICECLIPMODE_NONE + */ + void CBeamLattice::GetClipping(eBeamLatticeClipMode & eClipMode, Lib3MF_uint32 & nUniqueResourceID) + { + CheckError(lib3mf_beamlattice_getclipping(m_pHandle, &eClipMode, &nUniqueResourceID)); + } + + /** + * CBeamLattice::SetClipping - Sets the clipping mode and the clipping-mesh for the beamlattice of this mesh. + * @param[in] eClipMode - contains the clip mode of this mesh + * @param[in] nUniqueResourceID - the UniqueResourceID of the clipping mesh-object. This mesh-object has to be defined before setting the Clipping. + */ + void CBeamLattice::SetClipping(const eBeamLatticeClipMode eClipMode, const Lib3MF_uint32 nUniqueResourceID) + { + CheckError(lib3mf_beamlattice_setclipping(m_pHandle, eClipMode, nUniqueResourceID)); + } + + /** + * CBeamLattice::GetRepresentation - Returns the representation-mesh for the beamlattice of this mesh. + * @return flag whether the beamlattice has a representation mesh. + * @param[out] nUniqueResourceID - filled with the UniqueResourceID of the clipping mesh-object. + */ + bool CBeamLattice::GetRepresentation(Lib3MF_uint32 & nUniqueResourceID) + { + bool resultHasRepresentation = 0; + CheckError(lib3mf_beamlattice_getrepresentation(m_pHandle, &resultHasRepresentation, &nUniqueResourceID)); + + return resultHasRepresentation; + } + + /** + * CBeamLattice::SetRepresentation - Sets the representation-mesh for the beamlattice of this mesh. + * @param[in] nUniqueResourceID - the UniqueResourceID of the representation mesh-object. This mesh-object has to be defined before setting the representation. + */ + void CBeamLattice::SetRepresentation(const Lib3MF_uint32 nUniqueResourceID) + { + CheckError(lib3mf_beamlattice_setrepresentation(m_pHandle, nUniqueResourceID)); + } + + /** + * CBeamLattice::GetBallOptions - Returns the ball mode and the default ball radius for the beamlattice of this mesh. + * @param[out] eBallMode - contains the ball mode of this mesh + * @param[out] dBallRadius - default ball radius of balls for the beamlattice + */ + void CBeamLattice::GetBallOptions(eBeamLatticeBallMode & eBallMode, Lib3MF_double & dBallRadius) + { + CheckError(lib3mf_beamlattice_getballoptions(m_pHandle, &eBallMode, &dBallRadius)); + } + + /** + * CBeamLattice::SetBallOptions - Sets the ball mode and thedefault ball radius for the beamlattice. + * @param[in] eBallMode - contains the ball mode of this mesh + * @param[in] dBallRadius - default ball radius of balls for the beamlattice + */ + void CBeamLattice::SetBallOptions(const eBeamLatticeBallMode eBallMode, const Lib3MF_double dBallRadius) + { + CheckError(lib3mf_beamlattice_setballoptions(m_pHandle, eBallMode, dBallRadius)); + } + + /** + * CBeamLattice::GetBeamCount - Returns the beam count of a mesh object. + * @return filled with the beam count. + */ + Lib3MF_uint32 CBeamLattice::GetBeamCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_beamlattice_getbeamcount(m_pHandle, &resultCount)); + + return resultCount; + } + + /** + * CBeamLattice::GetBeam - Returns indices, radii and capmodes of a single beam of a mesh object. + * @param[in] nIndex - Index of the beam (0 to beamcount - 1). + * @return filled with the beam indices, radii and capmodes. + */ + sBeam CBeamLattice::GetBeam(const Lib3MF_uint32 nIndex) + { + sBeam resultBeamInfo; + CheckError(lib3mf_beamlattice_getbeam(m_pHandle, nIndex, &resultBeamInfo)); + + return resultBeamInfo; + } + + /** + * CBeamLattice::AddBeam - Adds a single beam to a mesh object. + * @param[in] BeamInfo - contains the node indices, radii and capmodes. + * @return filled with the new Index of the beam. + */ + Lib3MF_uint32 CBeamLattice::AddBeam(const sBeam & BeamInfo) + { + Lib3MF_uint32 resultIndex = 0; + CheckError(lib3mf_beamlattice_addbeam(m_pHandle, &BeamInfo, &resultIndex)); + + return resultIndex; + } + + /** + * CBeamLattice::SetBeam - Sets the indices, radii and capmodes of a single beam of a mesh object. + * @param[in] nIndex - Index of the beam (0 to beamcount - 1). + * @param[in] BeamInfo - filled with the beam indices, radii and capmodes. + */ + void CBeamLattice::SetBeam(const Lib3MF_uint32 nIndex, const sBeam & BeamInfo) + { + CheckError(lib3mf_beamlattice_setbeam(m_pHandle, nIndex, &BeamInfo)); + } + + /** + * CBeamLattice::SetBeams - Sets all beam indices, radii and capmodes of a mesh object. + * @param[in] BeamInfoBuffer - contains information of a number of beams + */ + void CBeamLattice::SetBeams(const CInputVector & BeamInfoBuffer) + { + CheckError(lib3mf_beamlattice_setbeams(m_pHandle, (Lib3MF_uint64)BeamInfoBuffer.size(), BeamInfoBuffer.data())); + } + + /** + * CBeamLattice::GetBeams - obtains all beam indices, radii and capmodes of a mesh object. + * @param[out] BeamInfoBuffer - contains information of all beams + */ + void CBeamLattice::GetBeams(std::vector & BeamInfoBuffer) + { + Lib3MF_uint64 elementsNeededBeamInfo = 0; + Lib3MF_uint64 elementsWrittenBeamInfo = 0; + CheckError(lib3mf_beamlattice_getbeams(m_pHandle, 0, &elementsNeededBeamInfo, nullptr)); + BeamInfoBuffer.resize((size_t) elementsNeededBeamInfo); + CheckError(lib3mf_beamlattice_getbeams(m_pHandle, elementsNeededBeamInfo, &elementsWrittenBeamInfo, BeamInfoBuffer.data())); + } + + /** + * CBeamLattice::GetBallCount - Returns the ball count of a mesh object. + * @return filled with the ball count. + */ + Lib3MF_uint32 CBeamLattice::GetBallCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_beamlattice_getballcount(m_pHandle, &resultCount)); + + return resultCount; + } + + /** + * CBeamLattice::GetBall - Returns index and radius of a single ball of a mesh object. + * @param[in] nIndex - Index of the ball (0 to ballcount - 1). + * @return filled with the ball node index and radius. + */ + sBall CBeamLattice::GetBall(const Lib3MF_uint32 nIndex) + { + sBall resultBallInfo; + CheckError(lib3mf_beamlattice_getball(m_pHandle, nIndex, &resultBallInfo)); + + return resultBallInfo; + } + + /** + * CBeamLattice::AddBall - Adds a single ball to a mesh object. + * @param[in] BallInfo - contains the node index and radius. + * @return filled with the new Index of the ball. + */ + Lib3MF_uint32 CBeamLattice::AddBall(const sBall & BallInfo) + { + Lib3MF_uint32 resultIndex = 0; + CheckError(lib3mf_beamlattice_addball(m_pHandle, &BallInfo, &resultIndex)); + + return resultIndex; + } + + /** + * CBeamLattice::SetBall - Sets the index and radius of a single ball of a mesh object. + * @param[in] nIndex - Index of the ball (0 to ballcount - 1). + * @param[in] BallInfo - filled with the ball node index and radius. + */ + void CBeamLattice::SetBall(const Lib3MF_uint32 nIndex, const sBall & BallInfo) + { + CheckError(lib3mf_beamlattice_setball(m_pHandle, nIndex, &BallInfo)); + } + + /** + * CBeamLattice::SetBalls - Sets all ball indices and radii of a mesh object. + * @param[in] BallInfoBuffer - contains information of a number of balls + */ + void CBeamLattice::SetBalls(const CInputVector & BallInfoBuffer) + { + CheckError(lib3mf_beamlattice_setballs(m_pHandle, (Lib3MF_uint64)BallInfoBuffer.size(), BallInfoBuffer.data())); + } + + /** + * CBeamLattice::GetBalls - obtains all ball indices and radii of a mesh object. + * @param[out] BallInfoBuffer - contains information of all balls + */ + void CBeamLattice::GetBalls(std::vector & BallInfoBuffer) + { + Lib3MF_uint64 elementsNeededBallInfo = 0; + Lib3MF_uint64 elementsWrittenBallInfo = 0; + CheckError(lib3mf_beamlattice_getballs(m_pHandle, 0, &elementsNeededBallInfo, nullptr)); + BallInfoBuffer.resize((size_t) elementsNeededBallInfo); + CheckError(lib3mf_beamlattice_getballs(m_pHandle, elementsNeededBallInfo, &elementsWrittenBallInfo, BallInfoBuffer.data())); + } + + /** + * CBeamLattice::GetBeamSetCount - Returns the number of beamsets of a mesh object. + * @return filled with the beamset count. + */ + Lib3MF_uint32 CBeamLattice::GetBeamSetCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_beamlattice_getbeamsetcount(m_pHandle, &resultCount)); + + return resultCount; + } + + /** + * CBeamLattice::AddBeamSet - Adds an empty beamset to a mesh object + * @return the new beamset + */ + PBeamSet CBeamLattice::AddBeamSet() + { + Lib3MFHandle hBeamSet = nullptr; + CheckError(lib3mf_beamlattice_addbeamset(m_pHandle, &hBeamSet)); + + if (!hBeamSet) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBeamSet))); + } + + /** + * CBeamLattice::GetBeamSet - Returns a beamset of a mesh object + * @param[in] nIndex - index of the requested beamset (0 ... beamsetcount-1). + * @return the requested beamset + */ + PBeamSet CBeamLattice::GetBeamSet(const Lib3MF_uint32 nIndex) + { + Lib3MFHandle hBeamSet = nullptr; + CheckError(lib3mf_beamlattice_getbeamset(m_pHandle, nIndex, &hBeamSet)); + + if (!hBeamSet) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBeamSet))); + } + + /** + * Method definitions for class CFunctionReference + */ + + /** + * CFunctionReference::GetFunctionResourceID - Returns the UniqueResourceID of the Function. Only functions with a 'pos'-input are allowed. + * @return returns the UniqueResourceID. + */ + Lib3MF_uint32 CFunctionReference::GetFunctionResourceID() + { + Lib3MF_uint32 resultUniqueResourceID = 0; + CheckError(lib3mf_functionreference_getfunctionresourceid(m_pHandle, &resultUniqueResourceID)); + + return resultUniqueResourceID; + } + + /** + * CFunctionReference::SetFunctionResourceID - Sets the UniqueResourceID to refer to. + * @param[in] nUniqueResourceID - UniqueResourceID of the function + */ + void CFunctionReference::SetFunctionResourceID(const Lib3MF_uint32 nUniqueResourceID) + { + CheckError(lib3mf_functionreference_setfunctionresourceid(m_pHandle, nUniqueResourceID)); + } + + /** + * CFunctionReference::GetTransform - Returns the transformation matrix into the coordinate system of the referenced Function. + * @return the transformation matrix + */ + sTransform CFunctionReference::GetTransform() + { + sTransform resultTransform; + CheckError(lib3mf_functionreference_gettransform(m_pHandle, &resultTransform)); + + return resultTransform; + } + + /** + * CFunctionReference::SetTransform - Sets the transformation matrix into the coordinate system of the referenced Function. + * @param[in] Transform - new transformation matrix + */ + void CFunctionReference::SetTransform(const sTransform & Transform) + { + CheckError(lib3mf_functionreference_settransform(m_pHandle, &Transform)); + } + + /** + * CFunctionReference::GetChannelName - Returns the name of the function output channel to use. + * @return the name of the function output channel + */ + std::string CFunctionReference::GetChannelName() + { + Lib3MF_uint32 bytesNeededChannelName = 0; + Lib3MF_uint32 bytesWrittenChannelName = 0; + CheckError(lib3mf_functionreference_getchannelname(m_pHandle, 0, &bytesNeededChannelName, nullptr)); + std::vector bufferChannelName(bytesNeededChannelName); + CheckError(lib3mf_functionreference_getchannelname(m_pHandle, bytesNeededChannelName, &bytesWrittenChannelName, &bufferChannelName[0])); + + return std::string(&bufferChannelName[0]); + } + + /** + * CFunctionReference::SetChannelName - Sets the name of the function output channel to use. + * @param[in] sChannelName - new name of the function output channel + */ + void CFunctionReference::SetChannelName(const std::string & sChannelName) + { + CheckError(lib3mf_functionreference_setchannelname(m_pHandle, sChannelName.c_str())); + } + + /** + * CFunctionReference::SetMinFeatureSize - Sets the minimal feature size as a hint for the function evaluator + * @param[in] dMinFeatureSize - minimal feature size + */ + void CFunctionReference::SetMinFeatureSize(const Lib3MF_double dMinFeatureSize) + { + CheckError(lib3mf_functionreference_setminfeaturesize(m_pHandle, dMinFeatureSize)); + } + + /** + * CFunctionReference::GetMinFeatureSize - Returns the minimal feature size as a hint for the function evaluator + * @return minimal feature size + */ + Lib3MF_double CFunctionReference::GetMinFeatureSize() + { + Lib3MF_double resultMinFeatureSize = 0; + CheckError(lib3mf_functionreference_getminfeaturesize(m_pHandle, &resultMinFeatureSize)); + + return resultMinFeatureSize; + } + + /** + * CFunctionReference::SetFallBackValue - Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @param[in] dFallBackValue - fallback value + */ + void CFunctionReference::SetFallBackValue(const Lib3MF_double dFallBackValue) + { + CheckError(lib3mf_functionreference_setfallbackvalue(m_pHandle, dFallBackValue)); + } + + /** + * CFunctionReference::GetFallBackValue - Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @return fallback value + */ + Lib3MF_double CFunctionReference::GetFallBackValue() + { + Lib3MF_double resultFallBackValue = 0; + CheckError(lib3mf_functionreference_getfallbackvalue(m_pHandle, &resultFallBackValue)); + + return resultFallBackValue; + } + + /** + * Method definitions for class CVolumeDataColor + */ + + /** + * Method definitions for class CMaterialMapping + */ + + /** + * Method definitions for class CVolumeDataComposite + */ + + /** + * CVolumeDataComposite::GetBaseMaterialGroup - Returns the BaseMaterialGroup used within this volume data item + * @return The BaseMaterialGroup instance of this VolumeDataComposite element + */ + PBaseMaterialGroup CVolumeDataComposite::GetBaseMaterialGroup() + { + Lib3MFHandle hBaseMaterialGroupInstance = nullptr; + CheckError(lib3mf_volumedatacomposite_getbasematerialgroup(m_pHandle, &hBaseMaterialGroupInstance)); + + if (!hBaseMaterialGroupInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBaseMaterialGroupInstance))); + } + + /** + * CVolumeDataComposite::SetBaseMaterialGroup - Sets the BaseMaterialGroup to use within this volume data item. + * @param[in] pBaseMaterialGroupInstance - The new BaseMaterialGroup instance of this VolumeDataComposite element + */ + void CVolumeDataComposite::SetBaseMaterialGroup(classParam pBaseMaterialGroupInstance) + { + Lib3MFHandle hBaseMaterialGroupInstance = pBaseMaterialGroupInstance.GetHandle(); + CheckError(lib3mf_volumedatacomposite_setbasematerialgroup(m_pHandle, hBaseMaterialGroupInstance)); + } + + /** + * CVolumeDataComposite::GetMaterialMappingCount - Returns the number of material mappings of this VolumeDataComposite element + * @return the number of material mappings. + */ + Lib3MF_uint32 CVolumeDataComposite::GetMaterialMappingCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_volumedatacomposite_getmaterialmappingcount(m_pHandle, &resultCount)); + + return resultCount; + } + + /** + * CVolumeDataComposite::GetMaterialMapping - Returns MaterialMappting with given index + * @param[in] nIndex - Index of the MaterialMapping in question. + * @return MaterialMapping used in this element + */ + PMaterialMapping CVolumeDataComposite::GetMaterialMapping(const Lib3MF_uint32 nIndex) + { + Lib3MFHandle hTheMaterialMapping = nullptr; + CheckError(lib3mf_volumedatacomposite_getmaterialmapping(m_pHandle, nIndex, &hTheMaterialMapping)); + + if (!hTheMaterialMapping) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheMaterialMapping))); + } + + /** + * CVolumeDataComposite::AddMaterialMapping - Adds a the MaterialMapping + * @param[in] Transform - new transformation matrix + * @return The new MaterialMapping + */ + PMaterialMapping CVolumeDataComposite::AddMaterialMapping(const sTransform & Transform) + { + Lib3MFHandle hTheMaterialMapping = nullptr; + CheckError(lib3mf_volumedatacomposite_addmaterialmapping(m_pHandle, &Transform, &hTheMaterialMapping)); + + if (!hTheMaterialMapping) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheMaterialMapping))); + } + + /** + * CVolumeDataComposite::RemoveMaterialMapping - Removes the MaterialMapping with given index + * @param[in] nIndex - The index of the MaterialMapping to be removed. + */ + void CVolumeDataComposite::RemoveMaterialMapping(const Lib3MF_uint32 nIndex) + { + CheckError(lib3mf_volumedatacomposite_removematerialmapping(m_pHandle, nIndex)); + } + + /** + * Method definitions for class CVolumeDataProperty + */ + + /** + * CVolumeDataProperty::GetName - Gets the qualified name of this property. + * @return The qualified name of this property. + */ + std::string CVolumeDataProperty::GetName() + { + Lib3MF_uint32 bytesNeededPropertyName = 0; + Lib3MF_uint32 bytesWrittenPropertyName = 0; + CheckError(lib3mf_volumedataproperty_getname(m_pHandle, 0, &bytesNeededPropertyName, nullptr)); + std::vector bufferPropertyName(bytesNeededPropertyName); + CheckError(lib3mf_volumedataproperty_getname(m_pHandle, bytesNeededPropertyName, &bytesWrittenPropertyName, &bufferPropertyName[0])); + + return std::string(&bufferPropertyName[0]); + } + + /** + * CVolumeDataProperty::SetIsRequired - Sets whether this property is required to process this 3MF document instance. + * @param[in] bIsRequired - New value for whether this property is required to process this 3MF document instance. + */ + void CVolumeDataProperty::SetIsRequired(const bool bIsRequired) + { + CheckError(lib3mf_volumedataproperty_setisrequired(m_pHandle, bIsRequired)); + } + + /** + * CVolumeDataProperty::IsRequired - Returns whether this property is required to process this 3MF document instance. + * @return Is this property required to process this 3MF document instance? + */ + bool CVolumeDataProperty::IsRequired() + { + bool resultIsRequired = 0; + CheckError(lib3mf_volumedataproperty_isrequired(m_pHandle, &resultIsRequired)); + + return resultIsRequired; + } + + /** + * Method definitions for class CVolumeData + */ + + /** + * CVolumeData::GetComposite - Returns the VolumeDataComposite of this VolumeData instance + * @return filled with the VolumeDataComposite of this VolumeData instance. + */ + PVolumeDataComposite CVolumeData::GetComposite() + { + Lib3MFHandle hTheCompositeData = nullptr; + CheckError(lib3mf_volumedata_getcomposite(m_pHandle, &hTheCompositeData)); + + if (hTheCompositeData) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheCompositeData))); + } else { + return nullptr; + } + } + + /** + * CVolumeData::CreateNewComposite - Creates a new VolumeDataComposite for this VolumeData instance + * @return The new VolumeDataComposite of this VolumeData instance. + */ + PVolumeDataComposite CVolumeData::CreateNewComposite() + { + Lib3MFHandle hTheCompositeData = nullptr; + CheckError(lib3mf_volumedata_createnewcomposite(m_pHandle, &hTheCompositeData)); + + if (!hTheCompositeData) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheCompositeData))); + } + + /** + * CVolumeData::RemoveComposite - Removes the VolumeDataComposite of this VolumeData instance + */ + void CVolumeData::RemoveComposite() + { + CheckError(lib3mf_volumedata_removecomposite(m_pHandle)); + } + + /** + * CVolumeData::GetColor - Returns the VolumeDataColor of this VolumeData instance + * @return filled with the VolumeDataColor of this VolumeData instance. + */ + PVolumeDataColor CVolumeData::GetColor() + { + Lib3MFHandle hTheColorData = nullptr; + CheckError(lib3mf_volumedata_getcolor(m_pHandle, &hTheColorData)); + + if (hTheColorData) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheColorData))); + } else { + return nullptr; + } + } + + /** + * CVolumeData::CreateNewColor - Creates a new VolumeDataColor for this VolumeData instance + * @param[in] pTheFunction - Function used in this element + * @return The new VolumeDataColor of this VolumeData instance. + */ + PVolumeDataColor CVolumeData::CreateNewColor(classParam pTheFunction) + { + Lib3MFHandle hTheFunction = pTheFunction.GetHandle(); + Lib3MFHandle hTheColorData = nullptr; + CheckError(lib3mf_volumedata_createnewcolor(m_pHandle, hTheFunction, &hTheColorData)); + + if (!hTheColorData) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheColorData))); + } + + /** + * CVolumeData::RemoveColor - Removes the VolumeDataColor of this VolumeData instance + */ + void CVolumeData::RemoveColor() + { + CheckError(lib3mf_volumedata_removecolor(m_pHandle)); + } + + /** + * CVolumeData::GetPropertyCount - Returns the number of VolumeDataProperty + * @return the number of VolumeDataProperty-elements within this VolumdeData + */ + Lib3MF_uint32 CVolumeData::GetPropertyCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_volumedata_getpropertycount(m_pHandle, &resultCount)); + + return resultCount; + } + + /** + * CVolumeData::GetProperty - Returns the VolumeDataProperty at a given Index + * @param[in] nIndex - the index of the VolumeDataProperty to be returned. + * @return the VolumeDataProperty at the given index. + */ + PVolumeDataProperty CVolumeData::GetProperty(const Lib3MF_uint32 nIndex) + { + Lib3MFHandle hTheVolumeDataProperty = nullptr; + CheckError(lib3mf_volumedata_getproperty(m_pHandle, nIndex, &hTheVolumeDataProperty)); + + if (!hTheVolumeDataProperty) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheVolumeDataProperty))); + } + + /** + * CVolumeData::AddPropertyFromFunction - Adds a new VolumeDataProperty from a Function + * @param[in] sName - the qualified name (namespace+name) of the Property + * @param[in] pTheFunction - Function used in this element + * @return the newly created VolumeDataProperty. + */ + PVolumeDataProperty CVolumeData::AddPropertyFromFunction(const std::string & sName, classParam pTheFunction) + { + Lib3MFHandle hTheFunction = pTheFunction.GetHandle(); + Lib3MFHandle hTheVolumeDataProperty = nullptr; + CheckError(lib3mf_volumedata_addpropertyfromfunction(m_pHandle, sName.c_str(), hTheFunction, &hTheVolumeDataProperty)); + + if (!hTheVolumeDataProperty) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheVolumeDataProperty))); + } + + /** + * CVolumeData::RemoveProperty - Removes the VolumeDataProperty with a given index + * @param[in] nIndex - the index of the VolumeDataProperty to be removed. + */ + void CVolumeData::RemoveProperty(const Lib3MF_uint32 nIndex) + { + CheckError(lib3mf_volumedata_removeproperty(m_pHandle, nIndex)); + } + + /** + * Method definitions for class CComponent + */ + + /** + * CComponent::GetObjectResource - Returns the Resource Instance of the component. + * @return filled with the Resource Instance. + */ + PObject CComponent::GetObjectResource() + { + Lib3MFHandle hObjectResource = nullptr; + CheckError(lib3mf_component_getobjectresource(m_pHandle, &hObjectResource)); + + if (!hObjectResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hObjectResource))); + } + + /** + * CComponent::GetObjectResourceID - Returns the UniqueResourceID of the component. + * @return returns the UniqueResourceID. + */ + Lib3MF_uint32 CComponent::GetObjectResourceID() + { + Lib3MF_uint32 resultUniqueResourceID = 0; + CheckError(lib3mf_component_getobjectresourceid(m_pHandle, &resultUniqueResourceID)); + + return resultUniqueResourceID; + } + + /** + * CComponent::GetUUID - returns, whether a component has a UUID and, if true, the component's UUID + * @param[out] bHasUUID - flag whether the component has a UUID + * @return the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + */ + std::string CComponent::GetUUID(bool & bHasUUID) + { + Lib3MF_uint32 bytesNeededUUID = 0; + Lib3MF_uint32 bytesWrittenUUID = 0; + CheckError(lib3mf_component_getuuid(m_pHandle, &bHasUUID, 0, &bytesNeededUUID, nullptr)); + std::vector bufferUUID(bytesNeededUUID); + CheckError(lib3mf_component_getuuid(m_pHandle, &bHasUUID, bytesNeededUUID, &bytesWrittenUUID, &bufferUUID[0])); + + return std::string(&bufferUUID[0]); + } + + /** + * CComponent::SetUUID - sets the component's UUID + * @param[in] sUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + */ + void CComponent::SetUUID(const std::string & sUUID) + { + CheckError(lib3mf_component_setuuid(m_pHandle, sUUID.c_str())); + } + + /** + * CComponent::HasTransform - Returns, if the component has a different transformation than the identity matrix + * @return if true is returned, the transformation is not equal than the identity + */ + bool CComponent::HasTransform() + { + bool resultHasTransform = 0; + CheckError(lib3mf_component_hastransform(m_pHandle, &resultHasTransform)); + + return resultHasTransform; + } + + /** + * CComponent::GetTransform - Returns the transformation matrix of the component. + * @return filled with the component transformation matrix + */ + sTransform CComponent::GetTransform() + { + sTransform resultTransform; + CheckError(lib3mf_component_gettransform(m_pHandle, &resultTransform)); + + return resultTransform; + } + + /** + * CComponent::SetTransform - Sets the transformation matrix of the component. + * @param[in] Transform - new transformation matrix + */ + void CComponent::SetTransform(const sTransform & Transform) + { + CheckError(lib3mf_component_settransform(m_pHandle, &Transform)); + } + + /** + * Method definitions for class CComponentsObject + */ + + /** + * CComponentsObject::AddComponent - Adds a new component to a components object. + * @param[in] pObjectResource - object to add as component. Must not lead to circular references! + * @param[in] Transform - optional transform matrix for the component. + * @return new component instance + */ + PComponent CComponentsObject::AddComponent(classParam pObjectResource, const sTransform & Transform) + { + Lib3MFHandle hObjectResource = pObjectResource.GetHandle(); + Lib3MFHandle hComponentInstance = nullptr; + CheckError(lib3mf_componentsobject_addcomponent(m_pHandle, hObjectResource, &Transform, &hComponentInstance)); + + if (!hComponentInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hComponentInstance))); + } + + /** + * CComponentsObject::GetComponent - Retrieves a component from a component object. + * @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) + * @return component instance + */ + PComponent CComponentsObject::GetComponent(const Lib3MF_uint32 nIndex) + { + Lib3MFHandle hComponentInstance = nullptr; + CheckError(lib3mf_componentsobject_getcomponent(m_pHandle, nIndex, &hComponentInstance)); + + if (!hComponentInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hComponentInstance))); + } + + /** + * CComponentsObject::GetComponentCount - Retrieves a component count of a component object. + * @return returns the component count + */ + Lib3MF_uint32 CComponentsObject::GetComponentCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_componentsobject_getcomponentcount(m_pHandle, &resultCount)); + + return resultCount; + } + + /** + * Method definitions for class CBeamSet + */ + + /** + * CBeamSet::SetName - Sets a beamset's name string + * @param[in] sName - new name of the beamset. + */ + void CBeamSet::SetName(const std::string & sName) + { + CheckError(lib3mf_beamset_setname(m_pHandle, sName.c_str())); + } + + /** + * CBeamSet::GetName - Retrieves a beamset's name string + * @return returns the name of the beamset. + */ + std::string CBeamSet::GetName() + { + Lib3MF_uint32 bytesNeededName = 0; + Lib3MF_uint32 bytesWrittenName = 0; + CheckError(lib3mf_beamset_getname(m_pHandle, 0, &bytesNeededName, nullptr)); + std::vector bufferName(bytesNeededName); + CheckError(lib3mf_beamset_getname(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); + + return std::string(&bufferName[0]); + } + + /** + * CBeamSet::SetIdentifier - Sets a beamset's identifier string + * @param[in] sIdentifier - new name of the beamset. + */ + void CBeamSet::SetIdentifier(const std::string & sIdentifier) + { + CheckError(lib3mf_beamset_setidentifier(m_pHandle, sIdentifier.c_str())); + } + + /** + * CBeamSet::GetIdentifier - Retrieves a beamset's identifier string + * @return returns the identifier of the beamset. + */ + std::string CBeamSet::GetIdentifier() + { + Lib3MF_uint32 bytesNeededIdentifier = 0; + Lib3MF_uint32 bytesWrittenIdentifier = 0; + CheckError(lib3mf_beamset_getidentifier(m_pHandle, 0, &bytesNeededIdentifier, nullptr)); + std::vector bufferIdentifier(bytesNeededIdentifier); + CheckError(lib3mf_beamset_getidentifier(m_pHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0])); + + return std::string(&bufferIdentifier[0]); + } + + /** + * CBeamSet::GetReferenceCount - Retrieves the reference count of a beamset + * @return returns the reference count + */ + Lib3MF_uint32 CBeamSet::GetReferenceCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_beamset_getreferencecount(m_pHandle, &resultCount)); + + return resultCount; + } + + /** + * CBeamSet::SetReferences - Sets the references of a beamset + * @param[in] ReferencesBuffer - the new indices of all beams in this beamset + */ + void CBeamSet::SetReferences(const CInputVector & ReferencesBuffer) + { + CheckError(lib3mf_beamset_setreferences(m_pHandle, (Lib3MF_uint64)ReferencesBuffer.size(), ReferencesBuffer.data())); + } + + /** + * CBeamSet::GetReferences - Retrieves the references of a beamset + * @param[out] ReferencesBuffer - retrieves the indices of all beams in this beamset + */ + void CBeamSet::GetReferences(std::vector & ReferencesBuffer) + { + Lib3MF_uint64 elementsNeededReferences = 0; + Lib3MF_uint64 elementsWrittenReferences = 0; + CheckError(lib3mf_beamset_getreferences(m_pHandle, 0, &elementsNeededReferences, nullptr)); + ReferencesBuffer.resize((size_t) elementsNeededReferences); + CheckError(lib3mf_beamset_getreferences(m_pHandle, elementsNeededReferences, &elementsWrittenReferences, ReferencesBuffer.data())); + } + + /** + * CBeamSet::GetBallReferenceCount - Retrieves the ball reference count of a beamset + * @return returns the ball reference count + */ + Lib3MF_uint32 CBeamSet::GetBallReferenceCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_beamset_getballreferencecount(m_pHandle, &resultCount)); + + return resultCount; + } + + /** + * CBeamSet::SetBallReferences - Sets the ball references of a beamset + * @param[in] BallReferencesBuffer - the new indices of all balls in this beamset + */ + void CBeamSet::SetBallReferences(const CInputVector & BallReferencesBuffer) + { + CheckError(lib3mf_beamset_setballreferences(m_pHandle, (Lib3MF_uint64)BallReferencesBuffer.size(), BallReferencesBuffer.data())); + } + + /** + * CBeamSet::GetBallReferences - Retrieves the ball references of a beamset + * @param[out] BallReferencesBuffer - retrieves the indices of all balls in this beamset + */ + void CBeamSet::GetBallReferences(std::vector & BallReferencesBuffer) + { + Lib3MF_uint64 elementsNeededBallReferences = 0; + Lib3MF_uint64 elementsWrittenBallReferences = 0; + CheckError(lib3mf_beamset_getballreferences(m_pHandle, 0, &elementsNeededBallReferences, nullptr)); + BallReferencesBuffer.resize((size_t) elementsNeededBallReferences); + CheckError(lib3mf_beamset_getballreferences(m_pHandle, elementsNeededBallReferences, &elementsWrittenBallReferences, BallReferencesBuffer.data())); + } + + /** + * Method definitions for class CBaseMaterialGroup + */ + + /** + * CBaseMaterialGroup::GetCount - Retrieves the count of base materials in the material group. + * @return returns the count of base materials. + */ + Lib3MF_uint32 CBaseMaterialGroup::GetCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_basematerialgroup_getcount(m_pHandle, &resultCount)); + + return resultCount; } - return new CBase(this, pHandle); -} /** - * CWrapper::GetLibraryVersion - retrieves the binary version of this library. - * @param[out] nMajor - returns the major version of this library - * @param[out] nMinor - returns the minor version of this library - * @param[out] nMicro - returns the micro version of this library + * CBaseMaterialGroup::GetAllPropertyIDs - returns all the PropertyIDs of all materials in this group + * @param[out] PropertyIDsBuffer - PropertyID of the material in the material group. */ - inline void CWrapper::GetLibraryVersion(Lib3MF_uint32 & nMajor, Lib3MF_uint32 & nMinor, Lib3MF_uint32 & nMicro) + void CBaseMaterialGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) { - CheckError(nullptr,lib3mf_getlibraryversion(&nMajor, &nMinor, &nMicro)); + Lib3MF_uint64 elementsNeededPropertyIDs = 0; + Lib3MF_uint64 elementsWrittenPropertyIDs = 0; + CheckError(lib3mf_basematerialgroup_getallpropertyids(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); + PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); + CheckError(lib3mf_basematerialgroup_getallpropertyids(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); } /** - * CWrapper::GetPrereleaseInformation - retrieves prerelease information of this library. - * @return Does the library provide prerelease version? - * @param[out] sPrereleaseInfo - retrieves prerelease information of this library. + * CBaseMaterialGroup::AddMaterial - Adds a new material to the material group + * @param[in] sName - new name of the base material. + * @param[in] DisplayColor - Display color of the material + * @return returns new PropertyID of the new material in the material group. */ - inline bool CWrapper::GetPrereleaseInformation(std::string & sPrereleaseInfo) + Lib3MF_uint32 CBaseMaterialGroup::AddMaterial(const std::string & sName, const sColor & DisplayColor) { - bool resultHasPrereleaseInfo = 0; - Lib3MF_uint32 bytesNeededPrereleaseInfo = 0; - Lib3MF_uint32 bytesWrittenPrereleaseInfo = 0; - CheckError(nullptr,lib3mf_getprereleaseinformation(&resultHasPrereleaseInfo, 0, &bytesNeededPrereleaseInfo, nullptr)); - std::vector bufferPrereleaseInfo(bytesNeededPrereleaseInfo); - CheckError(nullptr,lib3mf_getprereleaseinformation(&resultHasPrereleaseInfo, bytesNeededPrereleaseInfo, &bytesWrittenPrereleaseInfo, &bufferPrereleaseInfo[0])); - sPrereleaseInfo = std::string(&bufferPrereleaseInfo[0]); + Lib3MF_uint32 resultPropertyID = 0; + CheckError(lib3mf_basematerialgroup_addmaterial(m_pHandle, sName.c_str(), &DisplayColor, &resultPropertyID)); - return resultHasPrereleaseInfo; + return resultPropertyID; } /** - * CWrapper::GetBuildInformation - retrieves build information of this library. - * @return Does the library provide build version? - * @param[out] sBuildInformation - retrieves build information of this library. + * CBaseMaterialGroup::RemoveMaterial - Removes a material from the material group. + * @param[in] nPropertyID - PropertyID of the material in the material group. */ - inline bool CWrapper::GetBuildInformation(std::string & sBuildInformation) + void CBaseMaterialGroup::RemoveMaterial(const Lib3MF_uint32 nPropertyID) { - bool resultHasBuildInfo = 0; - Lib3MF_uint32 bytesNeededBuildInformation = 0; - Lib3MF_uint32 bytesWrittenBuildInformation = 0; - CheckError(nullptr,lib3mf_getbuildinformation(&resultHasBuildInfo, 0, &bytesNeededBuildInformation, nullptr)); - std::vector bufferBuildInformation(bytesNeededBuildInformation); - CheckError(nullptr,lib3mf_getbuildinformation(&resultHasBuildInfo, bytesNeededBuildInformation, &bytesWrittenBuildInformation, &bufferBuildInformation[0])); - sBuildInformation = std::string(&bufferBuildInformation[0]); - - return resultHasBuildInfo; + CheckError(lib3mf_basematerialgroup_removematerial(m_pHandle, nPropertyID)); } /** - * CWrapper::GetSpecificationVersion - retrieves whether a specification is supported, and if so, which version. - * @param[in] sSpecificationURL - URL of extension to check - * @param[out] bIsSupported - returns whether this specification is supported - * @param[out] nMajor - returns the major version of the extension (if IsSupported) - * @param[out] nMinor - returns the minor version of the extension (if IsSupported) - * @param[out] nMicro - returns the micro version of the extension (if IsSupported) + * CBaseMaterialGroup::GetName - Returns the base material's name + * @param[in] nPropertyID - PropertyID of the material in the material group. + * @return returns the name of the base material. */ - inline void CWrapper::GetSpecificationVersion(const std::string & sSpecificationURL, bool & bIsSupported, Lib3MF_uint32 & nMajor, Lib3MF_uint32 & nMinor, Lib3MF_uint32 & nMicro) + std::string CBaseMaterialGroup::GetName(const Lib3MF_uint32 nPropertyID) { - CheckError(nullptr,lib3mf_getspecificationversion(sSpecificationURL.c_str(), &bIsSupported, &nMajor, &nMinor, &nMicro)); + Lib3MF_uint32 bytesNeededName = 0; + Lib3MF_uint32 bytesWrittenName = 0; + CheckError(lib3mf_basematerialgroup_getname(m_pHandle, nPropertyID, 0, &bytesNeededName, nullptr)); + std::vector bufferName(bytesNeededName); + CheckError(lib3mf_basematerialgroup_getname(m_pHandle, nPropertyID, bytesNeededName, &bytesWrittenName, &bufferName[0])); + + return std::string(&bufferName[0]); } /** - * CWrapper::CreateModel - creates an empty model instance. - * @return returns an empty model instance + * CBaseMaterialGroup::SetName - Sets a base material's name + * @param[in] nPropertyID - PropertyID of the material in the material group. + * @param[in] sName - new name of the base material. */ - inline PModel CWrapper::CreateModel() + void CBaseMaterialGroup::SetName(const Lib3MF_uint32 nPropertyID, const std::string & sName) { - Lib3MFHandle hModel = nullptr; - CheckError(nullptr,lib3mf_createmodel(&hModel)); - - if (!hModel) { - CheckError(nullptr,LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(this->polymorphicFactory(hModel))); + CheckError(lib3mf_basematerialgroup_setname(m_pHandle, nPropertyID, sName.c_str())); } /** - * CWrapper::Release - releases shared ownership of an object instance - * @param[in] pInstance - the object instance to release + * CBaseMaterialGroup::SetDisplayColor - Sets a base material's display color. + * @param[in] nPropertyID - PropertyID of the material in the material group. + * @param[in] TheColor - The base material's display color */ - inline void CWrapper::Release(classParam pInstance) + void CBaseMaterialGroup::SetDisplayColor(const Lib3MF_uint32 nPropertyID, const sColor & TheColor) { - Lib3MFHandle hInstance = pInstance.GetHandle(); - CheckError(nullptr,lib3mf_release(hInstance)); + CheckError(lib3mf_basematerialgroup_setdisplaycolor(m_pHandle, nPropertyID, &TheColor)); } /** - * CWrapper::Acquire - acquires shared ownership of an object instance - * @param[in] pInstance - the object instance to acquire + * CBaseMaterialGroup::GetDisplayColor - Returns a base material's display color. + * @param[in] nPropertyID - PropertyID of the material in the material group. + * @return The base material's display color */ - inline void CWrapper::Acquire(classParam pInstance) + sColor CBaseMaterialGroup::GetDisplayColor(const Lib3MF_uint32 nPropertyID) { - Lib3MFHandle hInstance = pInstance.GetHandle(); - CheckError(nullptr,lib3mf_acquire(hInstance)); + sColor resultTheColor; + CheckError(lib3mf_basematerialgroup_getdisplaycolor(m_pHandle, nPropertyID, &resultTheColor)); + + return resultTheColor; } /** - * CWrapper::SetJournal - Sets the journal file path - * @param[in] sJournalPath - File name of the journal file + * Method definitions for class CColorGroup + */ + + /** + * CColorGroup::GetCount - Retrieves the count of base materials in this Color Group. + * @return returns the count of colors within this color group. */ - inline void CWrapper::SetJournal(const std::string & sJournalPath) + Lib3MF_uint32 CColorGroup::GetCount() { - CheckError(nullptr,lib3mf_setjournal(sJournalPath.c_str())); + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_colorgroup_getcount(m_pHandle, &resultCount)); + + return resultCount; } /** - * CWrapper::GetLastError - Retrieves the last error string of an instance - * @param[in] pInstance - Object where the error occured. - * @param[out] sLastErrorString - Last Error String - * @return Returns if the instance has a last error. + * CColorGroup::GetAllPropertyIDs - returns all the PropertyIDs of all colors within this group + * @param[out] PropertyIDsBuffer - PropertyID of the color in the color group. */ - inline bool CWrapper::GetLastError(classParam pInstance, std::string & sLastErrorString) + void CColorGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) { - Lib3MFHandle hInstance = pInstance.GetHandle(); - Lib3MF_uint32 bytesNeededLastErrorString = 0; - Lib3MF_uint32 bytesWrittenLastErrorString = 0; - bool resultHasLastError = 0; - CheckError(nullptr,lib3mf_getlasterror(hInstance, 0, &bytesNeededLastErrorString, nullptr, &resultHasLastError)); - std::vector bufferLastErrorString(bytesNeededLastErrorString); - CheckError(nullptr,lib3mf_getlasterror(hInstance, bytesNeededLastErrorString, &bytesWrittenLastErrorString, &bufferLastErrorString[0], &resultHasLastError)); - sLastErrorString = std::string(&bufferLastErrorString[0]); - - return resultHasLastError; + Lib3MF_uint64 elementsNeededPropertyIDs = 0; + Lib3MF_uint64 elementsWrittenPropertyIDs = 0; + CheckError(lib3mf_colorgroup_getallpropertyids(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); + PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); + CheckError(lib3mf_colorgroup_getallpropertyids(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); } /** - * CWrapper::GetSymbolLookupMethod - Returns the address of the SymbolLookupMethod - * @return Address of the SymbolAddressMethod + * CColorGroup::AddColor - Adds a new value. + * @param[in] TheColor - The new color + * @return PropertyID of the new color within this color group. */ - inline Lib3MF_pvoid CWrapper::GetSymbolLookupMethod() + Lib3MF_uint32 CColorGroup::AddColor(const sColor & TheColor) { - Lib3MF_pvoid resultSymbolLookupMethod = 0; - CheckError(nullptr,lib3mf_getsymbollookupmethod(&resultSymbolLookupMethod)); + Lib3MF_uint32 resultPropertyID = 0; + CheckError(lib3mf_colorgroup_addcolor(m_pHandle, &TheColor, &resultPropertyID)); - return resultSymbolLookupMethod; + return resultPropertyID; } /** - * CWrapper::RetrieveProgressMessage - Return an English text for a progress identifier.|Note: this is the only function you can call from your callback function. - * @param[in] eTheProgressIdentifier - the progress identifier that is passed to the callback function - * @param[out] sProgressMessage - English text for the progress identifier + * CColorGroup::RemoveColor - Removes a color from the color group. + * @param[in] nPropertyID - PropertyID of the color to be removed from the color group. */ - inline void CWrapper::RetrieveProgressMessage(const eProgressIdentifier eTheProgressIdentifier, std::string & sProgressMessage) + void CColorGroup::RemoveColor(const Lib3MF_uint32 nPropertyID) { - Lib3MF_uint32 bytesNeededProgressMessage = 0; - Lib3MF_uint32 bytesWrittenProgressMessage = 0; - CheckError(nullptr,lib3mf_retrieveprogressmessage(eTheProgressIdentifier, 0, &bytesNeededProgressMessage, nullptr)); - std::vector bufferProgressMessage(bytesNeededProgressMessage); - CheckError(nullptr,lib3mf_retrieveprogressmessage(eTheProgressIdentifier, bytesNeededProgressMessage, &bytesWrittenProgressMessage, &bufferProgressMessage[0])); - sProgressMessage = std::string(&bufferProgressMessage[0]); + CheckError(lib3mf_colorgroup_removecolor(m_pHandle, nPropertyID)); } /** - * CWrapper::RGBAToColor - Creates a Color from uint8 RGBA values - * @param[in] nRed - Red value of color (0-255) - * @param[in] nGreen - Green value of color (0-255) - * @param[in] nBlue - Blue value of color (0-255) - * @param[in] nAlpha - Alpha value of color (0-255) - * @return Assembled color + * CColorGroup::SetColor - Sets a color value. + * @param[in] nPropertyID - PropertyID of a color within this color group. + * @param[in] TheColor - The color */ - inline sColor CWrapper::RGBAToColor(const Lib3MF_uint8 nRed, const Lib3MF_uint8 nGreen, const Lib3MF_uint8 nBlue, const Lib3MF_uint8 nAlpha) + void CColorGroup::SetColor(const Lib3MF_uint32 nPropertyID, const sColor & TheColor) { - sColor resultTheColor; - CheckError(nullptr,lib3mf_rgbatocolor(nRed, nGreen, nBlue, nAlpha, &resultTheColor)); - - return resultTheColor; + CheckError(lib3mf_colorgroup_setcolor(m_pHandle, nPropertyID, &TheColor)); } /** - * CWrapper::FloatRGBAToColor - Creates a Color from uint8 RGBA values - * @param[in] fRed - Red value of color (0-1) - * @param[in] fGreen - Green value of color (0-1) - * @param[in] fBlue - Blue value of color (0-1) - * @param[in] fAlpha - Alpha value of color (0-1) - * @return Assembled color + * CColorGroup::GetColor - Sets a color value. + * @param[in] nPropertyID - PropertyID of a color within this color group. + * @return The color */ - inline sColor CWrapper::FloatRGBAToColor(const Lib3MF_single fRed, const Lib3MF_single fGreen, const Lib3MF_single fBlue, const Lib3MF_single fAlpha) + sColor CColorGroup::GetColor(const Lib3MF_uint32 nPropertyID) { sColor resultTheColor; - CheckError(nullptr,lib3mf_floatrgbatocolor(fRed, fGreen, fBlue, fAlpha, &resultTheColor)); + CheckError(lib3mf_colorgroup_getcolor(m_pHandle, nPropertyID, &resultTheColor)); return resultTheColor; } /** - * CWrapper::ColorToRGBA - Calculates uint8-RGBA-values from a Color - * @param[in] TheColor - Color to handle - * @param[out] nRed - Red value of color (0-255) - * @param[out] nGreen - Green value of color (0-255) - * @param[out] nBlue - Blue value of color (0-255) - * @param[out] nAlpha - Alpha value of color (0-255) + * Method definitions for class CTexture2DGroup + */ + + /** + * CTexture2DGroup::GetCount - Retrieves the count of tex2coords in the Texture2DGroup. + * @return returns the count of tex2coords. */ - inline void CWrapper::ColorToRGBA(const sColor & TheColor, Lib3MF_uint8 & nRed, Lib3MF_uint8 & nGreen, Lib3MF_uint8 & nBlue, Lib3MF_uint8 & nAlpha) + Lib3MF_uint32 CTexture2DGroup::GetCount() { - CheckError(nullptr,lib3mf_colortorgba(&TheColor, &nRed, &nGreen, &nBlue, &nAlpha)); + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_texture2dgroup_getcount(m_pHandle, &resultCount)); + + return resultCount; } /** - * CWrapper::ColorToFloatRGBA - Calculates float-RGBA-values from a Color - * @param[in] TheColor - Color to handle - * @param[out] fRed - Red value of color (0-1) - * @param[out] fGreen - Green value of color (0-1) - * @param[out] fBlue - Blue value of color (0-1) - * @param[out] fAlpha - Alpha value of color (0-1) + * CTexture2DGroup::GetAllPropertyIDs - returns all the PropertyIDs of all tex2coords in this Texture2DGroup + * @param[out] PropertyIDsBuffer - PropertyID of the tex2coords in the Texture2DGroup. */ - inline void CWrapper::ColorToFloatRGBA(const sColor & TheColor, Lib3MF_single & fRed, Lib3MF_single & fGreen, Lib3MF_single & fBlue, Lib3MF_single & fAlpha) + void CTexture2DGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) { - CheckError(nullptr,lib3mf_colortofloatrgba(&TheColor, &fRed, &fGreen, &fBlue, &fAlpha)); + Lib3MF_uint64 elementsNeededPropertyIDs = 0; + Lib3MF_uint64 elementsWrittenPropertyIDs = 0; + CheckError(lib3mf_texture2dgroup_getallpropertyids(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); + PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); + CheckError(lib3mf_texture2dgroup_getallpropertyids(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); } /** - * CWrapper::GetIdentityTransform - Creates an identity transform - * @return Transformation matrix. + * CTexture2DGroup::AddTex2Coord - Adds a new tex2coord to the Texture2DGroup + * @param[in] UVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. + * @return returns new PropertyID of the new tex2coord in the Texture2DGroup. */ - inline sTransform CWrapper::GetIdentityTransform() + Lib3MF_uint32 CTexture2DGroup::AddTex2Coord(const sTex2Coord & UVCoordinate) { - sTransform resultTransform; - CheckError(nullptr,lib3mf_getidentitytransform(&resultTransform)); + Lib3MF_uint32 resultPropertyID = 0; + CheckError(lib3mf_texture2dgroup_addtex2coord(m_pHandle, &UVCoordinate, &resultPropertyID)); - return resultTransform; + return resultPropertyID; } /** - * CWrapper::GetUniformScaleTransform - Creates a uniform scale transform - * @param[in] fFactor - Factor in X, Y and Z - * @return Transformation matrix. + * CTexture2DGroup::GetTex2Coord - Obtains a tex2coord to the Texture2DGroup + * @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. + * @return The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. */ - inline sTransform CWrapper::GetUniformScaleTransform(const Lib3MF_single fFactor) + sTex2Coord CTexture2DGroup::GetTex2Coord(const Lib3MF_uint32 nPropertyID) { - sTransform resultTransform; - CheckError(nullptr,lib3mf_getuniformscaletransform(fFactor, &resultTransform)); + sTex2Coord resultUVCoordinate; + CheckError(lib3mf_texture2dgroup_gettex2coord(m_pHandle, nPropertyID, &resultUVCoordinate)); - return resultTransform; + return resultUVCoordinate; } /** - * CWrapper::GetScaleTransform - Creates a scale transform - * @param[in] fFactorX - Factor in X - * @param[in] fFactorY - Factor in Y - * @param[in] fFactorZ - Factor in Z - * @return Transformation matrix. + * CTexture2DGroup::RemoveTex2Coord - Removes a tex2coords from the Texture2DGroup. + * @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. */ - inline sTransform CWrapper::GetScaleTransform(const Lib3MF_single fFactorX, const Lib3MF_single fFactorY, const Lib3MF_single fFactorZ) + void CTexture2DGroup::RemoveTex2Coord(const Lib3MF_uint32 nPropertyID) { - sTransform resultTransform; - CheckError(nullptr,lib3mf_getscaletransform(fFactorX, fFactorY, fFactorZ, &resultTransform)); - - return resultTransform; + CheckError(lib3mf_texture2dgroup_removetex2coord(m_pHandle, nPropertyID)); } /** - * CWrapper::GetTranslationTransform - Creates an translation transform - * @param[in] fVectorX - Translation in X - * @param[in] fVectorY - Translation in Y - * @param[in] fVectorZ - Translation in Z - * @return Transformation matrix. + * CTexture2DGroup::GetTexture2D - Obtains the texture2D instance of this group. + * @return the texture2D instance of this group. */ - inline sTransform CWrapper::GetTranslationTransform(const Lib3MF_single fVectorX, const Lib3MF_single fVectorY, const Lib3MF_single fVectorZ) + PTexture2D CTexture2DGroup::GetTexture2D() { - sTransform resultTransform; - CheckError(nullptr,lib3mf_gettranslationtransform(fVectorX, fVectorY, fVectorZ, &resultTransform)); + Lib3MFHandle hTexture2DInstance = nullptr; + CheckError(lib3mf_texture2dgroup_gettexture2d(m_pHandle, &hTexture2DInstance)); - return resultTransform; - } - - inline void CWrapper::CheckError(CBase * pBaseClass, Lib3MFResult nResult) - { - if (nResult != 0) { - std::string sErrorMessage; - if (pBaseClass != nullptr) { - GetLastError(pBaseClass, sErrorMessage); - } - throw ELib3MFException(nResult, sErrorMessage); + if (!hTexture2DInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTexture2DInstance))); } - - /** - * Method definitions for class CBase + * Method definitions for class CCompositeMaterials */ /** - * CBase::ClassTypeId - Get Class Type Id - * @return Class type as a 64 bits integer + * CCompositeMaterials::GetCount - Retrieves the count of Composite-s in the CompositeMaterials. + * @return returns the count of Composite-s */ - Lib3MF_uint64 CBase::ClassTypeId() + Lib3MF_uint32 CCompositeMaterials::GetCount() { - Lib3MF_uint64 resultClassTypeId = 0; - CheckError(lib3mf_base_classtypeid(m_pHandle, &resultClassTypeId)); + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_compositematerials_getcount(m_pHandle, &resultCount)); - return resultClassTypeId; + return resultCount; } /** - * Method definitions for class CWriter - */ + * CCompositeMaterials::GetAllPropertyIDs - returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials + * @param[out] PropertyIDsBuffer - PropertyID of the Composite-Mixing Values in the CompositeMaterials. + */ + void CCompositeMaterials::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + { + Lib3MF_uint64 elementsNeededPropertyIDs = 0; + Lib3MF_uint64 elementsWrittenPropertyIDs = 0; + CheckError(lib3mf_compositematerials_getallpropertyids(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); + PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); + CheckError(lib3mf_compositematerials_getallpropertyids(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + } /** - * CWriter::WriteToFile - Writes out the model as file. The file type is specified by the Model Writer class. - * @param[in] sFilename - Filename to write into + * CCompositeMaterials::GetBaseMaterialGroup - Obtains the BaseMaterialGroup instance of this CompositeMaterials. + * @return returns the BaseMaterialGroup instance of this CompositeMaterials */ - void CWriter::WriteToFile(const std::string & sFilename) + PBaseMaterialGroup CCompositeMaterials::GetBaseMaterialGroup() { - CheckError(lib3mf_writer_writetofile(m_pHandle, sFilename.c_str())); + Lib3MFHandle hBaseMaterialGroupInstance = nullptr; + CheckError(lib3mf_compositematerials_getbasematerialgroup(m_pHandle, &hBaseMaterialGroupInstance)); + + if (!hBaseMaterialGroupInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBaseMaterialGroupInstance))); } /** - * CWriter::GetStreamSize - Retrieves the size of the full 3MF file stream. - * @return the stream size + * CCompositeMaterials::AddComposite - Adds a new Composite-Mixing Values to the CompositeMaterials. + * @param[in] CompositeBuffer - The Composite Constituents to be added as composite + * @return returns new PropertyID of the new Composite in the CompositeMaterials. */ - Lib3MF_uint64 CWriter::GetStreamSize() + Lib3MF_uint32 CCompositeMaterials::AddComposite(const CInputVector & CompositeBuffer) { - Lib3MF_uint64 resultStreamSize = 0; - CheckError(lib3mf_writer_getstreamsize(m_pHandle, &resultStreamSize)); + Lib3MF_uint32 resultPropertyID = 0; + CheckError(lib3mf_compositematerials_addcomposite(m_pHandle, (Lib3MF_uint64)CompositeBuffer.size(), CompositeBuffer.data(), &resultPropertyID)); - return resultStreamSize; + return resultPropertyID; } /** - * CWriter::WriteToBuffer - Writes out the 3MF file into a memory buffer - * @param[out] BufferBuffer - buffer to write into + * CCompositeMaterials::RemoveComposite - Removes a Composite-Maxing Ratio from the CompositeMaterials. + * @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. */ - void CWriter::WriteToBuffer(std::vector & BufferBuffer) + void CCompositeMaterials::RemoveComposite(const Lib3MF_uint32 nPropertyID) { - Lib3MF_uint64 elementsNeededBuffer = 0; - Lib3MF_uint64 elementsWrittenBuffer = 0; - CheckError(lib3mf_writer_writetobuffer(m_pHandle, 0, &elementsNeededBuffer, nullptr)); - BufferBuffer.resize((size_t) elementsNeededBuffer); - CheckError(lib3mf_writer_writetobuffer(m_pHandle, elementsNeededBuffer, &elementsWrittenBuffer, BufferBuffer.data())); + CheckError(lib3mf_compositematerials_removecomposite(m_pHandle, nPropertyID)); } /** - * CWriter::WriteToCallback - Writes out the model and passes the data to a provided callback function. The file type is specified by the Model Writer class. - * @param[in] pTheWriteCallback - Callback to call for writing a data chunk - * @param[in] pTheSeekCallback - Callback to call for seeking in the stream - * @param[in] pUserData - Userdata that is passed to the callback function + * CCompositeMaterials::GetComposite - Obtains a Composite-Maxing Ratio of this CompositeMaterials. + * @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. + * @param[out] CompositeBuffer - The Composite-Mixing Values with the given PropertyID */ - void CWriter::WriteToCallback(const WriteCallback pTheWriteCallback, const SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) + void CCompositeMaterials::GetComposite(const Lib3MF_uint32 nPropertyID, std::vector & CompositeBuffer) { - CheckError(lib3mf_writer_writetocallback(m_pHandle, pTheWriteCallback, pTheSeekCallback, pUserData)); + Lib3MF_uint64 elementsNeededComposite = 0; + Lib3MF_uint64 elementsWrittenComposite = 0; + CheckError(lib3mf_compositematerials_getcomposite(m_pHandle, nPropertyID, 0, &elementsNeededComposite, nullptr)); + CompositeBuffer.resize((size_t) elementsNeededComposite); + CheckError(lib3mf_compositematerials_getcomposite(m_pHandle, nPropertyID, elementsNeededComposite, &elementsWrittenComposite, CompositeBuffer.data())); } /** - * CWriter::SetProgressCallback - Set the progress callback for calls to this writer - * @param[in] pProgressCallback - pointer to the callback function. - * @param[in] pUserData - pointer to arbitrary user data that is passed without modification to the callback. + * Method definitions for class CMultiPropertyGroup + */ + + /** + * CMultiPropertyGroup::GetCount - Retrieves the count of MultiProperty-s in the MultiPropertyGroup. + * @return returns the count of MultiProperty-s */ - void CWriter::SetProgressCallback(const ProgressCallback pProgressCallback, const Lib3MF_pvoid pUserData) + Lib3MF_uint32 CMultiPropertyGroup::GetCount() { - CheckError(lib3mf_writer_setprogresscallback(m_pHandle, pProgressCallback, pUserData)); + Lib3MF_uint32 resultCount = 0; + CheckError(lib3mf_multipropertygroup_getcount(m_pHandle, &resultCount)); + + return resultCount; } /** - * CWriter::GetDecimalPrecision - Returns the number of digits after the decimal point to be written in each vertex coordinate-value. - * @return The number of digits to be written in each vertex coordinate-value after the decimal point. + * CMultiPropertyGroup::GetAllPropertyIDs - returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup + * @param[out] PropertyIDsBuffer - PropertyID of the MultiProperty-s in the MultiPropertyGroup. */ - Lib3MF_uint32 CWriter::GetDecimalPrecision() + void CMultiPropertyGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) { - Lib3MF_uint32 resultDecimalPrecision = 0; - CheckError(lib3mf_writer_getdecimalprecision(m_pHandle, &resultDecimalPrecision)); - - return resultDecimalPrecision; + Lib3MF_uint64 elementsNeededPropertyIDs = 0; + Lib3MF_uint64 elementsWrittenPropertyIDs = 0; + CheckError(lib3mf_multipropertygroup_getallpropertyids(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); + PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); + CheckError(lib3mf_multipropertygroup_getallpropertyids(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); } /** - * CWriter::SetDecimalPrecision - Sets the number of digits after the decimal point to be written in each vertex coordinate-value. - * @param[in] nDecimalPrecision - The number of digits to be written in each vertex coordinate-value after the decimal point. + * CMultiPropertyGroup::AddMultiProperty - Adds a new MultiProperty to the MultiPropertyGroup. + * @param[in] PropertyIDsBuffer - The PropertyIDs of the new MultiProperty. + * @return returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. */ - void CWriter::SetDecimalPrecision(const Lib3MF_uint32 nDecimalPrecision) + Lib3MF_uint32 CMultiPropertyGroup::AddMultiProperty(const CInputVector & PropertyIDsBuffer) { - CheckError(lib3mf_writer_setdecimalprecision(m_pHandle, nDecimalPrecision)); + Lib3MF_uint32 resultPropertyID = 0; + CheckError(lib3mf_multipropertygroup_addmultiproperty(m_pHandle, (Lib3MF_uint64)PropertyIDsBuffer.size(), PropertyIDsBuffer.data(), &resultPropertyID)); + + return resultPropertyID; } /** - * CWriter::SetStrictModeActive - Activates (deactivates) the strict mode of the reader. - * @param[in] bStrictModeActive - flag whether strict mode is active or not. + * CMultiPropertyGroup::SetMultiProperty - Sets the PropertyIDs of a MultiProperty. + * @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. + * @param[in] PropertyIDsBuffer - The new PropertyIDs of the MultiProperty */ - void CWriter::SetStrictModeActive(const bool bStrictModeActive) + void CMultiPropertyGroup::SetMultiProperty(const Lib3MF_uint32 nPropertyID, const CInputVector & PropertyIDsBuffer) { - CheckError(lib3mf_writer_setstrictmodeactive(m_pHandle, bStrictModeActive)); + CheckError(lib3mf_multipropertygroup_setmultiproperty(m_pHandle, nPropertyID, (Lib3MF_uint64)PropertyIDsBuffer.size(), PropertyIDsBuffer.data())); } /** - * CWriter::GetStrictModeActive - Queries whether the strict mode of the reader is active or not - * @return returns flag whether strict mode is active or not. + * CMultiPropertyGroup::GetMultiProperty - Obtains the PropertyIDs of a MultiProperty. + * @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. + * @param[out] PropertyIDsBuffer - The PropertyIDs of the MultiProperty */ - bool CWriter::GetStrictModeActive() + void CMultiPropertyGroup::GetMultiProperty(const Lib3MF_uint32 nPropertyID, std::vector & PropertyIDsBuffer) { - bool resultStrictModeActive = 0; - CheckError(lib3mf_writer_getstrictmodeactive(m_pHandle, &resultStrictModeActive)); - - return resultStrictModeActive; + Lib3MF_uint64 elementsNeededPropertyIDs = 0; + Lib3MF_uint64 elementsWrittenPropertyIDs = 0; + CheckError(lib3mf_multipropertygroup_getmultiproperty(m_pHandle, nPropertyID, 0, &elementsNeededPropertyIDs, nullptr)); + PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); + CheckError(lib3mf_multipropertygroup_getmultiproperty(m_pHandle, nPropertyID, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); } /** - * CWriter::GetWarning - Returns Warning and Error Information of the read process - * @param[in] nIndex - Index of the Warning. Valid values are 0 to WarningCount - 1 - * @param[out] nErrorCode - filled with the error code of the warning - * @return the message of the warning + * CMultiPropertyGroup::RemoveMultiProperty - Removes a MultiProperty from this MultiPropertyGroup. + * @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. */ - std::string CWriter::GetWarning(const Lib3MF_uint32 nIndex, Lib3MF_uint32 & nErrorCode) + void CMultiPropertyGroup::RemoveMultiProperty(const Lib3MF_uint32 nPropertyID) { - Lib3MF_uint32 bytesNeededWarning = 0; - Lib3MF_uint32 bytesWrittenWarning = 0; - CheckError(lib3mf_writer_getwarning(m_pHandle, nIndex, &nErrorCode, 0, &bytesNeededWarning, nullptr)); - std::vector bufferWarning(bytesNeededWarning); - CheckError(lib3mf_writer_getwarning(m_pHandle, nIndex, &nErrorCode, bytesNeededWarning, &bytesWrittenWarning, &bufferWarning[0])); - - return std::string(&bufferWarning[0]); + CheckError(lib3mf_multipropertygroup_removemultiproperty(m_pHandle, nPropertyID)); } /** - * CWriter::GetWarningCount - Returns Warning and Error Count of the read process - * @return filled with the count of the occurred warnings. + * CMultiPropertyGroup::GetLayerCount - Retrieves the number of layers of this MultiPropertyGroup. + * @return returns the number of layers */ - Lib3MF_uint32 CWriter::GetWarningCount() + Lib3MF_uint32 CMultiPropertyGroup::GetLayerCount() { Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_writer_getwarningcount(m_pHandle, &resultCount)); + CheckError(lib3mf_multipropertygroup_getlayercount(m_pHandle, &resultCount)); return resultCount; } /** - * CWriter::AddKeyWrappingCallback - Registers a callback to deal with data key encryption/decryption from keystore - * @param[in] sConsumerID - The ConsumerID to register for - * @param[in] pTheCallback - The callback to be callede for wrapping and encryption key - * @param[in] pUserData - Userdata that is passed to the callback function + * CMultiPropertyGroup::AddLayer - Adds a MultiPropertyLayer to this MultiPropertyGroup. + * @param[in] TheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup + * @return returns the index of this MultiPropertyLayer */ - void CWriter::AddKeyWrappingCallback(const std::string & sConsumerID, const KeyWrappingCallback pTheCallback, const Lib3MF_pvoid pUserData) + Lib3MF_uint32 CMultiPropertyGroup::AddLayer(const sMultiPropertyLayer & TheLayer) { - CheckError(lib3mf_writer_addkeywrappingcallback(m_pHandle, sConsumerID.c_str(), pTheCallback, pUserData)); + Lib3MF_uint32 resultLayerIndex = 0; + CheckError(lib3mf_multipropertygroup_addlayer(m_pHandle, &TheLayer, &resultLayerIndex)); + + return resultLayerIndex; + } + + /** + * CMultiPropertyGroup::GetLayer - Obtains a MultiPropertyLayer of this MultiPropertyGroup. + * @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried + * @return The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup + */ + sMultiPropertyLayer CMultiPropertyGroup::GetLayer(const Lib3MF_uint32 nLayerIndex) + { + sMultiPropertyLayer resultTheLayer; + CheckError(lib3mf_multipropertygroup_getlayer(m_pHandle, nLayerIndex, &resultTheLayer)); + + return resultTheLayer; } /** - * CWriter::SetContentEncryptionCallback - Registers a callback to deal with encryption of content - * @param[in] pTheCallback - The callback used to encrypt content - * @param[in] pUserData - Userdata that is passed to the callback function + * CMultiPropertyGroup::RemoveLayer - Removes a MultiPropertyLayer from this MultiPropertyGroup. + * @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed */ - void CWriter::SetContentEncryptionCallback(const ContentEncryptionCallback pTheCallback, const Lib3MF_pvoid pUserData) + void CMultiPropertyGroup::RemoveLayer(const Lib3MF_uint32 nLayerIndex) { - CheckError(lib3mf_writer_setcontentencryptioncallback(m_pHandle, pTheCallback, pUserData)); + CheckError(lib3mf_multipropertygroup_removelayer(m_pHandle, nLayerIndex)); } /** - * Method definitions for class CReader + * Method definitions for class CImage3D */ /** - * CReader::ReadFromFile - Reads a model from a file. The file type is specified by the Model Reader class - * @param[in] sFilename - Filename to read from + * CImage3D::GetName - returns the name of this Image3D + * @return the name of this Image3D */ - void CReader::ReadFromFile(const std::string & sFilename) + std::string CImage3D::GetName() { - CheckError(lib3mf_reader_readfromfile(m_pHandle, sFilename.c_str())); + Lib3MF_uint32 bytesNeededName = 0; + Lib3MF_uint32 bytesWrittenName = 0; + CheckError(lib3mf_image3d_getname(m_pHandle, 0, &bytesNeededName, nullptr)); + std::vector bufferName(bytesNeededName); + CheckError(lib3mf_image3d_getname(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); + + return std::string(&bufferName[0]); } /** - * CReader::ReadFromBuffer - Reads a model from a memory buffer. - * @param[in] BufferBuffer - Buffer to read from + * CImage3D::SetName - sets a new name of this Image3D + * @param[in] sName - the new name of this Image3D */ - void CReader::ReadFromBuffer(const CInputVector & BufferBuffer) + void CImage3D::SetName(const std::string & sName) { - CheckError(lib3mf_reader_readfrombuffer(m_pHandle, (Lib3MF_uint64)BufferBuffer.size(), BufferBuffer.data())); + CheckError(lib3mf_image3d_setname(m_pHandle, sName.c_str())); } /** - * CReader::ReadFromCallback - Reads a model and from the data provided by a callback function - * @param[in] pTheReadCallback - Callback to call for reading a data chunk - * @param[in] nStreamSize - number of bytes the callback returns - * @param[in] pTheSeekCallback - Callback to call for seeking in the stream. - * @param[in] pUserData - Userdata that is passed to the callback function + * CImage3D::IsImageStack - Retrieves, if this Image3D is a ImageStack + * @return returns, whether the Image3D is an ImageStack */ - void CReader::ReadFromCallback(const ReadCallback pTheReadCallback, const Lib3MF_uint64 nStreamSize, const SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) + bool CImage3D::IsImageStack() { - CheckError(lib3mf_reader_readfromcallback(m_pHandle, pTheReadCallback, nStreamSize, pTheSeekCallback, pUserData)); + bool resultIsImageStack = 0; + CheckError(lib3mf_image3d_isimagestack(m_pHandle, &resultIsImageStack)); + + return resultIsImageStack; } /** - * CReader::SetProgressCallback - Set the progress callback for calls to this writer - * @param[in] pProgressCallback - pointer to the callback function. - * @param[in] pUserData - pointer to arbitrary user data that is passed without modification to the callback. - */ - void CReader::SetProgressCallback(const ProgressCallback pProgressCallback, const Lib3MF_pvoid pUserData) - { - CheckError(lib3mf_reader_setprogresscallback(m_pHandle, pProgressCallback, pUserData)); - } + * Method definitions for class CImageStack + */ /** - * CReader::AddRelationToRead - Adds a relationship type which shall be read as attachment in memory while loading - * @param[in] sRelationShipType - String of the relationship type + * CImageStack::GetRowCount - Retrieves the number of rows in each image of this image3d + * @return number of rows */ - void CReader::AddRelationToRead(const std::string & sRelationShipType) + Lib3MF_uint32 CImageStack::GetRowCount() { - CheckError(lib3mf_reader_addrelationtoread(m_pHandle, sRelationShipType.c_str())); + Lib3MF_uint32 resultRowCount = 0; + CheckError(lib3mf_imagestack_getrowcount(m_pHandle, &resultRowCount)); + + return resultRowCount; } /** - * CReader::RemoveRelationToRead - Removes a relationship type which shall be read as attachment in memory while loading - * @param[in] sRelationShipType - String of the relationship type + * CImageStack::SetRowCount - Sets the number of rows in each image of this image3d + * @param[in] nRowCount - number of rows */ - void CReader::RemoveRelationToRead(const std::string & sRelationShipType) + void CImageStack::SetRowCount(const Lib3MF_uint32 nRowCount) { - CheckError(lib3mf_reader_removerelationtoread(m_pHandle, sRelationShipType.c_str())); + CheckError(lib3mf_imagestack_setrowcount(m_pHandle, nRowCount)); } /** - * CReader::SetStrictModeActive - Activates (deactivates) the strict mode of the reader. - * @param[in] bStrictModeActive - flag whether strict mode is active or not. + * CImageStack::GetColumnCount - Retrieves the number of columns in each image of this image3d + * @return number of columns */ - void CReader::SetStrictModeActive(const bool bStrictModeActive) + Lib3MF_uint32 CImageStack::GetColumnCount() { - CheckError(lib3mf_reader_setstrictmodeactive(m_pHandle, bStrictModeActive)); + Lib3MF_uint32 resultColumnCount = 0; + CheckError(lib3mf_imagestack_getcolumncount(m_pHandle, &resultColumnCount)); + + return resultColumnCount; } /** - * CReader::GetStrictModeActive - Queries whether the strict mode of the reader is active or not - * @return returns flag whether strict mode is active or not. + * CImageStack::SetColumnCount - Sets the number of columns in each image of this image3d + * @param[in] nColumnCount - number of columns */ - bool CReader::GetStrictModeActive() + void CImageStack::SetColumnCount(const Lib3MF_uint32 nColumnCount) { - bool resultStrictModeActive = 0; - CheckError(lib3mf_reader_getstrictmodeactive(m_pHandle, &resultStrictModeActive)); - - return resultStrictModeActive; + CheckError(lib3mf_imagestack_setcolumncount(m_pHandle, nColumnCount)); } /** - * CReader::GetWarning - Returns Warning and Error Information of the read process - * @param[in] nIndex - Index of the Warning. Valid values are 0 to WarningCount - 1 - * @param[out] nErrorCode - filled with the error code of the warning - * @return the message of the warning + * CImageStack::GetSheetCount - Retrieves the number of images in the stack. + * @return number of images */ - std::string CReader::GetWarning(const Lib3MF_uint32 nIndex, Lib3MF_uint32 & nErrorCode) + Lib3MF_uint32 CImageStack::GetSheetCount() { - Lib3MF_uint32 bytesNeededWarning = 0; - Lib3MF_uint32 bytesWrittenWarning = 0; - CheckError(lib3mf_reader_getwarning(m_pHandle, nIndex, &nErrorCode, 0, &bytesNeededWarning, nullptr)); - std::vector bufferWarning(bytesNeededWarning); - CheckError(lib3mf_reader_getwarning(m_pHandle, nIndex, &nErrorCode, bytesNeededWarning, &bytesWrittenWarning, &bufferWarning[0])); + Lib3MF_uint32 resultSheetCount = 0; + CheckError(lib3mf_imagestack_getsheetcount(m_pHandle, &resultSheetCount)); - return std::string(&bufferWarning[0]); + return resultSheetCount; } /** - * CReader::GetWarningCount - Returns Warning and Error Count of the read process - * @return filled with the count of the occurred warnings. + * CImageStack::GetSheet - Retrieves a sheet of the stack. Raises an error if sheet is not set. + * @param[in] nIndex - index of the image (0-based) + * @return attachment containing the image */ - Lib3MF_uint32 CReader::GetWarningCount() + PAttachment CImageStack::GetSheet(const Lib3MF_uint32 nIndex) { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_reader_getwarningcount(m_pHandle, &resultCount)); + Lib3MFHandle hSheet = nullptr; + CheckError(lib3mf_imagestack_getsheet(m_pHandle, nIndex, &hSheet)); - return resultCount; + if (!hSheet) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSheet))); } /** - * CReader::AddKeyWrappingCallback - Registers a callback to deal with key wrapping mechanism from keystore - * @param[in] sConsumerID - The ConsumerID to register for - * @param[in] pTheCallback - The callback used to decrypt data key - * @param[in] pUserData - Userdata that is passed to the callback function + * CImageStack::SetSheet - Sets a sheet to an existing attachment. + * @param[in] nIndex - index of the image (0-based) + * @param[in] pSheet - attachment containing the image */ - void CReader::AddKeyWrappingCallback(const std::string & sConsumerID, const KeyWrappingCallback pTheCallback, const Lib3MF_pvoid pUserData) + void CImageStack::SetSheet(const Lib3MF_uint32 nIndex, classParam pSheet) { - CheckError(lib3mf_reader_addkeywrappingcallback(m_pHandle, sConsumerID.c_str(), pTheCallback, pUserData)); + Lib3MFHandle hSheet = pSheet.GetHandle(); + CheckError(lib3mf_imagestack_setsheet(m_pHandle, nIndex, hSheet)); } /** - * CReader::SetContentEncryptionCallback - Registers a callback to deal with encryption of content - * @param[in] pTheCallback - The callback used to encrypt content - * @param[in] pUserData - Userdata that is passed to the callback function + * CImageStack::CreateEmptySheet - Creates a new sheet attachment with empty data. + * @param[in] nIndex - index of the image (0-based) + * @param[in] sPath - path of part in the package + * @return attachment containing the image */ - void CReader::SetContentEncryptionCallback(const ContentEncryptionCallback pTheCallback, const Lib3MF_pvoid pUserData) + PAttachment CImageStack::CreateEmptySheet(const Lib3MF_uint32 nIndex, const std::string & sPath) { - CheckError(lib3mf_reader_setcontentencryptioncallback(m_pHandle, pTheCallback, pUserData)); + Lib3MFHandle hSheet = nullptr; + CheckError(lib3mf_imagestack_createemptysheet(m_pHandle, nIndex, sPath.c_str(), &hSheet)); + + if (!hSheet) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSheet))); } /** - * Method definitions for class CPackagePart - */ - - /** - * CPackagePart::GetPath - Returns the absolute path of this PackagePart. - * @return Returns the absolute path of this PackagePart + * CImageStack::CreateSheetFromBuffer - Creates a new sheet attachment from a memory buffer. + * @param[in] nIndex - index of the image (0-based) + * @param[in] sPath - path of part in the package + * @param[in] DataBuffer - binary image data + * @return attachment containing the image */ - std::string CPackagePart::GetPath() + PAttachment CImageStack::CreateSheetFromBuffer(const Lib3MF_uint32 nIndex, const std::string & sPath, const CInputVector & DataBuffer) { - Lib3MF_uint32 bytesNeededPath = 0; - Lib3MF_uint32 bytesWrittenPath = 0; - CheckError(lib3mf_packagepart_getpath(m_pHandle, 0, &bytesNeededPath, nullptr)); - std::vector bufferPath(bytesNeededPath); - CheckError(lib3mf_packagepart_getpath(m_pHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0])); + Lib3MFHandle hSheet = nullptr; + CheckError(lib3mf_imagestack_createsheetfrombuffer(m_pHandle, nIndex, sPath.c_str(), (Lib3MF_uint64)DataBuffer.size(), DataBuffer.data(), &hSheet)); - return std::string(&bufferPath[0]); + if (!hSheet) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSheet))); } /** - * CPackagePart::SetPath - Sets the absolute path of this PackagePart. - * @param[in] sPath - Sets the absolute path of this PackagePart. + * CImageStack::CreateSheetFromFile - Creates a new sheet attachment from a file on disk. + * @param[in] nIndex - index of the image (0-based) + * @param[in] sPath - path of part in the package + * @param[in] sFileName - file name to read from + * @return attachment containing the image */ - void CPackagePart::SetPath(const std::string & sPath) + PAttachment CImageStack::CreateSheetFromFile(const Lib3MF_uint32 nIndex, const std::string & sPath, const std::string & sFileName) { - CheckError(lib3mf_packagepart_setpath(m_pHandle, sPath.c_str())); + Lib3MFHandle hSheet = nullptr; + CheckError(lib3mf_imagestack_createsheetfromfile(m_pHandle, nIndex, sPath.c_str(), sFileName.c_str(), &hSheet)); + + if (!hSheet) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSheet))); } /** - * Method definitions for class CResource + * Method definitions for class CAttachment */ /** - * CResource::GetResourceID - Retrieves the unique id of this resource within a package. This function will be removed in a later release in favor of GetUniqueResourceID - * @return Retrieves the unique id of this resource within a package. + * CAttachment::GetPath - Retrieves an attachment's package path. This function will be removed in a later release. + * @return returns the attachment's package path string */ - Lib3MF_uint32 CResource::GetResourceID() + std::string CAttachment::GetPath() { - Lib3MF_uint32 resultUniqueResourceID = 0; - CheckError(lib3mf_resource_getresourceid(m_pHandle, &resultUniqueResourceID)); + Lib3MF_uint32 bytesNeededPath = 0; + Lib3MF_uint32 bytesWrittenPath = 0; + CheckError(lib3mf_attachment_getpath(m_pHandle, 0, &bytesNeededPath, nullptr)); + std::vector bufferPath(bytesNeededPath); + CheckError(lib3mf_attachment_getpath(m_pHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0])); - return resultUniqueResourceID; + return std::string(&bufferPath[0]); } /** - * CResource::GetUniqueResourceID - Retrieves the unique id of this resource within a package. - * @return Retrieves the unique id of this resource within a package. + * CAttachment::SetPath - Sets an attachment's package path. This function will be removed in a later release. + * @param[in] sPath - new path of the attachment. */ - Lib3MF_uint32 CResource::GetUniqueResourceID() + void CAttachment::SetPath(const std::string & sPath) { - Lib3MF_uint32 resultUniqueResourceID = 0; - CheckError(lib3mf_resource_getuniqueresourceid(m_pHandle, &resultUniqueResourceID)); - - return resultUniqueResourceID; + CheckError(lib3mf_attachment_setpath(m_pHandle, sPath.c_str())); } /** - * CResource::PackagePart - Returns the PackagePart within which this resource resides - * @return the PackagePart within which this resource resides. + * CAttachment::PackagePart - Returns the PackagePart that is this attachment. + * @return The PackagePart of this attachment. */ - PPackagePart CResource::PackagePart() + PPackagePart CAttachment::PackagePart() { Lib3MFHandle hPackagePart = nullptr; - CheckError(lib3mf_resource_packagepart(m_pHandle, &hPackagePart)); + CheckError(lib3mf_attachment_packagepart(m_pHandle, &hPackagePart)); if (!hPackagePart) { CheckError(LIB3MF_ERROR_INVALIDPARAM); @@ -2330,2215 +7066,2949 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) } /** - * CResource::SetPackagePart - Sets the new PackagePart within which this resource resides - * @param[in] pPackagePart - the new PackagePart within which this resource resides. + * CAttachment::GetRelationShipType - Retrieves an attachment's relationship type + * @return returns the attachment's package relationship type string */ - void CResource::SetPackagePart(classParam pPackagePart) + std::string CAttachment::GetRelationShipType() { - Lib3MFHandle hPackagePart = pPackagePart.GetHandle(); - CheckError(lib3mf_resource_setpackagepart(m_pHandle, hPackagePart)); + Lib3MF_uint32 bytesNeededPath = 0; + Lib3MF_uint32 bytesWrittenPath = 0; + CheckError(lib3mf_attachment_getrelationshiptype(m_pHandle, 0, &bytesNeededPath, nullptr)); + std::vector bufferPath(bytesNeededPath); + CheckError(lib3mf_attachment_getrelationshiptype(m_pHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0])); + + return std::string(&bufferPath[0]); } /** - * CResource::GetModelResourceID - Retrieves the id of this resource within a model. - * @return Retrieves the id of this resource within a model. + * CAttachment::SetRelationShipType - Sets an attachment's relationship type. + * @param[in] sPath - new relationship type string. */ - Lib3MF_uint32 CResource::GetModelResourceID() + void CAttachment::SetRelationShipType(const std::string & sPath) { - Lib3MF_uint32 resultModelResourceId = 0; - CheckError(lib3mf_resource_getmodelresourceid(m_pHandle, &resultModelResourceId)); - - return resultModelResourceId; + CheckError(lib3mf_attachment_setrelationshiptype(m_pHandle, sPath.c_str())); } /** - * Method definitions for class CResourceIterator - */ + * CAttachment::WriteToFile - Writes out the attachment as file. + * @param[in] sFileName - file to write into. + */ + void CAttachment::WriteToFile(const std::string & sFileName) + { + CheckError(lib3mf_attachment_writetofile(m_pHandle, sFileName.c_str())); + } /** - * CResourceIterator::MoveNext - Iterates to the next resource in the list. - * @return Iterates to the next resource in the list. + * CAttachment::ReadFromFile - Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. + * @param[in] sFileName - file to read from. */ - bool CResourceIterator::MoveNext() + void CAttachment::ReadFromFile(const std::string & sFileName) { - bool resultHasNext = 0; - CheckError(lib3mf_resourceiterator_movenext(m_pHandle, &resultHasNext)); - - return resultHasNext; + CheckError(lib3mf_attachment_readfromfile(m_pHandle, sFileName.c_str())); } /** - * CResourceIterator::MovePrevious - Iterates to the previous resource in the list. - * @return Iterates to the previous resource in the list. + * CAttachment::ReadFromCallback - Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. + * @param[in] pTheReadCallback - Callback to call for reading a data chunk + * @param[in] nStreamSize - number of bytes the callback returns + * @param[in] pTheSeekCallback - Callback to call for seeking in the stream. + * @param[in] pUserData - Userdata that is passed to the callback function */ - bool CResourceIterator::MovePrevious() + void CAttachment::ReadFromCallback(const ReadCallback pTheReadCallback, const Lib3MF_uint64 nStreamSize, const SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) { - bool resultHasPrevious = 0; - CheckError(lib3mf_resourceiterator_moveprevious(m_pHandle, &resultHasPrevious)); - - return resultHasPrevious; + CheckError(lib3mf_attachment_readfromcallback(m_pHandle, pTheReadCallback, nStreamSize, pTheSeekCallback, pUserData)); } /** - * CResourceIterator::GetCurrent - Returns the resource the iterator points at. - * @return returns the resource instance. + * CAttachment::GetStreamSize - Retrieves the size of the attachment stream + * @return the stream size */ - PResource CResourceIterator::GetCurrent() + Lib3MF_uint64 CAttachment::GetStreamSize() { - Lib3MFHandle hResource = nullptr; - CheckError(lib3mf_resourceiterator_getcurrent(m_pHandle, &hResource)); + Lib3MF_uint64 resultStreamSize = 0; + CheckError(lib3mf_attachment_getstreamsize(m_pHandle, &resultStreamSize)); - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return resultStreamSize; } /** - * CResourceIterator::Clone - Creates a new resource iterator with the same resource list. - * @return returns the cloned Iterator instance + * CAttachment::WriteToBuffer - Writes out the attachment into a buffer + * @param[out] BufferBuffer - Buffer to write into */ - PResourceIterator CResourceIterator::Clone() + void CAttachment::WriteToBuffer(std::vector & BufferBuffer) { - Lib3MFHandle hOutResourceIterator = nullptr; - CheckError(lib3mf_resourceiterator_clone(m_pHandle, &hOutResourceIterator)); - - if (!hOutResourceIterator) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hOutResourceIterator))); + Lib3MF_uint64 elementsNeededBuffer = 0; + Lib3MF_uint64 elementsWrittenBuffer = 0; + CheckError(lib3mf_attachment_writetobuffer(m_pHandle, 0, &elementsNeededBuffer, nullptr)); + BufferBuffer.resize((size_t) elementsNeededBuffer); + CheckError(lib3mf_attachment_writetobuffer(m_pHandle, elementsNeededBuffer, &elementsWrittenBuffer, BufferBuffer.data())); } /** - * CResourceIterator::Count - Returns the number of resoucres the iterator captures. - * @return returns the number of resoucres the iterator captures. + * CAttachment::ReadFromBuffer - Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). + * @param[in] BufferBuffer - Buffer to read from */ - Lib3MF_uint64 CResourceIterator::Count() + void CAttachment::ReadFromBuffer(const CInputVector & BufferBuffer) { - Lib3MF_uint64 resultCount = 0; - CheckError(lib3mf_resourceiterator_count(m_pHandle, &resultCount)); - - return resultCount; + CheckError(lib3mf_attachment_readfrombuffer(m_pHandle, (Lib3MF_uint64)BufferBuffer.size(), BufferBuffer.data())); } /** - * Method definitions for class CSliceStackIterator + * Method definitions for class CTexture2D */ /** - * CSliceStackIterator::GetCurrentSliceStack - Returns the SliceStack the iterator points at. - * @return returns the SliceStack instance. + * CTexture2D::GetAttachment - Retrieves the attachment located at the path of the texture. + * @return attachment that holds the texture's image information. */ - PSliceStack CSliceStackIterator::GetCurrentSliceStack() + PAttachment CTexture2D::GetAttachment() { - Lib3MFHandle hResource = nullptr; - CheckError(lib3mf_slicestackiterator_getcurrentslicestack(m_pHandle, &hResource)); + Lib3MFHandle hAttachment = nullptr; + CheckError(lib3mf_texture2d_getattachment(m_pHandle, &hAttachment)); - if (!hResource) { + if (!hAttachment) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hAttachment))); } /** - * Method definitions for class CObjectIterator - */ + * CTexture2D::SetAttachment - Sets the texture's package path to the path of the attachment. + * @param[in] pAttachment - attachment that holds the texture's image information. + */ + void CTexture2D::SetAttachment(classParam pAttachment) + { + Lib3MFHandle hAttachment = pAttachment.GetHandle(); + CheckError(lib3mf_texture2d_setattachment(m_pHandle, hAttachment)); + } /** - * CObjectIterator::GetCurrentObject - Returns the Object the iterator points at. - * @return returns the Object instance. + * CTexture2D::GetContentType - Retrieves a texture's content type. + * @return returns content type enum. */ - PObject CObjectIterator::GetCurrentObject() + eTextureType CTexture2D::GetContentType() { - Lib3MFHandle hResource = nullptr; - CheckError(lib3mf_objectiterator_getcurrentobject(m_pHandle, &hResource)); + eTextureType resultContentType = (eTextureType) 0; + CheckError(lib3mf_texture2d_getcontenttype(m_pHandle, &resultContentType)); - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return resultContentType; } /** - * Method definitions for class CMeshObjectIterator - */ + * CTexture2D::SetContentType - Retrieves a texture's content type. + * @param[in] eContentType - new Content Type + */ + void CTexture2D::SetContentType(const eTextureType eContentType) + { + CheckError(lib3mf_texture2d_setcontenttype(m_pHandle, eContentType)); + } /** - * CMeshObjectIterator::GetCurrentMeshObject - Returns the MeshObject the iterator points at. - * @return returns the MeshObject instance. + * CTexture2D::GetTileStyleUV - Retrieves a texture's tilestyle type. + * @param[out] eTileStyleU - returns tilestyle type enum. + * @param[out] eTileStyleV - returns tilestyle type enum. */ - PMeshObject CMeshObjectIterator::GetCurrentMeshObject() + void CTexture2D::GetTileStyleUV(eTextureTileStyle & eTileStyleU, eTextureTileStyle & eTileStyleV) { - Lib3MFHandle hResource = nullptr; - CheckError(lib3mf_meshobjectiterator_getcurrentmeshobject(m_pHandle, &hResource)); - - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + CheckError(lib3mf_texture2d_gettilestyleuv(m_pHandle, &eTileStyleU, &eTileStyleV)); } /** - * Method definitions for class CComponentsObjectIterator - */ + * CTexture2D::SetTileStyleUV - Sets a texture's tilestyle type. + * @param[in] eTileStyleU - new tilestyle type enum. + * @param[in] eTileStyleV - new tilestyle type enum. + */ + void CTexture2D::SetTileStyleUV(const eTextureTileStyle eTileStyleU, const eTextureTileStyle eTileStyleV) + { + CheckError(lib3mf_texture2d_settilestyleuv(m_pHandle, eTileStyleU, eTileStyleV)); + } /** - * CComponentsObjectIterator::GetCurrentComponentsObject - Returns the ComponentsObject the iterator points at. - * @return returns the ComponentsObject instance. + * CTexture2D::GetFilter - Retrieves a texture's filter type. + * @return returns filter type enum. */ - PComponentsObject CComponentsObjectIterator::GetCurrentComponentsObject() + eTextureFilter CTexture2D::GetFilter() { - Lib3MFHandle hResource = nullptr; - CheckError(lib3mf_componentsobjectiterator_getcurrentcomponentsobject(m_pHandle, &hResource)); + eTextureFilter resultFilter = (eTextureFilter) 0; + CheckError(lib3mf_texture2d_getfilter(m_pHandle, &resultFilter)); - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return resultFilter; } /** - * Method definitions for class CTexture2DIterator - */ - - /** - * CTexture2DIterator::GetCurrentTexture2D - Returns the Texture2D the iterator points at. - * @return returns the Texture2D instance. + * CTexture2D::SetFilter - Sets a texture's filter type. + * @param[in] eFilter - sets new filter type enum. */ - PTexture2D CTexture2DIterator::GetCurrentTexture2D() + void CTexture2D::SetFilter(const eTextureFilter eFilter) { - Lib3MFHandle hResource = nullptr; - CheckError(lib3mf_texture2diterator_getcurrenttexture2d(m_pHandle, &hResource)); - - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + CheckError(lib3mf_texture2d_setfilter(m_pHandle, eFilter)); } /** - * Method definitions for class CBaseMaterialGroupIterator + * Method definitions for class CImplicitPort */ /** - * CBaseMaterialGroupIterator::GetCurrentBaseMaterialGroup - Returns the MaterialGroup the iterator points at. - * @return returns the BaseMaterialGroup instance. + * CImplicitPort::GetIdentifier - Retrieves the identifier of the port + * @return the identifier */ - PBaseMaterialGroup CBaseMaterialGroupIterator::GetCurrentBaseMaterialGroup() + std::string CImplicitPort::GetIdentifier() { - Lib3MFHandle hResource = nullptr; - CheckError(lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup(m_pHandle, &hResource)); + Lib3MF_uint32 bytesNeededIdentifier = 0; + Lib3MF_uint32 bytesWrittenIdentifier = 0; + CheckError(lib3mf_implicitport_getidentifier(m_pHandle, 0, &bytesNeededIdentifier, nullptr)); + std::vector bufferIdentifier(bytesNeededIdentifier); + CheckError(lib3mf_implicitport_getidentifier(m_pHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0])); - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return std::string(&bufferIdentifier[0]); } /** - * Method definitions for class CColorGroupIterator - */ + * CImplicitPort::SetIdentifier - Sets the identifier of the port + * @param[in] sIdentifier - the identifier + */ + void CImplicitPort::SetIdentifier(const std::string & sIdentifier) + { + CheckError(lib3mf_implicitport_setidentifier(m_pHandle, sIdentifier.c_str())); + } /** - * CColorGroupIterator::GetCurrentColorGroup - Returns the ColorGroup the iterator points at. - * @return returns the ColorGroup instance. + * CImplicitPort::GetDisplayName - Retrieves the display name of the port + * @return the display name */ - PColorGroup CColorGroupIterator::GetCurrentColorGroup() + std::string CImplicitPort::GetDisplayName() { - Lib3MFHandle hResource = nullptr; - CheckError(lib3mf_colorgroupiterator_getcurrentcolorgroup(m_pHandle, &hResource)); + Lib3MF_uint32 bytesNeededDisplayName = 0; + Lib3MF_uint32 bytesWrittenDisplayName = 0; + CheckError(lib3mf_implicitport_getdisplayname(m_pHandle, 0, &bytesNeededDisplayName, nullptr)); + std::vector bufferDisplayName(bytesNeededDisplayName); + CheckError(lib3mf_implicitport_getdisplayname(m_pHandle, bytesNeededDisplayName, &bytesWrittenDisplayName, &bufferDisplayName[0])); - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return std::string(&bufferDisplayName[0]); } /** - * Method definitions for class CTexture2DGroupIterator - */ - - /** - * CTexture2DGroupIterator::GetCurrentTexture2DGroup - Returns the Texture2DGroup the iterator points at. - * @return returns the Texture2DGroup instance. + * CImplicitPort::SetDisplayName - Sets the display name of the port + * @param[in] sDisplayName - the display name */ - PTexture2DGroup CTexture2DGroupIterator::GetCurrentTexture2DGroup() + void CImplicitPort::SetDisplayName(const std::string & sDisplayName) { - Lib3MFHandle hResource = nullptr; - CheckError(lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup(m_pHandle, &hResource)); - - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + CheckError(lib3mf_implicitport_setdisplayname(m_pHandle, sDisplayName.c_str())); } /** - * Method definitions for class CCompositeMaterialsIterator - */ + * CImplicitPort::SetType - Sets the type of the port + * @param[in] eImplicitPortType - the type + */ + void CImplicitPort::SetType(const eImplicitPortType eImplicitPortType) + { + CheckError(lib3mf_implicitport_settype(m_pHandle, eImplicitPortType)); + } /** - * CCompositeMaterialsIterator::GetCurrentCompositeMaterials - Returns the CompositeMaterials the iterator points at. - * @return returns the CompositeMaterials instance. + * CImplicitPort::GetType - Retrieves the type of the port + * @return the type */ - PCompositeMaterials CCompositeMaterialsIterator::GetCurrentCompositeMaterials() + eImplicitPortType CImplicitPort::GetType() { - Lib3MFHandle hResource = nullptr; - CheckError(lib3mf_compositematerialsiterator_getcurrentcompositematerials(m_pHandle, &hResource)); + eImplicitPortType resultImplicitPortType = (eImplicitPortType) 0; + CheckError(lib3mf_implicitport_gettype(m_pHandle, &resultImplicitPortType)); - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return resultImplicitPortType; } /** - * Method definitions for class CMultiPropertyGroupIterator - */ + * CImplicitPort::GetReference - Retrieves the reference of the port, only used for input ports + * @return the reference + */ + std::string CImplicitPort::GetReference() + { + Lib3MF_uint32 bytesNeededReference = 0; + Lib3MF_uint32 bytesWrittenReference = 0; + CheckError(lib3mf_implicitport_getreference(m_pHandle, 0, &bytesNeededReference, nullptr)); + std::vector bufferReference(bytesNeededReference); + CheckError(lib3mf_implicitport_getreference(m_pHandle, bytesNeededReference, &bytesWrittenReference, &bufferReference[0])); + + return std::string(&bufferReference[0]); + } /** - * CMultiPropertyGroupIterator::GetCurrentMultiPropertyGroup - Returns the MultiPropertyGroup the iterator points at. - * @return returns the MultiPropertyGroup instance. + * CImplicitPort::SetReference - Sets the reference of the port, only used for input ports + * @param[in] sReference - the reference */ - PMultiPropertyGroup CMultiPropertyGroupIterator::GetCurrentMultiPropertyGroup() + void CImplicitPort::SetReference(const std::string & sReference) { - Lib3MFHandle hResource = nullptr; - CheckError(lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup(m_pHandle, &hResource)); - - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + CheckError(lib3mf_implicitport_setreference(m_pHandle, sReference.c_str())); } /** - * Method definitions for class CMetaData + * Method definitions for class CIterator */ /** - * CMetaData::GetNameSpace - returns the namespace URL of the metadata - * @return the namespace URL of the metadata + * CIterator::MoveNext - Iterates to the next item in the list. + * @return Iterates to the next item in the list. */ - std::string CMetaData::GetNameSpace() + bool CIterator::MoveNext() { - Lib3MF_uint32 bytesNeededNameSpace = 0; - Lib3MF_uint32 bytesWrittenNameSpace = 0; - CheckError(lib3mf_metadata_getnamespace(m_pHandle, 0, &bytesNeededNameSpace, nullptr)); - std::vector bufferNameSpace(bytesNeededNameSpace); - CheckError(lib3mf_metadata_getnamespace(m_pHandle, bytesNeededNameSpace, &bytesWrittenNameSpace, &bufferNameSpace[0])); + bool resultHasNext = 0; + CheckError(lib3mf_iterator_movenext(m_pHandle, &resultHasNext)); - return std::string(&bufferNameSpace[0]); + return resultHasNext; } /** - * CMetaData::SetNameSpace - sets a new namespace URL of the metadata - * @param[in] sNameSpace - the new namespace URL of the metadata + * CIterator::MovePrevious - Iterates to the previous item in the list. + * @return Iterates to the previous item in the list. */ - void CMetaData::SetNameSpace(const std::string & sNameSpace) + bool CIterator::MovePrevious() { - CheckError(lib3mf_metadata_setnamespace(m_pHandle, sNameSpace.c_str())); + bool resultHasPrevious = 0; + CheckError(lib3mf_iterator_moveprevious(m_pHandle, &resultHasPrevious)); + + return resultHasPrevious; } /** - * CMetaData::GetName - returns the name of a metadata - * @return the name of the metadata + * CIterator::Count - Returns the number of items the iterator captures. + * @return returns the number of items the iterator captures. */ - std::string CMetaData::GetName() + Lib3MF_uint64 CIterator::Count() { - Lib3MF_uint32 bytesNeededName = 0; - Lib3MF_uint32 bytesWrittenName = 0; - CheckError(lib3mf_metadata_getname(m_pHandle, 0, &bytesNeededName, nullptr)); - std::vector bufferName(bytesNeededName); - CheckError(lib3mf_metadata_getname(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); + Lib3MF_uint64 resultCount = 0; + CheckError(lib3mf_iterator_count(m_pHandle, &resultCount)); - return std::string(&bufferName[0]); + return resultCount; } /** - * CMetaData::SetName - sets a new name of a metadata - * @param[in] sName - the new name of the metadata - */ - void CMetaData::SetName(const std::string & sName) - { - CheckError(lib3mf_metadata_setname(m_pHandle, sName.c_str())); - } + * Method definitions for class CImplicitPortIterator + */ /** - * CMetaData::GetKey - returns the (namespace+name) of a metadata - * @return the key (namespace+name) of the metadata + * CImplicitPortIterator::GetCurrent - Returns the current element + * @return The current element */ - std::string CMetaData::GetKey() + PImplicitPort CImplicitPortIterator::GetCurrent() { - Lib3MF_uint32 bytesNeededKey = 0; - Lib3MF_uint32 bytesWrittenKey = 0; - CheckError(lib3mf_metadata_getkey(m_pHandle, 0, &bytesNeededKey, nullptr)); - std::vector bufferKey(bytesNeededKey); - CheckError(lib3mf_metadata_getkey(m_pHandle, bytesNeededKey, &bytesWrittenKey, &bufferKey[0])); + Lib3MFHandle hPort = nullptr; + CheckError(lib3mf_implicitportiterator_getcurrent(m_pHandle, &hPort)); - return std::string(&bufferKey[0]); + if (!hPort) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPort))); } /** - * CMetaData::GetMustPreserve - returns, whether a metadata must be preserved - * @return returns, whether a metadata must be preserved + * Method definitions for class CImplicitNode + */ + + /** + * CImplicitNode::GetIdentifier - Retrieves the identifier of the node + * @return the identifier */ - bool CMetaData::GetMustPreserve() + std::string CImplicitNode::GetIdentifier() { - bool resultMustPreserve = 0; - CheckError(lib3mf_metadata_getmustpreserve(m_pHandle, &resultMustPreserve)); + Lib3MF_uint32 bytesNeededIdentifier = 0; + Lib3MF_uint32 bytesWrittenIdentifier = 0; + CheckError(lib3mf_implicitnode_getidentifier(m_pHandle, 0, &bytesNeededIdentifier, nullptr)); + std::vector bufferIdentifier(bytesNeededIdentifier); + CheckError(lib3mf_implicitnode_getidentifier(m_pHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0])); - return resultMustPreserve; + return std::string(&bufferIdentifier[0]); } /** - * CMetaData::SetMustPreserve - sets whether a metadata must be preserved - * @param[in] bMustPreserve - a new value whether a metadata must be preserved + * CImplicitNode::SetIdentifier - Sets the identifier of the node + * @param[in] sIdentifier - the identifier */ - void CMetaData::SetMustPreserve(const bool bMustPreserve) + void CImplicitNode::SetIdentifier(const std::string & sIdentifier) { - CheckError(lib3mf_metadata_setmustpreserve(m_pHandle, bMustPreserve)); + CheckError(lib3mf_implicitnode_setidentifier(m_pHandle, sIdentifier.c_str())); } /** - * CMetaData::GetType - returns the type of a metadata - * @return the type of the metadata + * CImplicitNode::GetDisplayName - Retrieves the display name of the node + * @return the display name */ - std::string CMetaData::GetType() - { - Lib3MF_uint32 bytesNeededType = 0; - Lib3MF_uint32 bytesWrittenType = 0; - CheckError(lib3mf_metadata_gettype(m_pHandle, 0, &bytesNeededType, nullptr)); - std::vector bufferType(bytesNeededType); - CheckError(lib3mf_metadata_gettype(m_pHandle, bytesNeededType, &bytesWrittenType, &bufferType[0])); + std::string CImplicitNode::GetDisplayName() + { + Lib3MF_uint32 bytesNeededDisplayName = 0; + Lib3MF_uint32 bytesWrittenDisplayName = 0; + CheckError(lib3mf_implicitnode_getdisplayname(m_pHandle, 0, &bytesNeededDisplayName, nullptr)); + std::vector bufferDisplayName(bytesNeededDisplayName); + CheckError(lib3mf_implicitnode_getdisplayname(m_pHandle, bytesNeededDisplayName, &bytesWrittenDisplayName, &bufferDisplayName[0])); - return std::string(&bufferType[0]); + return std::string(&bufferDisplayName[0]); } /** - * CMetaData::SetType - sets a new type of a metadata. This must be a simple XML type - * @param[in] sType - a new type of the metadata + * CImplicitNode::SetDisplayName - Sets the display name of the node + * @param[in] sDisplayName - the display name */ - void CMetaData::SetType(const std::string & sType) + void CImplicitNode::SetDisplayName(const std::string & sDisplayName) { - CheckError(lib3mf_metadata_settype(m_pHandle, sType.c_str())); + CheckError(lib3mf_implicitnode_setdisplayname(m_pHandle, sDisplayName.c_str())); } /** - * CMetaData::GetValue - returns the value of the metadata - * @return the value of the metadata + * CImplicitNode::GetTag - Retrieves the tag of the node + * @return the tag */ - std::string CMetaData::GetValue() + std::string CImplicitNode::GetTag() { - Lib3MF_uint32 bytesNeededValue = 0; - Lib3MF_uint32 bytesWrittenValue = 0; - CheckError(lib3mf_metadata_getvalue(m_pHandle, 0, &bytesNeededValue, nullptr)); - std::vector bufferValue(bytesNeededValue); - CheckError(lib3mf_metadata_getvalue(m_pHandle, bytesNeededValue, &bytesWrittenValue, &bufferValue[0])); + Lib3MF_uint32 bytesNeededTag = 0; + Lib3MF_uint32 bytesWrittenTag = 0; + CheckError(lib3mf_implicitnode_gettag(m_pHandle, 0, &bytesNeededTag, nullptr)); + std::vector bufferTag(bytesNeededTag); + CheckError(lib3mf_implicitnode_gettag(m_pHandle, bytesNeededTag, &bytesWrittenTag, &bufferTag[0])); - return std::string(&bufferValue[0]); + return std::string(&bufferTag[0]); } /** - * CMetaData::SetValue - sets a new value of the metadata - * @param[in] sValue - a new value of the metadata + * CImplicitNode::SetTag - Sets the tag of the node + * @param[in] sTag - the tag */ - void CMetaData::SetValue(const std::string & sValue) + void CImplicitNode::SetTag(const std::string & sTag) { - CheckError(lib3mf_metadata_setvalue(m_pHandle, sValue.c_str())); + CheckError(lib3mf_implicitnode_settag(m_pHandle, sTag.c_str())); } /** - * Method definitions for class CMetaDataGroup - */ + * CImplicitNode::GetNodeType - Retrieves the type of the node + * @return the type of the node + */ + eImplicitNodeType CImplicitNode::GetNodeType() + { + eImplicitNodeType resultType = (eImplicitNodeType) 0; + CheckError(lib3mf_implicitnode_getnodetype(m_pHandle, &resultType)); + + return resultType; + } /** - * CMetaDataGroup::GetMetaDataCount - returns the number of metadata in this metadatagroup - * @return returns the number metadata + * CImplicitNode::AddInput - Add an input + * @param[in] sIdentifier - the identifier of the input + * @param[in] sDisplayName - the display name of the input + * @return */ - Lib3MF_uint32 CMetaDataGroup::GetMetaDataCount() + PImplicitPort CImplicitNode::AddInput(const std::string & sIdentifier, const std::string & sDisplayName) { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_metadatagroup_getmetadatacount(m_pHandle, &resultCount)); + Lib3MFHandle hPort = nullptr; + CheckError(lib3mf_implicitnode_addinput(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), &hPort)); - return resultCount; + if (!hPort) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPort))); } /** - * CMetaDataGroup::GetMetaData - returns a metadata value within this metadatagroup - * @param[in] nIndex - Index of the Metadata. - * @return an instance of the metadata + * CImplicitNode::GetInputs - Retrieves the inputs + * @return the iterator for the inputs */ - PMetaData CMetaDataGroup::GetMetaData(const Lib3MF_uint32 nIndex) + PImplicitPortIterator CImplicitNode::GetInputs() { - Lib3MFHandle hMetaData = nullptr; - CheckError(lib3mf_metadatagroup_getmetadata(m_pHandle, nIndex, &hMetaData)); + Lib3MFHandle hIterator = nullptr; + CheckError(lib3mf_implicitnode_getinputs(m_pHandle, &hIterator)); - if (!hMetaData) { + if (!hIterator) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaData))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hIterator))); } /** - * CMetaDataGroup::GetMetaDataByKey - returns a metadata value within this metadatagroup - * @param[in] sNameSpace - the namespace of the metadata - * @param[in] sName - the name of the Metadata - * @return an instance of the metadata + * CImplicitNode::AddOutput - Add an output + * @param[in] sIdentifier - the identifier of the output + * @param[in] sDisplayName - the display name of the output + * @return */ - PMetaData CMetaDataGroup::GetMetaDataByKey(const std::string & sNameSpace, const std::string & sName) + PImplicitPort CImplicitNode::AddOutput(const std::string & sIdentifier, const std::string & sDisplayName) { - Lib3MFHandle hMetaData = nullptr; - CheckError(lib3mf_metadatagroup_getmetadatabykey(m_pHandle, sNameSpace.c_str(), sName.c_str(), &hMetaData)); + Lib3MFHandle hPort = nullptr; + CheckError(lib3mf_implicitnode_addoutput(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), &hPort)); - if (!hMetaData) { + if (!hPort) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaData))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPort))); } /** - * CMetaDataGroup::RemoveMetaDataByIndex - removes metadata by index from the model. - * @param[in] nIndex - Index of the metadata to remove + * CImplicitNode::GetOutputs - Retrieves the outputs + * @return the iterator the outputs */ - void CMetaDataGroup::RemoveMetaDataByIndex(const Lib3MF_uint32 nIndex) + PImplicitPortIterator CImplicitNode::GetOutputs() { - CheckError(lib3mf_metadatagroup_removemetadatabyindex(m_pHandle, nIndex)); + Lib3MFHandle hIterator = nullptr; + CheckError(lib3mf_implicitnode_getoutputs(m_pHandle, &hIterator)); + + if (!hIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hIterator))); } /** - * CMetaDataGroup::RemoveMetaData - removes metadata from the model. - * @param[in] pTheMetaData - The metadata to remove + * CImplicitNode::FindInput - Retrieves an input + * @param[in] sIdentifier - the identifier of the input + * @return the input port */ - void CMetaDataGroup::RemoveMetaData(classParam pTheMetaData) + PImplicitPort CImplicitNode::FindInput(const std::string & sIdentifier) { - Lib3MFHandle hTheMetaData = pTheMetaData.GetHandle(); - CheckError(lib3mf_metadatagroup_removemetadata(m_pHandle, hTheMetaData)); + Lib3MFHandle hInput = nullptr; + CheckError(lib3mf_implicitnode_findinput(m_pHandle, sIdentifier.c_str(), &hInput)); + + if (hInput) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hInput))); + } else { + return nullptr; + } } /** - * CMetaDataGroup::AddMetaData - adds a new metadata to this metadatagroup - * @param[in] sNameSpace - the namespace of the metadata - * @param[in] sName - the name of the metadata - * @param[in] sValue - the value of the metadata - * @param[in] sType - the type of the metadata - * @param[in] bMustPreserve - shuold the metadata be preserved - * @return a new instance of the metadata + * CImplicitNode::FindOutput - Retrieves an output + * @param[in] sIdentifier - the identifier of the output + * @return the output port */ - PMetaData CMetaDataGroup::AddMetaData(const std::string & sNameSpace, const std::string & sName, const std::string & sValue, const std::string & sType, const bool bMustPreserve) + PImplicitPort CImplicitNode::FindOutput(const std::string & sIdentifier) { - Lib3MFHandle hMetaData = nullptr; - CheckError(lib3mf_metadatagroup_addmetadata(m_pHandle, sNameSpace.c_str(), sName.c_str(), sValue.c_str(), sType.c_str(), bMustPreserve, &hMetaData)); + Lib3MFHandle hOutput = nullptr; + CheckError(lib3mf_implicitnode_findoutput(m_pHandle, sIdentifier.c_str(), &hOutput)); - if (!hMetaData) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); + if (hOutput) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hOutput))); + } else { + return nullptr; } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaData))); } /** - * Method definitions for class CObject + * CImplicitNode::AreTypesValid - Checks if the types of the input and output ports are valid for the node type + * @return true, if the types are valid + */ + bool CImplicitNode::AreTypesValid() + { + bool resultValid = 0; + CheckError(lib3mf_implicitnode_aretypesvalid(m_pHandle, &resultValid)); + + return resultValid; + } + + /** + * Method definitions for class COneInputNode */ /** - * CObject::GetType - Retrieves an object's type - * @return returns object type enum. + * COneInputNode::GetInputA - Retrieves the input + * @return the input */ - eObjectType CObject::GetType() + PImplicitPort COneInputNode::GetInputA() { - eObjectType resultObjectType = (eObjectType) 0; - CheckError(lib3mf_object_gettype(m_pHandle, &resultObjectType)); + Lib3MFHandle hInput = nullptr; + CheckError(lib3mf_oneinputnode_getinputa(m_pHandle, &hInput)); - return resultObjectType; + if (!hInput) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hInput))); } /** - * CObject::SetType - Sets an object's type - * @param[in] eObjectType - object type enum. + * COneInputNode::GetOutputResult - Retrieves the output + * @return the output */ - void CObject::SetType(const eObjectType eObjectType) + PImplicitPort COneInputNode::GetOutputResult() { - CheckError(lib3mf_object_settype(m_pHandle, eObjectType)); + Lib3MFHandle hResult = nullptr; + CheckError(lib3mf_oneinputnode_getoutputresult(m_pHandle, &hResult)); + + if (!hResult) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResult))); } /** - * CObject::GetName - Retrieves an object's name - * @return returns object name. + * Method definitions for class CSinNode + */ + + /** + * Method definitions for class CCosNode + */ + + /** + * Method definitions for class CTanNode + */ + + /** + * Method definitions for class CArcSinNode + */ + + /** + * Method definitions for class CArcCosNode + */ + + /** + * Method definitions for class CArcTanNode + */ + + /** + * Method definitions for class CSinhNode + */ + + /** + * Method definitions for class CCoshNode + */ + + /** + * Method definitions for class CTanhNode + */ + + /** + * Method definitions for class CRoundNode + */ + + /** + * Method definitions for class CCeilNode + */ + + /** + * Method definitions for class CFloorNode + */ + + /** + * Method definitions for class CSignNode + */ + + /** + * Method definitions for class CFractNode + */ + + /** + * Method definitions for class CAbsNode + */ + + /** + * Method definitions for class CExpNode + */ + + /** + * Method definitions for class CLogNode + */ + + /** + * Method definitions for class CLog2Node + */ + + /** + * Method definitions for class CLog10Node + */ + + /** + * Method definitions for class CLengthNode + */ + + /** + * Method definitions for class CTransposeNode + */ + + /** + * Method definitions for class CInverseNode + */ + + /** + * Method definitions for class CSqrtNode + */ + + /** + * Method definitions for class CResourceIdNode + */ + + /** + * CResourceIdNode::SetResource - Sets the Resource that the resourceid attribute of the node will point to + * @param[in] pResource - the resource */ - std::string CObject::GetName() + void CResourceIdNode::SetResource(classParam pResource) { - Lib3MF_uint32 bytesNeededName = 0; - Lib3MF_uint32 bytesWrittenName = 0; - CheckError(lib3mf_object_getname(m_pHandle, 0, &bytesNeededName, nullptr)); - std::vector bufferName(bytesNeededName); - CheckError(lib3mf_object_getname(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); + Lib3MFHandle hResource = pResource.GetHandle(); + CheckError(lib3mf_resourceidnode_setresource(m_pHandle, hResource)); + } + + /** + * CResourceIdNode::GetResource - Retrieves the resource of the node + * @return the resource + */ + PResource CResourceIdNode::GetResource() + { + Lib3MFHandle hResource = nullptr; + CheckError(lib3mf_resourceidnode_getresource(m_pHandle, &hResource)); - return std::string(&bufferName[0]); + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); } /** - * CObject::SetName - Sets an object's name string - * @param[in] sName - new object name. + * CResourceIdNode::GetOutputValue - Retrieves the output + * @return the output */ - void CObject::SetName(const std::string & sName) + PImplicitPort CResourceIdNode::GetOutputValue() { - CheckError(lib3mf_object_setname(m_pHandle, sName.c_str())); + Lib3MFHandle hValue = nullptr; + CheckError(lib3mf_resourceidnode_getoutputvalue(m_pHandle, &hValue)); + + if (!hValue) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hValue))); } /** - * CObject::GetPartNumber - Retrieves an object's part number - * @return returns object part number. + * Method definitions for class CTwoInputNode + */ + + /** + * CTwoInputNode::GetInputB - Retrieves the second input + * @return the second input */ - std::string CObject::GetPartNumber() + PImplicitPort CTwoInputNode::GetInputB() { - Lib3MF_uint32 bytesNeededPartNumber = 0; - Lib3MF_uint32 bytesWrittenPartNumber = 0; - CheckError(lib3mf_object_getpartnumber(m_pHandle, 0, &bytesNeededPartNumber, nullptr)); - std::vector bufferPartNumber(bytesNeededPartNumber); - CheckError(lib3mf_object_getpartnumber(m_pHandle, bytesNeededPartNumber, &bytesWrittenPartNumber, &bufferPartNumber[0])); + Lib3MFHandle hB = nullptr; + CheckError(lib3mf_twoinputnode_getinputb(m_pHandle, &hB)); - return std::string(&bufferPartNumber[0]); + if (!hB) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hB))); } /** - * CObject::SetPartNumber - Sets an objects partnumber string - * @param[in] sPartNumber - new object part number. - */ - void CObject::SetPartNumber(const std::string & sPartNumber) - { - CheckError(lib3mf_object_setpartnumber(m_pHandle, sPartNumber.c_str())); - } + * Method definitions for class CAdditionNode + */ + + /** + * Method definitions for class CSubtractionNode + */ + + /** + * Method definitions for class CMultiplicationNode + */ + + /** + * Method definitions for class CDivisionNode + */ + + /** + * Method definitions for class CDotNode + */ + + /** + * Method definitions for class CCrossNode + */ + + /** + * Method definitions for class CArcTan2Node + */ + + /** + * Method definitions for class CMatVecMultiplicationNode + */ + + /** + * Method definitions for class CMinNode + */ + + /** + * Method definitions for class CMaxNode + */ + + /** + * Method definitions for class CFmodNode + */ + + /** + * Method definitions for class CModNode + */ + + /** + * Method definitions for class CPowNode + */ + + /** + * Method definitions for class CSelectNode + */ /** - * CObject::IsMeshObject - Retrieves, if an object is a mesh object - * @return returns, whether the object is a mesh object + * CSelectNode::GetInputB - Retrieves the second input + * @return the second input */ - bool CObject::IsMeshObject() + PImplicitPort CSelectNode::GetInputB() { - bool resultIsMeshObject = 0; - CheckError(lib3mf_object_ismeshobject(m_pHandle, &resultIsMeshObject)); + Lib3MFHandle hB = nullptr; + CheckError(lib3mf_selectnode_getinputb(m_pHandle, &hB)); - return resultIsMeshObject; + if (!hB) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hB))); } /** - * CObject::IsComponentsObject - Retrieves, if an object is a components object - * @return returns, whether the object is a components object + * CSelectNode::GetInputC - Retrieves the third input + * @return the third input */ - bool CObject::IsComponentsObject() + PImplicitPort CSelectNode::GetInputC() { - bool resultIsComponentsObject = 0; - CheckError(lib3mf_object_iscomponentsobject(m_pHandle, &resultIsComponentsObject)); + Lib3MFHandle hC = nullptr; + CheckError(lib3mf_selectnode_getinputc(m_pHandle, &hC)); - return resultIsComponentsObject; + if (!hC) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hC))); } /** - * CObject::IsValid - Retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. - * @return returns whether the object is a valid object description + * CSelectNode::GetInputD - Retrieves the fourth input + * @return the fourth input */ - bool CObject::IsValid() + PImplicitPort CSelectNode::GetInputD() { - bool resultIsValid = 0; - CheckError(lib3mf_object_isvalid(m_pHandle, &resultIsValid)); + Lib3MFHandle hD = nullptr; + CheckError(lib3mf_selectnode_getinputd(m_pHandle, &hD)); - return resultIsValid; + if (!hD) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hD))); } /** - * CObject::SetAttachmentAsThumbnail - Use an existing attachment as thumbnail for this object - * @param[in] pAttachment - Instance of a new or the existing thumbnailattachment object. - */ - void CObject::SetAttachmentAsThumbnail(classParam pAttachment) - { - Lib3MFHandle hAttachment = pAttachment.GetHandle(); - CheckError(lib3mf_object_setattachmentasthumbnail(m_pHandle, hAttachment)); - } + * Method definitions for class CClampNode + */ /** - * CObject::GetThumbnailAttachment - Get the attachment containing the object thumbnail. - * @return Instance of the thumbnailattachment object or NULL. + * CClampNode::GetInputMin - Retrieves the input for the lower limit + * @return the input for the lower limit */ - PAttachment CObject::GetThumbnailAttachment() + PImplicitPort CClampNode::GetInputMin() { - Lib3MFHandle hAttachment = nullptr; - CheckError(lib3mf_object_getthumbnailattachment(m_pHandle, &hAttachment)); + Lib3MFHandle hMin = nullptr; + CheckError(lib3mf_clampnode_getinputmin(m_pHandle, &hMin)); - if (hAttachment) { - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hAttachment))); - } else { - return nullptr; + if (!hMin) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMin))); } /** - * CObject::ClearThumbnailAttachment - Clears the attachment. The attachment instance is not removed from the package. + * CClampNode::GetInputMax - Retrieves the input for the upper limit + * @return the input for the upper limit */ - void CObject::ClearThumbnailAttachment() + PImplicitPort CClampNode::GetInputMax() { - CheckError(lib3mf_object_clearthumbnailattachment(m_pHandle)); + Lib3MFHandle hMax = nullptr; + CheckError(lib3mf_clampnode_getinputmax(m_pHandle, &hMax)); + + if (!hMax) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMax))); } /** - * CObject::GetOutbox - Returns the outbox of a build item - * @return Outbox of this build item + * Method definitions for class CComposeVectorNode + */ + + /** + * CComposeVectorNode::GetInputX - Retrieves the input for the x component + * @return the input for the x component */ - sBox CObject::GetOutbox() + PImplicitPort CComposeVectorNode::GetInputX() { - sBox resultOutbox; - CheckError(lib3mf_object_getoutbox(m_pHandle, &resultOutbox)); + Lib3MFHandle hX = nullptr; + CheckError(lib3mf_composevectornode_getinputx(m_pHandle, &hX)); - return resultOutbox; + if (!hX) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hX))); } /** - * CObject::GetUUID - Retrieves an object's uuid string (see production extension specification) - * @param[out] bHasUUID - flag whether the build item has a UUID - * @return returns object uuid. + * CComposeVectorNode::GetInputY - Retrieves the input for the y component + * @return the input for the y component */ - std::string CObject::GetUUID(bool & bHasUUID) + PImplicitPort CComposeVectorNode::GetInputY() { - Lib3MF_uint32 bytesNeededUUID = 0; - Lib3MF_uint32 bytesWrittenUUID = 0; - CheckError(lib3mf_object_getuuid(m_pHandle, &bHasUUID, 0, &bytesNeededUUID, nullptr)); - std::vector bufferUUID(bytesNeededUUID); - CheckError(lib3mf_object_getuuid(m_pHandle, &bHasUUID, bytesNeededUUID, &bytesWrittenUUID, &bufferUUID[0])); + Lib3MFHandle hY = nullptr; + CheckError(lib3mf_composevectornode_getinputy(m_pHandle, &hY)); - return std::string(&bufferUUID[0]); + if (!hY) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hY))); } /** - * CObject::SetUUID - Sets a build object's uuid string (see production extension specification) - * @param[in] sUUID - new object uuid string. + * CComposeVectorNode::GetInputZ - Retrieves the input for the z component + * @return the input for the z component */ - void CObject::SetUUID(const std::string & sUUID) + PImplicitPort CComposeVectorNode::GetInputZ() { - CheckError(lib3mf_object_setuuid(m_pHandle, sUUID.c_str())); + Lib3MFHandle hZ = nullptr; + CheckError(lib3mf_composevectornode_getinputz(m_pHandle, &hZ)); + + if (!hZ) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hZ))); } /** - * CObject::GetMetaDataGroup - Returns the metadatagroup of this object - * @return returns an Instance of the metadatagroup of this object + * CComposeVectorNode::GetOutputResult - Retrieves the output + * @return the output */ - PMetaDataGroup CObject::GetMetaDataGroup() + PImplicitPort CComposeVectorNode::GetOutputResult() { - Lib3MFHandle hMetaDataGroup = nullptr; - CheckError(lib3mf_object_getmetadatagroup(m_pHandle, &hMetaDataGroup)); + Lib3MFHandle hResult = nullptr; + CheckError(lib3mf_composevectornode_getoutputresult(m_pHandle, &hResult)); - if (!hMetaDataGroup) { + if (!hResult) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaDataGroup))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResult))); } /** - * CObject::SetSlicesMeshResolution - set the meshresolution of the mesh object - * @param[in] eMeshResolution - meshresolution of this object + * Method definitions for class CVectorFromScalarNode + */ + + /** + * Method definitions for class CDecomposeVectorNode + */ + + /** + * CDecomposeVectorNode::GetInputA - Retrieves the input + * @return the input port for the vector to decompose */ - void CObject::SetSlicesMeshResolution(const eSlicesMeshResolution eMeshResolution) + PImplicitPort CDecomposeVectorNode::GetInputA() { - CheckError(lib3mf_object_setslicesmeshresolution(m_pHandle, eMeshResolution)); + Lib3MFHandle hA = nullptr; + CheckError(lib3mf_decomposevectornode_getinputa(m_pHandle, &hA)); + + if (!hA) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hA))); } /** - * CObject::GetSlicesMeshResolution - get the meshresolution of the mesh object - * @return meshresolution of this object + * CDecomposeVectorNode::GetOutputX - Retrieves the output for the x component + * @return the output for the x component */ - eSlicesMeshResolution CObject::GetSlicesMeshResolution() + PImplicitPort CDecomposeVectorNode::GetOutputX() { - eSlicesMeshResolution resultMeshResolution = (eSlicesMeshResolution) 0; - CheckError(lib3mf_object_getslicesmeshresolution(m_pHandle, &resultMeshResolution)); + Lib3MFHandle hX = nullptr; + CheckError(lib3mf_decomposevectornode_getoutputx(m_pHandle, &hX)); - return resultMeshResolution; + if (!hX) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hX))); } /** - * CObject::HasSlices - returns whether the Object has a slice stack. If Recursive is true, also checks whether any references object has a slice stack - * @param[in] bRecursive - check also all referenced objects? - * @return does the object have a slice stack? + * CDecomposeVectorNode::GetOutputY - Retrieves the output for the y component + * @return the output for the y component */ - bool CObject::HasSlices(const bool bRecursive) + PImplicitPort CDecomposeVectorNode::GetOutputY() { - bool resultHasSlices = 0; - CheckError(lib3mf_object_hasslices(m_pHandle, bRecursive, &resultHasSlices)); + Lib3MFHandle hY = nullptr; + CheckError(lib3mf_decomposevectornode_getoutputy(m_pHandle, &hY)); - return resultHasSlices; + if (!hY) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hY))); } /** - * CObject::ClearSliceStack - unlinks the attached slicestack from this object. If no slice stack is attached, do noting. + * CDecomposeVectorNode::GetOutputZ - Retrieves the output for the z component + * @return the output for the z component */ - void CObject::ClearSliceStack() + PImplicitPort CDecomposeVectorNode::GetOutputZ() { - CheckError(lib3mf_object_clearslicestack(m_pHandle)); + Lib3MFHandle hZ = nullptr; + CheckError(lib3mf_decomposevectornode_getoutputz(m_pHandle, &hZ)); + + if (!hZ) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hZ))); } /** - * CObject::GetSliceStack - get the Slicestack attached to the object - * @return returns the slicestack instance + * Method definitions for class CComposeMatrixNode + */ + + /** + * CComposeMatrixNode::GetInputM00 - Retrieves the input for the element 0 0 + * @return the input for the m00 element */ - PSliceStack CObject::GetSliceStack() + PImplicitPort CComposeMatrixNode::GetInputM00() { - Lib3MFHandle hSliceStackInstance = nullptr; - CheckError(lib3mf_object_getslicestack(m_pHandle, &hSliceStackInstance)); + Lib3MFHandle hM00 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm00(m_pHandle, &hM00)); - if (!hSliceStackInstance) { + if (!hM00) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSliceStackInstance))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM00))); } /** - * CObject::AssignSliceStack - assigns a slicestack to the object - * @param[in] pSliceStackInstance - the new slice stack of this Object + * CComposeMatrixNode::GetInputM01 - Retrieves the input for the element 0 1 + * @return the input for the m01 element */ - void CObject::AssignSliceStack(classParam pSliceStackInstance) + PImplicitPort CComposeMatrixNode::GetInputM01() { - Lib3MFHandle hSliceStackInstance = pSliceStackInstance.GetHandle(); - CheckError(lib3mf_object_assignslicestack(m_pHandle, hSliceStackInstance)); + Lib3MFHandle hM01 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm01(m_pHandle, &hM01)); + + if (!hM01) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM01))); } /** - * Method definitions for class CMeshObject - */ - - /** - * CMeshObject::GetVertexCount - Returns the vertex count of a mesh object. - * @return filled with the vertex count. + * CComposeMatrixNode::GetInputM02 - Retrieves the input for the element 0 2 + * @return the input for the m02 element */ - Lib3MF_uint32 CMeshObject::GetVertexCount() + PImplicitPort CComposeMatrixNode::GetInputM02() { - Lib3MF_uint32 resultVertexCount = 0; - CheckError(lib3mf_meshobject_getvertexcount(m_pHandle, &resultVertexCount)); + Lib3MFHandle hM02 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm02(m_pHandle, &hM02)); - return resultVertexCount; + if (!hM02) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM02))); } /** - * CMeshObject::GetTriangleCount - Returns the triangle count of a mesh object. - * @return filled with the triangle count. + * CComposeMatrixNode::GetInputM03 - Retrieves the input for the element 0 3 + * @return the input for the m03 element */ - Lib3MF_uint32 CMeshObject::GetTriangleCount() + PImplicitPort CComposeMatrixNode::GetInputM03() { - Lib3MF_uint32 resultVertexCount = 0; - CheckError(lib3mf_meshobject_gettrianglecount(m_pHandle, &resultVertexCount)); + Lib3MFHandle hM03 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm03(m_pHandle, &hM03)); - return resultVertexCount; + if (!hM03) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM03))); } /** - * CMeshObject::GetVertex - Returns the vertex count of a mesh object. - * @param[in] nIndex - Index of the vertex (0 to vertexcount - 1) - * @return filled with the vertex coordinates. + * CComposeMatrixNode::GetInputM10 - Retrieves the input for the element 1 0 + * @return the input for the m10 element */ - sPosition CMeshObject::GetVertex(const Lib3MF_uint32 nIndex) + PImplicitPort CComposeMatrixNode::GetInputM10() { - sPosition resultCoordinates; - CheckError(lib3mf_meshobject_getvertex(m_pHandle, nIndex, &resultCoordinates)); + Lib3MFHandle hM10 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm10(m_pHandle, &hM10)); - return resultCoordinates; + if (!hM10) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM10))); } /** - * CMeshObject::SetVertex - Sets the coordinates of a single vertex of a mesh object - * @param[in] nIndex - Index of the vertex (0 to vertexcount - 1) - * @param[in] Coordinates - contains the vertex coordinates. + * CComposeMatrixNode::GetInputM11 - Retrieves the input for the element 1 1 + * @return the input for the m11 element */ - void CMeshObject::SetVertex(const Lib3MF_uint32 nIndex, const sPosition & Coordinates) + PImplicitPort CComposeMatrixNode::GetInputM11() { - CheckError(lib3mf_meshobject_setvertex(m_pHandle, nIndex, &Coordinates)); + Lib3MFHandle hM11 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm11(m_pHandle, &hM11)); + + if (!hM11) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM11))); } /** - * CMeshObject::AddVertex - Adds a single vertex to a mesh object - * @param[in] Coordinates - contains the vertex coordinates. - * @return Index of the new vertex + * CComposeMatrixNode::GetInputM12 - Retrieves the input for the element 1 2 + * @return the input for the m12 element */ - Lib3MF_uint32 CMeshObject::AddVertex(const sPosition & Coordinates) + PImplicitPort CComposeMatrixNode::GetInputM12() { - Lib3MF_uint32 resultNewIndex = 0; - CheckError(lib3mf_meshobject_addvertex(m_pHandle, &Coordinates, &resultNewIndex)); + Lib3MFHandle hM12 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm12(m_pHandle, &hM12)); - return resultNewIndex; + if (!hM12) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM12))); } /** - * CMeshObject::GetVertices - Obtains all vertex positions of a mesh object - * @param[out] VerticesBuffer - contains the vertex coordinates. + * CComposeMatrixNode::GetInputM13 - Retrieves the input for the element 1 3 + * @return the input for the m3 element */ - void CMeshObject::GetVertices(std::vector & VerticesBuffer) + PImplicitPort CComposeMatrixNode::GetInputM13() { - Lib3MF_uint64 elementsNeededVertices = 0; - Lib3MF_uint64 elementsWrittenVertices = 0; - CheckError(lib3mf_meshobject_getvertices(m_pHandle, 0, &elementsNeededVertices, nullptr)); - VerticesBuffer.resize((size_t) elementsNeededVertices); - CheckError(lib3mf_meshobject_getvertices(m_pHandle, elementsNeededVertices, &elementsWrittenVertices, VerticesBuffer.data())); + Lib3MFHandle hM13 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm13(m_pHandle, &hM13)); + + if (!hM13) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM13))); } /** - * CMeshObject::GetTriangle - Returns indices of a single triangle of a mesh object. - * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) - * @return filled with the triangle indices. + * CComposeMatrixNode::GetInputM20 - Retrieves the input for the element 2 0 + * @return the input for the m2 element */ - sTriangle CMeshObject::GetTriangle(const Lib3MF_uint32 nIndex) + PImplicitPort CComposeMatrixNode::GetInputM20() { - sTriangle resultIndices; - CheckError(lib3mf_meshobject_gettriangle(m_pHandle, nIndex, &resultIndices)); + Lib3MFHandle hM20 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm20(m_pHandle, &hM20)); - return resultIndices; + if (!hM20) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM20))); } /** - * CMeshObject::SetTriangle - Sets the indices of a single triangle of a mesh object. - * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) - * @param[in] Indices - contains the triangle indices. + * CComposeMatrixNode::GetInputM21 - Retrieves the input for the element 2 1 + * @return */ - void CMeshObject::SetTriangle(const Lib3MF_uint32 nIndex, const sTriangle & Indices) + PImplicitPort CComposeMatrixNode::GetInputM21() { - CheckError(lib3mf_meshobject_settriangle(m_pHandle, nIndex, &Indices)); + Lib3MFHandle hM21 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm21(m_pHandle, &hM21)); + + if (!hM21) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM21))); } /** - * CMeshObject::AddTriangle - Adds a single triangle to a mesh object - * @param[in] Indices - contains the triangle indices. - * @return Index of the new triangle + * CComposeMatrixNode::GetInputM22 - Retrieves the input for the element 2 2 + * @return the input for the m22 element */ - Lib3MF_uint32 CMeshObject::AddTriangle(const sTriangle & Indices) + PImplicitPort CComposeMatrixNode::GetInputM22() { - Lib3MF_uint32 resultNewIndex = 0; - CheckError(lib3mf_meshobject_addtriangle(m_pHandle, &Indices, &resultNewIndex)); + Lib3MFHandle hM22 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm22(m_pHandle, &hM22)); - return resultNewIndex; + if (!hM22) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM22))); } /** - * CMeshObject::GetTriangleIndices - Get all triangles of a mesh object - * @param[out] IndicesBuffer - contains the triangle indices. + * CComposeMatrixNode::GetInputM23 - Retrieves the input for the element 2 3 + * @return the input for the m23 element */ - void CMeshObject::GetTriangleIndices(std::vector & IndicesBuffer) + PImplicitPort CComposeMatrixNode::GetInputM23() { - Lib3MF_uint64 elementsNeededIndices = 0; - Lib3MF_uint64 elementsWrittenIndices = 0; - CheckError(lib3mf_meshobject_gettriangleindices(m_pHandle, 0, &elementsNeededIndices, nullptr)); - IndicesBuffer.resize((size_t) elementsNeededIndices); - CheckError(lib3mf_meshobject_gettriangleindices(m_pHandle, elementsNeededIndices, &elementsWrittenIndices, IndicesBuffer.data())); + Lib3MFHandle hM23 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm23(m_pHandle, &hM23)); + + if (!hM23) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM23))); } /** - * CMeshObject::SetObjectLevelProperty - Sets the property at the object-level of the mesh object. - * @param[in] nUniqueResourceID - the object-level Property UniqueResourceID. - * @param[in] nPropertyID - the object-level PropertyID. + * CComposeMatrixNode::GetInputM30 - Retrieves the input for the element 3 0 + * @return the input for the m30 element */ - void CMeshObject::SetObjectLevelProperty(const Lib3MF_uint32 nUniqueResourceID, const Lib3MF_uint32 nPropertyID) + PImplicitPort CComposeMatrixNode::GetInputM30() { - CheckError(lib3mf_meshobject_setobjectlevelproperty(m_pHandle, nUniqueResourceID, nPropertyID)); + Lib3MFHandle hM30 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm30(m_pHandle, &hM30)); + + if (!hM30) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM30))); } - /** - * CMeshObject::GetObjectLevelProperty - Gets the property at the object-level of the mesh object. - * @param[out] nUniqueResourceID - the object-level Property UniqueResourceID. - * @param[out] nPropertyID - the object-level PropertyID. - * @return Has an object-level property been specified? + /** + * CComposeMatrixNode::GetInputM31 - Retrieves the input for the element 3 1 + * @return the input for the m31 element */ - bool CMeshObject::GetObjectLevelProperty(Lib3MF_uint32 & nUniqueResourceID, Lib3MF_uint32 & nPropertyID) + PImplicitPort CComposeMatrixNode::GetInputM31() { - bool resultHasObjectLevelProperty = 0; - CheckError(lib3mf_meshobject_getobjectlevelproperty(m_pHandle, &nUniqueResourceID, &nPropertyID, &resultHasObjectLevelProperty)); + Lib3MFHandle hM31 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm31(m_pHandle, &hM31)); - return resultHasObjectLevelProperty; + if (!hM31) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM31))); } /** - * CMeshObject::SetTriangleProperties - Sets the properties of a single triangle of a mesh object. - * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) - * @param[in] Properties - contains the triangle properties. + * CComposeMatrixNode::GetInputM32 - Retrieves the input for the element 3 2 + * @return the input for the m32 element */ - void CMeshObject::SetTriangleProperties(const Lib3MF_uint32 nIndex, const sTriangleProperties & Properties) + PImplicitPort CComposeMatrixNode::GetInputM32() { - CheckError(lib3mf_meshobject_settriangleproperties(m_pHandle, nIndex, &Properties)); + Lib3MFHandle hM32 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm32(m_pHandle, &hM32)); + + if (!hM32) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM32))); } /** - * CMeshObject::GetTriangleProperties - Gets the properties of a single triangle of a mesh object. - * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) - * @param[out] Property - returns the triangle properties. + * CComposeMatrixNode::GetInputM33 - Retrieves the input for the element 3 3 + * @return the input for the m33 element */ - void CMeshObject::GetTriangleProperties(const Lib3MF_uint32 nIndex, sTriangleProperties & Property) + PImplicitPort CComposeMatrixNode::GetInputM33() { - CheckError(lib3mf_meshobject_gettriangleproperties(m_pHandle, nIndex, &Property)); + Lib3MFHandle hM33 = nullptr; + CheckError(lib3mf_composematrixnode_getinputm33(m_pHandle, &hM33)); + + if (!hM33) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM33))); } /** - * CMeshObject::SetAllTriangleProperties - Sets the properties of all triangles of a mesh object. Sets the object level property to the first entry of the passed triangle properties, if not yet specified. - * @param[in] PropertiesArrayBuffer - contains the triangle properties array. Must have trianglecount elements. + * CComposeMatrixNode::GetOutputResult - Retrieves the output + * @return the output */ - void CMeshObject::SetAllTriangleProperties(const CInputVector & PropertiesArrayBuffer) + PImplicitPort CComposeMatrixNode::GetOutputResult() { - CheckError(lib3mf_meshobject_setalltriangleproperties(m_pHandle, (Lib3MF_uint64)PropertiesArrayBuffer.size(), PropertiesArrayBuffer.data())); + Lib3MFHandle hResult = nullptr; + CheckError(lib3mf_composematrixnode_getoutputresult(m_pHandle, &hResult)); + + if (!hResult) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResult))); } /** - * CMeshObject::GetAllTriangleProperties - Gets the properties of all triangles of a mesh object. - * @param[out] PropertiesArrayBuffer - returns the triangle properties array. Must have trianglecount elements. + * Method definitions for class CMatrixFromRowsNode + */ + + /** + * CMatrixFromRowsNode::GetInputA - Retrieves the input for the first row + * @return the input for the first row */ - void CMeshObject::GetAllTriangleProperties(std::vector & PropertiesArrayBuffer) + PImplicitPort CMatrixFromRowsNode::GetInputA() { - Lib3MF_uint64 elementsNeededPropertiesArray = 0; - Lib3MF_uint64 elementsWrittenPropertiesArray = 0; - CheckError(lib3mf_meshobject_getalltriangleproperties(m_pHandle, 0, &elementsNeededPropertiesArray, nullptr)); - PropertiesArrayBuffer.resize((size_t) elementsNeededPropertiesArray); - CheckError(lib3mf_meshobject_getalltriangleproperties(m_pHandle, elementsNeededPropertiesArray, &elementsWrittenPropertiesArray, PropertiesArrayBuffer.data())); + Lib3MFHandle hRow0 = nullptr; + CheckError(lib3mf_matrixfromrowsnode_getinputa(m_pHandle, &hRow0)); + + if (!hRow0) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hRow0))); } /** - * CMeshObject::ClearAllProperties - Clears all properties of this mesh object (triangle and object-level). + * CMatrixFromRowsNode::GetInputB - Retrieves the input for the second row + * @return the input for the second row */ - void CMeshObject::ClearAllProperties() + PImplicitPort CMatrixFromRowsNode::GetInputB() { - CheckError(lib3mf_meshobject_clearallproperties(m_pHandle)); + Lib3MFHandle hRow1 = nullptr; + CheckError(lib3mf_matrixfromrowsnode_getinputb(m_pHandle, &hRow1)); + + if (!hRow1) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hRow1))); } /** - * CMeshObject::SetGeometry - Set all triangles of a mesh object - * @param[in] VerticesBuffer - contains the positions. - * @param[in] IndicesBuffer - contains the triangle indices. + * CMatrixFromRowsNode::GetInputC - Retrieves the input for the third row + * @return the input for the third row */ - void CMeshObject::SetGeometry(const CInputVector & VerticesBuffer, const CInputVector & IndicesBuffer) + PImplicitPort CMatrixFromRowsNode::GetInputC() { - CheckError(lib3mf_meshobject_setgeometry(m_pHandle, (Lib3MF_uint64)VerticesBuffer.size(), VerticesBuffer.data(), (Lib3MF_uint64)IndicesBuffer.size(), IndicesBuffer.data())); + Lib3MFHandle hRow2 = nullptr; + CheckError(lib3mf_matrixfromrowsnode_getinputc(m_pHandle, &hRow2)); + + if (!hRow2) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hRow2))); } /** - * CMeshObject::IsManifoldAndOriented - Retrieves, if an object describes a topologically oriented and manifold mesh, according to the core spec. - * @return returns, if the object is oriented and manifold. + * CMatrixFromRowsNode::GetInputD - Retrieves the input for the fourth row + * @return the input for the fourth row */ - bool CMeshObject::IsManifoldAndOriented() + PImplicitPort CMatrixFromRowsNode::GetInputD() { - bool resultIsManifoldAndOriented = 0; - CheckError(lib3mf_meshobject_ismanifoldandoriented(m_pHandle, &resultIsManifoldAndOriented)); + Lib3MFHandle hRow3 = nullptr; + CheckError(lib3mf_matrixfromrowsnode_getinputd(m_pHandle, &hRow3)); - return resultIsManifoldAndOriented; + if (!hRow3) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hRow3))); } /** - * CMeshObject::BeamLattice - Retrieves the BeamLattice within this MeshObject. - * @return the BeamLattice within this MeshObject + * CMatrixFromRowsNode::GetOutputResult - Retrieves the output + * @return the output */ - PBeamLattice CMeshObject::BeamLattice() + PImplicitPort CMatrixFromRowsNode::GetOutputResult() { - Lib3MFHandle hTheBeamLattice = nullptr; - CheckError(lib3mf_meshobject_beamlattice(m_pHandle, &hTheBeamLattice)); + Lib3MFHandle hResult = nullptr; + CheckError(lib3mf_matrixfromrowsnode_getoutputresult(m_pHandle, &hResult)); - if (!hTheBeamLattice) { + if (!hResult) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheBeamLattice))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResult))); } /** - * Method definitions for class CBeamLattice + * Method definitions for class CMatrixFromColumnsNode */ /** - * CBeamLattice::GetMinLength - Returns the minimal length of beams for the beamlattice. - * @return minimal length of beams for the beamlattice + * CMatrixFromColumnsNode::GetInputA - Retrieves the input for the first column + * @return the input for the first column */ - Lib3MF_double CBeamLattice::GetMinLength() + PImplicitPort CMatrixFromColumnsNode::GetInputA() { - Lib3MF_double resultMinLength = 0; - CheckError(lib3mf_beamlattice_getminlength(m_pHandle, &resultMinLength)); + Lib3MFHandle hColumn0 = nullptr; + CheckError(lib3mf_matrixfromcolumnsnode_getinputa(m_pHandle, &hColumn0)); - return resultMinLength; + if (!hColumn0) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hColumn0))); } /** - * CBeamLattice::SetMinLength - Sets the minimal length of beams for the beamlattice. - * @param[in] dMinLength - minimal length of beams for the beamlattice + * CMatrixFromColumnsNode::GetInputB - Retrieves the input for the second column + * @return the input for the second column */ - void CBeamLattice::SetMinLength(const Lib3MF_double dMinLength) + PImplicitPort CMatrixFromColumnsNode::GetInputB() { - CheckError(lib3mf_beamlattice_setminlength(m_pHandle, dMinLength)); + Lib3MFHandle hColumn1 = nullptr; + CheckError(lib3mf_matrixfromcolumnsnode_getinputb(m_pHandle, &hColumn1)); + + if (!hColumn1) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hColumn1))); } /** - * CBeamLattice::GetClipping - Returns the clipping mode and the clipping-mesh for the beamlattice of this mesh. - * @param[out] eClipMode - contains the clip mode of this mesh - * @param[out] nUniqueResourceID - filled with the UniqueResourceID of the clipping mesh-object or an undefined value if pClipMode is MODELBEAMLATTICECLIPMODE_NONE + * CMatrixFromColumnsNode::GetInputC - Retrieves the input for the third column + * @return the input for the third column */ - void CBeamLattice::GetClipping(eBeamLatticeClipMode & eClipMode, Lib3MF_uint32 & nUniqueResourceID) + PImplicitPort CMatrixFromColumnsNode::GetInputC() { - CheckError(lib3mf_beamlattice_getclipping(m_pHandle, &eClipMode, &nUniqueResourceID)); + Lib3MFHandle hColumn2 = nullptr; + CheckError(lib3mf_matrixfromcolumnsnode_getinputc(m_pHandle, &hColumn2)); + + if (!hColumn2) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hColumn2))); } /** - * CBeamLattice::SetClipping - Sets the clipping mode and the clipping-mesh for the beamlattice of this mesh. - * @param[in] eClipMode - contains the clip mode of this mesh - * @param[in] nUniqueResourceID - the UniqueResourceID of the clipping mesh-object. This mesh-object has to be defined before setting the Clipping. + * CMatrixFromColumnsNode::GetInputD - Retrieves the input for the fourth column + * @return the input for the fourth column */ - void CBeamLattice::SetClipping(const eBeamLatticeClipMode eClipMode, const Lib3MF_uint32 nUniqueResourceID) + PImplicitPort CMatrixFromColumnsNode::GetInputD() { - CheckError(lib3mf_beamlattice_setclipping(m_pHandle, eClipMode, nUniqueResourceID)); + Lib3MFHandle hColumn3 = nullptr; + CheckError(lib3mf_matrixfromcolumnsnode_getinputd(m_pHandle, &hColumn3)); + + if (!hColumn3) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hColumn3))); } /** - * CBeamLattice::GetRepresentation - Returns the representation-mesh for the beamlattice of this mesh. - * @return flag whether the beamlattice has a representation mesh. - * @param[out] nUniqueResourceID - filled with the UniqueResourceID of the clipping mesh-object. + * CMatrixFromColumnsNode::GetOutputResult - Retrieves the output + * @return the output */ - bool CBeamLattice::GetRepresentation(Lib3MF_uint32 & nUniqueResourceID) + PImplicitPort CMatrixFromColumnsNode::GetOutputResult() { - bool resultHasRepresentation = 0; - CheckError(lib3mf_beamlattice_getrepresentation(m_pHandle, &resultHasRepresentation, &nUniqueResourceID)); + Lib3MFHandle hResult = nullptr; + CheckError(lib3mf_matrixfromcolumnsnode_getoutputresult(m_pHandle, &hResult)); - return resultHasRepresentation; + if (!hResult) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResult))); } /** - * CBeamLattice::SetRepresentation - Sets the representation-mesh for the beamlattice of this mesh. - * @param[in] nUniqueResourceID - the UniqueResourceID of the representation mesh-object. This mesh-object has to be defined before setting the representation. - */ - void CBeamLattice::SetRepresentation(const Lib3MF_uint32 nUniqueResourceID) - { - CheckError(lib3mf_beamlattice_setrepresentation(m_pHandle, nUniqueResourceID)); - } + * Method definitions for class CConstantNode + */ /** - * CBeamLattice::GetBallOptions - Returns the ball mode and the default ball radius for the beamlattice of this mesh. - * @param[out] eBallMode - contains the ball mode of this mesh - * @param[out] dBallRadius - default ball radius of balls for the beamlattice + * CConstantNode::SetConstant - Sets the constant value of the node + * @param[in] dValue - the value */ - void CBeamLattice::GetBallOptions(eBeamLatticeBallMode & eBallMode, Lib3MF_double & dBallRadius) + void CConstantNode::SetConstant(const Lib3MF_double dValue) { - CheckError(lib3mf_beamlattice_getballoptions(m_pHandle, &eBallMode, &dBallRadius)); + CheckError(lib3mf_constantnode_setconstant(m_pHandle, dValue)); } /** - * CBeamLattice::SetBallOptions - Sets the ball mode and thedefault ball radius for the beamlattice. - * @param[in] eBallMode - contains the ball mode of this mesh - * @param[in] dBallRadius - default ball radius of balls for the beamlattice + * CConstantNode::GetConstant - Retrieves the constant value of the node + * @return the value */ - void CBeamLattice::SetBallOptions(const eBeamLatticeBallMode eBallMode, const Lib3MF_double dBallRadius) + Lib3MF_double CConstantNode::GetConstant() { - CheckError(lib3mf_beamlattice_setballoptions(m_pHandle, eBallMode, dBallRadius)); + Lib3MF_double resultValue = 0; + CheckError(lib3mf_constantnode_getconstant(m_pHandle, &resultValue)); + + return resultValue; } /** - * CBeamLattice::GetBeamCount - Returns the beam count of a mesh object. - * @return filled with the beam count. + * CConstantNode::GetOutputValue - Retrieves the output + * @return the output */ - Lib3MF_uint32 CBeamLattice::GetBeamCount() + PImplicitPort CConstantNode::GetOutputValue() { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_beamlattice_getbeamcount(m_pHandle, &resultCount)); + Lib3MFHandle hValue = nullptr; + CheckError(lib3mf_constantnode_getoutputvalue(m_pHandle, &hValue)); - return resultCount; + if (!hValue) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hValue))); } /** - * CBeamLattice::GetBeam - Returns indices, radii and capmodes of a single beam of a mesh object. - * @param[in] nIndex - Index of the beam (0 to beamcount - 1). - * @return filled with the beam indices, radii and capmodes. + * Method definitions for class CConstVecNode + */ + + /** + * CConstVecNode::SetVector - Sets the vector value of the node + * @param[in] Value - the value */ - sBeam CBeamLattice::GetBeam(const Lib3MF_uint32 nIndex) + void CConstVecNode::SetVector(const sVector & Value) { - sBeam resultBeamInfo; - CheckError(lib3mf_beamlattice_getbeam(m_pHandle, nIndex, &resultBeamInfo)); - - return resultBeamInfo; + CheckError(lib3mf_constvecnode_setvector(m_pHandle, &Value)); } /** - * CBeamLattice::AddBeam - Adds a single beam to a mesh object. - * @param[in] BeamInfo - contains the node indices, radii and capmodes. - * @return filled with the new Index of the beam. + * CConstVecNode::GetVector - Retrieves the vector value of the node + * @return the value */ - Lib3MF_uint32 CBeamLattice::AddBeam(const sBeam & BeamInfo) + sVector CConstVecNode::GetVector() { - Lib3MF_uint32 resultIndex = 0; - CheckError(lib3mf_beamlattice_addbeam(m_pHandle, &BeamInfo, &resultIndex)); + sVector resultValue; + CheckError(lib3mf_constvecnode_getvector(m_pHandle, &resultValue)); - return resultIndex; + return resultValue; } /** - * CBeamLattice::SetBeam - Sets the indices, radii and capmodes of a single beam of a mesh object. - * @param[in] nIndex - Index of the beam (0 to beamcount - 1). - * @param[in] BeamInfo - filled with the beam indices, radii and capmodes. + * CConstVecNode::GetOutputVector - Retrieves the output + * @return the output */ - void CBeamLattice::SetBeam(const Lib3MF_uint32 nIndex, const sBeam & BeamInfo) + PImplicitPort CConstVecNode::GetOutputVector() { - CheckError(lib3mf_beamlattice_setbeam(m_pHandle, nIndex, &BeamInfo)); + Lib3MFHandle hVector = nullptr; + CheckError(lib3mf_constvecnode_getoutputvector(m_pHandle, &hVector)); + + if (!hVector) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hVector))); } /** - * CBeamLattice::SetBeams - Sets all beam indices, radii and capmodes of a mesh object. - * @param[in] BeamInfoBuffer - contains information of a number of beams - */ - void CBeamLattice::SetBeams(const CInputVector & BeamInfoBuffer) - { - CheckError(lib3mf_beamlattice_setbeams(m_pHandle, (Lib3MF_uint64)BeamInfoBuffer.size(), BeamInfoBuffer.data())); - } + * Method definitions for class CConstMatNode + */ /** - * CBeamLattice::GetBeams - obtains all beam indices, radii and capmodes of a mesh object. - * @param[out] BeamInfoBuffer - contains information of all beams + * CConstMatNode::SetMatrix - Sets the matrix value of the node + * @param[in] Value - the value */ - void CBeamLattice::GetBeams(std::vector & BeamInfoBuffer) + void CConstMatNode::SetMatrix(const sMatrix4x4 & Value) { - Lib3MF_uint64 elementsNeededBeamInfo = 0; - Lib3MF_uint64 elementsWrittenBeamInfo = 0; - CheckError(lib3mf_beamlattice_getbeams(m_pHandle, 0, &elementsNeededBeamInfo, nullptr)); - BeamInfoBuffer.resize((size_t) elementsNeededBeamInfo); - CheckError(lib3mf_beamlattice_getbeams(m_pHandle, elementsNeededBeamInfo, &elementsWrittenBeamInfo, BeamInfoBuffer.data())); + CheckError(lib3mf_constmatnode_setmatrix(m_pHandle, &Value)); } /** - * CBeamLattice::GetBallCount - Returns the ball count of a mesh object. - * @return filled with the ball count. + * CConstMatNode::GetMatrix - Retrieves the matrix value of the node + * @return the matrix */ - Lib3MF_uint32 CBeamLattice::GetBallCount() + sMatrix4x4 CConstMatNode::GetMatrix() { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_beamlattice_getballcount(m_pHandle, &resultCount)); + sMatrix4x4 resultValue; + CheckError(lib3mf_constmatnode_getmatrix(m_pHandle, &resultValue)); - return resultCount; + return resultValue; } /** - * CBeamLattice::GetBall - Returns index and radius of a single ball of a mesh object. - * @param[in] nIndex - Index of the ball (0 to ballcount - 1). - * @return filled with the ball node index and radius. + * CConstMatNode::GetOutputMatrix - Retrieves the output + * @return the output */ - sBall CBeamLattice::GetBall(const Lib3MF_uint32 nIndex) + PImplicitPort CConstMatNode::GetOutputMatrix() { - sBall resultBallInfo; - CheckError(lib3mf_beamlattice_getball(m_pHandle, nIndex, &resultBallInfo)); + Lib3MFHandle hMatrix = nullptr; + CheckError(lib3mf_constmatnode_getoutputmatrix(m_pHandle, &hMatrix)); - return resultBallInfo; + if (!hMatrix) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMatrix))); } /** - * CBeamLattice::AddBall - Adds a single ball to a mesh object. - * @param[in] BallInfo - contains the node index and radius. - * @return filled with the new Index of the ball. + * Method definitions for class CMeshNode + */ + + /** + * CMeshNode::GetInputMesh - Retrieves the input for the model resource id of the mesh + * @return the input port for the model resource id of the mesh */ - Lib3MF_uint32 CBeamLattice::AddBall(const sBall & BallInfo) + PImplicitPort CMeshNode::GetInputMesh() { - Lib3MF_uint32 resultIndex = 0; - CheckError(lib3mf_beamlattice_addball(m_pHandle, &BallInfo, &resultIndex)); + Lib3MFHandle hMesh = nullptr; + CheckError(lib3mf_meshnode_getinputmesh(m_pHandle, &hMesh)); - return resultIndex; + if (!hMesh) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMesh))); } /** - * CBeamLattice::SetBall - Sets the index and radius of a single ball of a mesh object. - * @param[in] nIndex - Index of the ball (0 to ballcount - 1). - * @param[in] BallInfo - filled with the ball node index and radius. + * CMeshNode::GetInputPos - Retrieves the input for the position + * @return the input port for the position */ - void CBeamLattice::SetBall(const Lib3MF_uint32 nIndex, const sBall & BallInfo) + PImplicitPort CMeshNode::GetInputPos() { - CheckError(lib3mf_beamlattice_setball(m_pHandle, nIndex, &BallInfo)); + Lib3MFHandle hPos = nullptr; + CheckError(lib3mf_meshnode_getinputpos(m_pHandle, &hPos)); + + if (!hPos) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPos))); } /** - * CBeamLattice::SetBalls - Sets all ball indices and radii of a mesh object. - * @param[in] BallInfoBuffer - contains information of a number of balls + * CMeshNode::GetOutputDistance - Retrieves the output + * @return the output port for the signed distance to the mesh */ - void CBeamLattice::SetBalls(const CInputVector & BallInfoBuffer) + PImplicitPort CMeshNode::GetOutputDistance() { - CheckError(lib3mf_beamlattice_setballs(m_pHandle, (Lib3MF_uint64)BallInfoBuffer.size(), BallInfoBuffer.data())); + Lib3MFHandle hDistance = nullptr; + CheckError(lib3mf_meshnode_getoutputdistance(m_pHandle, &hDistance)); + + if (!hDistance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hDistance))); } /** - * CBeamLattice::GetBalls - obtains all ball indices and radii of a mesh object. - * @param[out] BallInfoBuffer - contains information of all balls - */ - void CBeamLattice::GetBalls(std::vector & BallInfoBuffer) - { - Lib3MF_uint64 elementsNeededBallInfo = 0; - Lib3MF_uint64 elementsWrittenBallInfo = 0; - CheckError(lib3mf_beamlattice_getballs(m_pHandle, 0, &elementsNeededBallInfo, nullptr)); - BallInfoBuffer.resize((size_t) elementsNeededBallInfo); - CheckError(lib3mf_beamlattice_getballs(m_pHandle, elementsNeededBallInfo, &elementsWrittenBallInfo, BallInfoBuffer.data())); - } + * Method definitions for class CUnsignedMeshNode + */ /** - * CBeamLattice::GetBeamSetCount - Returns the number of beamsets of a mesh object. - * @return filled with the beamset count. + * CUnsignedMeshNode::GetInputMesh - Retrieves the input for the model resource id of the mesh + * @return the input port for the model resource id of the mesh */ - Lib3MF_uint32 CBeamLattice::GetBeamSetCount() + PImplicitPort CUnsignedMeshNode::GetInputMesh() { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_beamlattice_getbeamsetcount(m_pHandle, &resultCount)); + Lib3MFHandle hMesh = nullptr; + CheckError(lib3mf_unsignedmeshnode_getinputmesh(m_pHandle, &hMesh)); - return resultCount; + if (!hMesh) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMesh))); } /** - * CBeamLattice::AddBeamSet - Adds an empty beamset to a mesh object - * @return the new beamset + * CUnsignedMeshNode::GetInputPos - Retrieves the input for the position + * @return the input port for the position */ - PBeamSet CBeamLattice::AddBeamSet() + PImplicitPort CUnsignedMeshNode::GetInputPos() { - Lib3MFHandle hBeamSet = nullptr; - CheckError(lib3mf_beamlattice_addbeamset(m_pHandle, &hBeamSet)); + Lib3MFHandle hPos = nullptr; + CheckError(lib3mf_unsignedmeshnode_getinputpos(m_pHandle, &hPos)); - if (!hBeamSet) { + if (!hPos) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBeamSet))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPos))); } /** - * CBeamLattice::GetBeamSet - Returns a beamset of a mesh object - * @param[in] nIndex - index of the requested beamset (0 ... beamsetcount-1). - * @return the requested beamset + * CUnsignedMeshNode::GetOutputDistance - Retrieves the output + * @return the output port for the unsigned distance to the mesh */ - PBeamSet CBeamLattice::GetBeamSet(const Lib3MF_uint32 nIndex) + PImplicitPort CUnsignedMeshNode::GetOutputDistance() { - Lib3MFHandle hBeamSet = nullptr; - CheckError(lib3mf_beamlattice_getbeamset(m_pHandle, nIndex, &hBeamSet)); + Lib3MFHandle hDistance = nullptr; + CheckError(lib3mf_unsignedmeshnode_getoutputdistance(m_pHandle, &hDistance)); - if (!hBeamSet) { + if (!hDistance) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBeamSet))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hDistance))); } /** - * Method definitions for class CComponent + * Method definitions for class CFunctionCallNode */ /** - * CComponent::GetObjectResource - Returns the Resource Instance of the component. - * @return filled with the Resource Instance. + * CFunctionCallNode::GetInputFunctionID - Retrieves the input for the function id + * @return the input port for the function */ - PObject CComponent::GetObjectResource() + PImplicitPort CFunctionCallNode::GetInputFunctionID() { - Lib3MFHandle hObjectResource = nullptr; - CheckError(lib3mf_component_getobjectresource(m_pHandle, &hObjectResource)); + Lib3MFHandle hFunction = nullptr; + CheckError(lib3mf_functioncallnode_getinputfunctionid(m_pHandle, &hFunction)); - if (!hObjectResource) { + if (!hFunction) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hObjectResource))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hFunction))); } /** - * CComponent::GetObjectResourceID - Returns the UniqueResourceID of the component. - * @return returns the UniqueResourceID. + * Method definitions for class CNodeIterator + */ + + /** + * CNodeIterator::GetCurrent - Returns the current element + * @return The current element */ - Lib3MF_uint32 CComponent::GetObjectResourceID() + PImplicitNode CNodeIterator::GetCurrent() { - Lib3MF_uint32 resultUniqueResourceID = 0; - CheckError(lib3mf_component_getobjectresourceid(m_pHandle, &resultUniqueResourceID)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_nodeiterator_getcurrent(m_pHandle, &hNode)); - return resultUniqueResourceID; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CComponent::GetUUID - returns, whether a component has a UUID and, if true, the component's UUID - * @param[out] bHasUUID - flag whether the component has a UUID - * @return the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + * Method definitions for class CFunction + */ + + /** + * CFunction::GetDisplayName - Retrieves the display name of the function + * @return the display name */ - std::string CComponent::GetUUID(bool & bHasUUID) + std::string CFunction::GetDisplayName() { - Lib3MF_uint32 bytesNeededUUID = 0; - Lib3MF_uint32 bytesWrittenUUID = 0; - CheckError(lib3mf_component_getuuid(m_pHandle, &bHasUUID, 0, &bytesNeededUUID, nullptr)); - std::vector bufferUUID(bytesNeededUUID); - CheckError(lib3mf_component_getuuid(m_pHandle, &bHasUUID, bytesNeededUUID, &bytesWrittenUUID, &bufferUUID[0])); + Lib3MF_uint32 bytesNeededDisplayName = 0; + Lib3MF_uint32 bytesWrittenDisplayName = 0; + CheckError(lib3mf_function_getdisplayname(m_pHandle, 0, &bytesNeededDisplayName, nullptr)); + std::vector bufferDisplayName(bytesNeededDisplayName); + CheckError(lib3mf_function_getdisplayname(m_pHandle, bytesNeededDisplayName, &bytesWrittenDisplayName, &bufferDisplayName[0])); - return std::string(&bufferUUID[0]); + return std::string(&bufferDisplayName[0]); } /** - * CComponent::SetUUID - sets the component's UUID - * @param[in] sUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + * CFunction::SetDisplayName - Sets the display name of the function + * @param[in] sDisplayName - the display name */ - void CComponent::SetUUID(const std::string & sUUID) + void CFunction::SetDisplayName(const std::string & sDisplayName) { - CheckError(lib3mf_component_setuuid(m_pHandle, sUUID.c_str())); + CheckError(lib3mf_function_setdisplayname(m_pHandle, sDisplayName.c_str())); } /** - * CComponent::HasTransform - Returns, if the component has a different transformation than the identity matrix - * @return if true is returned, the transformation is not equal than the identity + * CFunction::AddInput - Add an input + * @param[in] sIdentifier - the identifier of the input + * @param[in] sDisplayName - the display name of the input + * @param[in] eType - the type of the input + * @return The added input port */ - bool CComponent::HasTransform() + PImplicitPort CFunction::AddInput(const std::string & sIdentifier, const std::string & sDisplayName, const eImplicitPortType eType) { - bool resultHasTransform = 0; - CheckError(lib3mf_component_hastransform(m_pHandle, &resultHasTransform)); + Lib3MFHandle hPort = nullptr; + CheckError(lib3mf_function_addinput(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), eType, &hPort)); - return resultHasTransform; + if (!hPort) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPort))); } /** - * CComponent::GetTransform - Returns the transformation matrix of the component. - * @return filled with the component transformation matrix + * CFunction::GetInputs - Retrieves the inputs + * @return iterator for the list of inputs */ - sTransform CComponent::GetTransform() + PImplicitPortIterator CFunction::GetInputs() { - sTransform resultTransform; - CheckError(lib3mf_component_gettransform(m_pHandle, &resultTransform)); + Lib3MFHandle hIterator = nullptr; + CheckError(lib3mf_function_getinputs(m_pHandle, &hIterator)); - return resultTransform; + if (!hIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hIterator))); } /** - * CComponent::SetTransform - Sets the transformation matrix of the component. - * @param[in] Transform - new transformation matrix + * CFunction::RemoveInput - Removes an input + * @param[in] pInput - The input to be removed */ - void CComponent::SetTransform(const sTransform & Transform) + void CFunction::RemoveInput(classParam pInput) { - CheckError(lib3mf_component_settransform(m_pHandle, &Transform)); + Lib3MFHandle hInput = pInput.GetHandle(); + CheckError(lib3mf_function_removeinput(m_pHandle, hInput)); } /** - * Method definitions for class CComponentsObject - */ - - /** - * CComponentsObject::AddComponent - Adds a new component to a components object. - * @param[in] pObjectResource - object to add as component. Must not lead to circular references! - * @param[in] Transform - optional transform matrix for the component. - * @return new component instance + * CFunction::AddOutput - Add an output + * @param[in] sIdentifier - the identifier of the output + * @param[in] sDisplayName - the display name of the output + * @param[in] eType - the type of the input + * @return The added input port */ - PComponent CComponentsObject::AddComponent(classParam pObjectResource, const sTransform & Transform) + PImplicitPort CFunction::AddOutput(const std::string & sIdentifier, const std::string & sDisplayName, const eImplicitPortType eType) { - Lib3MFHandle hObjectResource = pObjectResource.GetHandle(); - Lib3MFHandle hComponentInstance = nullptr; - CheckError(lib3mf_componentsobject_addcomponent(m_pHandle, hObjectResource, &Transform, &hComponentInstance)); + Lib3MFHandle hPort = nullptr; + CheckError(lib3mf_function_addoutput(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), eType, &hPort)); - if (!hComponentInstance) { + if (!hPort) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hComponentInstance))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPort))); } /** - * CComponentsObject::GetComponent - Retrieves a component from a component object. - * @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) - * @return component instance + * CFunction::GetOutputs - Retrieves the outputs + * @return iterator for the outputs */ - PComponent CComponentsObject::GetComponent(const Lib3MF_uint32 nIndex) + PImplicitPortIterator CFunction::GetOutputs() { - Lib3MFHandle hComponentInstance = nullptr; - CheckError(lib3mf_componentsobject_getcomponent(m_pHandle, nIndex, &hComponentInstance)); + Lib3MFHandle hIterator = nullptr; + CheckError(lib3mf_function_getoutputs(m_pHandle, &hIterator)); - if (!hComponentInstance) { + if (!hIterator) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hComponentInstance))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hIterator))); } /** - * CComponentsObject::GetComponentCount - Retrieves a component count of a component object. - * @return returns the component count + * CFunction::RemoveOutput - Removes an output + * @param[in] pOutput - The output to be removed */ - Lib3MF_uint32 CComponentsObject::GetComponentCount() + void CFunction::RemoveOutput(classParam pOutput) { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_componentsobject_getcomponentcount(m_pHandle, &resultCount)); - - return resultCount; + Lib3MFHandle hOutput = pOutput.GetHandle(); + CheckError(lib3mf_function_removeoutput(m_pHandle, hOutput)); } /** - * Method definitions for class CBeamSet - */ - - /** - * CBeamSet::SetName - Sets a beamset's name string - * @param[in] sName - new name of the beamset. + * CFunction::FindInput - Retrieves an input + * @param[in] sIdentifier - the identifier of the input + * @return the input port */ - void CBeamSet::SetName(const std::string & sName) + PImplicitPort CFunction::FindInput(const std::string & sIdentifier) { - CheckError(lib3mf_beamset_setname(m_pHandle, sName.c_str())); + Lib3MFHandle hInput = nullptr; + CheckError(lib3mf_function_findinput(m_pHandle, sIdentifier.c_str(), &hInput)); + + if (!hInput) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hInput))); } /** - * CBeamSet::GetName - Retrieves a beamset's name string - * @return returns the name of the beamset. + * CFunction::FindOutput - Retrieves an output + * @param[in] sIdentifier - the identifier of the output + * @return the output port */ - std::string CBeamSet::GetName() + PImplicitPort CFunction::FindOutput(const std::string & sIdentifier) { - Lib3MF_uint32 bytesNeededName = 0; - Lib3MF_uint32 bytesWrittenName = 0; - CheckError(lib3mf_beamset_getname(m_pHandle, 0, &bytesNeededName, nullptr)); - std::vector bufferName(bytesNeededName); - CheckError(lib3mf_beamset_getname(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); + Lib3MFHandle hOutput = nullptr; + CheckError(lib3mf_function_findoutput(m_pHandle, sIdentifier.c_str(), &hOutput)); - return std::string(&bufferName[0]); + if (!hOutput) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hOutput))); } /** - * CBeamSet::SetIdentifier - Sets a beamset's identifier string - * @param[in] sIdentifier - new name of the beamset. - */ - void CBeamSet::SetIdentifier(const std::string & sIdentifier) - { - CheckError(lib3mf_beamset_setidentifier(m_pHandle, sIdentifier.c_str())); - } + * Method definitions for class CImplicitFunction + */ /** - * CBeamSet::GetIdentifier - Retrieves a beamset's identifier string - * @return returns the identifier of the beamset. + * CImplicitFunction::GetIdentifier - Retrieves the identifier of the function + * @return the identifier */ - std::string CBeamSet::GetIdentifier() + std::string CImplicitFunction::GetIdentifier() { Lib3MF_uint32 bytesNeededIdentifier = 0; Lib3MF_uint32 bytesWrittenIdentifier = 0; - CheckError(lib3mf_beamset_getidentifier(m_pHandle, 0, &bytesNeededIdentifier, nullptr)); + CheckError(lib3mf_implicitfunction_getidentifier(m_pHandle, 0, &bytesNeededIdentifier, nullptr)); std::vector bufferIdentifier(bytesNeededIdentifier); - CheckError(lib3mf_beamset_getidentifier(m_pHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0])); + CheckError(lib3mf_implicitfunction_getidentifier(m_pHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0])); return std::string(&bufferIdentifier[0]); } /** - * CBeamSet::GetReferenceCount - Retrieves the reference count of a beamset - * @return returns the reference count + * CImplicitFunction::SetIdentifier - Sets the identifier of the function + * @param[in] sIdentifier - the identifier */ - Lib3MF_uint32 CBeamSet::GetReferenceCount() + void CImplicitFunction::SetIdentifier(const std::string & sIdentifier) { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_beamset_getreferencecount(m_pHandle, &resultCount)); - - return resultCount; + CheckError(lib3mf_implicitfunction_setidentifier(m_pHandle, sIdentifier.c_str())); } /** - * CBeamSet::SetReferences - Sets the references of a beamset - * @param[in] ReferencesBuffer - the new indices of all beams in this beamset + * CImplicitFunction::AddNode - Add a node + * @param[in] eNodeType - the type of the node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBeamSet::SetReferences(const CInputVector & ReferencesBuffer) + PImplicitNode CImplicitFunction::AddNode(const eImplicitNodeType eNodeType, const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_beamset_setreferences(m_pHandle, (Lib3MF_uint64)ReferencesBuffer.size(), ReferencesBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addnode(m_pHandle, eNodeType, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBeamSet::GetReferences - Retrieves the references of a beamset - * @param[out] ReferencesBuffer - retrieves the indices of all beams in this beamset + * CImplicitFunction::AddSinNode - Add a SinNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBeamSet::GetReferences(std::vector & ReferencesBuffer) + PSinNode CImplicitFunction::AddSinNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededReferences = 0; - Lib3MF_uint64 elementsWrittenReferences = 0; - CheckError(lib3mf_beamset_getreferences(m_pHandle, 0, &elementsNeededReferences, nullptr)); - ReferencesBuffer.resize((size_t) elementsNeededReferences); - CheckError(lib3mf_beamset_getreferences(m_pHandle, elementsNeededReferences, &elementsWrittenReferences, ReferencesBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addsinnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBeamSet::GetBallReferenceCount - Retrieves the ball reference count of a beamset - * @return returns the ball reference count + * CImplicitFunction::AddCosNode - Add a CosNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CBeamSet::GetBallReferenceCount() + PCosNode CImplicitFunction::AddCosNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_beamset_getballreferencecount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addcosnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBeamSet::SetBallReferences - Sets the ball references of a beamset - * @param[in] BallReferencesBuffer - the new indices of all balls in this beamset + * CImplicitFunction::AddTanNode - Add a TanNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBeamSet::SetBallReferences(const CInputVector & BallReferencesBuffer) + PTanNode CImplicitFunction::AddTanNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_beamset_setballreferences(m_pHandle, (Lib3MF_uint64)BallReferencesBuffer.size(), BallReferencesBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addtannode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBeamSet::GetBallReferences - Retrieves the ball references of a beamset - * @param[out] BallReferencesBuffer - retrieves the indices of all balls in this beamset + * CImplicitFunction::AddArcSinNode - Add a ArcSinNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBeamSet::GetBallReferences(std::vector & BallReferencesBuffer) + PArcSinNode CImplicitFunction::AddArcSinNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededBallReferences = 0; - Lib3MF_uint64 elementsWrittenBallReferences = 0; - CheckError(lib3mf_beamset_getballreferences(m_pHandle, 0, &elementsNeededBallReferences, nullptr)); - BallReferencesBuffer.resize((size_t) elementsNeededBallReferences); - CheckError(lib3mf_beamset_getballreferences(m_pHandle, elementsNeededBallReferences, &elementsWrittenBallReferences, BallReferencesBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addarcsinnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * Method definitions for class CBaseMaterialGroup - */ + * CImplicitFunction::AddArcCosNode - Add a ArcCosNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + PArcCosNode CImplicitFunction::AddArcCosNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) + { + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addarccosnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); + } /** - * CBaseMaterialGroup::GetCount - Retrieves the count of base materials in the material group. - * @return returns the count of base materials. + * CImplicitFunction::AddArcTan2Node - Add a ArcTan2Node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CBaseMaterialGroup::GetCount() + PArcTan2Node CImplicitFunction::AddArcTan2Node(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_basematerialgroup_getcount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addarctan2node(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::GetAllPropertyIDs - returns all the PropertyIDs of all materials in this group - * @param[out] PropertyIDsBuffer - PropertyID of the material in the material group. + * CImplicitFunction::AddSinhNode - Add a SinhNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBaseMaterialGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + PSinhNode CImplicitFunction::AddSinhNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededPropertyIDs = 0; - Lib3MF_uint64 elementsWrittenPropertyIDs = 0; - CheckError(lib3mf_basematerialgroup_getallpropertyids(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); - PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); - CheckError(lib3mf_basematerialgroup_getallpropertyids(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addsinhnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::AddMaterial - Adds a new material to the material group - * @param[in] sName - new name of the base material. - * @param[in] DisplayColor - Display color of the material - * @return returns new PropertyID of the new material in the material group. + * CImplicitFunction::AddCoshNode - Add a CoshNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CBaseMaterialGroup::AddMaterial(const std::string & sName, const sColor & DisplayColor) + PCoshNode CImplicitFunction::AddCoshNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultPropertyID = 0; - CheckError(lib3mf_basematerialgroup_addmaterial(m_pHandle, sName.c_str(), &DisplayColor, &resultPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addcoshnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultPropertyID; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::RemoveMaterial - Removes a material from the material group. - * @param[in] nPropertyID - PropertyID of the material in the material group. + * CImplicitFunction::AddTanhNode - Add a TanhNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBaseMaterialGroup::RemoveMaterial(const Lib3MF_uint32 nPropertyID) + PTanhNode CImplicitFunction::AddTanhNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_basematerialgroup_removematerial(m_pHandle, nPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addtanhnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::GetName - Returns the base material's name - * @param[in] nPropertyID - PropertyID of the material in the material group. - * @return returns the name of the base material. + * CImplicitFunction::AddRoundNode - Add a RoundNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - std::string CBaseMaterialGroup::GetName(const Lib3MF_uint32 nPropertyID) + PRoundNode CImplicitFunction::AddRoundNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 bytesNeededName = 0; - Lib3MF_uint32 bytesWrittenName = 0; - CheckError(lib3mf_basematerialgroup_getname(m_pHandle, nPropertyID, 0, &bytesNeededName, nullptr)); - std::vector bufferName(bytesNeededName); - CheckError(lib3mf_basematerialgroup_getname(m_pHandle, nPropertyID, bytesNeededName, &bytesWrittenName, &bufferName[0])); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addroundnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return std::string(&bufferName[0]); + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::SetName - Sets a base material's name - * @param[in] nPropertyID - PropertyID of the material in the material group. - * @param[in] sName - new name of the base material. + * CImplicitFunction::AddCeilNode - Add a CeilNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBaseMaterialGroup::SetName(const Lib3MF_uint32 nPropertyID, const std::string & sName) + PCeilNode CImplicitFunction::AddCeilNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_basematerialgroup_setname(m_pHandle, nPropertyID, sName.c_str())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addceilnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::SetDisplayColor - Sets a base material's display color. - * @param[in] nPropertyID - PropertyID of the material in the material group. - * @param[in] TheColor - The base material's display color + * CImplicitFunction::AddFloorNode - Add a FloorNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBaseMaterialGroup::SetDisplayColor(const Lib3MF_uint32 nPropertyID, const sColor & TheColor) + PFloorNode CImplicitFunction::AddFloorNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_basematerialgroup_setdisplaycolor(m_pHandle, nPropertyID, &TheColor)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addfloornode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::GetDisplayColor - Returns a base material's display color. - * @param[in] nPropertyID - PropertyID of the material in the material group. - * @return The base material's display color + * CImplicitFunction::AddSignNode - Add a SignNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - sColor CBaseMaterialGroup::GetDisplayColor(const Lib3MF_uint32 nPropertyID) + PSignNode CImplicitFunction::AddSignNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - sColor resultTheColor; - CheckError(lib3mf_basematerialgroup_getdisplaycolor(m_pHandle, nPropertyID, &resultTheColor)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addsignnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultTheColor; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * Method definitions for class CColorGroup - */ - - /** - * CColorGroup::GetCount - Retrieves the count of base materials in this Color Group. - * @return returns the count of colors within this color group. + * CImplicitFunction::AddFractNode - Add a FractNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CColorGroup::GetCount() + PFractNode CImplicitFunction::AddFractNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_colorgroup_getcount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addfractnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CColorGroup::GetAllPropertyIDs - returns all the PropertyIDs of all colors within this group - * @param[out] PropertyIDsBuffer - PropertyID of the color in the color group. + * CImplicitFunction::AddAbsNode - Add a AbsNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CColorGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + PAbsNode CImplicitFunction::AddAbsNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededPropertyIDs = 0; - Lib3MF_uint64 elementsWrittenPropertyIDs = 0; - CheckError(lib3mf_colorgroup_getallpropertyids(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); - PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); - CheckError(lib3mf_colorgroup_getallpropertyids(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addabsnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CColorGroup::AddColor - Adds a new value. - * @param[in] TheColor - The new color - * @return PropertyID of the new color within this color group. + * CImplicitFunction::AddExpNode - Add a ExpNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CColorGroup::AddColor(const sColor & TheColor) + PExpNode CImplicitFunction::AddExpNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultPropertyID = 0; - CheckError(lib3mf_colorgroup_addcolor(m_pHandle, &TheColor, &resultPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addexpnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultPropertyID; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CColorGroup::RemoveColor - Removes a color from the color group. - * @param[in] nPropertyID - PropertyID of the color to be removed from the color group. + * CImplicitFunction::AddLogNode - Add a LogNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CColorGroup::RemoveColor(const Lib3MF_uint32 nPropertyID) + PLogNode CImplicitFunction::AddLogNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_colorgroup_removecolor(m_pHandle, nPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addlognode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CColorGroup::SetColor - Sets a color value. - * @param[in] nPropertyID - PropertyID of a color within this color group. - * @param[in] TheColor - The color + * CImplicitFunction::AddLog2Node - Add a Log2Node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CColorGroup::SetColor(const Lib3MF_uint32 nPropertyID, const sColor & TheColor) + PLog2Node CImplicitFunction::AddLog2Node(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_colorgroup_setcolor(m_pHandle, nPropertyID, &TheColor)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addlog2node(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CColorGroup::GetColor - Sets a color value. - * @param[in] nPropertyID - PropertyID of a color within this color group. - * @return The color + * CImplicitFunction::AddLog10Node - Add a Log10Node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - sColor CColorGroup::GetColor(const Lib3MF_uint32 nPropertyID) + PLog10Node CImplicitFunction::AddLog10Node(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - sColor resultTheColor; - CheckError(lib3mf_colorgroup_getcolor(m_pHandle, nPropertyID, &resultTheColor)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addlog10node(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultTheColor; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * Method definitions for class CTexture2DGroup - */ + * CImplicitFunction::AddLengthNode - Add a LengthNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + PLengthNode CImplicitFunction::AddLengthNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) + { + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addlengthnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); + } /** - * CTexture2DGroup::GetCount - Retrieves the count of tex2coords in the Texture2DGroup. - * @return returns the count of tex2coords. + * CImplicitFunction::AddTransposeNode - Add a TransposeNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CTexture2DGroup::GetCount() + PTransposeNode CImplicitFunction::AddTransposeNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_texture2dgroup_getcount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addtransposenode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CTexture2DGroup::GetAllPropertyIDs - returns all the PropertyIDs of all tex2coords in this Texture2DGroup - * @param[out] PropertyIDsBuffer - PropertyID of the tex2coords in the Texture2DGroup. + * CImplicitFunction::InverseNode - Add a InverseNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CTexture2DGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + PInverseNode CImplicitFunction::InverseNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededPropertyIDs = 0; - Lib3MF_uint64 elementsWrittenPropertyIDs = 0; - CheckError(lib3mf_texture2dgroup_getallpropertyids(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); - PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); - CheckError(lib3mf_texture2dgroup_getallpropertyids(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_inversenode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CTexture2DGroup::AddTex2Coord - Adds a new tex2coord to the Texture2DGroup - * @param[in] UVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. - * @return returns new PropertyID of the new tex2coord in the Texture2DGroup. + * CImplicitFunction::AddSqrtNode - Add a SqrtNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CTexture2DGroup::AddTex2Coord(const sTex2Coord & UVCoordinate) + PSqrtNode CImplicitFunction::AddSqrtNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultPropertyID = 0; - CheckError(lib3mf_texture2dgroup_addtex2coord(m_pHandle, &UVCoordinate, &resultPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addsqrtnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultPropertyID; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CTexture2DGroup::GetTex2Coord - Obtains a tex2coord to the Texture2DGroup - * @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. - * @return The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. + * CImplicitFunction::AddResourceIdNode - Add a ResourceIdNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - sTex2Coord CTexture2DGroup::GetTex2Coord(const Lib3MF_uint32 nPropertyID) + PResourceIdNode CImplicitFunction::AddResourceIdNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - sTex2Coord resultUVCoordinate; - CheckError(lib3mf_texture2dgroup_gettex2coord(m_pHandle, nPropertyID, &resultUVCoordinate)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addresourceidnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultUVCoordinate; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CTexture2DGroup::RemoveTex2Coord - Removes a tex2coords from the Texture2DGroup. - * @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. + * CImplicitFunction::AddAdditionNode - Add an AdditionNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CTexture2DGroup::RemoveTex2Coord(const Lib3MF_uint32 nPropertyID) + PAdditionNode CImplicitFunction::AddAdditionNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_texture2dgroup_removetex2coord(m_pHandle, nPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addadditionnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CTexture2DGroup::GetTexture2D - Obtains the texture2D instance of this group. - * @return the texture2D instance of this group. + * CImplicitFunction::AddSubtractionNode - Add a SubtractionNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - PTexture2D CTexture2DGroup::GetTexture2D() + PSubtractionNode CImplicitFunction::AddSubtractionNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MFHandle hTexture2DInstance = nullptr; - CheckError(lib3mf_texture2dgroup_gettexture2d(m_pHandle, &hTexture2DInstance)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addsubtractionnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - if (!hTexture2DInstance) { + if (!hNode) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTexture2DInstance))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * Method definitions for class CCompositeMaterials - */ + * CImplicitFunction::AddMultiplicationNode - Add a MultiplicationNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + PMultiplicationNode CImplicitFunction::AddMultiplicationNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) + { + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addmultiplicationnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); + } /** - * CCompositeMaterials::GetCount - Retrieves the count of Composite-s in the CompositeMaterials. - * @return returns the count of Composite-s + * CImplicitFunction::AddDivisionNode - Add a DivisionNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CCompositeMaterials::GetCount() + PDivisionNode CImplicitFunction::AddDivisionNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_compositematerials_getcount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_adddivisionnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CCompositeMaterials::GetAllPropertyIDs - returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials - * @param[out] PropertyIDsBuffer - PropertyID of the Composite-Mixing Values in the CompositeMaterials. + * CImplicitFunction::AddDotNode - Add a DotNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CCompositeMaterials::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + PDotNode CImplicitFunction::AddDotNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededPropertyIDs = 0; - Lib3MF_uint64 elementsWrittenPropertyIDs = 0; - CheckError(lib3mf_compositematerials_getallpropertyids(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); - PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); - CheckError(lib3mf_compositematerials_getallpropertyids(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_adddotnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CCompositeMaterials::GetBaseMaterialGroup - Obtains the BaseMaterialGroup instance of this CompositeMaterials. - * @return returns the BaseMaterialGroup instance of this CompositeMaterials + * CImplicitFunction::AddCrossNode - Add a CrossNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - PBaseMaterialGroup CCompositeMaterials::GetBaseMaterialGroup() + PCrossNode CImplicitFunction::AddCrossNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MFHandle hBaseMaterialGroupInstance = nullptr; - CheckError(lib3mf_compositematerials_getbasematerialgroup(m_pHandle, &hBaseMaterialGroupInstance)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addcrossnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - if (!hBaseMaterialGroupInstance) { + if (!hNode) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBaseMaterialGroupInstance))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CCompositeMaterials::AddComposite - Adds a new Composite-Mixing Values to the CompositeMaterials. - * @param[in] CompositeBuffer - The Composite Constituents to be added as composite - * @return returns new PropertyID of the new Composite in the CompositeMaterials. + * CImplicitFunction::AddMatVecMultiplicationNode - Add a MatVecMultiplicationNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CCompositeMaterials::AddComposite(const CInputVector & CompositeBuffer) + PMatVecMultiplicationNode CImplicitFunction::AddMatVecMultiplicationNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultPropertyID = 0; - CheckError(lib3mf_compositematerials_addcomposite(m_pHandle, (Lib3MF_uint64)CompositeBuffer.size(), CompositeBuffer.data(), &resultPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addmatvecmultiplicationnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultPropertyID; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CCompositeMaterials::RemoveComposite - Removes a Composite-Maxing Ratio from the CompositeMaterials. - * @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. + * CImplicitFunction::AddMinNode - Add a MinNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CCompositeMaterials::RemoveComposite(const Lib3MF_uint32 nPropertyID) + PMinNode CImplicitFunction::AddMinNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_compositematerials_removecomposite(m_pHandle, nPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addminnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CCompositeMaterials::GetComposite - Obtains a Composite-Maxing Ratio of this CompositeMaterials. - * @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. - * @param[out] CompositeBuffer - The Composite-Mixing Values with the given PropertyID + * CImplicitFunction::AddMaxNode - Add a MaxNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CCompositeMaterials::GetComposite(const Lib3MF_uint32 nPropertyID, std::vector & CompositeBuffer) + PMaxNode CImplicitFunction::AddMaxNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededComposite = 0; - Lib3MF_uint64 elementsWrittenComposite = 0; - CheckError(lib3mf_compositematerials_getcomposite(m_pHandle, nPropertyID, 0, &elementsNeededComposite, nullptr)); - CompositeBuffer.resize((size_t) elementsNeededComposite); - CheckError(lib3mf_compositematerials_getcomposite(m_pHandle, nPropertyID, elementsNeededComposite, &elementsWrittenComposite, CompositeBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addmaxnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * Method definitions for class CMultiPropertyGroup - */ + * CImplicitFunction::AddFmodNode - Add a FmodNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + PFmodNode CImplicitFunction::AddFmodNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) + { + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addfmodnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); + } /** - * CMultiPropertyGroup::GetCount - Retrieves the count of MultiProperty-s in the MultiPropertyGroup. - * @return returns the count of MultiProperty-s + * CImplicitFunction::AddPowNode - Add a PowNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CMultiPropertyGroup::GetCount() + PPowNode CImplicitFunction::AddPowNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_multipropertygroup_getcount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addpownode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::GetAllPropertyIDs - returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup - * @param[out] PropertyIDsBuffer - PropertyID of the MultiProperty-s in the MultiPropertyGroup. + * CImplicitFunction::AddSelectNode - Add a SelectNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CMultiPropertyGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + PSelectNode CImplicitFunction::AddSelectNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededPropertyIDs = 0; - Lib3MF_uint64 elementsWrittenPropertyIDs = 0; - CheckError(lib3mf_multipropertygroup_getallpropertyids(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); - PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); - CheckError(lib3mf_multipropertygroup_getallpropertyids(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addselectnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::AddMultiProperty - Adds a new MultiProperty to the MultiPropertyGroup. - * @param[in] PropertyIDsBuffer - The PropertyIDs of the new MultiProperty. - * @return returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. + * CImplicitFunction::AddClampNode - Add a ClampNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CMultiPropertyGroup::AddMultiProperty(const CInputVector & PropertyIDsBuffer) + PClampNode CImplicitFunction::AddClampNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultPropertyID = 0; - CheckError(lib3mf_multipropertygroup_addmultiproperty(m_pHandle, (Lib3MF_uint64)PropertyIDsBuffer.size(), PropertyIDsBuffer.data(), &resultPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addclampnode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultPropertyID; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::SetMultiProperty - Sets the PropertyIDs of a MultiProperty. - * @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. - * @param[in] PropertyIDsBuffer - The new PropertyIDs of the MultiProperty + * CImplicitFunction::AddComposeVectorNode - Add a ComposeVectorNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CMultiPropertyGroup::SetMultiProperty(const Lib3MF_uint32 nPropertyID, const CInputVector & PropertyIDsBuffer) + PComposeVectorNode CImplicitFunction::AddComposeVectorNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_multipropertygroup_setmultiproperty(m_pHandle, nPropertyID, (Lib3MF_uint64)PropertyIDsBuffer.size(), PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addcomposevectornode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::GetMultiProperty - Obtains the PropertyIDs of a MultiProperty. - * @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. - * @param[out] PropertyIDsBuffer - The PropertyIDs of the MultiProperty + * CImplicitFunction::AddVectorFromScalarNode - Add a VectorFromScalar + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CMultiPropertyGroup::GetMultiProperty(const Lib3MF_uint32 nPropertyID, std::vector & PropertyIDsBuffer) + PVectorFromScalarNode CImplicitFunction::AddVectorFromScalarNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededPropertyIDs = 0; - Lib3MF_uint64 elementsWrittenPropertyIDs = 0; - CheckError(lib3mf_multipropertygroup_getmultiproperty(m_pHandle, nPropertyID, 0, &elementsNeededPropertyIDs, nullptr)); - PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); - CheckError(lib3mf_multipropertygroup_getmultiproperty(m_pHandle, nPropertyID, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addvectorfromscalarnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::RemoveMultiProperty - Removes a MultiProperty from this MultiPropertyGroup. - * @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. + * CImplicitFunction::AddDecomposeVectorNode - Add a DecomposeVectorNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CMultiPropertyGroup::RemoveMultiProperty(const Lib3MF_uint32 nPropertyID) + PDecomposeVectorNode CImplicitFunction::AddDecomposeVectorNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_multipropertygroup_removemultiproperty(m_pHandle, nPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_adddecomposevectornode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::GetLayerCount - Retrieves the number of layers of this MultiPropertyGroup. - * @return returns the number of layers + * CImplicitFunction::AddComposeMatrixNode - Add a ComposeMatrixNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CMultiPropertyGroup::GetLayerCount() + PComposeMatrixNode CImplicitFunction::AddComposeMatrixNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(lib3mf_multipropertygroup_getlayercount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addcomposematrixnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::AddLayer - Adds a MultiPropertyLayer to this MultiPropertyGroup. - * @param[in] TheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup - * @return returns the index of this MultiPropertyLayer + * CImplicitFunction::AddMatrixFromRowsNode - Add a MatrixFromRowsNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CMultiPropertyGroup::AddLayer(const sMultiPropertyLayer & TheLayer) + PMatrixFromRowsNode CImplicitFunction::AddMatrixFromRowsNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultLayerIndex = 0; - CheckError(lib3mf_multipropertygroup_addlayer(m_pHandle, &TheLayer, &resultLayerIndex)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addmatrixfromrowsnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultLayerIndex; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::GetLayer - Obtains a MultiPropertyLayer of this MultiPropertyGroup. - * @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried - * @return The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup + * CImplicitFunction::AddMatrixFromColumnsNode - Add a MatrixFromColumnsNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - sMultiPropertyLayer CMultiPropertyGroup::GetLayer(const Lib3MF_uint32 nLayerIndex) + PMatrixFromColumnsNode CImplicitFunction::AddMatrixFromColumnsNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - sMultiPropertyLayer resultTheLayer; - CheckError(lib3mf_multipropertygroup_getlayer(m_pHandle, nLayerIndex, &resultTheLayer)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addmatrixfromcolumnsnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultTheLayer; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::RemoveLayer - Removes a MultiPropertyLayer from this MultiPropertyGroup. - * @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed + * CImplicitFunction::AddConstantNode - Add a ConstantNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CMultiPropertyGroup::RemoveLayer(const Lib3MF_uint32 nLayerIndex) + PConstantNode CImplicitFunction::AddConstantNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_multipropertygroup_removelayer(m_pHandle, nLayerIndex)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addconstantnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * Method definitions for class CAttachment - */ - - /** - * CAttachment::GetPath - Retrieves an attachment's package path. This function will be removed in a later release. - * @return returns the attachment's package path string + * CImplicitFunction::AddConstVecNode - Add a ConstVecNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - std::string CAttachment::GetPath() + PConstVecNode CImplicitFunction::AddConstVecNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 bytesNeededPath = 0; - Lib3MF_uint32 bytesWrittenPath = 0; - CheckError(lib3mf_attachment_getpath(m_pHandle, 0, &bytesNeededPath, nullptr)); - std::vector bufferPath(bytesNeededPath); - CheckError(lib3mf_attachment_getpath(m_pHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0])); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addconstvecnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return std::string(&bufferPath[0]); + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CAttachment::SetPath - Sets an attachment's package path. This function will be removed in a later release. - * @param[in] sPath - new path of the attachment. + * CImplicitFunction::AddConstMatNode - Add a ConstMatNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CAttachment::SetPath(const std::string & sPath) + PConstMatNode CImplicitFunction::AddConstMatNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_attachment_setpath(m_pHandle, sPath.c_str())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addconstmatnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CAttachment::PackagePart - Returns the PackagePart that is this attachment. - * @return The PackagePart of this attachment. + * CImplicitFunction::AddMeshNode - Add a MeshNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - PPackagePart CAttachment::PackagePart() + PMeshNode CImplicitFunction::AddMeshNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MFHandle hPackagePart = nullptr; - CheckError(lib3mf_attachment_packagepart(m_pHandle, &hPackagePart)); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addmeshnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - if (!hPackagePart) { + if (!hNode) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPackagePart))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CAttachment::GetRelationShipType - Retrieves an attachment's relationship type - * @return returns the attachment's package relationship type string + * CImplicitFunction::AddUnsignedMeshNode - Add a UnsignedMeshNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - std::string CAttachment::GetRelationShipType() + PUnsignedMeshNode CImplicitFunction::AddUnsignedMeshNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 bytesNeededPath = 0; - Lib3MF_uint32 bytesWrittenPath = 0; - CheckError(lib3mf_attachment_getrelationshiptype(m_pHandle, 0, &bytesNeededPath, nullptr)); - std::vector bufferPath(bytesNeededPath); - CheckError(lib3mf_attachment_getrelationshiptype(m_pHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0])); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addunsignedmeshnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return std::string(&bufferPath[0]); + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CAttachment::SetRelationShipType - Sets an attachment's relationship type. - * @param[in] sPath - new relationship type string. + * CImplicitFunction::AddFunctionCallNode - Add a FunctionCallNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CAttachment::SetRelationShipType(const std::string & sPath) + PFunctionCallNode CImplicitFunction::AddFunctionCallNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - CheckError(lib3mf_attachment_setrelationshiptype(m_pHandle, sPath.c_str())); + Lib3MFHandle hNode = nullptr; + CheckError(lib3mf_implicitfunction_addfunctioncallnode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CAttachment::WriteToFile - Writes out the attachment as file. - * @param[in] sFileName - file to write into. + * CImplicitFunction::GetNodes - Retrieves the nodes + * @return iterator for the list of nodes */ - void CAttachment::WriteToFile(const std::string & sFileName) + PNodeIterator CImplicitFunction::GetNodes() { - CheckError(lib3mf_attachment_writetofile(m_pHandle, sFileName.c_str())); + Lib3MFHandle hIterator = nullptr; + CheckError(lib3mf_implicitfunction_getnodes(m_pHandle, &hIterator)); + + if (!hIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hIterator))); } /** - * CAttachment::ReadFromFile - Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. - * @param[in] sFileName - file to read from. + * CImplicitFunction::RemoveNode - Removes a node + * @param[in] pNode - The node to be removed */ - void CAttachment::ReadFromFile(const std::string & sFileName) + void CImplicitFunction::RemoveNode(classParam pNode) { - CheckError(lib3mf_attachment_readfromfile(m_pHandle, sFileName.c_str())); + Lib3MFHandle hNode = pNode.GetHandle(); + CheckError(lib3mf_implicitfunction_removenode(m_pHandle, hNode)); } /** - * CAttachment::ReadFromCallback - Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. - * @param[in] pTheReadCallback - Callback to call for reading a data chunk - * @param[in] nStreamSize - number of bytes the callback returns - * @param[in] pTheSeekCallback - Callback to call for seeking in the stream. - * @param[in] pUserData - Userdata that is passed to the callback function + * CImplicitFunction::AddLink - Add a link + * @param[in] pSource - the source port + * @param[in] pTarget - the target port */ - void CAttachment::ReadFromCallback(const ReadCallback pTheReadCallback, const Lib3MF_uint64 nStreamSize, const SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) + void CImplicitFunction::AddLink(classParam pSource, classParam pTarget) { - CheckError(lib3mf_attachment_readfromcallback(m_pHandle, pTheReadCallback, nStreamSize, pTheSeekCallback, pUserData)); + Lib3MFHandle hSource = pSource.GetHandle(); + Lib3MFHandle hTarget = pTarget.GetHandle(); + CheckError(lib3mf_implicitfunction_addlink(m_pHandle, hSource, hTarget)); } /** - * CAttachment::GetStreamSize - Retrieves the size of the attachment stream - * @return the stream size + * CImplicitFunction::AddLinkByNames - Add a link + * @param[in] sSource - name of the source port in the format nodename.portname + * @param[in] sTarget - name of the target port in the format nodename.portname */ - Lib3MF_uint64 CAttachment::GetStreamSize() + void CImplicitFunction::AddLinkByNames(const std::string & sSource, const std::string & sTarget) { - Lib3MF_uint64 resultStreamSize = 0; - CheckError(lib3mf_attachment_getstreamsize(m_pHandle, &resultStreamSize)); - - return resultStreamSize; + CheckError(lib3mf_implicitfunction_addlinkbynames(m_pHandle, sSource.c_str(), sTarget.c_str())); } /** - * CAttachment::WriteToBuffer - Writes out the attachment into a buffer - * @param[out] BufferBuffer - Buffer to write into + * CImplicitFunction::Clear - Clears the function */ - void CAttachment::WriteToBuffer(std::vector & BufferBuffer) + void CImplicitFunction::Clear() { - Lib3MF_uint64 elementsNeededBuffer = 0; - Lib3MF_uint64 elementsWrittenBuffer = 0; - CheckError(lib3mf_attachment_writetobuffer(m_pHandle, 0, &elementsNeededBuffer, nullptr)); - BufferBuffer.resize((size_t) elementsNeededBuffer); - CheckError(lib3mf_attachment_writetobuffer(m_pHandle, elementsNeededBuffer, &elementsWrittenBuffer, BufferBuffer.data())); + CheckError(lib3mf_implicitfunction_clear(m_pHandle)); } /** - * CAttachment::ReadFromBuffer - Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). - * @param[in] BufferBuffer - Buffer to read from + * CImplicitFunction::SortNodesTopologically - Sorts the nodes topologically */ - void CAttachment::ReadFromBuffer(const CInputVector & BufferBuffer) + void CImplicitFunction::SortNodesTopologically() { - CheckError(lib3mf_attachment_readfrombuffer(m_pHandle, (Lib3MF_uint64)BufferBuffer.size(), BufferBuffer.data())); + CheckError(lib3mf_implicitfunction_sortnodestopologically(m_pHandle)); } /** - * Method definitions for class CTexture2D + * Method definitions for class CFunctionFromImage3D */ /** - * CTexture2D::GetAttachment - Retrieves the attachment located at the path of the texture. - * @return attachment that holds the texture's image information. + * CFunctionFromImage3D::GetImage3D - Returns the selected 3D image. + * @return image instance */ - PAttachment CTexture2D::GetAttachment() + PImage3D CFunctionFromImage3D::GetImage3D() { - Lib3MFHandle hAttachment = nullptr; - CheckError(lib3mf_texture2d_getattachment(m_pHandle, &hAttachment)); + Lib3MFHandle hImage3D = nullptr; + CheckError(lib3mf_functionfromimage3d_getimage3d(m_pHandle, &hImage3D)); - if (!hAttachment) { + if (!hImage3D) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hAttachment))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hImage3D))); } /** - * CTexture2D::SetAttachment - Sets the texture's package path to the path of the attachment. - * @param[in] pAttachment - attachment that holds the texture's image information. + * CFunctionFromImage3D::SetImage3D - Sets the 3D image of the selector. + * @param[in] pImage3D - image instance */ - void CTexture2D::SetAttachment(classParam pAttachment) + void CFunctionFromImage3D::SetImage3D(classParam pImage3D) { - Lib3MFHandle hAttachment = pAttachment.GetHandle(); - CheckError(lib3mf_texture2d_setattachment(m_pHandle, hAttachment)); + Lib3MFHandle hImage3D = pImage3D.GetHandle(); + CheckError(lib3mf_functionfromimage3d_setimage3d(m_pHandle, hImage3D)); } /** - * CTexture2D::GetContentType - Retrieves a texture's content type. - * @return returns content type enum. + * CFunctionFromImage3D::SetFilter - Sets the texture filter of the selector. + * @param[in] eFilter - texture filter */ - eTextureType CTexture2D::GetContentType() + void CFunctionFromImage3D::SetFilter(const eTextureFilter eFilter) { - eTextureType resultContentType = (eTextureType) 0; - CheckError(lib3mf_texture2d_getcontenttype(m_pHandle, &resultContentType)); + CheckError(lib3mf_functionfromimage3d_setfilter(m_pHandle, eFilter)); + } + + /** + * CFunctionFromImage3D::GetFilter - Returns the texture filter of the selector. + * @return texture filter + */ + eTextureFilter CFunctionFromImage3D::GetFilter() + { + eTextureFilter resultFilter = (eTextureFilter) 0; + CheckError(lib3mf_functionfromimage3d_getfilter(m_pHandle, &resultFilter)); - return resultContentType; + return resultFilter; } /** - * CTexture2D::SetContentType - Retrieves a texture's content type. - * @param[in] eContentType - new Content Type + * CFunctionFromImage3D::SetTileStyles - Sets the tile styles of the selector. + * @param[in] eTileStyleU - tile style in U + * @param[in] eTileStyleV - tile style in V + * @param[in] eTileStyleW - tile style in W */ - void CTexture2D::SetContentType(const eTextureType eContentType) + void CFunctionFromImage3D::SetTileStyles(const eTextureTileStyle eTileStyleU, const eTextureTileStyle eTileStyleV, const eTextureTileStyle eTileStyleW) { - CheckError(lib3mf_texture2d_setcontenttype(m_pHandle, eContentType)); + CheckError(lib3mf_functionfromimage3d_settilestyles(m_pHandle, eTileStyleU, eTileStyleV, eTileStyleW)); } /** - * CTexture2D::GetTileStyleUV - Retrieves a texture's tilestyle type. - * @param[out] eTileStyleU - returns tilestyle type enum. - * @param[out] eTileStyleV - returns tilestyle type enum. + * CFunctionFromImage3D::GetTileStyles - Retrieves the tile styles of the selector. + * @param[out] eTileStyleU - tile style in U + * @param[out] eTileStyleV - tile style in V + * @param[out] eTileStyleW - tile style in W */ - void CTexture2D::GetTileStyleUV(eTextureTileStyle & eTileStyleU, eTextureTileStyle & eTileStyleV) + void CFunctionFromImage3D::GetTileStyles(eTextureTileStyle & eTileStyleU, eTextureTileStyle & eTileStyleV, eTextureTileStyle & eTileStyleW) { - CheckError(lib3mf_texture2d_gettilestyleuv(m_pHandle, &eTileStyleU, &eTileStyleV)); + CheckError(lib3mf_functionfromimage3d_gettilestyles(m_pHandle, &eTileStyleU, &eTileStyleV, &eTileStyleW)); } /** - * CTexture2D::SetTileStyleUV - Sets a texture's tilestyle type. - * @param[in] eTileStyleU - new tilestyle type enum. - * @param[in] eTileStyleV - new tilestyle type enum. + * CFunctionFromImage3D::GetOffset - returns the offset value for the pixel values in the Image3D + * @return the offset value for the pixel values in the Image3D */ - void CTexture2D::SetTileStyleUV(const eTextureTileStyle eTileStyleU, const eTextureTileStyle eTileStyleV) + Lib3MF_double CFunctionFromImage3D::GetOffset() { - CheckError(lib3mf_texture2d_settilestyleuv(m_pHandle, eTileStyleU, eTileStyleV)); + Lib3MF_double resultOffset = 0; + CheckError(lib3mf_functionfromimage3d_getoffset(m_pHandle, &resultOffset)); + + return resultOffset; } /** - * CTexture2D::GetFilter - Retrieves a texture's filter type. - * @return returns filter type enum. + * CFunctionFromImage3D::SetOffset - Sets the offset value for the pixel values in the Image3D + * @param[in] dOffset - the offset value for the pixel values in the Image3D */ - eTextureFilter CTexture2D::GetFilter() + void CFunctionFromImage3D::SetOffset(const Lib3MF_double dOffset) { - eTextureFilter resultFilter = (eTextureFilter) 0; - CheckError(lib3mf_texture2d_getfilter(m_pHandle, &resultFilter)); + CheckError(lib3mf_functionfromimage3d_setoffset(m_pHandle, dOffset)); + } + + /** + * CFunctionFromImage3D::GetScale - returns the scale value for the pixel values in the Image3D + * @return the scale value for the pixel values in the Image3D + */ + Lib3MF_double CFunctionFromImage3D::GetScale() + { + Lib3MF_double resultScale = 0; + CheckError(lib3mf_functionfromimage3d_getscale(m_pHandle, &resultScale)); - return resultFilter; + return resultScale; } /** - * CTexture2D::SetFilter - Sets a texture's filter type. - * @param[in] eFilter - sets new filter type enum. + * CFunctionFromImage3D::SetScale - Sets the scale value for the pixel values in the Image3D + * @param[in] dScale - the scale value for the pixel values in the Image3D */ - void CTexture2D::SetFilter(const eTextureFilter eFilter) + void CFunctionFromImage3D::SetScale(const Lib3MF_double dScale) { - CheckError(lib3mf_texture2d_setfilter(m_pHandle, eFilter)); + CheckError(lib3mf_functionfromimage3d_setscale(m_pHandle, dScale)); } /** @@ -5860,6 +11330,22 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSliceStacInstance))); } + /** + * CModel::GetLevelSetByID - finds a level set object by its UniqueResourceID + * @param[in] nUniqueResourceID - UniqueResourceID + * @return returns the level set object instance + */ + PLevelSet CModel::GetLevelSetByID(const Lib3MF_uint32 nUniqueResourceID) + { + Lib3MFHandle hLevelSetObjectInstance = nullptr; + CheckError(lib3mf_model_getlevelsetbyid(m_pHandle, nUniqueResourceID, &hLevelSetObjectInstance)); + + if (!hLevelSetObjectInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hLevelSetObjectInstance))); + } + /** * CModel::GetBuildUUID - returns, whether a build has a UUID and, if true, the build's UUID * @param[out] bHasUUID - flag whether the build has a UUID @@ -6077,6 +11563,21 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResourceIterator))); } + /** + * CModel::GetImage3Ds - creates a resource iterator instance with all image3d resources. + * @return returns the iterator instance. + */ + PImage3DIterator CModel::GetImage3Ds() + { + Lib3MFHandle hResourceIterator = nullptr; + CheckError(lib3mf_model_getimage3ds(m_pHandle, &hResourceIterator)); + + if (!hResourceIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResourceIterator))); + } + /** * CModel::MergeToModel - Merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. * @return returns the merged model instance @@ -6092,6 +11593,16 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMergedModelInstance))); } + /** + * CModel::MergeFromModel - Merges the given model into this model. + * @param[in] pModelInstance - model to be merged + */ + void CModel::MergeFromModel(classParam pModelInstance) + { + Lib3MFHandle hModelInstance = pModelInstance.GetHandle(); + CheckError(lib3mf_model_mergefrommodel(m_pHandle, hModelInstance)); + } + /** * CModel::AddMeshObject - adds an empty mesh object to the model. * @return returns the mesh object instance @@ -6234,6 +11745,40 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMultiPropertyGroupInstance))); } + /** + * CModel::AddImageStack - creates a new 3D Image Resource + * @param[in] nColumnCount - the number of columns in each sheet. + * @param[in] nRowCount - the number of rows in each sheet. + * @param[in] nSheetCount - the number of sheets in the image stack. + * @return returns the new ImageStack instance + */ + PImageStack CModel::AddImageStack(const Lib3MF_uint32 nColumnCount, const Lib3MF_uint32 nRowCount, const Lib3MF_uint32 nSheetCount) + { + Lib3MFHandle hInstance = nullptr; + CheckError(lib3mf_model_addimagestack(m_pHandle, nColumnCount, nRowCount, nSheetCount, &hInstance)); + + if (!hInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hInstance))); + } + + /** + * CModel::GetImageStackByID - finds an ImageStack object by its UniqueResourceID + * @param[in] nUniqueResourceID - UniqueResourceID + * @return returns the image stack instance + */ + PImageStack CModel::GetImageStackByID(const Lib3MF_uint32 nUniqueResourceID) + { + Lib3MFHandle hImageStackInstance = nullptr; + CheckError(lib3mf_model_getimagestackbyid(m_pHandle, nUniqueResourceID, &hImageStackInstance)); + + if (!hImageStackInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hImageStackInstance))); + } + /** * CModel::AddBuildItem - adds a build item to the model. * @param[in] pObject - Object instance. @@ -6442,6 +11987,108 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) } return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hKeyStore))); } + + /** + * CModel::GetFunctions - creates a resource iterator for all functions + * @return returns the resource iterator + */ + PFunctionIterator CModel::GetFunctions() + { + Lib3MFHandle hTheResourceIterator = nullptr; + CheckError(lib3mf_model_getfunctions(m_pHandle, &hTheResourceIterator)); + + if (!hTheResourceIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheResourceIterator))); + } + + /** + * CModel::AddImplicitFunction - adds a function described by nodes to the model + * @return returns the function instance + */ + PImplicitFunction CModel::AddImplicitFunction() + { + Lib3MFHandle hFunctionInstance = nullptr; + CheckError(lib3mf_model_addimplicitfunction(m_pHandle, &hFunctionInstance)); + + if (!hFunctionInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hFunctionInstance))); + } + + /** + * CModel::AddFunctionFromImage3D - adds a function defined by an image3d to the model + * @param[in] pImage3DInstance - the Image3D-instance used for this function + * @return returns the function instance + */ + PFunctionFromImage3D CModel::AddFunctionFromImage3D(classParam pImage3DInstance) + { + Lib3MFHandle hImage3DInstance = pImage3DInstance.GetHandle(); + Lib3MFHandle hFunctionInstance = nullptr; + CheckError(lib3mf_model_addfunctionfromimage3d(m_pHandle, hImage3DInstance, &hFunctionInstance)); + + if (!hFunctionInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hFunctionInstance))); + } + + /** + * CModel::AddVolumeData - adds a volume data resource to the model. + * @return returns the new volume data instance. + */ + PVolumeData CModel::AddVolumeData() + { + Lib3MFHandle hVolumeDataInstance = nullptr; + CheckError(lib3mf_model_addvolumedata(m_pHandle, &hVolumeDataInstance)); + + if (!hVolumeDataInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hVolumeDataInstance))); + } + + /** + * CModel::AddLevelSet - adds an empty boundary shape object to the model. + * @return returns the mesh object instance + */ + PLevelSet CModel::AddLevelSet() + { + Lib3MFHandle hLevelSetInstance = nullptr; + CheckError(lib3mf_model_addlevelset(m_pHandle, &hLevelSetInstance)); + + if (!hLevelSetInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hLevelSetInstance))); + } + + /** + * CModel::GetLevelSets - creates a resource iterator instance with all boundary shape resources. + * @return returns the iterator instance. + */ + PLevelSetIterator CModel::GetLevelSets() + { + Lib3MFHandle hResourceIterator = nullptr; + CheckError(lib3mf_model_getlevelsets(m_pHandle, &hResourceIterator)); + + if (!hResourceIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResourceIterator))); + } + + /** + * CModel::RemoveResource - Removes a resource from the model + * @param[in] pResource - The resource to remove + */ + void CModel::RemoveResource(classParam pResource) + { + Lib3MFHandle hResource = pResource.GetHandle(); + CheckError(lib3mf_model_removeresource(m_pHandle, hResource)); + } } // namespace Lib3MF diff --git a/Autogenerated/Bindings/Cpp/lib3mf_types.hpp b/Autogenerated/Bindings/Cpp/lib3mf_types.hpp index 705f02718..61ecedc56 100644 --- a/Autogenerated/Bindings/Cpp/lib3mf_types.hpp +++ b/Autogenerated/Bindings/Cpp/lib3mf_types.hpp @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++-Header file with basic types in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -83,8 +83,8 @@ typedef void * Lib3MF_pvoid; **************************************************************************************************************************/ #define LIB3MF_VERSION_MAJOR 2 -#define LIB3MF_VERSION_MINOR 3 -#define LIB3MF_VERSION_MICRO 2 +#define LIB3MF_VERSION_MINOR 4 +#define LIB3MF_VERSION_MICRO 0 #define LIB3MF_VERSION_PRERELEASEINFO "" #define LIB3MF_VERSION_BUILDINFO "" @@ -129,13 +129,18 @@ typedef void * Lib3MF_pvoid; #define LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER 140 /** A progress identifier is unknown */ #define LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT 141 /** An element buffer exceeds its spec limit */ #define LIB3MF_ERROR_INVALIDRESOURCE 142 /** A resource is invalid */ +#define LIB3MF_ERROR_INVALIDLEVELSET 143 /** A level set is invalid */ #define LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE 2000 /** This object type is not valid for beamlattices */ #define LIB3MF_ERROR_INVALIDKEYSTORE 3000 /** The keystore object is invalid */ #define LIB3MF_ERROR_INVALIDKEYSTORECONSUMER 3001 /** The consumer keystore object is invalid */ #define LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND 3002 /** A consumer has not been found */ #define LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND 3003 /** A resource data has not been found */ #define LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED 3004 /** A Key or Conentent encryption callback has not been registered */ -#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key siue is invalid */ +#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key size is invalid */ +#define LIB3MF_ERROR_INCOMPATIBLEPORTTYPES 4000 /** Link could not be added, the port types are incompatible */ +#define LIB3MF_ERROR_GRAPHISCYCLIC 4001 /** The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted. */ +#define LIB3MF_ERROR_INPUTNOTSET 4002 /** The input of a node is not set. */ +#define LIB3MF_ERROR_INVALIDNODECONFIGURATION 4003 /** The selected node configuration is not supported */ /************************************************************************************************************************* Error strings for Lib3MF @@ -180,13 +185,18 @@ inline const char * LIB3MF_GETERRORSTRING (Lib3MFResult nErrorCode) { case LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: return "A progress identifier is unknown"; case LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: return "An element buffer exceeds its spec limit"; case LIB3MF_ERROR_INVALIDRESOURCE: return "A resource is invalid"; + case LIB3MF_ERROR_INVALIDLEVELSET: return "A level set is invalid"; case LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: return "This object type is not valid for beamlattices"; case LIB3MF_ERROR_INVALIDKEYSTORE: return "The keystore object is invalid"; case LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: return "The consumer keystore object is invalid"; case LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND: return "A consumer has not been found"; case LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: return "A resource data has not been found"; case LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: return "A Key or Conentent encryption callback has not been registered"; - case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key siue is invalid"; + case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key size is invalid"; + case LIB3MF_ERROR_INCOMPATIBLEPORTTYPES: return "Link could not be added, the port types are incompatible"; + case LIB3MF_ERROR_GRAPHISCYCLIC: return "The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted."; + case LIB3MF_ERROR_INPUTNOTSET: return "The input of a node is not set."; + case LIB3MF_ERROR_INVALIDNODECONFIGURATION: return "The selected node configuration is not supported"; default: return "unknown error"; } } @@ -211,11 +221,21 @@ typedef Lib3MFHandle Lib3MF_ColorGroupIterator; typedef Lib3MFHandle Lib3MF_Texture2DGroupIterator; typedef Lib3MFHandle Lib3MF_CompositeMaterialsIterator; typedef Lib3MFHandle Lib3MF_MultiPropertyGroupIterator; +typedef Lib3MFHandle Lib3MF_Image3DIterator; +typedef Lib3MFHandle Lib3MF_FunctionIterator; +typedef Lib3MFHandle Lib3MF_LevelSetIterator; typedef Lib3MFHandle Lib3MF_MetaData; typedef Lib3MFHandle Lib3MF_MetaDataGroup; typedef Lib3MFHandle Lib3MF_Object; typedef Lib3MFHandle Lib3MF_MeshObject; +typedef Lib3MFHandle Lib3MF_LevelSet; typedef Lib3MFHandle Lib3MF_BeamLattice; +typedef Lib3MFHandle Lib3MF_FunctionReference; +typedef Lib3MFHandle Lib3MF_VolumeDataColor; +typedef Lib3MFHandle Lib3MF_MaterialMapping; +typedef Lib3MFHandle Lib3MF_VolumeDataComposite; +typedef Lib3MFHandle Lib3MF_VolumeDataProperty; +typedef Lib3MFHandle Lib3MF_VolumeData; typedef Lib3MFHandle Lib3MF_Component; typedef Lib3MFHandle Lib3MF_ComponentsObject; typedef Lib3MFHandle Lib3MF_BeamSet; @@ -224,8 +244,71 @@ typedef Lib3MFHandle Lib3MF_ColorGroup; typedef Lib3MFHandle Lib3MF_Texture2DGroup; typedef Lib3MFHandle Lib3MF_CompositeMaterials; typedef Lib3MFHandle Lib3MF_MultiPropertyGroup; +typedef Lib3MFHandle Lib3MF_Image3D; +typedef Lib3MFHandle Lib3MF_ImageStack; typedef Lib3MFHandle Lib3MF_Attachment; typedef Lib3MFHandle Lib3MF_Texture2D; +typedef Lib3MFHandle Lib3MF_ImplicitPort; +typedef Lib3MFHandle Lib3MF_Iterator; +typedef Lib3MFHandle Lib3MF_ImplicitPortIterator; +typedef Lib3MFHandle Lib3MF_ImplicitNode; +typedef Lib3MFHandle Lib3MF_OneInputNode; +typedef Lib3MFHandle Lib3MF_SinNode; +typedef Lib3MFHandle Lib3MF_CosNode; +typedef Lib3MFHandle Lib3MF_TanNode; +typedef Lib3MFHandle Lib3MF_ArcSinNode; +typedef Lib3MFHandle Lib3MF_ArcCosNode; +typedef Lib3MFHandle Lib3MF_ArcTanNode; +typedef Lib3MFHandle Lib3MF_SinhNode; +typedef Lib3MFHandle Lib3MF_CoshNode; +typedef Lib3MFHandle Lib3MF_TanhNode; +typedef Lib3MFHandle Lib3MF_RoundNode; +typedef Lib3MFHandle Lib3MF_CeilNode; +typedef Lib3MFHandle Lib3MF_FloorNode; +typedef Lib3MFHandle Lib3MF_SignNode; +typedef Lib3MFHandle Lib3MF_FractNode; +typedef Lib3MFHandle Lib3MF_AbsNode; +typedef Lib3MFHandle Lib3MF_ExpNode; +typedef Lib3MFHandle Lib3MF_LogNode; +typedef Lib3MFHandle Lib3MF_Log2Node; +typedef Lib3MFHandle Lib3MF_Log10Node; +typedef Lib3MFHandle Lib3MF_LengthNode; +typedef Lib3MFHandle Lib3MF_TransposeNode; +typedef Lib3MFHandle Lib3MF_InverseNode; +typedef Lib3MFHandle Lib3MF_SqrtNode; +typedef Lib3MFHandle Lib3MF_ResourceIdNode; +typedef Lib3MFHandle Lib3MF_TwoInputNode; +typedef Lib3MFHandle Lib3MF_AdditionNode; +typedef Lib3MFHandle Lib3MF_SubtractionNode; +typedef Lib3MFHandle Lib3MF_MultiplicationNode; +typedef Lib3MFHandle Lib3MF_DivisionNode; +typedef Lib3MFHandle Lib3MF_DotNode; +typedef Lib3MFHandle Lib3MF_CrossNode; +typedef Lib3MFHandle Lib3MF_ArcTan2Node; +typedef Lib3MFHandle Lib3MF_MatVecMultiplicationNode; +typedef Lib3MFHandle Lib3MF_MinNode; +typedef Lib3MFHandle Lib3MF_MaxNode; +typedef Lib3MFHandle Lib3MF_FmodNode; +typedef Lib3MFHandle Lib3MF_ModNode; +typedef Lib3MFHandle Lib3MF_PowNode; +typedef Lib3MFHandle Lib3MF_SelectNode; +typedef Lib3MFHandle Lib3MF_ClampNode; +typedef Lib3MFHandle Lib3MF_ComposeVectorNode; +typedef Lib3MFHandle Lib3MF_VectorFromScalarNode; +typedef Lib3MFHandle Lib3MF_DecomposeVectorNode; +typedef Lib3MFHandle Lib3MF_ComposeMatrixNode; +typedef Lib3MFHandle Lib3MF_MatrixFromRowsNode; +typedef Lib3MFHandle Lib3MF_MatrixFromColumnsNode; +typedef Lib3MFHandle Lib3MF_ConstantNode; +typedef Lib3MFHandle Lib3MF_ConstVecNode; +typedef Lib3MFHandle Lib3MF_ConstMatNode; +typedef Lib3MFHandle Lib3MF_MeshNode; +typedef Lib3MFHandle Lib3MF_UnsignedMeshNode; +typedef Lib3MFHandle Lib3MF_FunctionCallNode; +typedef Lib3MFHandle Lib3MF_NodeIterator; +typedef Lib3MFHandle Lib3MF_Function; +typedef Lib3MFHandle Lib3MF_ImplicitFunction; +typedef Lib3MFHandle Lib3MF_FunctionFromImage3D; typedef Lib3MFHandle Lib3MF_BuildItem; typedef Lib3MFHandle Lib3MF_BuildItemIterator; typedef Lib3MFHandle Lib3MF_Slice; @@ -306,7 +389,7 @@ namespace Lib3MF { }; enum class eBeamLatticeBallMode : Lib3MF_int32 { - None = 0, + BeamLatticeBallModeNone = 0, Mixed = 1, All = 2 }; @@ -344,6 +427,103 @@ namespace Lib3MF { Multiply = 2 }; + enum class eChannelName : Lib3MF_int32 { + Red = 0, + Green = 1, + Blue = 2, + Alpha = 3 + }; + + enum class eCompositionMethod : Lib3MF_int32 { + WeightedSum = 0, + Multiply = 1, + Min = 2, + Max = 3, + Mask = 4 + }; + + enum class eCompositionSpace : Lib3MF_int32 { + Raw = 0, + LinearColor = 1 + }; + + /** + * enum class eImplicitNodeType - The type of the node + */ + enum class eImplicitNodeType : Lib3MF_int32 { + Addition = 1, /** Adds to values (scalar or vector) */ + Subtraction = 2, /** Subtracts two values (scalar or vector) */ + Multiplication = 3, /** Multiplies two values (scalar or vector) */ + Division = 4, /** Divides two values (scalar or vector) */ + Constant = 5, /** A constant scalar value */ + ConstVec = 6, /** A constant vector value */ + ConstMat = 7, /** A constant matrix value */ + ComposeVector = 8, /** Creates a vector from three scalar values */ + DecomposeVector = 9, /** Decomposes a vector into three scalar values */ + ComposeMatrix = 10, /** Creates a matrix from nine scalar values */ + MatrixFromColumns = 11, /** Creates a matrix from three column vector values */ + MatrixFromRows = 12, /** Creates a matrix from three row vector values */ + Dot = 13, /** Calculates the dot product of two vector values */ + Cross = 14, /** Calculates the cross product of two vector values */ + MatVecMultiplication = 15, /** Multiplies a matrix with a vector */ + Transpose = 16, /** Transposes a matrix */ + Inverse = 17, /** Computes the inverse of a matrix */ + Sinus = 18, /** Calculates the sinus */ + Cosinus = 19, /** Calculates the cosinus */ + Tan = 20, /** Calculates the tangent */ + ArcSin = 21, /** Calculates the arcsinus */ + ArcCos = 22, /** Calculates the arccosinus */ + ArcTan = 23, /** Calculates the arctangent */ + ArcTan2 = 24, /** Calculates the arctangent */ + Min = 25, /** Calculates the minimum tow values */ + Max = 26, /** Calculates the maximum of two values */ + Abs = 27, /** Calcul the absolute value */ + Fmod = 28, /** Computes the remainder of the divison of the inputs (same behavior as C fmod) */ + Pow = 29, /** Calculates the power A^B */ + Sqrt = 30, /** Calculates the square root */ + Exp = 31, /** Exponential function */ + Log = 32, /** Natural logarithmus */ + Log2 = 33, /** Logarithmus to the base 2 */ + Log10 = 34, /** Logarithmus to the base 10 */ + Select = 35, /** If A is less B returns C, else D */ + Clamp = 36, /** Clamps the input value to min and max */ + Sinh = 37, /** Calculates the hyperbolic sine */ + Cosh = 38, /** Calculates the hyperbolic cosine */ + Tanh = 39, /** Calculates the hyperbolic tangent */ + Round = 40, /** Rounds a scalar value to the nearest integer */ + Ceil = 41, /** Rounds a scalar value up to the nearest integer */ + Floor = 42, /** Rounds a scalar value down to the nearest integer */ + Sign = 43, /** Returns the sign */ + Fract = 44, /** Returns the fractional part */ + FunctionCall = 45, /** Calls a function */ + Mesh = 46, /** Calculates the signed distance to a mesh */ + Length = 47, /** Calculates the length of a vector */ + ConstResourceID = 48, /** Selects a resource (function, mesh etc.) */ + VectorFromScalar = 49, /** Creates a vector from one scalar values */ + UnsignedMesh = 50, /** Calculates the unsigned distance to a mesh */ + Mod = 51 /** Calculates the modulo of two values (same behaviour as glsl mod) */ + }; + + /** + * enum class eImplicitPortType - The type of the port + */ + enum class eImplicitPortType : Lib3MF_int32 { + Scalar = 1, /** Scalar */ + Vector = 2, /** Vector */ + Matrix = 3, /** 4x4 Matrix */ + ResourceID = 4 /** Resource ID */ + }; + + /** + * enum class eImplicitNodeConfiguration - Defines the input and output types of a node + */ + enum class eImplicitNodeConfiguration : Lib3MF_int32 { + Default = 1, /** Default */ + ScalarToScalar = 2, /** Scalar -> Scalar */ + VectorToVector = 3, /** Vector -> Vector */ + MatrixToMatrix = 4 /** Matrix -> Matrix */ + }; + enum class eEncryptionAlgorithm : Lib3MF_int32 { AES256_GCM = 1 /** http://www.w3.org/2009/xmlenc11#aes256-gcm */ }; @@ -435,6 +615,14 @@ namespace Lib3MF { Lib3MF_double m_Radius; } sBall; + typedef struct sVector { + Lib3MF_double m_Coordinates[3]; + } sVector; + + typedef struct sMatrix4x4 { + Lib3MF_double m_Field[4][4]; + } sMatrix4x4; + #pragma pack () /************************************************************************************************************************* @@ -530,6 +718,12 @@ typedef Lib3MF::eBeamLatticeClipMode eLib3MFBeamLatticeClipMode; typedef Lib3MF::eBeamLatticeBallMode eLib3MFBeamLatticeBallMode; typedef Lib3MF::eProgressIdentifier eLib3MFProgressIdentifier; typedef Lib3MF::eBlendMethod eLib3MFBlendMethod; +typedef Lib3MF::eChannelName eLib3MFChannelName; +typedef Lib3MF::eCompositionMethod eLib3MFCompositionMethod; +typedef Lib3MF::eCompositionSpace eLib3MFCompositionSpace; +typedef Lib3MF::eImplicitNodeType eLib3MFImplicitNodeType; +typedef Lib3MF::eImplicitPortType eLib3MFImplicitPortType; +typedef Lib3MF::eImplicitNodeConfiguration eLib3MFImplicitNodeConfiguration; typedef Lib3MF::eEncryptionAlgorithm eLib3MFEncryptionAlgorithm; typedef Lib3MF::eWrappingAlgorithm eLib3MFWrappingAlgorithm; typedef Lib3MF::eMgfAlgorithm eLib3MFMgfAlgorithm; @@ -547,6 +741,8 @@ typedef Lib3MF::sBox sLib3MFBox; typedef Lib3MF::sColor sLib3MFColor; typedef Lib3MF::sBeam sLib3MFBeam; typedef Lib3MF::sBall sLib3MFBall; +typedef Lib3MF::sVector sLib3MFVector; +typedef Lib3MF::sMatrix4x4 sLib3MFMatrix4x4; typedef Lib3MF::ProgressCallback Lib3MFProgressCallback; typedef Lib3MF::WriteCallback Lib3MFWriteCallback; typedef Lib3MF::ReadCallback Lib3MFReadCallback; diff --git a/Autogenerated/Bindings/CppDynamic/lib3mf_abi.hpp b/Autogenerated/Bindings/CppDynamic/lib3mf_abi.hpp index 4efde3a1a..6b1dac4a1 100644 --- a/Autogenerated/Bindings/CppDynamic/lib3mf_abi.hpp +++ b/Autogenerated/Bindings/CppDynamic/lib3mf_abi.hpp @@ -564,6 +564,45 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerialsiterator_getcurrentcomposi */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup(Lib3MF_MultiPropertyGroupIterator pMultiPropertyGroupIterator, Lib3MF_MultiPropertyGroup * pResource); +/************************************************************************************************************************* + Class definition for Image3DIterator +**************************************************************************************************************************/ + +/** +* Returns the Image3D the iterator points at. +* +* @param[in] pImage3DIterator - Image3DIterator instance. +* @param[out] pResource - returns the Image3D instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3diterator_getcurrentimage3d(Lib3MF_Image3DIterator pImage3DIterator, Lib3MF_Image3D * pResource); + +/************************************************************************************************************************* + Class definition for ScalarFieldIterator +**************************************************************************************************************************/ + +/** +* Returns the ScalarField the iterator points at. +* +* @param[in] pScalarFieldIterator - ScalarFieldIterator instance. +* @param[out] pResource - returns the ScalarField instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfielditerator_getcurrentscalarfield(Lib3MF_ScalarFieldIterator pScalarFieldIterator, Lib3MF_ScalarField * pResource); + +/************************************************************************************************************************* + Class definition for Vector3DFieldIterator +**************************************************************************************************************************/ + +/** +* Returns the Vector3DField the iterator points at. +* +* @param[in] pVector3DFieldIterator - Vector3DFieldIterator instance. +* @param[out] pResource - returns the Vector3DField instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfielditerator_getcurrentvector3dfield(Lib3MF_Vector3DFieldIterator pVector3DFieldIterator, Lib3MF_Vector3DField * pResource); + /************************************************************************************************************************* Class definition for MetaData **************************************************************************************************************************/ @@ -1155,6 +1194,15 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_ismanifoldandoriented(Lib3MF_Mesh */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_beamlattice(Lib3MF_MeshObject pMeshObject, Lib3MF_BeamLattice * pTheBeamLattice); +/** +* Retrieves the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[out] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_volumedata(Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData * pTheVolumeData); + /************************************************************************************************************************* Class definition for BeamLattice **************************************************************************************************************************/ @@ -1273,116 +1321,1023 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_addbeam(Lib3MF_BeamLattice pBeam * @param[in] pBeamInfo - filled with the beam indices, radii and capmodes. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_setbeam(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, const Lib3MF::sBeam * pBeamInfo); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_setbeam(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, const Lib3MF::sBeam * pBeamInfo); + +/** +* Sets all beam indices, radii and capmodes of a mesh object. +* +* @param[in] pBeamLattice - BeamLattice instance. +* @param[in] nBeamInfoBufferSize - Number of elements in buffer +* @param[in] pBeamInfoBuffer - Beam buffer of contains information of a number of beams +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_setbeams(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint64 nBeamInfoBufferSize, const Lib3MF::sBeam * pBeamInfoBuffer); + +/** +* obtains all beam indices, radii and capmodes of a mesh object. +* +* @param[in] pBeamLattice - BeamLattice instance. +* @param[in] nBeamInfoBufferSize - Number of elements in buffer +* @param[out] pBeamInfoNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBeamInfoBuffer - Beam buffer of contains information of all beams +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getbeams(Lib3MF_BeamLattice pBeamLattice, const Lib3MF_uint64 nBeamInfoBufferSize, Lib3MF_uint64* pBeamInfoNeededCount, Lib3MF::sBeam * pBeamInfoBuffer); + +/** +* Returns the ball count of a mesh object. +* +* @param[in] pBeamLattice - BeamLattice instance. +* @param[out] pCount - filled with the ball count. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getballcount(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount); + +/** +* Returns index and radius of a single ball of a mesh object. +* +* @param[in] pBeamLattice - BeamLattice instance. +* @param[in] nIndex - Index of the ball (0 to ballcount - 1). +* @param[out] pBallInfo - filled with the ball node index and radius. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getball(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF::sBall * pBallInfo); + +/** +* Adds a single ball to a mesh object. +* +* @param[in] pBeamLattice - BeamLattice instance. +* @param[in] pBallInfo - contains the node index and radius. +* @param[out] pIndex - filled with the new Index of the ball. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_addball(Lib3MF_BeamLattice pBeamLattice, const Lib3MF::sBall * pBallInfo, Lib3MF_uint32 * pIndex); + +/** +* Sets the index and radius of a single ball of a mesh object. +* +* @param[in] pBeamLattice - BeamLattice instance. +* @param[in] nIndex - Index of the ball (0 to ballcount - 1). +* @param[in] pBallInfo - filled with the ball node index and radius. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_setball(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, const Lib3MF::sBall * pBallInfo); + +/** +* Sets all ball indices and radii of a mesh object. +* +* @param[in] pBeamLattice - BeamLattice instance. +* @param[in] nBallInfoBufferSize - Number of elements in buffer +* @param[in] pBallInfoBuffer - Ball buffer of contains information of a number of balls +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_setballs(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint64 nBallInfoBufferSize, const Lib3MF::sBall * pBallInfoBuffer); + +/** +* obtains all ball indices and radii of a mesh object. +* +* @param[in] pBeamLattice - BeamLattice instance. +* @param[in] nBallInfoBufferSize - Number of elements in buffer +* @param[out] pBallInfoNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBallInfoBuffer - Ball buffer of contains information of all balls +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getballs(Lib3MF_BeamLattice pBeamLattice, const Lib3MF_uint64 nBallInfoBufferSize, Lib3MF_uint64* pBallInfoNeededCount, Lib3MF::sBall * pBallInfoBuffer); + +/** +* Returns the number of beamsets of a mesh object. +* +* @param[in] pBeamLattice - BeamLattice instance. +* @param[out] pCount - filled with the beamset count. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getbeamsetcount(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount); + +/** +* Adds an empty beamset to a mesh object +* +* @param[in] pBeamLattice - BeamLattice instance. +* @param[out] pBeamSet - the new beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_addbeamset(Lib3MF_BeamLattice pBeamLattice, Lib3MF_BeamSet * pBeamSet); + +/** +* Returns a beamset of a mesh object +* +* @param[in] pBeamLattice - BeamLattice instance. +* @param[in] nIndex - index of the requested beamset (0 ... beamsetcount-1). +* @param[out] pBeamSet - the requested beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getbeamset(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF_BeamSet * pBeamSet); + +/************************************************************************************************************************* + Class definition for ScalarField +**************************************************************************************************************************/ + +/** +* Gets the name of this ScalarField. +* +* @param[in] pScalarField - ScalarField instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of The name of this ScalarField., may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfield_getname(Lib3MF_ScalarField pScalarField, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* Sets the name of this ScalarField. +* +* @param[in] pScalarField - ScalarField instance. +* @param[in] pName - The name of this ScalarField. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfield_setname(Lib3MF_ScalarField pScalarField, const char * pName); + +/** +* Retrieves, if this ScalarField is a ScalarFieldFromImage3D +* +* @param[in] pScalarField - ScalarField instance. +* @param[out] pIsFromImage3D - returns, whether the scalar field is a ScalarFieldFromImage3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfield_isfromimage3d(Lib3MF_ScalarField pScalarField, bool * pIsFromImage3D); + +/** +* Retrieves, if this ScalarField is a ScalarFieldConstant +* +* @param[in] pScalarField - ScalarField instance. +* @param[out] pIsConstant - returns, whether the scalar field is a ScalarFieldConstant +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfield_isconstant(Lib3MF_ScalarField pScalarField, bool * pIsConstant); + +/** +* Retrieves, if this ScalarField is a ScalarFieldComposed +* +* @param[in] pScalarField - ScalarField instance. +* @param[out] pIsComposed - returns, whether the scalar field is a ScalarFieldComposed +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfield_iscomposed(Lib3MF_ScalarField pScalarField, bool * pIsComposed); + +/************************************************************************************************************************* + Class definition for Vector3DField +**************************************************************************************************************************/ + +/** +* Gets the name of this Vector3DField. +* +* @param[in] pVector3DField - Vector3DField instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of The name of this Vector3DField., may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfield_getname(Lib3MF_Vector3DField pVector3DField, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* Sets the name of this Vector3DField. +* +* @param[in] pVector3DField - Vector3DField instance. +* @param[in] pName - The name of this Vector3DField. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfield_setname(Lib3MF_Vector3DField pVector3DField, const char * pName); + +/** +* Retrieves, if this Vector3DField is a Vector3DFieldFromImage3D +* +* @param[in] pVector3DField - Vector3DField instance. +* @param[out] pIsFromImage3D - returns, whether the 3d vector field is a Vector3DFieldFromImage3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfield_isfromimage3d(Lib3MF_Vector3DField pVector3DField, bool * pIsFromImage3D); + +/** +* Retrieves, if this Vector3DField is a Vector3DFieldConstant +* +* @param[in] pVector3DField - Vector3DField instance. +* @param[out] pIsConstant - returns, whether the 3d vector field is a Vector3DFieldConstant +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfield_isconstant(Lib3MF_Vector3DField pVector3DField, bool * pIsConstant); + +/** +* Retrieves, if this Vector3DField is a Vector3DFieldComposed +* +* @param[in] pVector3DField - Vector3DField instance. +* @param[out] pIsComposed - returns, whether the 3d vector field is a Vector3DFieldComposed +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfield_iscomposed(Lib3MF_Vector3DField pVector3DField, bool * pIsComposed); + +/************************************************************************************************************************* + Class definition for ScalarFieldFromImage3D +**************************************************************************************************************************/ + +/** +* Returns the selected 3D image. +* +* @param[in] pScalarFieldFromImage3D - ScalarFieldFromImage3D instance. +* @param[out] pImage3D - image instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldfromimage3d_getimage(Lib3MF_ScalarFieldFromImage3D pScalarFieldFromImage3D, Lib3MF_Image3D * pImage3D); + +/** +* Sets the 3D image of the selector. +* +* @param[in] pScalarFieldFromImage3D - ScalarFieldFromImage3D instance. +* @param[in] pImage3D - image instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldfromimage3d_setimage(Lib3MF_ScalarFieldFromImage3D pScalarFieldFromImage3D, Lib3MF_Image3D pImage3D); + +/** +* Sets the channel name to be picked from the referenced Image3D. +* +* @param[in] pScalarFieldFromImage3D - ScalarFieldFromImage3D instance. +* @param[in] eName - Sets the channel name. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldfromimage3d_setchannel(Lib3MF_ScalarFieldFromImage3D pScalarFieldFromImage3D, Lib3MF::eChannelName eName); + +/** +* Gets the channel name to be picked from the referenced Image3D. +* +* @param[in] pScalarFieldFromImage3D - ScalarFieldFromImage3D instance. +* @param[out] pName - Sets the channel name. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldfromimage3d_getchannel(Lib3MF_ScalarFieldFromImage3D pScalarFieldFromImage3D, Lib3MF::eChannelName * pName); + +/** +* Sets the texture filter of the selector. +* +* @param[in] pScalarFieldFromImage3D - ScalarFieldFromImage3D instance. +* @param[in] eFilter - texture filter +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldfromimage3d_setfilter(Lib3MF_ScalarFieldFromImage3D pScalarFieldFromImage3D, Lib3MF::eTextureFilter eFilter); + +/** +* Returns the texture filter of the selector. +* +* @param[in] pScalarFieldFromImage3D - ScalarFieldFromImage3D instance. +* @param[out] pFilter - texture filter +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldfromimage3d_getfilter(Lib3MF_ScalarFieldFromImage3D pScalarFieldFromImage3D, Lib3MF::eTextureFilter * pFilter); + +/** +* Sets the tile styles of the selector. +* +* @param[in] pScalarFieldFromImage3D - ScalarFieldFromImage3D instance. +* @param[in] eTileStyleU - tile style in U +* @param[in] eTileStyleV - tile style in V +* @param[in] eTileStyleW - tile style in W +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldfromimage3d_settilestyles(Lib3MF_ScalarFieldFromImage3D pScalarFieldFromImage3D, Lib3MF::eTextureTileStyle eTileStyleU, Lib3MF::eTextureTileStyle eTileStyleV, Lib3MF::eTextureTileStyle eTileStyleW); + +/** +* Retrieves the tile styles of the selector. +* +* @param[in] pScalarFieldFromImage3D - ScalarFieldFromImage3D instance. +* @param[out] pTileStyleU - tile style in U +* @param[out] pTileStyleV - tile style in V +* @param[out] pTileStyleW - tile style in W +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldfromimage3d_gettilestyles(Lib3MF_ScalarFieldFromImage3D pScalarFieldFromImage3D, Lib3MF::eTextureTileStyle * pTileStyleU, Lib3MF::eTextureTileStyle * pTileStyleV, Lib3MF::eTextureTileStyle * pTileStyleW); + +/** +* returns the offset value for the pixel values in the Image3D +* +* @param[in] pScalarFieldFromImage3D - ScalarFieldFromImage3D instance. +* @param[out] pOffset - the offset value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldfromimage3d_getoffset(Lib3MF_ScalarFieldFromImage3D pScalarFieldFromImage3D, Lib3MF_double * pOffset); + +/** +* Sets the offset value for the pixel values in the Image3D +* +* @param[in] pScalarFieldFromImage3D - ScalarFieldFromImage3D instance. +* @param[in] dOffset - the offset value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldfromimage3d_setoffset(Lib3MF_ScalarFieldFromImage3D pScalarFieldFromImage3D, Lib3MF_double dOffset); + +/** +* returns the scale value for the pixel values in the Image3D +* +* @param[in] pScalarFieldFromImage3D - ScalarFieldFromImage3D instance. +* @param[out] pScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldfromimage3d_getscale(Lib3MF_ScalarFieldFromImage3D pScalarFieldFromImage3D, Lib3MF_double * pScale); + +/** +* Sets the scale value for the pixel values in the Image3D +* +* @param[in] pScalarFieldFromImage3D - ScalarFieldFromImage3D instance. +* @param[in] dScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldfromimage3d_setscale(Lib3MF_ScalarFieldFromImage3D pScalarFieldFromImage3D, Lib3MF_double dScale); + +/************************************************************************************************************************* + Class definition for ScalarFieldConstant +**************************************************************************************************************************/ + +/** +* returns the constant value of this ScalarFieldConstant +* +* @param[in] pScalarFieldConstant - ScalarFieldConstant instance. +* @param[out] pValue - the constant value of this ScalarFieldConstant +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldconstant_getvalue(Lib3MF_ScalarFieldConstant pScalarFieldConstant, Lib3MF_double * pValue); + +/** +* Sets the constant value of this ScalarFieldConstant +* +* @param[in] pScalarFieldConstant - ScalarFieldConstant instance. +* @param[in] dValue - the constant value of this ScalarFieldConstant +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldconstant_setvalue(Lib3MF_ScalarFieldConstant pScalarFieldConstant, Lib3MF_double dValue); + +/************************************************************************************************************************* + Class definition for ScalarFieldComposed +**************************************************************************************************************************/ + +/** +* Sets the method to used for composition. +* +* @param[in] pScalarFieldComposed - ScalarFieldComposed instance. +* @param[in] eTheMethod - Sets the composition method. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldcomposed_setmethod(Lib3MF_ScalarFieldComposed pScalarFieldComposed, Lib3MF::eCompositionMethod eTheMethod); + +/** +* Gets the method to used for composition. +* +* @param[in] pScalarFieldComposed - ScalarFieldComposed instance. +* @param[out] pTheMethod - Gets the composition method. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldcomposed_getmethod(Lib3MF_ScalarFieldComposed pScalarFieldComposed, Lib3MF::eCompositionMethod * pTheMethod); + +/** +* returns the factor scalar field 1 is multiplied with when composited +* +* @param[in] pScalarFieldComposed - ScalarFieldComposed instance. +* @param[out] pFactor1 - the factor scalar field 1 is multiplied with when composited +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldcomposed_getfactor1(Lib3MF_ScalarFieldComposed pScalarFieldComposed, Lib3MF_double * pFactor1); + +/** +* sets the factor scalar field 1 is multiplied with when composited +* +* @param[in] pScalarFieldComposed - ScalarFieldComposed instance. +* @param[in] dFactor1 - the factor scalar field 1 is multiplied with when composited +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldcomposed_setfactor1(Lib3MF_ScalarFieldComposed pScalarFieldComposed, Lib3MF_double dFactor1); + +/** +* returns the factor scalar field 2 is multiplied with when composited +* +* @param[in] pScalarFieldComposed - ScalarFieldComposed instance. +* @param[out] pFactor2 - the factor scalar field 2 is multiplied with when composited +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldcomposed_getfactor2(Lib3MF_ScalarFieldComposed pScalarFieldComposed, Lib3MF_double * pFactor2); + +/** +* sets the factor scalar field 2 is multiplied with when composited +* +* @param[in] pScalarFieldComposed - ScalarFieldComposed instance. +* @param[in] dFactor2 - the factor scalar field 2 is multiplied with when composited +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldcomposed_setfactor2(Lib3MF_ScalarFieldComposed pScalarFieldComposed, Lib3MF_double dFactor2); + +/** +* Access to the ScalarFieldReference for the first composited field +* +* @param[in] pScalarFieldComposed - ScalarFieldComposed instance. +* @param[out] pTheScalarFieldReference1 - ScalarFieldReference +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldcomposed_scalarfieldreference1(Lib3MF_ScalarFieldComposed pScalarFieldComposed, Lib3MF_ScalarFieldReference * pTheScalarFieldReference1); + +/** +* Access to the ScalarFieldReference for the second composited field +* +* @param[in] pScalarFieldComposed - ScalarFieldComposed instance. +* @param[out] pTheScalarFieldReference1 - ScalarFieldReference +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldcomposed_scalarfieldreference2(Lib3MF_ScalarFieldComposed pScalarFieldComposed, Lib3MF_ScalarFieldReference * pTheScalarFieldReference1); + +/** +* Access to the ScalarFieldReference for masking. Only relevant if the Method is mask. +* +* @param[in] pScalarFieldComposed - ScalarFieldComposed instance. +* @param[out] pTheScalarFieldReferenceMask - ScalarFieldReference +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldcomposed_scalarfieldreferencemask(Lib3MF_ScalarFieldComposed pScalarFieldComposed, Lib3MF_ScalarFieldReference * pTheScalarFieldReferenceMask); + +/************************************************************************************************************************* + Class definition for Vector3DFieldFromImage3D +**************************************************************************************************************************/ + +/** +* Returns the selected 3D image. +* +* @param[in] pVector3DFieldFromImage3D - Vector3DFieldFromImage3D instance. +* @param[out] pImage3D - image instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldfromimage3d_getimage(Lib3MF_Vector3DFieldFromImage3D pVector3DFieldFromImage3D, Lib3MF_Image3D * pImage3D); + +/** +* Sets the 3D image of the selector. +* +* @param[in] pVector3DFieldFromImage3D - Vector3DFieldFromImage3D instance. +* @param[in] pImage3D - image instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldfromimage3d_setimage(Lib3MF_Vector3DFieldFromImage3D pVector3DFieldFromImage3D, Lib3MF_Image3D pImage3D); + +/** +* Sets the texture filter of the selector. +* +* @param[in] pVector3DFieldFromImage3D - Vector3DFieldFromImage3D instance. +* @param[in] eFilter - texture filter +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldfromimage3d_setfilter(Lib3MF_Vector3DFieldFromImage3D pVector3DFieldFromImage3D, Lib3MF::eTextureFilter eFilter); + +/** +* Returns the texture filter of the selector. +* +* @param[in] pVector3DFieldFromImage3D - Vector3DFieldFromImage3D instance. +* @param[out] pFilter - texture filter +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldfromimage3d_getfilter(Lib3MF_Vector3DFieldFromImage3D pVector3DFieldFromImage3D, Lib3MF::eTextureFilter * pFilter); + +/** +* Sets the tile styles of the selector. +* +* @param[in] pVector3DFieldFromImage3D - Vector3DFieldFromImage3D instance. +* @param[in] eTileStyleU - tile style in U +* @param[in] eTileStyleV - tile style in V +* @param[in] eTileStyleW - tile style in W +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldfromimage3d_settilestyles(Lib3MF_Vector3DFieldFromImage3D pVector3DFieldFromImage3D, Lib3MF::eTextureTileStyle eTileStyleU, Lib3MF::eTextureTileStyle eTileStyleV, Lib3MF::eTextureTileStyle eTileStyleW); + +/** +* Retrieves the tile styles of the selector. +* +* @param[in] pVector3DFieldFromImage3D - Vector3DFieldFromImage3D instance. +* @param[out] pTileStyleU - tile style in U +* @param[out] pTileStyleV - tile style in V +* @param[out] pTileStyleW - tile style in W +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldfromimage3d_gettilestyles(Lib3MF_Vector3DFieldFromImage3D pVector3DFieldFromImage3D, Lib3MF::eTextureTileStyle * pTileStyleU, Lib3MF::eTextureTileStyle * pTileStyleV, Lib3MF::eTextureTileStyle * pTileStyleW); + +/** +* returns the offset value for the pixel values in the Image3D +* +* @param[in] pVector3DFieldFromImage3D - Vector3DFieldFromImage3D instance. +* @param[out] pOffset - the offset value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldfromimage3d_getoffset(Lib3MF_Vector3DFieldFromImage3D pVector3DFieldFromImage3D, Lib3MF_double * pOffset); + +/** +* Sets the offset value for the pixel values in the Image3D +* +* @param[in] pVector3DFieldFromImage3D - Vector3DFieldFromImage3D instance. +* @param[in] dOffset - the offset value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldfromimage3d_setoffset(Lib3MF_Vector3DFieldFromImage3D pVector3DFieldFromImage3D, Lib3MF_double dOffset); + +/** +* returns the scale value for the pixel values in the Image3D +* +* @param[in] pVector3DFieldFromImage3D - Vector3DFieldFromImage3D instance. +* @param[out] pScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldfromimage3d_getscale(Lib3MF_Vector3DFieldFromImage3D pVector3DFieldFromImage3D, Lib3MF_double * pScale); + +/** +* Sets the scale value for the pixel values in the Image3D +* +* @param[in] pVector3DFieldFromImage3D - Vector3DFieldFromImage3D instance. +* @param[in] dScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldfromimage3d_setscale(Lib3MF_Vector3DFieldFromImage3D pVector3DFieldFromImage3D, Lib3MF_double dScale); + +/************************************************************************************************************************* + Class definition for Vector3DFieldConstant +**************************************************************************************************************************/ + +/** +* returns the constant x-value of this Vector3DFieldConstant +* +* @param[in] pVector3DFieldConstant - Vector3DFieldConstant instance. +* @param[out] pValueX - the constant x-value of this Vector3DFieldConstant +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldconstant_getvaluex(Lib3MF_Vector3DFieldConstant pVector3DFieldConstant, Lib3MF_double * pValueX); + +/** +* Sets the constant x-value of this Vector3DFieldConstant +* +* @param[in] pVector3DFieldConstant - Vector3DFieldConstant instance. +* @param[in] dValueX - the constant x-value of this Vector3DFieldConstant +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldconstant_setvaluex(Lib3MF_Vector3DFieldConstant pVector3DFieldConstant, Lib3MF_double dValueX); + +/** +* returns the constant y-value of this Vector3DFieldConstant +* +* @param[in] pVector3DFieldConstant - Vector3DFieldConstant instance. +* @param[out] pValueY - the constant y-value of this Vector3DFieldConstant +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldconstant_getvaluey(Lib3MF_Vector3DFieldConstant pVector3DFieldConstant, Lib3MF_double * pValueY); + +/** +* Sets the constant y-value of this Vector3DFieldConstant +* +* @param[in] pVector3DFieldConstant - Vector3DFieldConstant instance. +* @param[in] dValueY - the constant y-value of this Vector3DFieldConstant +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldconstant_setvaluey(Lib3MF_Vector3DFieldConstant pVector3DFieldConstant, Lib3MF_double dValueY); + +/** +* returns the constant x-value of this Vector3DFieldConstant +* +* @param[in] pVector3DFieldConstant - Vector3DFieldConstant instance. +* @param[out] pValueZ - the constant x-value of this Vector3DFieldConstant +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldconstant_getvaluez(Lib3MF_Vector3DFieldConstant pVector3DFieldConstant, Lib3MF_double * pValueZ); + +/** +* Sets the constant z-value of this Vector3DFieldConstant +* +* @param[in] pVector3DFieldConstant - Vector3DFieldConstant instance. +* @param[in] dValueZ - the constant z-value of this Vector3DFieldConstant +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldconstant_setvaluez(Lib3MF_Vector3DFieldConstant pVector3DFieldConstant, Lib3MF_double dValueZ); + +/************************************************************************************************************************* + Class definition for Vector3DFieldComposed +**************************************************************************************************************************/ + +/** +* Sets the method to used for composition. +* +* @param[in] pVector3DFieldComposed - Vector3DFieldComposed instance. +* @param[in] eTheMethod - Sets the composition method. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldcomposed_setmethod(Lib3MF_Vector3DFieldComposed pVector3DFieldComposed, Lib3MF::eCompositionMethod eTheMethod); + +/** +* Gets the method to used for composition. +* +* @param[in] pVector3DFieldComposed - Vector3DFieldComposed instance. +* @param[out] pTheMethod - Gets the composition method. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldcomposed_getmethod(Lib3MF_Vector3DFieldComposed pVector3DFieldComposed, Lib3MF::eCompositionMethod * pTheMethod); + +/** +* Sets the space in which composition takes place. +* +* @param[in] pVector3DFieldComposed - Vector3DFieldComposed instance. +* @param[in] eTheSpace - Sets the composition space. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldcomposed_setspace(Lib3MF_Vector3DFieldComposed pVector3DFieldComposed, Lib3MF::eCompositionSpace eTheSpace); + +/** +* Gets the space in which composition takes place. +* +* @param[in] pVector3DFieldComposed - Vector3DFieldComposed instance. +* @param[out] pTheSpace - Gets the composition space. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldcomposed_getspace(Lib3MF_Vector3DFieldComposed pVector3DFieldComposed, Lib3MF::eCompositionSpace * pTheSpace); + +/** +* returns the factor vector3d field 1 is multiplied with when composited +* +* @param[in] pVector3DFieldComposed - Vector3DFieldComposed instance. +* @param[out] pFactor1 - the factor vector3d field 1 is multiplied with when composited +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldcomposed_getfactor1(Lib3MF_Vector3DFieldComposed pVector3DFieldComposed, Lib3MF_double * pFactor1); + +/** +* sets the factor vector3d field 1 is multiplied with when composited +* +* @param[in] pVector3DFieldComposed - Vector3DFieldComposed instance. +* @param[in] dFactor1 - the factor vector3d field 1 is multiplied with when composited +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldcomposed_setfactor1(Lib3MF_Vector3DFieldComposed pVector3DFieldComposed, Lib3MF_double dFactor1); + +/** +* returns the vector3d scalar field 2 is multiplied with when composited +* +* @param[in] pVector3DFieldComposed - Vector3DFieldComposed instance. +* @param[out] pFactor2 - the factor vector3d field 2 is multiplied with when composited +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldcomposed_getfactor2(Lib3MF_Vector3DFieldComposed pVector3DFieldComposed, Lib3MF_double * pFactor2); + +/** +* sets the factor vector3d field 2 is multiplied with when composited +* +* @param[in] pVector3DFieldComposed - Vector3DFieldComposed instance. +* @param[in] dFactor2 - the factor vector3d field 2 is multiplied with when composited +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldcomposed_setfactor2(Lib3MF_Vector3DFieldComposed pVector3DFieldComposed, Lib3MF_double dFactor2); + +/** +* Access to the Vector3DFieldReference for the first composited field +* +* @param[in] pVector3DFieldComposed - Vector3DFieldComposed instance. +* @param[out] pTheVector3DFieldReference1 - Vector3DFieldReference +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldcomposed_vector3dfieldreference1(Lib3MF_Vector3DFieldComposed pVector3DFieldComposed, Lib3MF_Vector3DFieldReference * pTheVector3DFieldReference1); + +/** +* Access to the Vector3DFieldReference for the second composited field +* +* @param[in] pVector3DFieldComposed - Vector3DFieldComposed instance. +* @param[out] pTheVector3DFieldReference1 - Vector3DFieldReference +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldcomposed_vector3dfieldreference2(Lib3MF_Vector3DFieldComposed pVector3DFieldComposed, Lib3MF_Vector3DFieldReference * pTheVector3DFieldReference1); + +/** +* Access to the ScalarFieldReference for masking. Only relevant if the Method is mask. +* +* @param[in] pVector3DFieldComposed - Vector3DFieldComposed instance. +* @param[out] pTheScalarFieldReferenceMask - ScalarFieldReference +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldcomposed_scalarfieldreferencemask(Lib3MF_Vector3DFieldComposed pVector3DFieldComposed, Lib3MF_ScalarFieldReference * pTheScalarFieldReferenceMask); + +/************************************************************************************************************************* + Class definition for FieldReference +**************************************************************************************************************************/ + +/** +* Returns the UniqueResourceID of the Field (Scalar- or Vector3DField). +* +* @param[in] pFieldReference - FieldReference instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_fieldreference_getfieldresourceid(Lib3MF_FieldReference pFieldReference, Lib3MF_uint32 * pUniqueResourceID); + +/** +* Sets the UniqueResourceID to refer to. +* +* @param[in] pFieldReference - FieldReference instance. +* @param[in] nUniqueResourceID - UniqueResourceID of the Field (Scalar- or Vector3DField) +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_fieldreference_setfieldresourceid(Lib3MF_FieldReference pFieldReference, Lib3MF_uint32 nUniqueResourceID); + +/** +* Returns the transformation matrix into the coordinate system of the referenced Field. +* +* @param[in] pFieldReference - FieldReference instance. +* @param[out] pTransform - the transformation matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_fieldreference_gettransform(Lib3MF_FieldReference pFieldReference, Lib3MF::sTransform * pTransform); + +/** +* Sets the transformation matrix into the coordinate system of the referenced Field. +* +* @param[in] pFieldReference - FieldReference instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_fieldreference_settransform(Lib3MF_FieldReference pFieldReference, const Lib3MF::sTransform * pTransform); + +/************************************************************************************************************************* + Class definition for ScalarFieldReference +**************************************************************************************************************************/ + +/** +* Sets the ScalarField to use within this volume data item. +* +* @param[in] pScalarFieldReference - ScalarFieldReference instance. +* @param[in] pTheScalarField - ScalarField used in this element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_scalarfieldreference_setscalarfield(Lib3MF_ScalarFieldReference pScalarFieldReference, Lib3MF_ScalarField pTheScalarField); + +/************************************************************************************************************************* + Class definition for Vector3DFieldReference +**************************************************************************************************************************/ + +/** +* Sets the Vector3DField to use within this volume data item. +* +* @param[in] pVector3DFieldReference - Vector3DFieldReference instance. +* @param[in] pTheVector3DField - Vector3DField used in this element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_vector3dfieldreference_setvector3dfield(Lib3MF_Vector3DFieldReference pVector3DFieldReference, Lib3MF_Vector3DField pTheVector3DField); + +/************************************************************************************************************************* + Class definition for VolumeDataBoundary +**************************************************************************************************************************/ + +/** +* Returns the solidthreshold for the levelset function encoded in this VolumeDataBoundary +* +* @param[in] pVolumeDataBoundary - VolumeDataBoundary instance. +* @param[out] pTheSolidThreshold - The solidthreshold for the levelset function encoded in this VolumeDataBoundary +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataboundary_getsolidthreshold(Lib3MF_VolumeDataBoundary pVolumeDataBoundary, Lib3MF_double * pTheSolidThreshold); + +/** +* Sets the solidthreshold for the levelset function encoded in this VolumeDataBoundary +* +* @param[in] pVolumeDataBoundary - VolumeDataBoundary instance. +* @param[in] dTheSolidThreshold - The solidthreshold for the levelset function encoded in this VolumeDataBoundary +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataboundary_setsolidthreshold(Lib3MF_VolumeDataBoundary pVolumeDataBoundary, Lib3MF_double dTheSolidThreshold); + +/************************************************************************************************************************* + Class definition for VolumeDataColor +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MaterialMapping +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for VolumeDataComposite +**************************************************************************************************************************/ + +/** +* Returns the BaseMaterialGroup used within this volume data item +* +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pBaseMaterialGroupInstance - The BaseMaterialGroup instance of this VolumeDataComposite element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_getbasematerialgroup(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); + +/** +* Sets the BaseMaterialGroup to use within this volume data item. +* +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pBaseMaterialGroupInstance - The new BaseMaterialGroup instance of this VolumeDataComposite element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_setbasematerialgroup(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance); + +/** +* Returns the number of material mappings of this VolumeDataComposite element +* +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pCount - the number of material mappings. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_getmaterialmappingcount(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 * pCount); + +/** +* Returns MaterialMappting with given index +* +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - Index of the MaterialMapping in question. +* @param[out] pTheMaterialMapping - MaterialMapping used in this element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_getmaterialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex, Lib3MF_MaterialMapping * pTheMaterialMapping); + +/** +* Adds a the MaterialMapping +* +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pTransform - new transformation matrix +* @param[out] pTheMaterialMapping - The new MaterialMapping +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_addmaterialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, const Lib3MF::sTransform * pTransform, Lib3MF_MaterialMapping * pTheMaterialMapping); + +/** +* Removes the MaterialMapping with given index +* +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - The index of the MaterialMapping to be removed. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_removematerialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex); + +/************************************************************************************************************************* + Class definition for VolumeDataProperty +**************************************************************************************************************************/ + +/** +* Gets the qualified name of this property. +* +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] nPropertyNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pPropertyNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPropertyNameBuffer - buffer of The qualified name of this property., may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataproperty_getname(Lib3MF_VolumeDataProperty pVolumeDataProperty, const Lib3MF_uint32 nPropertyNameBufferSize, Lib3MF_uint32* pPropertyNameNeededChars, char * pPropertyNameBuffer); + +/** +* Sets whether this property is required to process this 3MF document instance. +* +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] bIsRequired - New value for whether this property is required to process this 3MF document instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataproperty_setisrequired(Lib3MF_VolumeDataProperty pVolumeDataProperty, bool bIsRequired); + +/** +* Returns whether this property is required to process this 3MF document instance. +* +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[out] pIsRequired - Is this property required to process this 3MF document instance? +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataproperty_isrequired(Lib3MF_VolumeDataProperty pVolumeDataProperty, bool * pIsRequired); + +/************************************************************************************************************************* + Class definition for VolumeData +**************************************************************************************************************************/ + +/** +* Returns the VolumeDataBoundary of this VolumeData instance +* +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheLevelSetData - filled with the VolumeDataBoundary of this VolumeData instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getboundary(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataBoundary * pTheLevelSetData); + +/** +* Creates a new VolumeDataBoundary for this VolumeData instance +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pTheScalarField - ScalarField used in this element +* @param[out] pTheLevelSetData - The new VolumeDataBoundary of this VolumeData instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_createnewboundary(Lib3MF_VolumeData pVolumeData, Lib3MF_ScalarField pTheScalarField, Lib3MF_VolumeDataBoundary * pTheLevelSetData); + +/** +* Removes the VolumeDataBoundary of this VolumeData instance +* +* @param[in] pVolumeData - VolumeData instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_removeboundary(Lib3MF_VolumeData pVolumeData); /** -* Sets all beam indices, radii and capmodes of a mesh object. +* Returns the VolumeDataComposite of this VolumeData instance * -* @param[in] pBeamLattice - BeamLattice instance. -* @param[in] nBeamInfoBufferSize - Number of elements in buffer -* @param[in] pBeamInfoBuffer - Beam buffer of contains information of a number of beams +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - filled with the VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_setbeams(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint64 nBeamInfoBufferSize, const Lib3MF::sBeam * pBeamInfoBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getcomposite(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* obtains all beam indices, radii and capmodes of a mesh object. +* Creates a new VolumeDataComposite for this VolumeData instance * -* @param[in] pBeamLattice - BeamLattice instance. -* @param[in] nBeamInfoBufferSize - Number of elements in buffer -* @param[out] pBeamInfoNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBeamInfoBuffer - Beam buffer of contains information of all beams +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - The new VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getbeams(Lib3MF_BeamLattice pBeamLattice, const Lib3MF_uint64 nBeamInfoBufferSize, Lib3MF_uint64* pBeamInfoNeededCount, Lib3MF::sBeam * pBeamInfoBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_createnewcomposite(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* Returns the ball count of a mesh object. +* Removes the VolumeDataComposite of this VolumeData instance * -* @param[in] pBeamLattice - BeamLattice instance. -* @param[out] pCount - filled with the ball count. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getballcount(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_removecomposite(Lib3MF_VolumeData pVolumeData); /** -* Returns index and radius of a single ball of a mesh object. +* Returns the VolumeDataColor of this VolumeData instance * -* @param[in] pBeamLattice - BeamLattice instance. -* @param[in] nIndex - Index of the ball (0 to ballcount - 1). -* @param[out] pBallInfo - filled with the ball node index and radius. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheColorData - filled with the VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getball(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF::sBall * pBallInfo); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getcolor(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataColor * pTheColorData); /** -* Adds a single ball to a mesh object. +* Creates a new VolumeDataColor for this VolumeData instance * -* @param[in] pBeamLattice - BeamLattice instance. -* @param[in] pBallInfo - contains the node index and radius. -* @param[out] pIndex - filled with the new Index of the ball. +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pTheVector3DField - Vector3DField used in this element +* @param[out] pTheColorData - The new VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_addball(Lib3MF_BeamLattice pBeamLattice, const Lib3MF::sBall * pBallInfo, Lib3MF_uint32 * pIndex); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_createnewcolor(Lib3MF_VolumeData pVolumeData, Lib3MF_Vector3DField pTheVector3DField, Lib3MF_VolumeDataColor * pTheColorData); /** -* Sets the index and radius of a single ball of a mesh object. +* Removes the VolumeDataColor of this VolumeData instance * -* @param[in] pBeamLattice - BeamLattice instance. -* @param[in] nIndex - Index of the ball (0 to ballcount - 1). -* @param[in] pBallInfo - filled with the ball node index and radius. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_setball(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, const Lib3MF::sBall * pBallInfo); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_removecolor(Lib3MF_VolumeData pVolumeData); /** -* Sets all ball indices and radii of a mesh object. +* Returns the number of VolumeDataProperty * -* @param[in] pBeamLattice - BeamLattice instance. -* @param[in] nBallInfoBufferSize - Number of elements in buffer -* @param[in] pBallInfoBuffer - Ball buffer of contains information of a number of balls +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pCount - the number of VolumeDataProperty-elements within this VolumdeData * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_setballs(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint64 nBallInfoBufferSize, const Lib3MF::sBall * pBallInfoBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getpropertycount(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 * pCount); /** -* obtains all ball indices and radii of a mesh object. +* Returns the VolumeDataProperty at a given Index * -* @param[in] pBeamLattice - BeamLattice instance. -* @param[in] nBallInfoBufferSize - Number of elements in buffer -* @param[out] pBallInfoNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBallInfoBuffer - Ball buffer of contains information of all balls +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be returned. +* @param[out] pTheVolumeDataProperty - the VolumeDataProperty at the given index. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getballs(Lib3MF_BeamLattice pBeamLattice, const Lib3MF_uint64 nBallInfoBufferSize, Lib3MF_uint64* pBallInfoNeededCount, Lib3MF::sBall * pBallInfoBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getproperty(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); /** -* Returns the number of beamsets of a mesh object. +* Adds a new VolumeDataProperty from a ScalarField * -* @param[in] pBeamLattice - BeamLattice instance. -* @param[out] pCount - filled with the beamset count. +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pName - the qualified name (namespace+name) of the Property +* @param[in] pTheScalarField - ScalarField used in this element +* @param[out] pTheVolumeDataProperty - the newly created VolumeDataProperty. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getbeamsetcount(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_addpropertyfromscalarfield(Lib3MF_VolumeData pVolumeData, const char * pName, Lib3MF_ScalarField pTheScalarField, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); /** -* Adds an empty beamset to a mesh object +* Adds a new VolumeDataProperty from a Vector3DField * -* @param[in] pBeamLattice - BeamLattice instance. -* @param[out] pBeamSet - the new beamset +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pName - the qualified name (namespace+name) of the Property +* @param[in] pTheVector3DField - Vector3DField used in this element +* @param[out] pTheVolumeDataProperty - the newly created VolumeDataProperty. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_addbeamset(Lib3MF_BeamLattice pBeamLattice, Lib3MF_BeamSet * pBeamSet); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_addpropertyfromvector3dfield(Lib3MF_VolumeData pVolumeData, const char * pName, Lib3MF_Vector3DField pTheVector3DField, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); /** -* Returns a beamset of a mesh object +* Removes the VolumeDataProperty with a given index * -* @param[in] pBeamLattice - BeamLattice instance. -* @param[in] nIndex - index of the requested beamset (0 ... beamsetcount-1). -* @param[out] pBeamSet - the requested beamset +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be removed. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getbeamset(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF_BeamSet * pBeamSet); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_removeproperty(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex); /************************************************************************************************************************* Class definition for Component @@ -1973,6 +2928,144 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getlayer(Lib3MF_MultiProp */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_removelayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); +/************************************************************************************************************************* + Class definition for Image3D +**************************************************************************************************************************/ + +/** +* returns the name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of the name of this Image3D, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3d_getname(Lib3MF_Image3D pImage3D, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* sets a new name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] pName - the new name of this Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3d_setname(Lib3MF_Image3D pImage3D, const char * pName); + +/** +* Retrieves, if this Image3D is a ImageStack +* +* @param[in] pImage3D - Image3D instance. +* @param[out] pIsImageStack - returns, whether the Image3D is an ImageStack +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3d_isimagestack(Lib3MF_Image3D pImage3D, bool * pIsImageStack); + +/************************************************************************************************************************* + Class definition for ImageStack +**************************************************************************************************************************/ + +/** +* Retrieves the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pRowCount - number of rows +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getrowcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pRowCount); + +/** +* Sets the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nRowCount - number of rows +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_setrowcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nRowCount); + +/** +* Retrieves the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pColumnCount - number of columns +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getcolumncount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pColumnCount); + +/** +* Sets the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nColumnCount - number of columns +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_setcolumncount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nColumnCount); + +/** +* Retrieves the number of images in the stack. +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pSheetCount - number of images +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getsheetcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pSheetCount); + +/** +* Retrieves a sheet of the stack. Raises an error if sheet is not set. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getsheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment * pSheet); + +/** +* Sets a sheet to an existing attachment. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_setsheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment pSheet); + +/** +* Creates a new sheet attachment with empty data. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_createemptysheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a memory buffer. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] nDataBufferSize - Number of elements in buffer +* @param[in] pDataBuffer - uint8 buffer of binary image data +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_createsheetfrombuffer(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_uint64 nDataBufferSize, const Lib3MF_uint8 * pDataBuffer, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a file on disk. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] pFileName - file name to read from +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_createsheetfromfile(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, const char * pFileName, Lib3MF_Attachment * pSheet); + /************************************************************************************************************************* Class definition for Attachment **************************************************************************************************************************/ @@ -3262,6 +4355,33 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getmultipropertygroups(Lib3MF_Model pM */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getslicestacks(Lib3MF_Model pModel, Lib3MF_SliceStackIterator * pResourceIterator); +/** +* creates a resource iterator instance with all image3d resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getimage3ds(Lib3MF_Model pModel, Lib3MF_Image3DIterator * pResourceIterator); + +/** +* creates a resource iterator instance with all ScalarField resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getscalarfields(Lib3MF_Model pModel, Lib3MF_ScalarFieldIterator * pResourceIterator); + +/** +* creates a resource iterator instance with all Vector3DField resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getvector3dfields(Lib3MF_Model pModel, Lib3MF_Vector3DFieldIterator * pResourceIterator); + /** * Merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. * @@ -3356,6 +4476,164 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addcompositematerials(Lib3MF_Model pMo */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addmultipropertygroup(Lib3MF_Model pModel, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance); +/** +* creates a new 3D Image Resource +* +* @param[in] pModel - Model instance. +* @param[in] nColumnCount - the number of columns in each sheet. +* @param[in] nRowCount - the number of rows in each sheet. +* @param[in] nSheetCount - the number of sheets in the image stack. +* @param[out] pInstance - returns the new ImageStack instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addimagestack(Lib3MF_Model pModel, Lib3MF_uint32 nColumnCount, Lib3MF_uint32 nRowCount, Lib3MF_uint32 nSheetCount, Lib3MF_ImageStack * pInstance); + +/** +* finds an ImageStack object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pImageStackInstance - returns the image stack instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getimagestackbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ImageStack * pImageStackInstance); + +/** +* creates a new ScalarFieldFromImage3D Resource +* +* @param[in] pModel - Model instance. +* @param[in] pImage3D - image instance +* @param[out] pTheScalarFieldFromImage3D - returns the new ScalarFieldFromImage3D instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addscalarfieldfromimage3d(Lib3MF_Model pModel, Lib3MF_Image3D pImage3D, Lib3MF_ScalarFieldFromImage3D * pTheScalarFieldFromImage3D); + +/** +* creates a new ScalarFieldComposed Resource +* +* @param[in] pModel - Model instance. +* @param[out] pTheScalarFieldComposed - returns the new ScalarFieldComposed instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addscalarfieldcomposed(Lib3MF_Model pModel, Lib3MF_ScalarFieldComposed * pTheScalarFieldComposed); + +/** +* creates a new ScalarFieldConstant Resource +* +* @param[in] pModel - Model instance. +* @param[out] pTheScalarFieldConstant - returns the new ScalarFieldConstant instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addscalarfieldconstant(Lib3MF_Model pModel, Lib3MF_ScalarFieldConstant * pTheScalarFieldConstant); + +/** +* finds a ScalarField object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pScalarFieldInstance - returns the scalar field instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getscalarfieldbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ScalarField * pScalarFieldInstance); + +/** +* finds a ScalarFieldFromImage3D object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pScalarFieldFromImage3DInstance - returns the ScalarFieldFromImage3D instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getscalarfieldfromimage3dbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ScalarFieldFromImage3D * pScalarFieldFromImage3DInstance); + +/** +* finds a ScalarFieldComposed object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pScalarFieldComposedInstance - returns the ScalarFieldComponsed instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getscalarfieldcomposedbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ScalarFieldComposed * pScalarFieldComposedInstance); + +/** +* finds a ScalarFieldConstant object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pScalarFieldConstantInstance - returns the ScalarFieldConstant instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getscalarfieldconstantbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ScalarFieldConstant * pScalarFieldConstantInstance); + +/** +* creates a new Vector3DFieldFromImage3D Resource +* +* @param[in] pModel - Model instance. +* @param[in] pImage3D - image instance +* @param[out] pTheVector3DFieldFromImage3D - returns the new Vector3DFieldFromImage3D instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addvector3dfieldfromimage3d(Lib3MF_Model pModel, Lib3MF_Image3D pImage3D, Lib3MF_Vector3DFieldFromImage3D * pTheVector3DFieldFromImage3D); + +/** +* creates a new Vector3DFieldComposed Resource +* +* @param[in] pModel - Model instance. +* @param[out] pTheVector3DFieldComposed - returns the new Vector3DFieldComposed instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addvector3dfieldcomposed(Lib3MF_Model pModel, Lib3MF_Vector3DFieldComposed * pTheVector3DFieldComposed); + +/** +* creates a new Vector3DFieldConstant Resource +* +* @param[in] pModel - Model instance. +* @param[out] pTheVector3DFieldConstant - returns the new Vector3DFieldConstant instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addvector3dfieldconstant(Lib3MF_Model pModel, Lib3MF_Vector3DFieldConstant * pTheVector3DFieldConstant); + +/** +* finds a Vector3DField object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pVector3DFieldInstance - returns the scalar field instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getvector3dfieldbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_Vector3DField * pVector3DFieldInstance); + +/** +* finds a Vector3DFieldFromImage3D object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pVector3DFieldFromImage3DInstance - returns the Vector3DFieldFromImage3D instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getvector3dfieldfromimage3dbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_Vector3DFieldFromImage3D * pVector3DFieldFromImage3DInstance); + +/** +* finds a Vector3DFieldComposed object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pVector3DFieldComposedInstance - returns the Vector3DFieldComponsed instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getvector3dfieldcomposedbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_Vector3DFieldComposed * pVector3DFieldComposedInstance); + +/** +* finds a Vector3DFieldConstant object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pVector3DFieldConstantInstance - returns the Vector3DFieldConstant instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getvector3dfieldconstantbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_Vector3DFieldConstant * pVector3DFieldConstantInstance); + /** * adds a build item to the model. * diff --git a/Autogenerated/Bindings/CppDynamic/lib3mf_dynamic.h b/Autogenerated/Bindings/CppDynamic/lib3mf_dynamic.h index bfe996afe..ccdbec87a 100644 --- a/Autogenerated/Bindings/CppDynamic/lib3mf_dynamic.h +++ b/Autogenerated/Bindings/CppDynamic/lib3mf_dynamic.h @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++-Header file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -562,6 +562,45 @@ typedef Lib3MFResult (*PLib3MFCompositeMaterialsIterator_GetCurrentCompositeMate */ typedef Lib3MFResult (*PLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupPtr) (Lib3MF_MultiPropertyGroupIterator pMultiPropertyGroupIterator, Lib3MF_MultiPropertyGroup * pResource); +/************************************************************************************************************************* + Class definition for Image3DIterator +**************************************************************************************************************************/ + +/** +* Returns the Image3D the iterator points at. +* +* @param[in] pImage3DIterator - Image3DIterator instance. +* @param[out] pResource - returns the Image3D instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3DIterator_GetCurrentImage3DPtr) (Lib3MF_Image3DIterator pImage3DIterator, Lib3MF_Image3D * pResource); + +/************************************************************************************************************************* + Class definition for FunctionIterator +**************************************************************************************************************************/ + +/** +* Returns the Function the iterator points at. +* +* @param[in] pFunctionIterator - FunctionIterator instance. +* @param[out] pResource - returns the Function instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionIterator_GetCurrentFunctionPtr) (Lib3MF_FunctionIterator pFunctionIterator, Lib3MF_Function * pResource); + +/************************************************************************************************************************* + Class definition for LevelSetIterator +**************************************************************************************************************************/ + +/** +* Returns the LevelSet the iterator points at. +* +* @param[in] pLevelSetIterator - LevelSetIterator instance. +* @param[out] pResource - returns the MeshObject instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSetIterator_GetCurrentLevelSetPtr) (Lib3MF_LevelSetIterator pLevelSetIterator, Lib3MF_LevelSet * pResource); + /************************************************************************************************************************* Class definition for MetaData **************************************************************************************************************************/ @@ -821,6 +860,15 @@ typedef Lib3MFResult (*PLib3MFObject_IsMeshObjectPtr) (Lib3MF_Object pObject, bo */ typedef Lib3MFResult (*PLib3MFObject_IsComponentsObjectPtr) (Lib3MF_Object pObject, bool * pIsComponentsObject); +/** +* Retrieves, if an object is a level set object +* +* @param[in] pObject - Object instance. +* @param[out] pIsLevelSetObject - returns, whether the object is a level set object +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFObject_IsLevelSetObjectPtr) (Lib3MF_Object pObject, bool * pIsLevelSetObject); + /** * Retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. * @@ -1153,6 +1201,174 @@ typedef Lib3MFResult (*PLib3MFMeshObject_IsManifoldAndOrientedPtr) (Lib3MF_MeshO */ typedef Lib3MFResult (*PLib3MFMeshObject_BeamLatticePtr) (Lib3MF_MeshObject pMeshObject, Lib3MF_BeamLattice * pTheBeamLattice); +/** +* Retrieves the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[out] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshObject_GetVolumeDataPtr) (Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshObject_SetVolumeDataPtr) (Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData pTheVolumeData); + +/************************************************************************************************************************* + Class definition for LevelSet +**************************************************************************************************************************/ + +/** +* Returns the function that is used as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetFunctionPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_Function * pTheFunction); + +/** +* Sets the function to use as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetFunctionPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_Function pTheFunction); + +/** +* Returns the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTransform - the transformation matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetTransformPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF::sTransform * pTransform); + +/** +* Sets the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetTransformPtr) (Lib3MF_LevelSet pLevelSet, const Lib3MF::sTransform * pTransform); + +/** +* Returns the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetChannelNamePtr) (Lib3MF_LevelSet pLevelSet, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); + +/** +* Sets the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pChannelName - new name of the function output channel +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetChannelNamePtr) (Lib3MF_LevelSet pLevelSet, const char * pChannelName); + +/** +* Sets the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetMinFeatureSizePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double dMinFeatureSize); + +/** +* Returns the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetMinFeatureSizePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double * pMinFeatureSize); + +/** +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dFallBackValue - fallback value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetFallBackValuePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double dFallBackValue); + +/** +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pFallBackValue - fallback value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetFallBackValuePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double * pFallBackValue); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] bMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetMeshBBoxOnlyPtr) (Lib3MF_LevelSet pLevelSet, bool bMeshBBoxOnly); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetMeshBBoxOnlyPtr) (Lib3MF_LevelSet pLevelSet, bool * pMeshBBoxOnly); + +/** +* Sets the mesh to use as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetMeshPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject pTheMesh); + +/** +* Returns the mesh that is used as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetMeshPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject * pTheMesh); + +/** +* Retrieves the VolumeData this Object. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheVolumeData - the VolumeData of this Object +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetVolumeDataPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this LevelSet. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetVolumeDataPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData pTheVolumeData); + /************************************************************************************************************************* Class definition for BeamLattice **************************************************************************************************************************/ @@ -1383,784 +1599,3179 @@ typedef Lib3MFResult (*PLib3MFBeamLattice_AddBeamSetPtr) (Lib3MF_BeamLattice pBe typedef Lib3MFResult (*PLib3MFBeamLattice_GetBeamSetPtr) (Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF_BeamSet * pBeamSet); /************************************************************************************************************************* - Class definition for Component + Class definition for FunctionReference **************************************************************************************************************************/ /** -* Returns the Resource Instance of the component. +* Returns the UniqueResourceID of the Function. Only functions with a 'pos'-input are allowed. * -* @param[in] pComponent - Component instance. -* @param[out] pObjectResource - filled with the Resource Instance. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourcePtr) (Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetFunctionResourceIDPtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 * pUniqueResourceID); /** -* Returns the UniqueResourceID of the component. +* Sets the UniqueResourceID to refer to. * -* @param[in] pComponent - Component instance. -* @param[out] pUniqueResourceID - returns the UniqueResourceID. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nUniqueResourceID - UniqueResourceID of the function * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourceIDPtr) (Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetFunctionResourceIDPtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 nUniqueResourceID); /** -* returns, whether a component has a UUID and, if true, the component's UUID +* Returns the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[out] pHasUUID - flag whether the component has a UUID -* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) -* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pTransform - the transformation matrix * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetUUIDPtr) (Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetTransformPtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF::sTransform * pTransform); /** -* sets the component's UUID +* Sets the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pTransform - new transformation matrix * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_SetUUIDPtr) (Lib3MF_Component pComponent, const char * pUUID); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetTransformPtr) (Lib3MF_FunctionReference pFunctionReference, const Lib3MF::sTransform * pTransform); /** -* Returns, if the component has a different transformation than the identity matrix +* Returns the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_HasTransformPtr) (Lib3MF_Component pComponent, bool * pHasTransform); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetChannelNamePtr) (Lib3MF_FunctionReference pFunctionReference, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); /** -* Returns the transformation matrix of the component. +* Sets the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pTransform - filled with the component transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pChannelName - new name of the function output channel * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetTransformPtr) (Lib3MF_Component pComponent, Lib3MF::sTransform * pTransform); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetChannelNamePtr) (Lib3MF_FunctionReference pFunctionReference, const char * pChannelName); /** -* Sets the transformation matrix of the component. +* Sets the minimal feature size as a hint for the function evaluator * -* @param[in] pComponent - Component instance. -* @param[in] pTransform - new transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_SetTransformPtr) (Lib3MF_Component pComponent, const Lib3MF::sTransform * pTransform); - -/************************************************************************************************************************* - Class definition for ComponentsObject -**************************************************************************************************************************/ +typedef Lib3MFResult (*PLib3MFFunctionReference_SetMinFeatureSizePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dMinFeatureSize); /** -* Adds a new component to a components object. +* Returns the minimal feature size as a hint for the function evaluator * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] pObjectResource - object to add as component. Must not lead to circular references! -* @param[in] pTransform - optional transform matrix for the component. -* @param[out] pComponentInstance - new component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponentsObject_AddComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const Lib3MF::sTransform * pTransform, Lib3MF_Component * pComponentInstance); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetMinFeatureSizePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pMinFeatureSize); /** -* Retrieves a component from a component object. +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) -* @param[out] pComponentInstance - component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dFallBackValue - fallback value * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetFallBackValuePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dFallBackValue); /** -* Retrieves a component count of a component object. +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[out] pCount - returns the component count +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pFallBackValue - fallback value * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentCountPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetFallBackValuePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pFallBackValue); /************************************************************************************************************************* - Class definition for BeamSet + Class definition for VolumeDataColor **************************************************************************************************************************/ -/** -* Sets a beamset's name string -* -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pName - new name of the beamset. -* @return error code or 0 (success) -*/ -typedef Lib3MFResult (*PLib3MFBeamSet_SetNamePtr) (Lib3MF_BeamSet pBeamSet, const char * pName); +/************************************************************************************************************************* + Class definition for MaterialMapping +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for VolumeDataComposite +**************************************************************************************************************************/ /** -* Retrieves a beamset's name string +* Returns the BaseMaterialGroup used within this volume data item * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pBaseMaterialGroupInstance - The BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetNamePtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); /** -* Sets a beamset's identifier string +* Sets the BaseMaterialGroup to use within this volume data item. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pIdentifier - new name of the beamset. +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pBaseMaterialGroupInstance - The new BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_SetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const char * pIdentifier); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance); /** -* Retrieves a beamset's identifier string +* Returns the number of material mappings of this VolumeDataComposite element * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) -* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pCount - the number of material mappings. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 * pCount); /** -* Retrieves the reference count of a beamset +* Returns MaterialMappting with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the reference count +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - Index of the MaterialMapping in question. +* @param[out] pTheMaterialMapping - MaterialMapping used in this element * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_GetMaterialMappingPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Sets the references of a beamset +* Adds a the MaterialMapping * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pTransform - new transformation matrix +* @param[out] pTheMaterialMapping - The new MaterialMapping * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_SetReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_AddMaterialMappingPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, const Lib3MF::sTransform * pTransform, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Retrieves the references of a beamset +* Removes the MaterialMapping with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - The index of the MaterialMapping to be removed. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex); + +/************************************************************************************************************************* + Class definition for VolumeDataProperty +**************************************************************************************************************************/ /** -* Retrieves the ball reference count of a beamset +* Gets the qualified name of this property. * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the ball reference count +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] nPropertyNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pPropertyNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPropertyNameBuffer - buffer of The qualified name of this property., may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFVolumeDataProperty_GetNamePtr) (Lib3MF_VolumeDataProperty pVolumeDataProperty, const Lib3MF_uint32 nPropertyNameBufferSize, Lib3MF_uint32* pPropertyNameNeededChars, char * pPropertyNameBuffer); /** -* Sets the ball references of a beamset +* Sets whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] bIsRequired - New value for whether this property is required to process this 3MF document instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_SetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataProperty_SetIsRequiredPtr) (Lib3MF_VolumeDataProperty pVolumeDataProperty, bool bIsRequired); /** -* Retrieves the ball references of a beamset +* Returns whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[out] pIsRequired - Is this property required to process this 3MF document instance? * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataProperty_IsRequiredPtr) (Lib3MF_VolumeDataProperty pVolumeDataProperty, bool * pIsRequired); /************************************************************************************************************************* - Class definition for BaseMaterialGroup + Class definition for VolumeData **************************************************************************************************************************/ /** -* Retrieves the count of base materials in the material group. +* Returns the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[out] pCount - returns the count of base materials. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - filled with the VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetCountPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFVolumeData_GetCompositePtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* returns all the PropertyIDs of all materials in this group +* Creates a new VolumeDataComposite for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - The new VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFVolumeData_CreateNewCompositePtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* Adds a new material to the material group +* Removes the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] pName - new name of the base material. -* @param[in] pDisplayColor - Display color of the material -* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_AddMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const Lib3MF::sColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFVolumeData_RemoveCompositePtr) (Lib3MF_VolumeData pVolumeData); /** -* Removes a material from the material group. +* Returns the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheColorData - filled with the VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_RemoveMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFVolumeData_GetColorPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataColor * pTheColorData); /** -* Returns the base material's name +* Creates a new VolumeDataColor for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheColorData - The new VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +typedef Lib3MFResult (*PLib3MFVolumeData_CreateNewColorPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataColor * pTheColorData); /** -* Sets a base material's name +* Removes the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pName - new name of the base material. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); +typedef Lib3MFResult (*PLib3MFVolumeData_RemoveColorPtr) (Lib3MF_VolumeData pVolumeData); /** -* Sets a base material's display color. +* Returns the number of VolumeDataProperty * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pCount - the number of VolumeDataProperty-elements within this VolumdeData * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF::sColor * pTheColor); +typedef Lib3MFResult (*PLib3MFVolumeData_GetPropertyCountPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 * pCount); /** -* Returns a base material's display color. +* Returns the VolumeDataProperty at a given Index * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[out] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be returned. +* @param[out] pTheVolumeDataProperty - the VolumeDataProperty at the given index. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sColor * pTheColor); +typedef Lib3MFResult (*PLib3MFVolumeData_GetPropertyPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Adds a new VolumeDataProperty from a Function +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pName - the qualified name (namespace+name) of the Property +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheVolumeDataProperty - the newly created VolumeDataProperty. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFVolumeData_AddPropertyFromFunctionPtr) (Lib3MF_VolumeData pVolumeData, const char * pName, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Removes the VolumeDataProperty with a given index +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be removed. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFVolumeData_RemovePropertyPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex); /************************************************************************************************************************* - Class definition for ColorGroup + Class definition for Component **************************************************************************************************************************/ /** -* Retrieves the count of base materials in this Color Group. +* Returns the Resource Instance of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[out] pCount - returns the count of colors within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pObjectResource - filled with the Resource Instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_GetCountPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourcePtr) (Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); /** -* returns all the PropertyIDs of all colors within this group +* Returns the UniqueResourceID of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @param[in] pComponent - Component instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_GetAllPropertyIDsPtr) (Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourceIDPtr) (Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); /** -* Adds a new value. +* returns, whether a component has a UUID and, if true, the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] pTheColor - The new color -* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pHasUUID - flag whether the component has a UUID +* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) +* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_AddColorPtr) (Lib3MF_ColorGroup pColorGroup, const Lib3MF::sColor * pTheColor, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFComponent_GetUUIDPtr) (Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); /** -* Removes a color from the color group. +* sets the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @param[in] pComponent - Component instance. +* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_RemoveColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFComponent_SetUUIDPtr) (Lib3MF_Component pComponent, const char * pUUID); /** -* Sets a color value. +* Returns, if the component has a different transformation than the identity matrix * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[in] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_SetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const Lib3MF::sColor * pTheColor); +typedef Lib3MFResult (*PLib3MFComponent_HasTransformPtr) (Lib3MF_Component pComponent, bool * pHasTransform); /** -* Sets a color value. +* Returns the transformation matrix of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[out] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pTransform - filled with the component transformation matrix * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_GetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sColor * pTheColor); +typedef Lib3MFResult (*PLib3MFComponent_GetTransformPtr) (Lib3MF_Component pComponent, Lib3MF::sTransform * pTransform); + +/** +* Sets the transformation matrix of the component. +* +* @param[in] pComponent - Component instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComponent_SetTransformPtr) (Lib3MF_Component pComponent, const Lib3MF::sTransform * pTransform); /************************************************************************************************************************* - Class definition for Texture2DGroup + Class definition for ComponentsObject **************************************************************************************************************************/ /** -* Retrieves the count of tex2coords in the Texture2DGroup. +* Adds a new component to a components object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pCount - returns the count of tex2coords. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] pObjectResource - object to add as component. Must not lead to circular references! +* @param[in] pTransform - optional transform matrix for the component. +* @param[out] pComponentInstance - new component instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetCountPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFComponentsObject_AddComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const Lib3MF::sTransform * pTransform, Lib3MF_Component * pComponentInstance); /** -* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* Retrieves a component from a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) +* @param[out] pComponentInstance - component instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); /** -* Adds a new tex2coord to the Texture2DGroup +* Retrieves a component count of a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. -* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[out] pCount - returns the component count * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_AddTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF::sTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentCountPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); + +/************************************************************************************************************************* + Class definition for BeamSet +**************************************************************************************************************************/ /** -* Obtains a tex2coord to the Texture2DGroup +* Sets a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. -* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pName - new name of the beamset. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sTex2Coord * pUVCoordinate); +typedef Lib3MFResult (*PLib3MFBeamSet_SetNamePtr) (Lib3MF_BeamSet pBeamSet, const char * pName); /** -* Removes a tex2coords from the Texture2DGroup. +* Retrieves a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_RemoveTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFBeamSet_GetNamePtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); /** -* Obtains the texture2D instance of this group. +* Sets a beamset's identifier string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pIdentifier - new name of the beamset. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTexture2DPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); +typedef Lib3MFResult (*PLib3MFBeamSet_SetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const char * pIdentifier); + +/** +* Retrieves a beamset's identifier string +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Retrieves the reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the reference count +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_SetReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the ball reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the ball reference count +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_SetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); + +/** +* Retrieves the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); /************************************************************************************************************************* - Class definition for CompositeMaterials + Class definition for BaseMaterialGroup **************************************************************************************************************************/ /** -* Retrieves the count of Composite-s in the CompositeMaterials. +* Retrieves the count of base materials in the material group. * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pCount - returns the count of Composite-s +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[out] pCount - returns the count of base materials. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCountPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetCountPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); /** -* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* returns all the PropertyIDs of all materials in this group * -* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new material to the material group +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] pName - new name of the base material. +* @param[in] pDisplayColor - Display color of the material +* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_AddMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const Lib3MF::sColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a material from the material group. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_RemoveMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); + +/** +* Returns the base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* Sets a base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pName - new name of the base material. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); + +/** +* Sets a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF::sColor * pTheColor); + +/** +* Returns a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[out] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sColor * pTheColor); + +/************************************************************************************************************************* + Class definition for ColorGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of base materials in this Color Group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[out] pCount - returns the count of colors within this color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_GetCountPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all colors within this group +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_GetAllPropertyIDsPtr) (Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] pTheColor - The new color +* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_AddColorPtr) (Lib3MF_ColorGroup pColorGroup, const Lib3MF::sColor * pTheColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a color from the color group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_RemoveColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[in] pTheColor - The color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_SetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const Lib3MF::sColor * pTheColor); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[out] pTheColor - The color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_GetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sColor * pTheColor); + +/************************************************************************************************************************* + Class definition for Texture2DGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of tex2coords in the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pCount - returns the count of tex2coords. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetCountPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_AddTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF::sTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); + +/** +* Obtains a tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. +* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sTex2Coord * pUVCoordinate); + +/** +* Removes a tex2coords from the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_RemoveTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); + +/** +* Obtains the texture2D instance of this group. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTexture2DPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); + +/************************************************************************************************************************* + Class definition for CompositeMaterials +**************************************************************************************************************************/ + +/** +* Retrieves the count of Composite-s in the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pCount - returns the count of Composite-s +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCountPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. * @param[in] nPropertyIDsBufferSize - Number of elements in buffer * @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. * @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the Composite-Mixing Values in the CompositeMaterials. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); + +/** +* Adds a new Composite-Mixing Values to the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite +* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_AddCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const Lib3MF::sCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_RemoveCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); + +/** +* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, Lib3MF::sCompositeConstituent * pCompositeBuffer); + +/************************************************************************************************************************* + Class definition for MultiPropertyGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the count of MultiProperty-s +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new MultiProperty to the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. +* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Sets the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Removes a MultiProperty from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); + +/** +* Retrieves the number of layers of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the number of layers +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup +* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF::sMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); + +/** +* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried +* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, Lib3MF::sMultiPropertyLayer * pTheLayer); + +/** +* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); + +/************************************************************************************************************************* + Class definition for Image3D +**************************************************************************************************************************/ + +/** +* returns the name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of the name of this Image3D, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3D_GetNamePtr) (Lib3MF_Image3D pImage3D, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* sets a new name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] pName - the new name of this Image3D +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3D_SetNamePtr) (Lib3MF_Image3D pImage3D, const char * pName); + +/** +* Retrieves, if this Image3D is a ImageStack +* +* @param[in] pImage3D - Image3D instance. +* @param[out] pIsImageStack - returns, whether the Image3D is an ImageStack +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3D_IsImageStackPtr) (Lib3MF_Image3D pImage3D, bool * pIsImageStack); + +/************************************************************************************************************************* + Class definition for ImageStack +**************************************************************************************************************************/ + +/** +* Retrieves the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pRowCount - number of rows +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetRowCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pRowCount); + +/** +* Sets the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nRowCount - number of rows +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_SetRowCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nRowCount); + +/** +* Retrieves the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pColumnCount - number of columns +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetColumnCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pColumnCount); + +/** +* Sets the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nColumnCount - number of columns +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_SetColumnCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nColumnCount); + +/** +* Retrieves the number of images in the stack. +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pSheetCount - number of images +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetSheetCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pSheetCount); + +/** +* Retrieves a sheet of the stack. Raises an error if sheet is not set. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetSheetPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment * pSheet); + +/** +* Sets a sheet to an existing attachment. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_SetSheetPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment pSheet); + +/** +* Creates a new sheet attachment with empty data. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_CreateEmptySheetPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a memory buffer. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] nDataBufferSize - Number of elements in buffer +* @param[in] pDataBuffer - uint8 buffer of binary image data +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_CreateSheetFromBufferPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_uint64 nDataBufferSize, const Lib3MF_uint8 * pDataBuffer, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a file on disk. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] pFileName - file name to read from +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_CreateSheetFromFilePtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, const char * pFileName, Lib3MF_Attachment * pSheet); + +/************************************************************************************************************************* + Class definition for Attachment +**************************************************************************************************************************/ + +/** +* Retrieves an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_GetPathPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new path of the attachment. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_SetPathPtr) (Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Returns the PackagePart that is this attachment. +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pPackagePart - The PackagePart of this attachment. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_PackagePartPtr) (Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); + +/** +* Retrieves an attachment's relationship type +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_GetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's relationship type. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new relationship type string. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_SetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Writes out the attachment as file. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to write into. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_WriteToFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to read from. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_ReadFromFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pTheReadCallback - Callback to call for reading a data chunk +* @param[in] nStreamSize - number of bytes the callback returns +* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. +* @param[in] pUserData - Userdata that is passed to the callback function +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_ReadFromCallbackPtr) (Lib3MF_Attachment pAttachment, Lib3MF::ReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MF::SeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); + +/** +* Retrieves the size of the attachment stream +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pStreamSize - the stream size +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_GetStreamSizePtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); + +/** +* Writes out the attachment into a buffer +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_WriteToBufferPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); + +/** +* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_ReadFromBufferPtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); + +/************************************************************************************************************************* + Class definition for Texture2D +**************************************************************************************************************************/ + +/** +* Retrieves the attachment located at the path of the texture. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); + +/** +* Sets the texture's package path to the path of the attachment. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pContentType - returns content type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetContentTypePtr) (Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureType * pContentType); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eContentType - new Content Type +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetContentTypePtr) (Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureType eContentType); + +/** +* Retrieves a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pTileStyleU - returns tilestyle type enum. +* @param[out] pTileStyleV - returns tilestyle type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureTileStyle * pTileStyleU, Lib3MF::eTextureTileStyle * pTileStyleV); + +/** +* Sets a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eTileStyleU - new tilestyle type enum. +* @param[in] eTileStyleV - new tilestyle type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureTileStyle eTileStyleU, Lib3MF::eTextureTileStyle eTileStyleV); + +/** +* Retrieves a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pFilter - returns filter type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetFilterPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureFilter * pFilter); + +/** +* Sets a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eFilter - sets new filter type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetFilterPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureFilter eFilter); + +/************************************************************************************************************************* + Class definition for ImplicitPort +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetIdentifierPtr) (Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetIdentifierPtr) (Lib3MF_ImplicitPort pImplicitPort, const char * pIdentifier); + +/** +* Retrieves the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetDisplayNamePtr) (Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetDisplayNamePtr) (Lib3MF_ImplicitPort pImplicitPort, const char * pDisplayName); + +/** +* Sets the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] eImplicitPortType - the type +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetTypePtr) (Lib3MF_ImplicitPort pImplicitPort, Lib3MF::eImplicitPortType eImplicitPortType); + +/** +* Retrieves the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[out] pImplicitPortType - the type +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetTypePtr) (Lib3MF_ImplicitPort pImplicitPort, Lib3MF::eImplicitPortType * pImplicitPortType); + +/** +* Retrieves the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nReferenceBufferSize - size of the buffer (including trailing 0) +* @param[out] pReferenceNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pReferenceBuffer - buffer of the reference, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetReferencePtr) (Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nReferenceBufferSize, Lib3MF_uint32* pReferenceNeededChars, char * pReferenceBuffer); + +/** +* Sets the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pReference - the reference +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetReferencePtr) (Lib3MF_ImplicitPort pImplicitPort, const char * pReference); + +/************************************************************************************************************************* + Class definition for Iterator +**************************************************************************************************************************/ + +/** +* Iterates to the next item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasNext - Iterates to the next item in the list. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFIterator_MoveNextPtr) (Lib3MF_Iterator pIterator, bool * pHasNext); + +/** +* Iterates to the previous item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasPrevious - Iterates to the previous item in the list. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFIterator_MovePreviousPtr) (Lib3MF_Iterator pIterator, bool * pHasPrevious); + +/** +* Returns the number of items the iterator captures. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pCount - returns the number of items the iterator captures. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFIterator_CountPtr) (Lib3MF_Iterator pIterator, Lib3MF_uint64 * pCount); + +/************************************************************************************************************************* + Class definition for ImplicitPortIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pImplicitPortIterator - ImplicitPortIterator instance. +* @param[out] pPort - The current element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPortIterator_GetCurrentPtr) (Lib3MF_ImplicitPortIterator pImplicitPortIterator, Lib3MF_ImplicitPort * pPort); + +/************************************************************************************************************************* + Class definition for ImplicitNode +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetIdentifierPtr) (Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_SetIdentifierPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier); + +/** +* Retrieves the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetDisplayNamePtr) (Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_SetDisplayNamePtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pDisplayName); + +/** +* Retrieves the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nTagBufferSize - size of the buffer (including trailing 0) +* @param[out] pTagNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pTagBuffer - buffer of the tag, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetTagPtr) (Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nTagBufferSize, Lib3MF_uint32* pTagNeededChars, char * pTagBuffer); + +/** +* Sets the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pTag - the tag +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_SetTagPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pTag); + +/** +* Retrieves the type of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pType - the type of the node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetNodeTypePtr) (Lib3MF_ImplicitNode pImplicitNode, Lib3MF::eImplicitNodeType * pType); + +/** +* Add an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[out] pPort - +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_AddInputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator for the inputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetInputsPtr) (Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Add an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[out] pPort - +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_AddOutputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator the outputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetOutputsPtr) (Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Retrieves an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_FindInputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_FindOutputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/** +* Checks if the types of the input and output ports are valid for the node type +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pValid - true, if the types are valid +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_AreTypesValidPtr) (Lib3MF_ImplicitNode pImplicitNode, bool * pValid); + +/************************************************************************************************************************* + Class definition for OneInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pInput - the input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFOneInputNode_GetInputAPtr) (Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves the output +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFOneInputNode_GetOutputResultPtr) (Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for SinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcSinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcCosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SinhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CoshNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for RoundNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CeilNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FloorNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SignNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FractNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for AbsNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ExpNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LogNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log10Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LengthNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TransposeNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for InverseNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SqrtNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ResourceIdNode +**************************************************************************************************************************/ + +/** +* Sets the Resource that the resourceid attribute of the node will point to +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[in] pResource - the resource +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFResourceIdNode_SetResourcePtr) (Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource pResource); + +/** +* Retrieves the resource of the node +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pResource - the resource +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFResourceIdNode_GetResourcePtr) (Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource * pResource); + +/** +* Retrieves the output +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFResourceIdNode_GetOutputValuePtr) (Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for TwoInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pTwoInputNode - TwoInputNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTwoInputNode_GetInputBPtr) (Lib3MF_TwoInputNode pTwoInputNode, Lib3MF_ImplicitPort * pB); + +/************************************************************************************************************************* + Class definition for AdditionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SubtractionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DivisionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DotNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CrossNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTan2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MatVecMultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MaxNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FmodNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ModNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for PowNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SelectNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFSelectNode_GetInputBPtr) (Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pB); + +/** +* Retrieves the third input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pC - the third input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFSelectNode_GetInputCPtr) (Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pC); + +/** +* Retrieves the fourth input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pD - the fourth input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFSelectNode_GetInputDPtr) (Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pD); + +/************************************************************************************************************************* + Class definition for ClampNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the lower limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMin - the input for the lower limit +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFClampNode_GetInputMinPtr) (Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMin); + +/** +* Retrieves the input for the upper limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMax - the input for the upper limit +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFClampNode_GetInputMaxPtr) (Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMax); + +/************************************************************************************************************************* + Class definition for ComposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the x component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pX - the input for the x component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetInputXPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the input for the y component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pY - the input for the y component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetInputYPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the input for the z component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pZ - the input for the z component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetInputZPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/** +* Retrieves the output +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetOutputResultPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for VectorFromScalarNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DecomposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pA - the input port for the vector to decompose +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetInputAPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pA); + +/** +* Retrieves the output for the x component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pX - the output for the x component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetOutputXPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the output for the y component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pY - the output for the y component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetOutputYPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the output for the z component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pZ - the output for the z component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetOutputZPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/************************************************************************************************************************* + Class definition for ComposeMatrixNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the element 0 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM00 - the input for the m00 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM00Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM00); + +/** +* Retrieves the input for the element 0 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM01 - the input for the m01 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM01Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM01); + +/** +* Retrieves the input for the element 0 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM02 - the input for the m02 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM02Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM02); + +/** +* Retrieves the input for the element 0 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM03 - the input for the m03 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM03Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM03); + +/** +* Retrieves the input for the element 1 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM10 - the input for the m10 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM10Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM10); + +/** +* Retrieves the input for the element 1 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM11 - the input for the m11 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM11Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM11); + +/** +* Retrieves the input for the element 1 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM12 - the input for the m12 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM12Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM12); + +/** +* Retrieves the input for the element 1 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM13 - the input for the m3 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM13Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM13); + +/** +* Retrieves the input for the element 2 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM20 - the input for the m2 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM20Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM20); + +/** +* Retrieves the input for the element 2 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM21 - +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM21Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM21); + +/** +* Retrieves the input for the element 2 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM22 - the input for the m22 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM22Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM22); + +/** +* Retrieves the input for the element 2 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM23 - the input for the m23 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM23Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM23); + +/** +* Retrieves the input for the element 3 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM30 - the input for the m30 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM30Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM30); + +/** +* Retrieves the input for the element 3 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM31 - the input for the m31 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM31Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM31); + +/** +* Retrieves the input for the element 3 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM32 - the input for the m32 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM32Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM32); + +/** +* Retrieves the input for the element 3 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM33 - the input for the m33 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM33Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM33); + +/** +* Retrieves the output +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetOutputResultPtr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromRowsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow0 - the input for the first row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputAPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow0); + +/** +* Retrieves the input for the second row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow1 - the input for the second row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputBPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow1); + +/** +* Retrieves the input for the third row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow2 - the input for the third row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputCPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow2); + +/** +* Retrieves the input for the fourth row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow3 - the input for the fourth row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputDPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetOutputResultPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromColumnsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn0 - the input for the first column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputAPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn0); + +/** +* Retrieves the input for the second column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn1 - the input for the second column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputBPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn1); + +/** +* Retrieves the input for the third column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn2 - the input for the third column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputCPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn2); + +/** +* Retrieves the input for the fourth column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn3 - the input for the fourth column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputDPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetOutputResultPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for ConstantNode +**************************************************************************************************************************/ + +/** +* Sets the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[in] dValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstantNode_SetConstantPtr) (Lib3MF_ConstantNode pConstantNode, Lib3MF_double dValue); + +/** +* Retrieves the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstantNode_GetConstantPtr) (Lib3MF_ConstantNode pConstantNode, Lib3MF_double * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstantNode_GetOutputValuePtr) (Lib3MF_ConstantNode pConstantNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for ConstVecNode +**************************************************************************************************************************/ + +/** +* Sets the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstVecNode_SetVectorPtr) (Lib3MF_ConstVecNode pConstVecNode, const Lib3MF::sVector * pValue); + +/** +* Retrieves the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstVecNode_GetVectorPtr) (Lib3MF_ConstVecNode pConstVecNode, Lib3MF::sVector * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pVector - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstVecNode_GetOutputVectorPtr) (Lib3MF_ConstVecNode pConstVecNode, Lib3MF_ImplicitPort * pVector); + +/************************************************************************************************************************* + Class definition for ConstMatNode +**************************************************************************************************************************/ + +/** +* Sets the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstMatNode_SetMatrixPtr) (Lib3MF_ConstMatNode pConstMatNode, const Lib3MF::sMatrix4x4 * pValue); + +/** +* Retrieves the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pValue - the matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstMatNode_GetMatrixPtr) (Lib3MF_ConstMatNode pConstMatNode, Lib3MF::sMatrix4x4 * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pMatrix - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstMatNode_GetOutputMatrixPtr) (Lib3MF_ConstMatNode pConstMatNode, Lib3MF_ImplicitPort * pMatrix); + +/************************************************************************************************************************* + Class definition for MeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshNode_GetInputMeshPtr) (Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshNode_GetInputPosPtr) (Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pDistance - the output port for the signed distance to the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshNode_GetOutputDistancePtr) (Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for UnsignedMeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFUnsignedMeshNode_GetInputMeshPtr) (Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFUnsignedMeshNode_GetInputPosPtr) (Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pDistance - the output port for the unsigned distance to the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFUnsignedMeshNode_GetOutputDistancePtr) (Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for FunctionCallNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the function id +* +* @param[in] pFunctionCallNode - FunctionCallNode instance. +* @param[out] pFunction - the input port for the function +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionCallNode_GetInputFunctionIDPtr) (Lib3MF_FunctionCallNode pFunctionCallNode, Lib3MF_ImplicitPort * pFunction); + +/************************************************************************************************************************* + Class definition for NodeIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pNodeIterator - NodeIterator instance. +* @param[out] pNode - The current element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFNodeIterator_GetCurrentPtr) (Lib3MF_NodeIterator pNodeIterator, Lib3MF_ImplicitNode * pNode); + +/************************************************************************************************************************* + Class definition for Function +**************************************************************************************************************************/ + +/** +* Retrieves the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_GetDisplayNamePtr) (Lib3MF_Function pFunction, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_SetDisplayNamePtr) (Lib3MF_Function pFunction, const char * pDisplayName); + +/** +* Add an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_AddInputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, Lib3MF::eImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the list of inputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_GetInputsPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an input +* +* @param[in] pFunction - Function instance. +* @param[in] pInput - The input to be removed +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_RemoveInputPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPort pInput); + +/** +* Add an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_AddOutputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, Lib3MF::eImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the outputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_GetOutputsPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an output +* +* @param[in] pFunction - Function instance. +* @param[in] pOutput - The output to be removed +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_RemoveOutputPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPort pOutput); + +/** +* Retrieves an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_FindInputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_FindOutputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/************************************************************************************************************************* + Class definition for ImplicitFunction +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_GetIdentifierPtr) (Lib3MF_ImplicitFunction pImplicitFunction, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_SetIdentifierPtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier); + +/** +* Add a node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] eNodeType - the type of the node +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF::eImplicitNodeType eNodeType, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ImplicitNode * pNode); + +/** +* Add a SinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSinNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinNode * pNode); + +/** +* Add a CosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCosNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CosNode * pNode); + +/** +* Add a TanNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddTanNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanNode * pNode); + +/** +* Add a ArcSinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddArcSinNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcSinNode * pNode); + +/** +* Add a ArcCosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddArcCosNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcCosNode * pNode); + +/** +* Add a ArcTan2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddArcTan2NodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcTan2Node * pNode); + +/** +* Add a SinhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSinhNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinhNode * pNode); + +/** +* Add a CoshNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCoshNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CoshNode * pNode); + +/** +* Add a TanhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddTanhNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanhNode * pNode); + +/** +* Add a RoundNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddRoundNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_RoundNode * pNode); + +/** +* Add a CeilNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCeilNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CeilNode * pNode); + +/** +* Add a FloorNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFloorNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FloorNode * pNode); + +/** +* Add a SignNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSignNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SignNode * pNode); + +/** +* Add a FractNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFractNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FractNode * pNode); + +/** +* Add a AbsNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddAbsNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AbsNode * pNode); + +/** +* Add a ExpNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddExpNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ExpNode * pNode); + +/** +* Add a LogNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLogNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_LogNode * pNode); + +/** +* Add a Log2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLog2NodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log2Node * pNode); + +/** +* Add a Log10Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLog10NodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log10Node * pNode); + +/** +* Add a LengthNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLengthNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_LengthNode * pNode); + +/** +* Add a TransposeNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddTransposeNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TransposeNode * pNode); + +/** +* Add a InverseNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_InverseNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_InverseNode * pNode); + +/** +* Add a SqrtNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSqrtNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SqrtNode * pNode); + +/** +* Add a ResourceIdNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddResourceIdNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ResourceIdNode * pNode); + +/** +* Add an AdditionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddAdditionNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AdditionNode * pNode); + +/** +* Add a SubtractionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSubtractionNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SubtractionNode * pNode); + +/** +* Add a MultiplicationNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMultiplicationNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MultiplicationNode * pNode); + +/** +* Add a DivisionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddDivisionNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_DivisionNode * pNode); + +/** +* Add a DotNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddDotNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DotNode * pNode); + +/** +* Add a CrossNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCrossNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_CrossNode * pNode); /** -* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* Add a MatVecMultiplicationNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatVecMultiplicationNode * pNode); /** -* Adds a new Composite-Mixing Values to the CompositeMaterials. +* Add a MinNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite -* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_AddCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const Lib3MF::sCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMinNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MinNode * pNode); /** -* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* Add a MaxNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_RemoveCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMaxNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MaxNode * pNode); /** -* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* Add a FmodNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, Lib3MF::sCompositeConstituent * pCompositeBuffer); - -/************************************************************************************************************************* - Class definition for MultiPropertyGroup -**************************************************************************************************************************/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFmodNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FmodNode * pNode); /** -* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* Add a PowNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the count of MultiProperty-s +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddPowNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_PowNode * pNode); /** -* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* Add a SelectNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSelectNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SelectNode * pNode); /** -* Adds a new MultiProperty to the MultiPropertyGroup. +* Add a ClampNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. -* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddClampNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ClampNode * pNode); /** -* Sets the PropertyIDs of a MultiProperty. +* Add a ComposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddComposeVectorNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeVectorNode * pNode); /** -* Obtains the PropertyIDs of a MultiProperty. +* Add a VectorFromScalar * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddVectorFromScalarNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_VectorFromScalarNode * pNode); /** -* Removes a MultiProperty from this MultiPropertyGroup. +* Add a DecomposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddDecomposeVectorNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DecomposeVectorNode * pNode); /** -* Retrieves the number of layers of this MultiPropertyGroup. +* Add a ComposeMatrixNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the number of layers +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddComposeMatrixNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeMatrixNode * pNode); /** -* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* Add a MatrixFromRowsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup -* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF::sMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromRowsNode * pNode); /** -* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* Add a MatrixFromColumnsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried -* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, Lib3MF::sMultiPropertyLayer * pTheLayer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromColumnsNode * pNode); /** -* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* Add a ConstantNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); - -/************************************************************************************************************************* - Class definition for Attachment -**************************************************************************************************************************/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddConstantNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstantNode * pNode); /** -* Retrieves an attachment's package path. This function will be removed in a later release. +* Add a ConstVecNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_GetPathPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddConstVecNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstVecNode * pNode); /** -* Sets an attachment's package path. This function will be removed in a later release. +* Add a ConstMatNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new path of the attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_SetPathPtr) (Lib3MF_Attachment pAttachment, const char * pPath); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddConstMatNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstMatNode * pNode); /** -* Returns the PackagePart that is this attachment. +* Add a MeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[out] pPackagePart - The PackagePart of this attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_PackagePartPtr) (Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMeshNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MeshNode * pNode); /** -* Retrieves an attachment's relationship type +* Add a UnsignedMeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_GetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddUnsignedMeshNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_UnsignedMeshNode * pNode); /** -* Sets an attachment's relationship type. +* Add a FunctionCallNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new relationship type string. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_SetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const char * pPath); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFunctionCallNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_FunctionCallNode * pNode); /** -* Writes out the attachment as file. +* Retrieves the nodes * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to write into. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[out] pIterator - iterator for the list of nodes * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_WriteToFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); +typedef Lib3MFResult (*PLib3MFImplicitFunction_GetNodesPtr) (Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_NodeIterator * pIterator); /** -* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Removes a node * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to read from. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pNode - The node to be removed * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_ReadFromFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); +typedef Lib3MFResult (*PLib3MFImplicitFunction_RemoveNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitNode pNode); /** -* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[in] pTheReadCallback - Callback to call for reading a data chunk -* @param[in] nStreamSize - number of bytes the callback returns -* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. -* @param[in] pUserData - Userdata that is passed to the callback function +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - the source port +* @param[in] pTarget - the target port * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_ReadFromCallbackPtr) (Lib3MF_Attachment pAttachment, Lib3MF::ReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MF::SeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLinkPtr) (Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitPort pSource, Lib3MF_ImplicitPort pTarget); /** -* Retrieves the size of the attachment stream +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[out] pStreamSize - the stream size +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - name of the source port in the format nodename.portname +* @param[in] pTarget - name of the target port in the format nodename.portname * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_GetStreamSizePtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLinkByNamesPtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pSource, const char * pTarget); /** -* Writes out the attachment into a buffer +* Clears the function * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_WriteToBufferPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_ClearPtr) (Lib3MF_ImplicitFunction pImplicitFunction); /** -* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* Sorts the nodes topologically * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_ReadFromBufferPtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_SortNodesTopologicallyPtr) (Lib3MF_ImplicitFunction pImplicitFunction); /************************************************************************************************************************* - Class definition for Texture2D + Class definition for FunctionFromImage3D **************************************************************************************************************************/ /** -* Retrieves the attachment located at the path of the texture. +* Returns the selected 3D image. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pImage3D - image instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetImage3DPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D * pImage3D); /** -* Sets the texture's package path to the path of the attachment. +* Sets the 3D image of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] pImage3D - image instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetImage3DPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D pImage3D); /** -* Retrieves a texture's content type. +* Sets the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pContentType - returns content type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eFilter - texture filter * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetContentTypePtr) (Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureType * pContentType); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetFilterPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF::eTextureFilter eFilter); /** -* Retrieves a texture's content type. +* Returns the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eContentType - new Content Type +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pFilter - texture filter * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetContentTypePtr) (Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureType eContentType); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetFilterPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF::eTextureFilter * pFilter); /** -* Retrieves a texture's tilestyle type. +* Sets the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pTileStyleU - returns tilestyle type enum. -* @param[out] pTileStyleV - returns tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eTileStyleU - tile style in U +* @param[in] eTileStyleV - tile style in V +* @param[in] eTileStyleW - tile style in W * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureTileStyle * pTileStyleU, Lib3MF::eTextureTileStyle * pTileStyleV); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetTileStylesPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF::eTextureTileStyle eTileStyleU, Lib3MF::eTextureTileStyle eTileStyleV, Lib3MF::eTextureTileStyle eTileStyleW); /** -* Sets a texture's tilestyle type. +* Retrieves the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eTileStyleU - new tilestyle type enum. -* @param[in] eTileStyleV - new tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pTileStyleU - tile style in U +* @param[out] pTileStyleV - tile style in V +* @param[out] pTileStyleW - tile style in W * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureTileStyle eTileStyleU, Lib3MF::eTextureTileStyle eTileStyleV); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetTileStylesPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF::eTextureTileStyle * pTileStyleU, Lib3MF::eTextureTileStyle * pTileStyleV, Lib3MF::eTextureTileStyle * pTileStyleW); /** -* Retrieves a texture's filter type. +* returns the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pFilter - returns filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetFilterPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureFilter * pFilter); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetOffsetPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pOffset); /** -* Sets a texture's filter type. +* Sets the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eFilter - sets new filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetFilterPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureFilter eFilter); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetOffsetPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dOffset); + +/** +* returns the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetScalePtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pScale); + +/** +* Sets the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetScalePtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dScale); /************************************************************************************************************************* Class definition for BuildItem @@ -3132,6 +5743,16 @@ typedef Lib3MFResult (*PLib3MFModel_GetColorGroupByIDPtr) (Lib3MF_Model pModel, */ typedef Lib3MFResult (*PLib3MFModel_GetSliceStackByIDPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_SliceStack * pSliceStacInstance); +/** +* finds a level set object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pLevelSetObjectInstance - returns the level set object instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetLevelSetByIDPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_LevelSet * pLevelSetObjectInstance); + /** * returns, whether a build has a UUID and, if true, the build's UUID * @@ -3270,6 +5891,15 @@ typedef Lib3MFResult (*PLib3MFModel_GetMultiPropertyGroupsPtr) (Lib3MF_Model pMo */ typedef Lib3MFResult (*PLib3MFModel_GetSliceStacksPtr) (Lib3MF_Model pModel, Lib3MF_SliceStackIterator * pResourceIterator); +/** +* creates a resource iterator instance with all image3d resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetImage3DsPtr) (Lib3MF_Model pModel, Lib3MF_Image3DIterator * pResourceIterator); + /** * Merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. * @@ -3279,6 +5909,15 @@ typedef Lib3MFResult (*PLib3MFModel_GetSliceStacksPtr) (Lib3MF_Model pModel, Lib */ typedef Lib3MFResult (*PLib3MFModel_MergeToModelPtr) (Lib3MF_Model pModel, Lib3MF_Model * pMergedModelInstance); +/** +* Merges the given model into this model. +* +* @param[in] pModel - Model instance. +* @param[in] pModelInstance - model to be merged +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_MergeFromModelPtr) (Lib3MF_Model pModel, Lib3MF_Model pModelInstance); + /** * adds an empty mesh object to the model. * @@ -3364,6 +6003,28 @@ typedef Lib3MFResult (*PLib3MFModel_AddCompositeMaterialsPtr) (Lib3MF_Model pMod */ typedef Lib3MFResult (*PLib3MFModel_AddMultiPropertyGroupPtr) (Lib3MF_Model pModel, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance); +/** +* creates a new 3D Image Resource +* +* @param[in] pModel - Model instance. +* @param[in] nColumnCount - the number of columns in each sheet. +* @param[in] nRowCount - the number of rows in each sheet. +* @param[in] nSheetCount - the number of sheets in the image stack. +* @param[out] pInstance - returns the new ImageStack instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddImageStackPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nColumnCount, Lib3MF_uint32 nRowCount, Lib3MF_uint32 nSheetCount, Lib3MF_ImageStack * pInstance); + +/** +* finds an ImageStack object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pImageStackInstance - returns the image stack instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetImageStackByIDPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ImageStack * pImageStackInstance); + /** * adds a build item to the model. * @@ -3515,6 +6176,70 @@ typedef Lib3MFResult (*PLib3MFModel_SetRandomNumberCallbackPtr) (Lib3MF_Model pM */ typedef Lib3MFResult (*PLib3MFModel_GetKeyStorePtr) (Lib3MF_Model pModel, Lib3MF_KeyStore * pKeyStore); +/** +* creates a resource iterator for all functions +* +* @param[in] pModel - Model instance. +* @param[out] pTheResourceIterator - returns the resource iterator +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetFunctionsPtr) (Lib3MF_Model pModel, Lib3MF_FunctionIterator * pTheResourceIterator); + +/** +* adds a function described by nodes to the model +* +* @param[in] pModel - Model instance. +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddImplicitFunctionPtr) (Lib3MF_Model pModel, Lib3MF_ImplicitFunction * pFunctionInstance); + +/** +* adds a function defined by an image3d to the model +* +* @param[in] pModel - Model instance. +* @param[in] pImage3DInstance - the Image3D-instance used for this function +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddFunctionFromImage3DPtr) (Lib3MF_Model pModel, Lib3MF_Image3D pImage3DInstance, Lib3MF_FunctionFromImage3D * pFunctionInstance); + +/** +* adds a volume data resource to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pVolumeDataInstance - returns the new volume data instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddVolumeDataPtr) (Lib3MF_Model pModel, Lib3MF_VolumeData * pVolumeDataInstance); + +/** +* adds an empty boundary shape object to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pLevelSetInstance - returns the mesh object instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddLevelSetPtr) (Lib3MF_Model pModel, Lib3MF_LevelSet * pLevelSetInstance); + +/** +* creates a resource iterator instance with all boundary shape resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetLevelSetsPtr) (Lib3MF_Model pModel, Lib3MF_LevelSetIterator * pResourceIterator); + +/** +* Removes a resource from the model +* +* @param[in] pModel - Model instance. +* @param[in] pResource - The resource to remove +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_RemoveResourcePtr) (Lib3MF_Model pModel, Lib3MF_Resource pResource); + /************************************************************************************************************************* Global functions **************************************************************************************************************************/ @@ -3767,6 +6492,9 @@ typedef struct { PLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupPtr m_Texture2DGroupIterator_GetCurrentTexture2DGroup; PLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsPtr m_CompositeMaterialsIterator_GetCurrentCompositeMaterials; PLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupPtr m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup; + PLib3MFImage3DIterator_GetCurrentImage3DPtr m_Image3DIterator_GetCurrentImage3D; + PLib3MFFunctionIterator_GetCurrentFunctionPtr m_FunctionIterator_GetCurrentFunction; + PLib3MFLevelSetIterator_GetCurrentLevelSetPtr m_LevelSetIterator_GetCurrentLevelSet; PLib3MFMetaData_GetNameSpacePtr m_MetaData_GetNameSpace; PLib3MFMetaData_SetNameSpacePtr m_MetaData_SetNameSpace; PLib3MFMetaData_GetNamePtr m_MetaData_GetName; @@ -3792,6 +6520,7 @@ typedef struct { PLib3MFObject_SetPartNumberPtr m_Object_SetPartNumber; PLib3MFObject_IsMeshObjectPtr m_Object_IsMeshObject; PLib3MFObject_IsComponentsObjectPtr m_Object_IsComponentsObject; + PLib3MFObject_IsLevelSetObjectPtr m_Object_IsLevelSetObject; PLib3MFObject_IsValidPtr m_Object_IsValid; PLib3MFObject_SetAttachmentAsThumbnailPtr m_Object_SetAttachmentAsThumbnail; PLib3MFObject_GetThumbnailAttachmentPtr m_Object_GetThumbnailAttachment; @@ -3826,6 +6555,24 @@ typedef struct { PLib3MFMeshObject_SetGeometryPtr m_MeshObject_SetGeometry; PLib3MFMeshObject_IsManifoldAndOrientedPtr m_MeshObject_IsManifoldAndOriented; PLib3MFMeshObject_BeamLatticePtr m_MeshObject_BeamLattice; + PLib3MFMeshObject_GetVolumeDataPtr m_MeshObject_GetVolumeData; + PLib3MFMeshObject_SetVolumeDataPtr m_MeshObject_SetVolumeData; + PLib3MFLevelSet_GetFunctionPtr m_LevelSet_GetFunction; + PLib3MFLevelSet_SetFunctionPtr m_LevelSet_SetFunction; + PLib3MFLevelSet_GetTransformPtr m_LevelSet_GetTransform; + PLib3MFLevelSet_SetTransformPtr m_LevelSet_SetTransform; + PLib3MFLevelSet_GetChannelNamePtr m_LevelSet_GetChannelName; + PLib3MFLevelSet_SetChannelNamePtr m_LevelSet_SetChannelName; + PLib3MFLevelSet_SetMinFeatureSizePtr m_LevelSet_SetMinFeatureSize; + PLib3MFLevelSet_GetMinFeatureSizePtr m_LevelSet_GetMinFeatureSize; + PLib3MFLevelSet_SetFallBackValuePtr m_LevelSet_SetFallBackValue; + PLib3MFLevelSet_GetFallBackValuePtr m_LevelSet_GetFallBackValue; + PLib3MFLevelSet_SetMeshBBoxOnlyPtr m_LevelSet_SetMeshBBoxOnly; + PLib3MFLevelSet_GetMeshBBoxOnlyPtr m_LevelSet_GetMeshBBoxOnly; + PLib3MFLevelSet_SetMeshPtr m_LevelSet_SetMesh; + PLib3MFLevelSet_GetMeshPtr m_LevelSet_GetMesh; + PLib3MFLevelSet_GetVolumeDataPtr m_LevelSet_GetVolumeData; + PLib3MFLevelSet_SetVolumeDataPtr m_LevelSet_SetVolumeData; PLib3MFBeamLattice_GetMinLengthPtr m_BeamLattice_GetMinLength; PLib3MFBeamLattice_SetMinLengthPtr m_BeamLattice_SetMinLength; PLib3MFBeamLattice_GetClippingPtr m_BeamLattice_GetClipping; @@ -3849,6 +6596,35 @@ typedef struct { PLib3MFBeamLattice_GetBeamSetCountPtr m_BeamLattice_GetBeamSetCount; PLib3MFBeamLattice_AddBeamSetPtr m_BeamLattice_AddBeamSet; PLib3MFBeamLattice_GetBeamSetPtr m_BeamLattice_GetBeamSet; + PLib3MFFunctionReference_GetFunctionResourceIDPtr m_FunctionReference_GetFunctionResourceID; + PLib3MFFunctionReference_SetFunctionResourceIDPtr m_FunctionReference_SetFunctionResourceID; + PLib3MFFunctionReference_GetTransformPtr m_FunctionReference_GetTransform; + PLib3MFFunctionReference_SetTransformPtr m_FunctionReference_SetTransform; + PLib3MFFunctionReference_GetChannelNamePtr m_FunctionReference_GetChannelName; + PLib3MFFunctionReference_SetChannelNamePtr m_FunctionReference_SetChannelName; + PLib3MFFunctionReference_SetMinFeatureSizePtr m_FunctionReference_SetMinFeatureSize; + PLib3MFFunctionReference_GetMinFeatureSizePtr m_FunctionReference_GetMinFeatureSize; + PLib3MFFunctionReference_SetFallBackValuePtr m_FunctionReference_SetFallBackValue; + PLib3MFFunctionReference_GetFallBackValuePtr m_FunctionReference_GetFallBackValue; + PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr m_VolumeDataComposite_GetBaseMaterialGroup; + PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr m_VolumeDataComposite_SetBaseMaterialGroup; + PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr m_VolumeDataComposite_GetMaterialMappingCount; + PLib3MFVolumeDataComposite_GetMaterialMappingPtr m_VolumeDataComposite_GetMaterialMapping; + PLib3MFVolumeDataComposite_AddMaterialMappingPtr m_VolumeDataComposite_AddMaterialMapping; + PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr m_VolumeDataComposite_RemoveMaterialMapping; + PLib3MFVolumeDataProperty_GetNamePtr m_VolumeDataProperty_GetName; + PLib3MFVolumeDataProperty_SetIsRequiredPtr m_VolumeDataProperty_SetIsRequired; + PLib3MFVolumeDataProperty_IsRequiredPtr m_VolumeDataProperty_IsRequired; + PLib3MFVolumeData_GetCompositePtr m_VolumeData_GetComposite; + PLib3MFVolumeData_CreateNewCompositePtr m_VolumeData_CreateNewComposite; + PLib3MFVolumeData_RemoveCompositePtr m_VolumeData_RemoveComposite; + PLib3MFVolumeData_GetColorPtr m_VolumeData_GetColor; + PLib3MFVolumeData_CreateNewColorPtr m_VolumeData_CreateNewColor; + PLib3MFVolumeData_RemoveColorPtr m_VolumeData_RemoveColor; + PLib3MFVolumeData_GetPropertyCountPtr m_VolumeData_GetPropertyCount; + PLib3MFVolumeData_GetPropertyPtr m_VolumeData_GetProperty; + PLib3MFVolumeData_AddPropertyFromFunctionPtr m_VolumeData_AddPropertyFromFunction; + PLib3MFVolumeData_RemovePropertyPtr m_VolumeData_RemoveProperty; PLib3MFComponent_GetObjectResourcePtr m_Component_GetObjectResource; PLib3MFComponent_GetObjectResourceIDPtr m_Component_GetObjectResourceID; PLib3MFComponent_GetUUIDPtr m_Component_GetUUID; @@ -3905,6 +6681,19 @@ typedef struct { PLib3MFMultiPropertyGroup_AddLayerPtr m_MultiPropertyGroup_AddLayer; PLib3MFMultiPropertyGroup_GetLayerPtr m_MultiPropertyGroup_GetLayer; PLib3MFMultiPropertyGroup_RemoveLayerPtr m_MultiPropertyGroup_RemoveLayer; + PLib3MFImage3D_GetNamePtr m_Image3D_GetName; + PLib3MFImage3D_SetNamePtr m_Image3D_SetName; + PLib3MFImage3D_IsImageStackPtr m_Image3D_IsImageStack; + PLib3MFImageStack_GetRowCountPtr m_ImageStack_GetRowCount; + PLib3MFImageStack_SetRowCountPtr m_ImageStack_SetRowCount; + PLib3MFImageStack_GetColumnCountPtr m_ImageStack_GetColumnCount; + PLib3MFImageStack_SetColumnCountPtr m_ImageStack_SetColumnCount; + PLib3MFImageStack_GetSheetCountPtr m_ImageStack_GetSheetCount; + PLib3MFImageStack_GetSheetPtr m_ImageStack_GetSheet; + PLib3MFImageStack_SetSheetPtr m_ImageStack_SetSheet; + PLib3MFImageStack_CreateEmptySheetPtr m_ImageStack_CreateEmptySheet; + PLib3MFImageStack_CreateSheetFromBufferPtr m_ImageStack_CreateSheetFromBuffer; + PLib3MFImageStack_CreateSheetFromFilePtr m_ImageStack_CreateSheetFromFile; PLib3MFAttachment_GetPathPtr m_Attachment_GetPath; PLib3MFAttachment_SetPathPtr m_Attachment_SetPath; PLib3MFAttachment_PackagePartPtr m_Attachment_PackagePart; @@ -3924,6 +6713,173 @@ typedef struct { PLib3MFTexture2D_SetTileStyleUVPtr m_Texture2D_SetTileStyleUV; PLib3MFTexture2D_GetFilterPtr m_Texture2D_GetFilter; PLib3MFTexture2D_SetFilterPtr m_Texture2D_SetFilter; + PLib3MFImplicitPort_GetIdentifierPtr m_ImplicitPort_GetIdentifier; + PLib3MFImplicitPort_SetIdentifierPtr m_ImplicitPort_SetIdentifier; + PLib3MFImplicitPort_GetDisplayNamePtr m_ImplicitPort_GetDisplayName; + PLib3MFImplicitPort_SetDisplayNamePtr m_ImplicitPort_SetDisplayName; + PLib3MFImplicitPort_SetTypePtr m_ImplicitPort_SetType; + PLib3MFImplicitPort_GetTypePtr m_ImplicitPort_GetType; + PLib3MFImplicitPort_GetReferencePtr m_ImplicitPort_GetReference; + PLib3MFImplicitPort_SetReferencePtr m_ImplicitPort_SetReference; + PLib3MFIterator_MoveNextPtr m_Iterator_MoveNext; + PLib3MFIterator_MovePreviousPtr m_Iterator_MovePrevious; + PLib3MFIterator_CountPtr m_Iterator_Count; + PLib3MFImplicitPortIterator_GetCurrentPtr m_ImplicitPortIterator_GetCurrent; + PLib3MFImplicitNode_GetIdentifierPtr m_ImplicitNode_GetIdentifier; + PLib3MFImplicitNode_SetIdentifierPtr m_ImplicitNode_SetIdentifier; + PLib3MFImplicitNode_GetDisplayNamePtr m_ImplicitNode_GetDisplayName; + PLib3MFImplicitNode_SetDisplayNamePtr m_ImplicitNode_SetDisplayName; + PLib3MFImplicitNode_GetTagPtr m_ImplicitNode_GetTag; + PLib3MFImplicitNode_SetTagPtr m_ImplicitNode_SetTag; + PLib3MFImplicitNode_GetNodeTypePtr m_ImplicitNode_GetNodeType; + PLib3MFImplicitNode_AddInputPtr m_ImplicitNode_AddInput; + PLib3MFImplicitNode_GetInputsPtr m_ImplicitNode_GetInputs; + PLib3MFImplicitNode_AddOutputPtr m_ImplicitNode_AddOutput; + PLib3MFImplicitNode_GetOutputsPtr m_ImplicitNode_GetOutputs; + PLib3MFImplicitNode_FindInputPtr m_ImplicitNode_FindInput; + PLib3MFImplicitNode_FindOutputPtr m_ImplicitNode_FindOutput; + PLib3MFImplicitNode_AreTypesValidPtr m_ImplicitNode_AreTypesValid; + PLib3MFOneInputNode_GetInputAPtr m_OneInputNode_GetInputA; + PLib3MFOneInputNode_GetOutputResultPtr m_OneInputNode_GetOutputResult; + PLib3MFResourceIdNode_SetResourcePtr m_ResourceIdNode_SetResource; + PLib3MFResourceIdNode_GetResourcePtr m_ResourceIdNode_GetResource; + PLib3MFResourceIdNode_GetOutputValuePtr m_ResourceIdNode_GetOutputValue; + PLib3MFTwoInputNode_GetInputBPtr m_TwoInputNode_GetInputB; + PLib3MFSelectNode_GetInputBPtr m_SelectNode_GetInputB; + PLib3MFSelectNode_GetInputCPtr m_SelectNode_GetInputC; + PLib3MFSelectNode_GetInputDPtr m_SelectNode_GetInputD; + PLib3MFClampNode_GetInputMinPtr m_ClampNode_GetInputMin; + PLib3MFClampNode_GetInputMaxPtr m_ClampNode_GetInputMax; + PLib3MFComposeVectorNode_GetInputXPtr m_ComposeVectorNode_GetInputX; + PLib3MFComposeVectorNode_GetInputYPtr m_ComposeVectorNode_GetInputY; + PLib3MFComposeVectorNode_GetInputZPtr m_ComposeVectorNode_GetInputZ; + PLib3MFComposeVectorNode_GetOutputResultPtr m_ComposeVectorNode_GetOutputResult; + PLib3MFDecomposeVectorNode_GetInputAPtr m_DecomposeVectorNode_GetInputA; + PLib3MFDecomposeVectorNode_GetOutputXPtr m_DecomposeVectorNode_GetOutputX; + PLib3MFDecomposeVectorNode_GetOutputYPtr m_DecomposeVectorNode_GetOutputY; + PLib3MFDecomposeVectorNode_GetOutputZPtr m_DecomposeVectorNode_GetOutputZ; + PLib3MFComposeMatrixNode_GetInputM00Ptr m_ComposeMatrixNode_GetInputM00; + PLib3MFComposeMatrixNode_GetInputM01Ptr m_ComposeMatrixNode_GetInputM01; + PLib3MFComposeMatrixNode_GetInputM02Ptr m_ComposeMatrixNode_GetInputM02; + PLib3MFComposeMatrixNode_GetInputM03Ptr m_ComposeMatrixNode_GetInputM03; + PLib3MFComposeMatrixNode_GetInputM10Ptr m_ComposeMatrixNode_GetInputM10; + PLib3MFComposeMatrixNode_GetInputM11Ptr m_ComposeMatrixNode_GetInputM11; + PLib3MFComposeMatrixNode_GetInputM12Ptr m_ComposeMatrixNode_GetInputM12; + PLib3MFComposeMatrixNode_GetInputM13Ptr m_ComposeMatrixNode_GetInputM13; + PLib3MFComposeMatrixNode_GetInputM20Ptr m_ComposeMatrixNode_GetInputM20; + PLib3MFComposeMatrixNode_GetInputM21Ptr m_ComposeMatrixNode_GetInputM21; + PLib3MFComposeMatrixNode_GetInputM22Ptr m_ComposeMatrixNode_GetInputM22; + PLib3MFComposeMatrixNode_GetInputM23Ptr m_ComposeMatrixNode_GetInputM23; + PLib3MFComposeMatrixNode_GetInputM30Ptr m_ComposeMatrixNode_GetInputM30; + PLib3MFComposeMatrixNode_GetInputM31Ptr m_ComposeMatrixNode_GetInputM31; + PLib3MFComposeMatrixNode_GetInputM32Ptr m_ComposeMatrixNode_GetInputM32; + PLib3MFComposeMatrixNode_GetInputM33Ptr m_ComposeMatrixNode_GetInputM33; + PLib3MFComposeMatrixNode_GetOutputResultPtr m_ComposeMatrixNode_GetOutputResult; + PLib3MFMatrixFromRowsNode_GetInputAPtr m_MatrixFromRowsNode_GetInputA; + PLib3MFMatrixFromRowsNode_GetInputBPtr m_MatrixFromRowsNode_GetInputB; + PLib3MFMatrixFromRowsNode_GetInputCPtr m_MatrixFromRowsNode_GetInputC; + PLib3MFMatrixFromRowsNode_GetInputDPtr m_MatrixFromRowsNode_GetInputD; + PLib3MFMatrixFromRowsNode_GetOutputResultPtr m_MatrixFromRowsNode_GetOutputResult; + PLib3MFMatrixFromColumnsNode_GetInputAPtr m_MatrixFromColumnsNode_GetInputA; + PLib3MFMatrixFromColumnsNode_GetInputBPtr m_MatrixFromColumnsNode_GetInputB; + PLib3MFMatrixFromColumnsNode_GetInputCPtr m_MatrixFromColumnsNode_GetInputC; + PLib3MFMatrixFromColumnsNode_GetInputDPtr m_MatrixFromColumnsNode_GetInputD; + PLib3MFMatrixFromColumnsNode_GetOutputResultPtr m_MatrixFromColumnsNode_GetOutputResult; + PLib3MFConstantNode_SetConstantPtr m_ConstantNode_SetConstant; + PLib3MFConstantNode_GetConstantPtr m_ConstantNode_GetConstant; + PLib3MFConstantNode_GetOutputValuePtr m_ConstantNode_GetOutputValue; + PLib3MFConstVecNode_SetVectorPtr m_ConstVecNode_SetVector; + PLib3MFConstVecNode_GetVectorPtr m_ConstVecNode_GetVector; + PLib3MFConstVecNode_GetOutputVectorPtr m_ConstVecNode_GetOutputVector; + PLib3MFConstMatNode_SetMatrixPtr m_ConstMatNode_SetMatrix; + PLib3MFConstMatNode_GetMatrixPtr m_ConstMatNode_GetMatrix; + PLib3MFConstMatNode_GetOutputMatrixPtr m_ConstMatNode_GetOutputMatrix; + PLib3MFMeshNode_GetInputMeshPtr m_MeshNode_GetInputMesh; + PLib3MFMeshNode_GetInputPosPtr m_MeshNode_GetInputPos; + PLib3MFMeshNode_GetOutputDistancePtr m_MeshNode_GetOutputDistance; + PLib3MFUnsignedMeshNode_GetInputMeshPtr m_UnsignedMeshNode_GetInputMesh; + PLib3MFUnsignedMeshNode_GetInputPosPtr m_UnsignedMeshNode_GetInputPos; + PLib3MFUnsignedMeshNode_GetOutputDistancePtr m_UnsignedMeshNode_GetOutputDistance; + PLib3MFFunctionCallNode_GetInputFunctionIDPtr m_FunctionCallNode_GetInputFunctionID; + PLib3MFNodeIterator_GetCurrentPtr m_NodeIterator_GetCurrent; + PLib3MFFunction_GetDisplayNamePtr m_Function_GetDisplayName; + PLib3MFFunction_SetDisplayNamePtr m_Function_SetDisplayName; + PLib3MFFunction_AddInputPtr m_Function_AddInput; + PLib3MFFunction_GetInputsPtr m_Function_GetInputs; + PLib3MFFunction_RemoveInputPtr m_Function_RemoveInput; + PLib3MFFunction_AddOutputPtr m_Function_AddOutput; + PLib3MFFunction_GetOutputsPtr m_Function_GetOutputs; + PLib3MFFunction_RemoveOutputPtr m_Function_RemoveOutput; + PLib3MFFunction_FindInputPtr m_Function_FindInput; + PLib3MFFunction_FindOutputPtr m_Function_FindOutput; + PLib3MFImplicitFunction_GetIdentifierPtr m_ImplicitFunction_GetIdentifier; + PLib3MFImplicitFunction_SetIdentifierPtr m_ImplicitFunction_SetIdentifier; + PLib3MFImplicitFunction_AddNodePtr m_ImplicitFunction_AddNode; + PLib3MFImplicitFunction_AddSinNodePtr m_ImplicitFunction_AddSinNode; + PLib3MFImplicitFunction_AddCosNodePtr m_ImplicitFunction_AddCosNode; + PLib3MFImplicitFunction_AddTanNodePtr m_ImplicitFunction_AddTanNode; + PLib3MFImplicitFunction_AddArcSinNodePtr m_ImplicitFunction_AddArcSinNode; + PLib3MFImplicitFunction_AddArcCosNodePtr m_ImplicitFunction_AddArcCosNode; + PLib3MFImplicitFunction_AddArcTan2NodePtr m_ImplicitFunction_AddArcTan2Node; + PLib3MFImplicitFunction_AddSinhNodePtr m_ImplicitFunction_AddSinhNode; + PLib3MFImplicitFunction_AddCoshNodePtr m_ImplicitFunction_AddCoshNode; + PLib3MFImplicitFunction_AddTanhNodePtr m_ImplicitFunction_AddTanhNode; + PLib3MFImplicitFunction_AddRoundNodePtr m_ImplicitFunction_AddRoundNode; + PLib3MFImplicitFunction_AddCeilNodePtr m_ImplicitFunction_AddCeilNode; + PLib3MFImplicitFunction_AddFloorNodePtr m_ImplicitFunction_AddFloorNode; + PLib3MFImplicitFunction_AddSignNodePtr m_ImplicitFunction_AddSignNode; + PLib3MFImplicitFunction_AddFractNodePtr m_ImplicitFunction_AddFractNode; + PLib3MFImplicitFunction_AddAbsNodePtr m_ImplicitFunction_AddAbsNode; + PLib3MFImplicitFunction_AddExpNodePtr m_ImplicitFunction_AddExpNode; + PLib3MFImplicitFunction_AddLogNodePtr m_ImplicitFunction_AddLogNode; + PLib3MFImplicitFunction_AddLog2NodePtr m_ImplicitFunction_AddLog2Node; + PLib3MFImplicitFunction_AddLog10NodePtr m_ImplicitFunction_AddLog10Node; + PLib3MFImplicitFunction_AddLengthNodePtr m_ImplicitFunction_AddLengthNode; + PLib3MFImplicitFunction_AddTransposeNodePtr m_ImplicitFunction_AddTransposeNode; + PLib3MFImplicitFunction_InverseNodePtr m_ImplicitFunction_InverseNode; + PLib3MFImplicitFunction_AddSqrtNodePtr m_ImplicitFunction_AddSqrtNode; + PLib3MFImplicitFunction_AddResourceIdNodePtr m_ImplicitFunction_AddResourceIdNode; + PLib3MFImplicitFunction_AddAdditionNodePtr m_ImplicitFunction_AddAdditionNode; + PLib3MFImplicitFunction_AddSubtractionNodePtr m_ImplicitFunction_AddSubtractionNode; + PLib3MFImplicitFunction_AddMultiplicationNodePtr m_ImplicitFunction_AddMultiplicationNode; + PLib3MFImplicitFunction_AddDivisionNodePtr m_ImplicitFunction_AddDivisionNode; + PLib3MFImplicitFunction_AddDotNodePtr m_ImplicitFunction_AddDotNode; + PLib3MFImplicitFunction_AddCrossNodePtr m_ImplicitFunction_AddCrossNode; + PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr m_ImplicitFunction_AddMatVecMultiplicationNode; + PLib3MFImplicitFunction_AddMinNodePtr m_ImplicitFunction_AddMinNode; + PLib3MFImplicitFunction_AddMaxNodePtr m_ImplicitFunction_AddMaxNode; + PLib3MFImplicitFunction_AddFmodNodePtr m_ImplicitFunction_AddFmodNode; + PLib3MFImplicitFunction_AddPowNodePtr m_ImplicitFunction_AddPowNode; + PLib3MFImplicitFunction_AddSelectNodePtr m_ImplicitFunction_AddSelectNode; + PLib3MFImplicitFunction_AddClampNodePtr m_ImplicitFunction_AddClampNode; + PLib3MFImplicitFunction_AddComposeVectorNodePtr m_ImplicitFunction_AddComposeVectorNode; + PLib3MFImplicitFunction_AddVectorFromScalarNodePtr m_ImplicitFunction_AddVectorFromScalarNode; + PLib3MFImplicitFunction_AddDecomposeVectorNodePtr m_ImplicitFunction_AddDecomposeVectorNode; + PLib3MFImplicitFunction_AddComposeMatrixNodePtr m_ImplicitFunction_AddComposeMatrixNode; + PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr m_ImplicitFunction_AddMatrixFromRowsNode; + PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr m_ImplicitFunction_AddMatrixFromColumnsNode; + PLib3MFImplicitFunction_AddConstantNodePtr m_ImplicitFunction_AddConstantNode; + PLib3MFImplicitFunction_AddConstVecNodePtr m_ImplicitFunction_AddConstVecNode; + PLib3MFImplicitFunction_AddConstMatNodePtr m_ImplicitFunction_AddConstMatNode; + PLib3MFImplicitFunction_AddMeshNodePtr m_ImplicitFunction_AddMeshNode; + PLib3MFImplicitFunction_AddUnsignedMeshNodePtr m_ImplicitFunction_AddUnsignedMeshNode; + PLib3MFImplicitFunction_AddFunctionCallNodePtr m_ImplicitFunction_AddFunctionCallNode; + PLib3MFImplicitFunction_GetNodesPtr m_ImplicitFunction_GetNodes; + PLib3MFImplicitFunction_RemoveNodePtr m_ImplicitFunction_RemoveNode; + PLib3MFImplicitFunction_AddLinkPtr m_ImplicitFunction_AddLink; + PLib3MFImplicitFunction_AddLinkByNamesPtr m_ImplicitFunction_AddLinkByNames; + PLib3MFImplicitFunction_ClearPtr m_ImplicitFunction_Clear; + PLib3MFImplicitFunction_SortNodesTopologicallyPtr m_ImplicitFunction_SortNodesTopologically; + PLib3MFFunctionFromImage3D_GetImage3DPtr m_FunctionFromImage3D_GetImage3D; + PLib3MFFunctionFromImage3D_SetImage3DPtr m_FunctionFromImage3D_SetImage3D; + PLib3MFFunctionFromImage3D_SetFilterPtr m_FunctionFromImage3D_SetFilter; + PLib3MFFunctionFromImage3D_GetFilterPtr m_FunctionFromImage3D_GetFilter; + PLib3MFFunctionFromImage3D_SetTileStylesPtr m_FunctionFromImage3D_SetTileStyles; + PLib3MFFunctionFromImage3D_GetTileStylesPtr m_FunctionFromImage3D_GetTileStyles; + PLib3MFFunctionFromImage3D_GetOffsetPtr m_FunctionFromImage3D_GetOffset; + PLib3MFFunctionFromImage3D_SetOffsetPtr m_FunctionFromImage3D_SetOffset; + PLib3MFFunctionFromImage3D_GetScalePtr m_FunctionFromImage3D_GetScale; + PLib3MFFunctionFromImage3D_SetScalePtr m_FunctionFromImage3D_SetScale; PLib3MFBuildItem_GetObjectResourcePtr m_BuildItem_GetObjectResource; PLib3MFBuildItem_GetUUIDPtr m_BuildItem_GetUUID; PLib3MFBuildItem_SetUUIDPtr m_BuildItem_SetUUID; @@ -4018,6 +6974,7 @@ typedef struct { PLib3MFModel_GetComponentsObjectByIDPtr m_Model_GetComponentsObjectByID; PLib3MFModel_GetColorGroupByIDPtr m_Model_GetColorGroupByID; PLib3MFModel_GetSliceStackByIDPtr m_Model_GetSliceStackByID; + PLib3MFModel_GetLevelSetByIDPtr m_Model_GetLevelSetByID; PLib3MFModel_GetBuildUUIDPtr m_Model_GetBuildUUID; PLib3MFModel_SetBuildUUIDPtr m_Model_SetBuildUUID; PLib3MFModel_GetBuildItemsPtr m_Model_GetBuildItems; @@ -4033,7 +6990,9 @@ typedef struct { PLib3MFModel_GetCompositeMaterialsPtr m_Model_GetCompositeMaterials; PLib3MFModel_GetMultiPropertyGroupsPtr m_Model_GetMultiPropertyGroups; PLib3MFModel_GetSliceStacksPtr m_Model_GetSliceStacks; + PLib3MFModel_GetImage3DsPtr m_Model_GetImage3Ds; PLib3MFModel_MergeToModelPtr m_Model_MergeToModel; + PLib3MFModel_MergeFromModelPtr m_Model_MergeFromModel; PLib3MFModel_AddMeshObjectPtr m_Model_AddMeshObject; PLib3MFModel_AddComponentsObjectPtr m_Model_AddComponentsObject; PLib3MFModel_AddSliceStackPtr m_Model_AddSliceStack; @@ -4043,6 +7002,8 @@ typedef struct { PLib3MFModel_AddTexture2DGroupPtr m_Model_AddTexture2DGroup; PLib3MFModel_AddCompositeMaterialsPtr m_Model_AddCompositeMaterials; PLib3MFModel_AddMultiPropertyGroupPtr m_Model_AddMultiPropertyGroup; + PLib3MFModel_AddImageStackPtr m_Model_AddImageStack; + PLib3MFModel_GetImageStackByIDPtr m_Model_GetImageStackByID; PLib3MFModel_AddBuildItemPtr m_Model_AddBuildItem; PLib3MFModel_RemoveBuildItemPtr m_Model_RemoveBuildItem; PLib3MFModel_GetMetaDataGroupPtr m_Model_GetMetaDataGroup; @@ -4059,6 +7020,13 @@ typedef struct { PLib3MFModel_RemoveCustomContentTypePtr m_Model_RemoveCustomContentType; PLib3MFModel_SetRandomNumberCallbackPtr m_Model_SetRandomNumberCallback; PLib3MFModel_GetKeyStorePtr m_Model_GetKeyStore; + PLib3MFModel_GetFunctionsPtr m_Model_GetFunctions; + PLib3MFModel_AddImplicitFunctionPtr m_Model_AddImplicitFunction; + PLib3MFModel_AddFunctionFromImage3DPtr m_Model_AddFunctionFromImage3D; + PLib3MFModel_AddVolumeDataPtr m_Model_AddVolumeData; + PLib3MFModel_AddLevelSetPtr m_Model_AddLevelSet; + PLib3MFModel_GetLevelSetsPtr m_Model_GetLevelSets; + PLib3MFModel_RemoveResourcePtr m_Model_RemoveResource; PLib3MFGetLibraryVersionPtr m_GetLibraryVersion; PLib3MFGetPrereleaseInformationPtr m_GetPrereleaseInformation; PLib3MFGetBuildInformationPtr m_GetBuildInformation; diff --git a/Autogenerated/Bindings/CppDynamic/lib3mf_dynamic.hpp b/Autogenerated/Bindings/CppDynamic/lib3mf_dynamic.hpp index a374db4eb..7dd954217 100644 --- a/Autogenerated/Bindings/CppDynamic/lib3mf_dynamic.hpp +++ b/Autogenerated/Bindings/CppDynamic/lib3mf_dynamic.hpp @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++-Header file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -73,11 +73,21 @@ class CColorGroupIterator; class CTexture2DGroupIterator; class CCompositeMaterialsIterator; class CMultiPropertyGroupIterator; +class CImage3DIterator; +class CFunctionIterator; +class CLevelSetIterator; class CMetaData; class CMetaDataGroup; class CObject; class CMeshObject; +class CLevelSet; class CBeamLattice; +class CFunctionReference; +class CVolumeDataColor; +class CMaterialMapping; +class CVolumeDataComposite; +class CVolumeDataProperty; +class CVolumeData; class CComponent; class CComponentsObject; class CBeamSet; @@ -86,8 +96,71 @@ class CColorGroup; class CTexture2DGroup; class CCompositeMaterials; class CMultiPropertyGroup; +class CImage3D; +class CImageStack; class CAttachment; class CTexture2D; +class CImplicitPort; +class CIterator; +class CImplicitPortIterator; +class CImplicitNode; +class COneInputNode; +class CSinNode; +class CCosNode; +class CTanNode; +class CArcSinNode; +class CArcCosNode; +class CArcTanNode; +class CSinhNode; +class CCoshNode; +class CTanhNode; +class CRoundNode; +class CCeilNode; +class CFloorNode; +class CSignNode; +class CFractNode; +class CAbsNode; +class CExpNode; +class CLogNode; +class CLog2Node; +class CLog10Node; +class CLengthNode; +class CTransposeNode; +class CInverseNode; +class CSqrtNode; +class CResourceIdNode; +class CTwoInputNode; +class CAdditionNode; +class CSubtractionNode; +class CMultiplicationNode; +class CDivisionNode; +class CDotNode; +class CCrossNode; +class CArcTan2Node; +class CMatVecMultiplicationNode; +class CMinNode; +class CMaxNode; +class CFmodNode; +class CModNode; +class CPowNode; +class CSelectNode; +class CClampNode; +class CComposeVectorNode; +class CVectorFromScalarNode; +class CDecomposeVectorNode; +class CComposeMatrixNode; +class CMatrixFromRowsNode; +class CMatrixFromColumnsNode; +class CConstantNode; +class CConstVecNode; +class CConstMatNode; +class CMeshNode; +class CUnsignedMeshNode; +class CFunctionCallNode; +class CNodeIterator; +class CFunction; +class CImplicitFunction; +class CFunctionFromImage3D; class CBuildItem; class CBuildItemIterator; class CSlice; @@ -120,11 +193,21 @@ typedef CColorGroupIterator CLib3MFColorGroupIterator; typedef CTexture2DGroupIterator CLib3MFTexture2DGroupIterator; typedef CCompositeMaterialsIterator CLib3MFCompositeMaterialsIterator; typedef CMultiPropertyGroupIterator CLib3MFMultiPropertyGroupIterator; +typedef CImage3DIterator CLib3MFImage3DIterator; +typedef CFunctionIterator CLib3MFFunctionIterator; +typedef CLevelSetIterator CLib3MFLevelSetIterator; typedef CMetaData CLib3MFMetaData; typedef CMetaDataGroup CLib3MFMetaDataGroup; typedef CObject CLib3MFObject; typedef CMeshObject CLib3MFMeshObject; +typedef CLevelSet CLib3MFLevelSet; typedef CBeamLattice CLib3MFBeamLattice; +typedef CFunctionReference CLib3MFFunctionReference; +typedef CVolumeDataColor CLib3MFVolumeDataColor; +typedef CMaterialMapping CLib3MFMaterialMapping; +typedef CVolumeDataComposite CLib3MFVolumeDataComposite; +typedef CVolumeDataProperty CLib3MFVolumeDataProperty; +typedef CVolumeData CLib3MFVolumeData; typedef CComponent CLib3MFComponent; typedef CComponentsObject CLib3MFComponentsObject; typedef CBeamSet CLib3MFBeamSet; @@ -133,8 +216,71 @@ typedef CColorGroup CLib3MFColorGroup; typedef CTexture2DGroup CLib3MFTexture2DGroup; typedef CCompositeMaterials CLib3MFCompositeMaterials; typedef CMultiPropertyGroup CLib3MFMultiPropertyGroup; +typedef CImage3D CLib3MFImage3D; +typedef CImageStack CLib3MFImageStack; typedef CAttachment CLib3MFAttachment; typedef CTexture2D CLib3MFTexture2D; +typedef CImplicitPort CLib3MFImplicitPort; +typedef CIterator CLib3MFIterator; +typedef CImplicitPortIterator CLib3MFImplicitPortIterator; +typedef CImplicitNode CLib3MFImplicitNode; +typedef COneInputNode CLib3MFOneInputNode; +typedef CSinNode CLib3MFSinNode; +typedef CCosNode CLib3MFCosNode; +typedef CTanNode CLib3MFTanNode; +typedef CArcSinNode CLib3MFArcSinNode; +typedef CArcCosNode CLib3MFArcCosNode; +typedef CArcTanNode CLib3MFArcTanNode; +typedef CSinhNode CLib3MFSinhNode; +typedef CCoshNode CLib3MFCoshNode; +typedef CTanhNode CLib3MFTanhNode; +typedef CRoundNode CLib3MFRoundNode; +typedef CCeilNode CLib3MFCeilNode; +typedef CFloorNode CLib3MFFloorNode; +typedef CSignNode CLib3MFSignNode; +typedef CFractNode CLib3MFFractNode; +typedef CAbsNode CLib3MFAbsNode; +typedef CExpNode CLib3MFExpNode; +typedef CLogNode CLib3MFLogNode; +typedef CLog2Node CLib3MFLog2Node; +typedef CLog10Node CLib3MFLog10Node; +typedef CLengthNode CLib3MFLengthNode; +typedef CTransposeNode CLib3MFTransposeNode; +typedef CInverseNode CLib3MFInverseNode; +typedef CSqrtNode CLib3MFSqrtNode; +typedef CResourceIdNode CLib3MFResourceIdNode; +typedef CTwoInputNode CLib3MFTwoInputNode; +typedef CAdditionNode CLib3MFAdditionNode; +typedef CSubtractionNode CLib3MFSubtractionNode; +typedef CMultiplicationNode CLib3MFMultiplicationNode; +typedef CDivisionNode CLib3MFDivisionNode; +typedef CDotNode CLib3MFDotNode; +typedef CCrossNode CLib3MFCrossNode; +typedef CArcTan2Node CLib3MFArcTan2Node; +typedef CMatVecMultiplicationNode CLib3MFMatVecMultiplicationNode; +typedef CMinNode CLib3MFMinNode; +typedef CMaxNode CLib3MFMaxNode; +typedef CFmodNode CLib3MFFmodNode; +typedef CModNode CLib3MFModNode; +typedef CPowNode CLib3MFPowNode; +typedef CSelectNode CLib3MFSelectNode; +typedef CClampNode CLib3MFClampNode; +typedef CComposeVectorNode CLib3MFComposeVectorNode; +typedef CVectorFromScalarNode CLib3MFVectorFromScalarNode; +typedef CDecomposeVectorNode CLib3MFDecomposeVectorNode; +typedef CComposeMatrixNode CLib3MFComposeMatrixNode; +typedef CMatrixFromRowsNode CLib3MFMatrixFromRowsNode; +typedef CMatrixFromColumnsNode CLib3MFMatrixFromColumnsNode; +typedef CConstantNode CLib3MFConstantNode; +typedef CConstVecNode CLib3MFConstVecNode; +typedef CConstMatNode CLib3MFConstMatNode; +typedef CMeshNode CLib3MFMeshNode; +typedef CUnsignedMeshNode CLib3MFUnsignedMeshNode; +typedef CFunctionCallNode CLib3MFFunctionCallNode; +typedef CNodeIterator CLib3MFNodeIterator; +typedef CFunction CLib3MFFunction; +typedef CImplicitFunction CLib3MFImplicitFunction; +typedef CFunctionFromImage3D CLib3MFFunctionFromImage3D; typedef CBuildItem CLib3MFBuildItem; typedef CBuildItemIterator CLib3MFBuildItemIterator; typedef CSlice CLib3MFSlice; @@ -167,11 +313,21 @@ typedef std::shared_ptr PColorGroupIterator; typedef std::shared_ptr PTexture2DGroupIterator; typedef std::shared_ptr PCompositeMaterialsIterator; typedef std::shared_ptr PMultiPropertyGroupIterator; +typedef std::shared_ptr PImage3DIterator; +typedef std::shared_ptr PFunctionIterator; +typedef std::shared_ptr PLevelSetIterator; typedef std::shared_ptr PMetaData; typedef std::shared_ptr PMetaDataGroup; typedef std::shared_ptr PObject; typedef std::shared_ptr PMeshObject; +typedef std::shared_ptr PLevelSet; typedef std::shared_ptr PBeamLattice; +typedef std::shared_ptr PFunctionReference; +typedef std::shared_ptr PVolumeDataColor; +typedef std::shared_ptr PMaterialMapping; +typedef std::shared_ptr PVolumeDataComposite; +typedef std::shared_ptr PVolumeDataProperty; +typedef std::shared_ptr PVolumeData; typedef std::shared_ptr PComponent; typedef std::shared_ptr PComponentsObject; typedef std::shared_ptr PBeamSet; @@ -180,8 +336,71 @@ typedef std::shared_ptr PColorGroup; typedef std::shared_ptr PTexture2DGroup; typedef std::shared_ptr PCompositeMaterials; typedef std::shared_ptr PMultiPropertyGroup; +typedef std::shared_ptr PImage3D; +typedef std::shared_ptr PImageStack; typedef std::shared_ptr PAttachment; typedef std::shared_ptr PTexture2D; +typedef std::shared_ptr PImplicitPort; +typedef std::shared_ptr PIterator; +typedef std::shared_ptr PImplicitPortIterator; +typedef std::shared_ptr PImplicitNode; +typedef std::shared_ptr POneInputNode; +typedef std::shared_ptr PSinNode; +typedef std::shared_ptr PCosNode; +typedef std::shared_ptr PTanNode; +typedef std::shared_ptr PArcSinNode; +typedef std::shared_ptr PArcCosNode; +typedef std::shared_ptr PArcTanNode; +typedef std::shared_ptr PSinhNode; +typedef std::shared_ptr PCoshNode; +typedef std::shared_ptr PTanhNode; +typedef std::shared_ptr PRoundNode; +typedef std::shared_ptr PCeilNode; +typedef std::shared_ptr PFloorNode; +typedef std::shared_ptr PSignNode; +typedef std::shared_ptr PFractNode; +typedef std::shared_ptr PAbsNode; +typedef std::shared_ptr PExpNode; +typedef std::shared_ptr PLogNode; +typedef std::shared_ptr PLog2Node; +typedef std::shared_ptr PLog10Node; +typedef std::shared_ptr PLengthNode; +typedef std::shared_ptr PTransposeNode; +typedef std::shared_ptr PInverseNode; +typedef std::shared_ptr PSqrtNode; +typedef std::shared_ptr PResourceIdNode; +typedef std::shared_ptr PTwoInputNode; +typedef std::shared_ptr PAdditionNode; +typedef std::shared_ptr PSubtractionNode; +typedef std::shared_ptr PMultiplicationNode; +typedef std::shared_ptr PDivisionNode; +typedef std::shared_ptr PDotNode; +typedef std::shared_ptr PCrossNode; +typedef std::shared_ptr PArcTan2Node; +typedef std::shared_ptr PMatVecMultiplicationNode; +typedef std::shared_ptr PMinNode; +typedef std::shared_ptr PMaxNode; +typedef std::shared_ptr PFmodNode; +typedef std::shared_ptr PModNode; +typedef std::shared_ptr PPowNode; +typedef std::shared_ptr PSelectNode; +typedef std::shared_ptr PClampNode; +typedef std::shared_ptr PComposeVectorNode; +typedef std::shared_ptr PVectorFromScalarNode; +typedef std::shared_ptr PDecomposeVectorNode; +typedef std::shared_ptr PComposeMatrixNode; +typedef std::shared_ptr PMatrixFromRowsNode; +typedef std::shared_ptr PMatrixFromColumnsNode; +typedef std::shared_ptr PConstantNode; +typedef std::shared_ptr PConstVecNode; +typedef std::shared_ptr PConstMatNode; +typedef std::shared_ptr PMeshNode; +typedef std::shared_ptr PUnsignedMeshNode; +typedef std::shared_ptr PFunctionCallNode; +typedef std::shared_ptr PNodeIterator; +typedef std::shared_ptr PFunction; +typedef std::shared_ptr PImplicitFunction; +typedef std::shared_ptr PFunctionFromImage3D; typedef std::shared_ptr PBuildItem; typedef std::shared_ptr PBuildItemIterator; typedef std::shared_ptr PSlice; @@ -214,11 +433,21 @@ typedef PColorGroupIterator PLib3MFColorGroupIterator; typedef PTexture2DGroupIterator PLib3MFTexture2DGroupIterator; typedef PCompositeMaterialsIterator PLib3MFCompositeMaterialsIterator; typedef PMultiPropertyGroupIterator PLib3MFMultiPropertyGroupIterator; +typedef PImage3DIterator PLib3MFImage3DIterator; +typedef PFunctionIterator PLib3MFFunctionIterator; +typedef PLevelSetIterator PLib3MFLevelSetIterator; typedef PMetaData PLib3MFMetaData; typedef PMetaDataGroup PLib3MFMetaDataGroup; typedef PObject PLib3MFObject; typedef PMeshObject PLib3MFMeshObject; +typedef PLevelSet PLib3MFLevelSet; typedef PBeamLattice PLib3MFBeamLattice; +typedef PFunctionReference PLib3MFFunctionReference; +typedef PVolumeDataColor PLib3MFVolumeDataColor; +typedef PMaterialMapping PLib3MFMaterialMapping; +typedef PVolumeDataComposite PLib3MFVolumeDataComposite; +typedef PVolumeDataProperty PLib3MFVolumeDataProperty; +typedef PVolumeData PLib3MFVolumeData; typedef PComponent PLib3MFComponent; typedef PComponentsObject PLib3MFComponentsObject; typedef PBeamSet PLib3MFBeamSet; @@ -227,8 +456,71 @@ typedef PColorGroup PLib3MFColorGroup; typedef PTexture2DGroup PLib3MFTexture2DGroup; typedef PCompositeMaterials PLib3MFCompositeMaterials; typedef PMultiPropertyGroup PLib3MFMultiPropertyGroup; +typedef PImage3D PLib3MFImage3D; +typedef PImageStack PLib3MFImageStack; typedef PAttachment PLib3MFAttachment; typedef PTexture2D PLib3MFTexture2D; +typedef PImplicitPort PLib3MFImplicitPort; +typedef PIterator PLib3MFIterator; +typedef PImplicitPortIterator PLib3MFImplicitPortIterator; +typedef PImplicitNode PLib3MFImplicitNode; +typedef POneInputNode PLib3MFOneInputNode; +typedef PSinNode PLib3MFSinNode; +typedef PCosNode PLib3MFCosNode; +typedef PTanNode PLib3MFTanNode; +typedef PArcSinNode PLib3MFArcSinNode; +typedef PArcCosNode PLib3MFArcCosNode; +typedef PArcTanNode PLib3MFArcTanNode; +typedef PSinhNode PLib3MFSinhNode; +typedef PCoshNode PLib3MFCoshNode; +typedef PTanhNode PLib3MFTanhNode; +typedef PRoundNode PLib3MFRoundNode; +typedef PCeilNode PLib3MFCeilNode; +typedef PFloorNode PLib3MFFloorNode; +typedef PSignNode PLib3MFSignNode; +typedef PFractNode PLib3MFFractNode; +typedef PAbsNode PLib3MFAbsNode; +typedef PExpNode PLib3MFExpNode; +typedef PLogNode PLib3MFLogNode; +typedef PLog2Node PLib3MFLog2Node; +typedef PLog10Node PLib3MFLog10Node; +typedef PLengthNode PLib3MFLengthNode; +typedef PTransposeNode PLib3MFTransposeNode; +typedef PInverseNode PLib3MFInverseNode; +typedef PSqrtNode PLib3MFSqrtNode; +typedef PResourceIdNode PLib3MFResourceIdNode; +typedef PTwoInputNode PLib3MFTwoInputNode; +typedef PAdditionNode PLib3MFAdditionNode; +typedef PSubtractionNode PLib3MFSubtractionNode; +typedef PMultiplicationNode PLib3MFMultiplicationNode; +typedef PDivisionNode PLib3MFDivisionNode; +typedef PDotNode PLib3MFDotNode; +typedef PCrossNode PLib3MFCrossNode; +typedef PArcTan2Node PLib3MFArcTan2Node; +typedef PMatVecMultiplicationNode PLib3MFMatVecMultiplicationNode; +typedef PMinNode PLib3MFMinNode; +typedef PMaxNode PLib3MFMaxNode; +typedef PFmodNode PLib3MFFmodNode; +typedef PModNode PLib3MFModNode; +typedef PPowNode PLib3MFPowNode; +typedef PSelectNode PLib3MFSelectNode; +typedef PClampNode PLib3MFClampNode; +typedef PComposeVectorNode PLib3MFComposeVectorNode; +typedef PVectorFromScalarNode PLib3MFVectorFromScalarNode; +typedef PDecomposeVectorNode PLib3MFDecomposeVectorNode; +typedef PComposeMatrixNode PLib3MFComposeMatrixNode; +typedef PMatrixFromRowsNode PLib3MFMatrixFromRowsNode; +typedef PMatrixFromColumnsNode PLib3MFMatrixFromColumnsNode; +typedef PConstantNode PLib3MFConstantNode; +typedef PConstVecNode PLib3MFConstVecNode; +typedef PConstMatNode PLib3MFConstMatNode; +typedef PMeshNode PLib3MFMeshNode; +typedef PUnsignedMeshNode PLib3MFUnsignedMeshNode; +typedef PFunctionCallNode PLib3MFFunctionCallNode; +typedef PNodeIterator PLib3MFNodeIterator; +typedef PFunction PLib3MFFunction; +typedef PImplicitFunction PLib3MFImplicitFunction; +typedef PFunctionFromImage3D PLib3MFFunctionFromImage3D; typedef PBuildItem PLib3MFBuildItem; typedef PBuildItemIterator PLib3MFBuildItemIterator; typedef PSlice PLib3MFSlice; @@ -355,6 +647,7 @@ class ELib3MFException : public std::exception { case LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: return "UNKOWNPROGRESSIDENTIFIER"; case LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: return "ELEMENTCOUNTEXCEEDSLIMIT"; case LIB3MF_ERROR_INVALIDRESOURCE: return "INVALIDRESOURCE"; + case LIB3MF_ERROR_INVALIDLEVELSET: return "INVALIDLEVELSET"; case LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: return "BEAMLATTICE_INVALID_OBJECTTYPE"; case LIB3MF_ERROR_INVALIDKEYSTORE: return "INVALIDKEYSTORE"; case LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: return "INVALIDKEYSTORECONSUMER"; @@ -362,6 +655,10 @@ class ELib3MFException : public std::exception { case LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: return "KEYSTORERESOURCEDATANOTFOUND"; case LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: return "SECURECONTEXTNOTREGISTERED"; case LIB3MF_ERROR_INVALIDKEYSIZE: return "INVALIDKEYSIZE"; + case LIB3MF_ERROR_INCOMPATIBLEPORTTYPES: return "INCOMPATIBLEPORTTYPES"; + case LIB3MF_ERROR_GRAPHISCYCLIC: return "GRAPHISCYCLIC"; + case LIB3MF_ERROR_INPUTNOTSET: return "INPUTNOTSET"; + case LIB3MF_ERROR_INVALIDNODECONFIGURATION: return "INVALIDNODECONFIGURATION"; } return "UNKNOWN"; } @@ -406,13 +703,18 @@ class ELib3MFException : public std::exception { case LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: return "A progress identifier is unknown"; case LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: return "An element buffer exceeds its spec limit"; case LIB3MF_ERROR_INVALIDRESOURCE: return "A resource is invalid"; + case LIB3MF_ERROR_INVALIDLEVELSET: return "A level set is invalid"; case LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: return "This object type is not valid for beamlattices"; case LIB3MF_ERROR_INVALIDKEYSTORE: return "The keystore object is invalid"; case LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: return "The consumer keystore object is invalid"; case LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND: return "A consumer has not been found"; case LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: return "A resource data has not been found"; case LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: return "A Key or Conentent encryption callback has not been registered"; - case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key siue is invalid"; + case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key size is invalid"; + case LIB3MF_ERROR_INCOMPATIBLEPORTTYPES: return "Link could not be added, the port types are incompatible"; + case LIB3MF_ERROR_GRAPHISCYCLIC: return "The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted."; + case LIB3MF_ERROR_INPUTNOTSET: return "The input of a node is not set."; + case LIB3MF_ERROR_INVALIDNODECONFIGURATION: return "The selected node configuration is not supported"; } return "unknown error"; } @@ -561,11 +863,21 @@ class CWrapper { friend class CTexture2DGroupIterator; friend class CCompositeMaterialsIterator; friend class CMultiPropertyGroupIterator; + friend class CImage3DIterator; + friend class CFunctionIterator; + friend class CLevelSetIterator; friend class CMetaData; friend class CMetaDataGroup; friend class CObject; friend class CMeshObject; + friend class CLevelSet; friend class CBeamLattice; + friend class CFunctionReference; + friend class CVolumeDataColor; + friend class CMaterialMapping; + friend class CVolumeDataComposite; + friend class CVolumeDataProperty; + friend class CVolumeData; friend class CComponent; friend class CComponentsObject; friend class CBeamSet; @@ -574,8 +886,71 @@ class CWrapper { friend class CTexture2DGroup; friend class CCompositeMaterials; friend class CMultiPropertyGroup; + friend class CImage3D; + friend class CImageStack; friend class CAttachment; friend class CTexture2D; + friend class CImplicitPort; + friend class CIterator; + friend class CImplicitPortIterator; + friend class CImplicitNode; + friend class COneInputNode; + friend class CSinNode; + friend class CCosNode; + friend class CTanNode; + friend class CArcSinNode; + friend class CArcCosNode; + friend class CArcTanNode; + friend class CSinhNode; + friend class CCoshNode; + friend class CTanhNode; + friend class CRoundNode; + friend class CCeilNode; + friend class CFloorNode; + friend class CSignNode; + friend class CFractNode; + friend class CAbsNode; + friend class CExpNode; + friend class CLogNode; + friend class CLog2Node; + friend class CLog10Node; + friend class CLengthNode; + friend class CTransposeNode; + friend class CInverseNode; + friend class CSqrtNode; + friend class CResourceIdNode; + friend class CTwoInputNode; + friend class CAdditionNode; + friend class CSubtractionNode; + friend class CMultiplicationNode; + friend class CDivisionNode; + friend class CDotNode; + friend class CCrossNode; + friend class CArcTan2Node; + friend class CMatVecMultiplicationNode; + friend class CMinNode; + friend class CMaxNode; + friend class CFmodNode; + friend class CModNode; + friend class CPowNode; + friend class CSelectNode; + friend class CClampNode; + friend class CComposeVectorNode; + friend class CVectorFromScalarNode; + friend class CDecomposeVectorNode; + friend class CComposeMatrixNode; + friend class CMatrixFromRowsNode; + friend class CMatrixFromColumnsNode; + friend class CConstantNode; + friend class CConstVecNode; + friend class CConstMatNode; + friend class CMeshNode; + friend class CUnsignedMeshNode; + friend class CFunctionCallNode; + friend class CNodeIterator; + friend class CFunction; + friend class CImplicitFunction; + friend class CFunctionFromImage3D; friend class CBuildItem; friend class CBuildItemIterator; friend class CSlice; @@ -935,6 +1310,57 @@ class CMultiPropertyGroupIterator : public CResourceIterator { inline PMultiPropertyGroup GetCurrentMultiPropertyGroup(); }; +/************************************************************************************************************************* + Class CImage3DIterator +**************************************************************************************************************************/ +class CImage3DIterator : public CResourceIterator { +public: + + /** + * CImage3DIterator::CImage3DIterator - Constructor for Image3DIterator class. + */ + CImage3DIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResourceIterator(pWrapper, pHandle) + { + } + + inline PImage3D GetCurrentImage3D(); +}; + +/************************************************************************************************************************* + Class CFunctionIterator +**************************************************************************************************************************/ +class CFunctionIterator : public CResourceIterator { +public: + + /** + * CFunctionIterator::CFunctionIterator - Constructor for FunctionIterator class. + */ + CFunctionIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResourceIterator(pWrapper, pHandle) + { + } + + inline PFunction GetCurrentFunction(); +}; + +/************************************************************************************************************************* + Class CLevelSetIterator +**************************************************************************************************************************/ +class CLevelSetIterator : public CResourceIterator { +public: + + /** + * CLevelSetIterator::CLevelSetIterator - Constructor for LevelSetIterator class. + */ + CLevelSetIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResourceIterator(pWrapper, pHandle) + { + } + + inline PLevelSet GetCurrentLevelSet(); +}; + /************************************************************************************************************************* Class CMetaData **************************************************************************************************************************/ @@ -1006,6 +1432,7 @@ class CObject : public CResource { inline void SetPartNumber(const std::string & sPartNumber); inline bool IsMeshObject(); inline bool IsComponentsObject(); + inline bool IsLevelSetObject(); inline bool IsValid(); inline void SetAttachmentAsThumbnail(classParam pAttachment); inline PAttachment GetThumbnailAttachment(); @@ -1056,6 +1483,40 @@ class CMeshObject : public CObject { inline void SetGeometry(const CInputVector & VerticesBuffer, const CInputVector & IndicesBuffer); inline bool IsManifoldAndOriented(); inline PBeamLattice BeamLattice(); + inline PVolumeData GetVolumeData(); + inline void SetVolumeData(classParam pTheVolumeData); +}; + +/************************************************************************************************************************* + Class CLevelSet +**************************************************************************************************************************/ +class CLevelSet : public CObject { +public: + + /** + * CLevelSet::CLevelSet - Constructor for LevelSet class. + */ + CLevelSet(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CObject(pWrapper, pHandle) + { + } + + inline PFunction GetFunction(); + inline void SetFunction(classParam pTheFunction); + inline sTransform GetTransform(); + inline void SetTransform(const sTransform & Transform); + inline std::string GetChannelName(); + inline void SetChannelName(const std::string & sChannelName); + inline void SetMinFeatureSize(const Lib3MF_double dMinFeatureSize); + inline Lib3MF_double GetMinFeatureSize(); + inline void SetFallBackValue(const Lib3MF_double dFallBackValue); + inline Lib3MF_double GetFallBackValue(); + inline void SetMeshBBoxOnly(const bool bMeshBBoxOnly); + inline bool GetMeshBBoxOnly(); + inline void SetMesh(classParam pTheMesh); + inline PMeshObject GetMesh(); + inline PVolumeData GetVolumeData(); + inline void SetVolumeData(classParam pTheVolumeData); }; /************************************************************************************************************************* @@ -1097,6 +1558,131 @@ class CBeamLattice : public CBase { inline PBeamSet GetBeamSet(const Lib3MF_uint32 nIndex); }; +/************************************************************************************************************************* + Class CFunctionReference +**************************************************************************************************************************/ +class CFunctionReference : public CBase { +public: + + /** + * CFunctionReference::CFunctionReference - Constructor for FunctionReference class. + */ + CFunctionReference(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline Lib3MF_uint32 GetFunctionResourceID(); + inline void SetFunctionResourceID(const Lib3MF_uint32 nUniqueResourceID); + inline sTransform GetTransform(); + inline void SetTransform(const sTransform & Transform); + inline std::string GetChannelName(); + inline void SetChannelName(const std::string & sChannelName); + inline void SetMinFeatureSize(const Lib3MF_double dMinFeatureSize); + inline Lib3MF_double GetMinFeatureSize(); + inline void SetFallBackValue(const Lib3MF_double dFallBackValue); + inline Lib3MF_double GetFallBackValue(); +}; + +/************************************************************************************************************************* + Class CVolumeDataColor +**************************************************************************************************************************/ +class CVolumeDataColor : public CFunctionReference { +public: + + /** + * CVolumeDataColor::CVolumeDataColor - Constructor for VolumeDataColor class. + */ + CVolumeDataColor(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CFunctionReference(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CMaterialMapping +**************************************************************************************************************************/ +class CMaterialMapping : public CFunctionReference { +public: + + /** + * CMaterialMapping::CMaterialMapping - Constructor for MaterialMapping class. + */ + CMaterialMapping(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CFunctionReference(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CVolumeDataComposite +**************************************************************************************************************************/ +class CVolumeDataComposite : public CBase { +public: + + /** + * CVolumeDataComposite::CVolumeDataComposite - Constructor for VolumeDataComposite class. + */ + CVolumeDataComposite(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline PBaseMaterialGroup GetBaseMaterialGroup(); + inline void SetBaseMaterialGroup(classParam pBaseMaterialGroupInstance); + inline Lib3MF_uint32 GetMaterialMappingCount(); + inline PMaterialMapping GetMaterialMapping(const Lib3MF_uint32 nIndex); + inline PMaterialMapping AddMaterialMapping(const sTransform & Transform); + inline void RemoveMaterialMapping(const Lib3MF_uint32 nIndex); +}; + +/************************************************************************************************************************* + Class CVolumeDataProperty +**************************************************************************************************************************/ +class CVolumeDataProperty : public CFunctionReference { +public: + + /** + * CVolumeDataProperty::CVolumeDataProperty - Constructor for VolumeDataProperty class. + */ + CVolumeDataProperty(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CFunctionReference(pWrapper, pHandle) + { + } + + inline std::string GetName(); + inline void SetIsRequired(const bool bIsRequired); + inline bool IsRequired(); +}; + +/************************************************************************************************************************* + Class CVolumeData +**************************************************************************************************************************/ +class CVolumeData : public CResource { +public: + + /** + * CVolumeData::CVolumeData - Constructor for VolumeData class. + */ + CVolumeData(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResource(pWrapper, pHandle) + { + } + + inline PVolumeDataComposite GetComposite(); + inline PVolumeDataComposite CreateNewComposite(); + inline void RemoveComposite(); + inline PVolumeDataColor GetColor(); + inline PVolumeDataColor CreateNewColor(classParam pTheFunction); + inline void RemoveColor(); + inline Lib3MF_uint32 GetPropertyCount(); + inline PVolumeDataProperty GetProperty(const Lib3MF_uint32 nIndex); + inline PVolumeDataProperty AddPropertyFromFunction(const std::string & sName, classParam pTheFunction); + inline void RemoveProperty(const Lib3MF_uint32 nIndex); +}; + /************************************************************************************************************************* Class CComponent **************************************************************************************************************************/ @@ -1281,6 +1867,51 @@ class CMultiPropertyGroup : public CResource { inline void RemoveLayer(const Lib3MF_uint32 nLayerIndex); }; +/************************************************************************************************************************* + Class CImage3D +**************************************************************************************************************************/ +class CImage3D : public CResource { +public: + + /** + * CImage3D::CImage3D - Constructor for Image3D class. + */ + CImage3D(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResource(pWrapper, pHandle) + { + } + + inline std::string GetName(); + inline void SetName(const std::string & sName); + inline bool IsImageStack(); +}; + +/************************************************************************************************************************* + Class CImageStack +**************************************************************************************************************************/ +class CImageStack : public CImage3D { +public: + + /** + * CImageStack::CImageStack - Constructor for ImageStack class. + */ + CImageStack(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImage3D(pWrapper, pHandle) + { + } + + inline Lib3MF_uint32 GetRowCount(); + inline void SetRowCount(const Lib3MF_uint32 nRowCount); + inline Lib3MF_uint32 GetColumnCount(); + inline void SetColumnCount(const Lib3MF_uint32 nColumnCount); + inline Lib3MF_uint32 GetSheetCount(); + inline PAttachment GetSheet(const Lib3MF_uint32 nIndex); + inline void SetSheet(const Lib3MF_uint32 nIndex, classParam pSheet); + inline PAttachment CreateEmptySheet(const Lib3MF_uint32 nIndex, const std::string & sPath); + inline PAttachment CreateSheetFromBuffer(const Lib3MF_uint32 nIndex, const std::string & sPath, const CInputVector & DataBuffer); + inline PAttachment CreateSheetFromFile(const Lib3MF_uint32 nIndex, const std::string & sPath, const std::string & sFileName); +}; + /************************************************************************************************************************* Class CAttachment **************************************************************************************************************************/ @@ -1333,721 +1964,1952 @@ class CTexture2D : public CResource { }; /************************************************************************************************************************* - Class CBuildItem + Class CImplicitPort **************************************************************************************************************************/ -class CBuildItem : public CBase { +class CImplicitPort : public CBase { public: /** - * CBuildItem::CBuildItem - Constructor for BuildItem class. + * CImplicitPort::CImplicitPort - Constructor for ImplicitPort class. */ - CBuildItem(CWrapper* pWrapper, Lib3MFHandle pHandle) + CImplicitPort(CWrapper* pWrapper, Lib3MFHandle pHandle) : CBase(pWrapper, pHandle) { } - inline PObject GetObjectResource(); - inline std::string GetUUID(bool & bHasUUID); - inline void SetUUID(const std::string & sUUID); - inline Lib3MF_uint32 GetObjectResourceID(); - inline bool HasObjectTransform(); - inline sTransform GetObjectTransform(); - inline void SetObjectTransform(const sTransform & Transform); - inline std::string GetPartNumber(); - inline void SetPartNumber(const std::string & sSetPartnumber); - inline PMetaDataGroup GetMetaDataGroup(); - inline sBox GetOutbox(); + inline std::string GetIdentifier(); + inline void SetIdentifier(const std::string & sIdentifier); + inline std::string GetDisplayName(); + inline void SetDisplayName(const std::string & sDisplayName); + inline void SetType(const eImplicitPortType eImplicitPortType); + inline eImplicitPortType GetType(); + inline std::string GetReference(); + inline void SetReference(const std::string & sReference); }; /************************************************************************************************************************* - Class CBuildItemIterator + Class CIterator **************************************************************************************************************************/ -class CBuildItemIterator : public CBase { +class CIterator : public CBase { public: /** - * CBuildItemIterator::CBuildItemIterator - Constructor for BuildItemIterator class. + * CIterator::CIterator - Constructor for Iterator class. */ - CBuildItemIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + CIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) : CBase(pWrapper, pHandle) { } inline bool MoveNext(); inline bool MovePrevious(); - inline PBuildItem GetCurrent(); - inline PBuildItemIterator Clone(); inline Lib3MF_uint64 Count(); }; /************************************************************************************************************************* - Class CSlice + Class CImplicitPortIterator **************************************************************************************************************************/ -class CSlice : public CBase { +class CImplicitPortIterator : public CIterator { public: /** - * CSlice::CSlice - Constructor for Slice class. + * CImplicitPortIterator::CImplicitPortIterator - Constructor for ImplicitPortIterator class. */ - CSlice(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CImplicitPortIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CIterator(pWrapper, pHandle) { } - inline void SetVertices(const CInputVector & VerticesBuffer); - inline void GetVertices(std::vector & VerticesBuffer); - inline Lib3MF_uint64 GetVertexCount(); - inline Lib3MF_uint64 AddPolygon(const CInputVector & IndicesBuffer); - inline Lib3MF_uint64 GetPolygonCount(); - inline void SetPolygonIndices(const Lib3MF_uint64 nIndex, const CInputVector & IndicesBuffer); - inline void GetPolygonIndices(const Lib3MF_uint64 nIndex, std::vector & IndicesBuffer); - inline Lib3MF_uint64 GetPolygonIndexCount(const Lib3MF_uint64 nIndex); - inline Lib3MF_double GetZTop(); + inline PImplicitPort GetCurrent(); }; /************************************************************************************************************************* - Class CSliceStack + Class CImplicitNode **************************************************************************************************************************/ -class CSliceStack : public CResource { +class CImplicitNode : public CBase { public: /** - * CSliceStack::CSliceStack - Constructor for SliceStack class. + * CImplicitNode::CImplicitNode - Constructor for ImplicitNode class. */ - CSliceStack(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CResource(pWrapper, pHandle) + CImplicitNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) { } - inline Lib3MF_double GetBottomZ(); - inline Lib3MF_uint64 GetSliceCount(); - inline PSlice GetSlice(const Lib3MF_uint64 nSliceIndex); - inline PSlice AddSlice(const Lib3MF_double dZTop); - inline Lib3MF_uint64 GetSliceRefCount(); - inline void AddSliceStackReference(classParam pTheSliceStack); - inline PSliceStack GetSliceStackReference(const Lib3MF_uint64 nSliceRefIndex); - inline void CollapseSliceReferences(); - inline void SetOwnPath(const std::string & sPath); - inline std::string GetOwnPath(); + inline std::string GetIdentifier(); + inline void SetIdentifier(const std::string & sIdentifier); + inline std::string GetDisplayName(); + inline void SetDisplayName(const std::string & sDisplayName); + inline std::string GetTag(); + inline void SetTag(const std::string & sTag); + inline eImplicitNodeType GetNodeType(); + inline PImplicitPort AddInput(const std::string & sIdentifier, const std::string & sDisplayName); + inline PImplicitPortIterator GetInputs(); + inline PImplicitPort AddOutput(const std::string & sIdentifier, const std::string & sDisplayName); + inline PImplicitPortIterator GetOutputs(); + inline PImplicitPort FindInput(const std::string & sIdentifier); + inline PImplicitPort FindOutput(const std::string & sIdentifier); + inline bool AreTypesValid(); }; /************************************************************************************************************************* - Class CConsumer + Class COneInputNode **************************************************************************************************************************/ -class CConsumer : public CBase { +class COneInputNode : public CImplicitNode { public: /** - * CConsumer::CConsumer - Constructor for Consumer class. + * COneInputNode::COneInputNode - Constructor for OneInputNode class. */ - CConsumer(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + COneInputNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) { } - inline std::string GetConsumerID(); - inline std::string GetKeyID(); - inline std::string GetKeyValue(); + inline PImplicitPort GetInputA(); + inline PImplicitPort GetOutputResult(); }; /************************************************************************************************************************* - Class CAccessRight + Class CSinNode **************************************************************************************************************************/ -class CAccessRight : public CBase { +class CSinNode : public COneInputNode { public: /** - * CAccessRight::CAccessRight - Constructor for AccessRight class. + * CSinNode::CSinNode - Constructor for SinNode class. */ - CAccessRight(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CSinNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { } - inline PConsumer GetConsumer(); - inline eWrappingAlgorithm GetWrappingAlgorithm(); - inline eMgfAlgorithm GetMgfAlgorithm(); - inline eDigestMethod GetDigestMethod(); }; /************************************************************************************************************************* - Class CContentEncryptionParams + Class CCosNode **************************************************************************************************************************/ -class CContentEncryptionParams : public CBase { +class CCosNode : public COneInputNode { public: /** - * CContentEncryptionParams::CContentEncryptionParams - Constructor for ContentEncryptionParams class. + * CCosNode::CCosNode - Constructor for CosNode class. */ - CContentEncryptionParams(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CCosNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { } - inline eEncryptionAlgorithm GetEncryptionAlgorithm(); - inline void GetKey(std::vector & ByteDataBuffer); - inline void GetInitializationVector(std::vector & ByteDataBuffer); - inline void GetAuthenticationTag(std::vector & ByteDataBuffer); - inline void SetAuthenticationTag(const CInputVector & ByteDataBuffer); - inline void GetAdditionalAuthenticationData(std::vector & ByteDataBuffer); - inline Lib3MF_uint64 GetDescriptor(); - inline std::string GetKeyUUID(); }; /************************************************************************************************************************* - Class CResourceData + Class CTanNode **************************************************************************************************************************/ -class CResourceData : public CBase { +class CTanNode : public COneInputNode { public: /** - * CResourceData::CResourceData - Constructor for ResourceData class. + * CTanNode::CTanNode - Constructor for TanNode class. */ - CResourceData(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CTanNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { } - inline PPackagePart GetPath(); - inline eEncryptionAlgorithm GetEncryptionAlgorithm(); - inline eCompression GetCompression(); - inline void GetAdditionalAuthenticationData(std::vector & ByteDataBuffer); }; /************************************************************************************************************************* - Class CResourceDataGroup + Class CArcSinNode **************************************************************************************************************************/ -class CResourceDataGroup : public CBase { +class CArcSinNode : public COneInputNode { public: /** - * CResourceDataGroup::CResourceDataGroup - Constructor for ResourceDataGroup class. + * CArcSinNode::CArcSinNode - Constructor for ArcSinNode class. */ - CResourceDataGroup(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CArcSinNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { } - inline std::string GetKeyUUID(); - inline PAccessRight AddAccessRight(classParam pConsumer, const eWrappingAlgorithm eWrappingAlgorithm, const eMgfAlgorithm eMgfAlgorithm, const eDigestMethod eDigestMethod); - inline PAccessRight FindAccessRightByConsumer(classParam pConsumer); - inline void RemoveAccessRight(classParam pConsumer); }; /************************************************************************************************************************* - Class CKeyStore + Class CArcCosNode **************************************************************************************************************************/ -class CKeyStore : public CBase { +class CArcCosNode : public COneInputNode { public: /** - * CKeyStore::CKeyStore - Constructor for KeyStore class. + * CArcCosNode::CArcCosNode - Constructor for ArcCosNode class. */ - CKeyStore(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CArcCosNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { } - inline PConsumer AddConsumer(const std::string & sConsumerID, const std::string & sKeyID, const std::string & sKeyValue); - inline Lib3MF_uint64 GetConsumerCount(); - inline PConsumer GetConsumer(const Lib3MF_uint64 nConsumerIndex); - inline void RemoveConsumer(classParam pConsumer); - inline PConsumer FindConsumer(const std::string & sConsumerID); - inline Lib3MF_uint64 GetResourceDataGroupCount(); - inline PResourceDataGroup AddResourceDataGroup(); - inline PResourceDataGroup GetResourceDataGroup(const Lib3MF_uint64 nResourceDataIndex); - inline void RemoveResourceDataGroup(classParam pResourceDataGroup); - inline PResourceDataGroup FindResourceDataGroup(classParam pPartPath); - inline PResourceData AddResourceData(classParam pResourceDataGroup, classParam pPartPath, const eEncryptionAlgorithm eAlgorithm, const eCompression eCompression, const CInputVector & AdditionalAuthenticationDataBuffer); - inline void RemoveResourceData(classParam pResourceData); - inline PResourceData FindResourceData(classParam pResourcePath); - inline Lib3MF_uint64 GetResourceDataCount(); - inline PResourceData GetResourceData(const Lib3MF_uint64 nResourceDataIndex); - inline std::string GetUUID(bool & bHasUUID); - inline void SetUUID(const std::string & sUUID); }; /************************************************************************************************************************* - Class CModel + Class CArcTanNode **************************************************************************************************************************/ -class CModel : public CBase { +class CArcTanNode : public COneInputNode { public: /** - * CModel::CModel - Constructor for Model class. + * CArcTanNode::CArcTanNode - Constructor for ArcTanNode class. */ - CModel(CWrapper* pWrapper, Lib3MFHandle pHandle) - : CBase(pWrapper, pHandle) + CArcTanNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { } - inline PPackagePart RootModelPart(); - inline PPackagePart FindOrCreatePackagePart(const std::string & sAbsolutePath); - inline void SetUnit(const eModelUnit eUnit); - inline eModelUnit GetUnit(); - inline std::string GetLanguage(); - inline void SetLanguage(const std::string & sLanguage); - inline PWriter QueryWriter(const std::string & sWriterClass); - inline PReader QueryReader(const std::string & sReaderClass); - inline PResource GetResourceByID(const Lib3MF_uint32 nUniqueResourceID); - inline PTexture2D GetTexture2DByID(const Lib3MF_uint32 nUniqueResourceID); - inline ePropertyType GetPropertyTypeByID(const Lib3MF_uint32 nUniqueResourceID); - inline PBaseMaterialGroup GetBaseMaterialGroupByID(const Lib3MF_uint32 nUniqueResourceID); - inline PTexture2DGroup GetTexture2DGroupByID(const Lib3MF_uint32 nUniqueResourceID); - inline PCompositeMaterials GetCompositeMaterialsByID(const Lib3MF_uint32 nUniqueResourceID); - inline PMultiPropertyGroup GetMultiPropertyGroupByID(const Lib3MF_uint32 nUniqueResourceID); - inline PMeshObject GetMeshObjectByID(const Lib3MF_uint32 nUniqueResourceID); - inline PComponentsObject GetComponentsObjectByID(const Lib3MF_uint32 nUniqueResourceID); - inline PColorGroup GetColorGroupByID(const Lib3MF_uint32 nUniqueResourceID); - inline PSliceStack GetSliceStackByID(const Lib3MF_uint32 nUniqueResourceID); - inline std::string GetBuildUUID(bool & bHasUUID); - inline void SetBuildUUID(const std::string & sUUID); - inline PBuildItemIterator GetBuildItems(); - inline sBox GetOutbox(); - inline PResourceIterator GetResources(); - inline PObjectIterator GetObjects(); - inline PMeshObjectIterator GetMeshObjects(); - inline PComponentsObjectIterator GetComponentsObjects(); - inline PTexture2DIterator GetTexture2Ds(); - inline PBaseMaterialGroupIterator GetBaseMaterialGroups(); - inline PColorGroupIterator GetColorGroups(); - inline PTexture2DGroupIterator GetTexture2DGroups(); - inline PCompositeMaterialsIterator GetCompositeMaterials(); - inline PMultiPropertyGroupIterator GetMultiPropertyGroups(); - inline PSliceStackIterator GetSliceStacks(); - inline PModel MergeToModel(); - inline PMeshObject AddMeshObject(); - inline PComponentsObject AddComponentsObject(); - inline PSliceStack AddSliceStack(const Lib3MF_double dZBottom); - inline PTexture2D AddTexture2DFromAttachment(classParam pTextureAttachment); - inline PBaseMaterialGroup AddBaseMaterialGroup(); - inline PColorGroup AddColorGroup(); - inline PTexture2DGroup AddTexture2DGroup(classParam pTexture2DInstance); - inline PCompositeMaterials AddCompositeMaterials(classParam pBaseMaterialGroupInstance); - inline PMultiPropertyGroup AddMultiPropertyGroup(); - inline PBuildItem AddBuildItem(classParam pObject, const sTransform & Transform); - inline void RemoveBuildItem(classParam pBuildItemInstance); - inline PMetaDataGroup GetMetaDataGroup(); - inline PAttachment AddAttachment(const std::string & sURI, const std::string & sRelationShipType); - inline void RemoveAttachment(classParam pAttachmentInstance); - inline PAttachment GetAttachment(const Lib3MF_uint32 nIndex); - inline PAttachment FindAttachment(const std::string & sURI); - inline Lib3MF_uint32 GetAttachmentCount(); - inline bool HasPackageThumbnailAttachment(); - inline PAttachment CreatePackageThumbnailAttachment(); - inline PAttachment GetPackageThumbnailAttachment(); - inline void RemovePackageThumbnailAttachment(); - inline void AddCustomContentType(const std::string & sExtension, const std::string & sContentType); - inline void RemoveCustomContentType(const std::string & sExtension); - inline void SetRandomNumberCallback(const RandomNumberCallback pTheCallback, const Lib3MF_pvoid pUserData); - inline PKeyStore GetKeyStore(); }; - + /************************************************************************************************************************* - RTTI: Polymorphic Factory implementation + Class CSinhNode **************************************************************************************************************************/ - -/** -* IMPORTANT: PolymorphicFactory method should not be used by application directly. -* It's designed to be used on Lib3MFHandle object only once. -* If it's used on any existing object as a form of dynamic cast then -* CWrapper::AcquireInstance(CBase object) must be called after instantiating new object. -* This is important to keep reference count matching between application and library sides. -*/ -inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) -{ - Lib3MF_uint64 resultClassTypeId = 0; - CheckError(nullptr, m_WrapperTable.m_Base_ClassTypeId(pHandle, &resultClassTypeId)); - switch(resultClassTypeId) { - case 0x856632D0BAF1D8B7UL: return new CBase(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Base" - case 0xE76F642F363FD7E9UL: return new CWriter(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Writer" - case 0x2D86831DA59FBE72UL: return new CReader(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Reader" - case 0x0E55A826D377483EUL: return new CPackagePart(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::PackagePart" - case 0xDFE3889D1B269CBBUL: return new CResource(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Resource" - case 0x460F3515E2621DBEUL: return new CResourceIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceIterator" - case 0x69684DB99FA813F6UL: return new CSliceStackIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SliceStackIterator" - case 0xDE92510BD2112288UL: return new CObjectIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ObjectIterator" - case 0xF4196034E2B9FDE6UL: return new CMeshObjectIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MeshObjectIterator" - case 0x564DE4217ED7614AUL: return new CComponentsObjectIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObjectIterator" - case 0x4BD32B4870FFC03BUL: return new CTexture2DIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DIterator" - case 0x65E6EDD9362C79CBUL: return new CBaseMaterialGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroupIterator" - case 0x10274A1757C729C0UL: return new CColorGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ColorGroupIterator" - case 0x30D55F4DB88FE0CAUL: return new CTexture2DGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroupIterator" - case 0xA99CC6C3F70FB6F9UL: return new CCompositeMaterialsIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterialsIterator" - case 0xC2BDF5D8CBBDB1F0UL: return new CMultiPropertyGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroupIterator" - case 0xD17716D063DE2C22UL: return new CMetaData(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MetaData" - case 0x0C3B85369E9B25D3UL: return new CMetaDataGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MetaDataGroup" - case 0x2DA2136F577A779CUL: return new CObject(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Object" - case 0x3B3A6DC6EC610497UL: return new CMeshObject(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MeshObject" - case 0x63B3B461B30B4BA5UL: return new CBeamLattice(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BeamLattice" - case 0x4ECDB6A6F69F2BEBUL: return new CComponent(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Component" - case 0x6522CF04EB283FEDUL: return new CComponentsObject(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObject" - case 0x30CCDBE90E00B55BUL: return new CBeamSet(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BeamSet" - case 0xB27D4656E16609FAUL: return new CBaseMaterialGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroup" - case 0xD085FB2E49CDB5B1UL: return new CColorGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ColorGroup" - case 0xBC1208397E37055DUL: return new CTexture2DGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroup" - case 0xCE16224D688B86F2UL: return new CCompositeMaterials(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterials" - case 0xB989E02E43158FE6UL: return new CMultiPropertyGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroup" - case 0x8CE7A1191A63A35DUL: return new CAttachment(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Attachment" - case 0xE0441CF976B36319UL: return new CTexture2D(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2D" - case 0x68FB2D5FFC4BA12AUL: return new CBuildItem(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItem" - case 0xA7D21BD364910860UL: return new CBuildItemIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItemIterator" - case 0x2198BCF4D8DF9C40UL: return new CSlice(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Slice" - case 0x6594B031B6096238UL: return new CSliceStack(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SliceStack" - case 0xD9E46D5E6D8118EEUL: return new CConsumer(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Consumer" - case 0x385C42FC5609498AUL: return new CAccessRight(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::AccessRight" - case 0x7FB36B91D4CE4671UL: return new CContentEncryptionParams(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ContentEncryptionParams" - case 0x1A47A5E258E22EF9UL: return new CResourceData(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceData" - case 0xD59067227E428AA4UL: return new CResourceDataGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceDataGroup" - case 0x1CC9E0CC082253C6UL: return new CKeyStore(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::KeyStore" - case 0x5A8164ECEDB03F09UL: return new CModel(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Model" - } - return new CBase(this, pHandle); -} +class CSinhNode : public COneInputNode { +public: /** - * CWrapper::GetLibraryVersion - retrieves the binary version of this library. - * @param[out] nMajor - returns the major version of this library - * @param[out] nMinor - returns the minor version of this library - * @param[out] nMicro - returns the micro version of this library + * CSinhNode::CSinhNode - Constructor for SinhNode class. */ - inline void CWrapper::GetLibraryVersion(Lib3MF_uint32 & nMajor, Lib3MF_uint32 & nMinor, Lib3MF_uint32 & nMicro) + CSinhNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - CheckError(nullptr,m_WrapperTable.m_GetLibraryVersion(&nMajor, &nMinor, &nMicro)); } +}; + +/************************************************************************************************************************* + Class CCoshNode +**************************************************************************************************************************/ +class CCoshNode : public COneInputNode { +public: + /** - * CWrapper::GetPrereleaseInformation - retrieves prerelease information of this library. - * @return Does the library provide prerelease version? - * @param[out] sPrereleaseInfo - retrieves prerelease information of this library. + * CCoshNode::CCoshNode - Constructor for CoshNode class. */ - inline bool CWrapper::GetPrereleaseInformation(std::string & sPrereleaseInfo) + CCoshNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - bool resultHasPrereleaseInfo = 0; - Lib3MF_uint32 bytesNeededPrereleaseInfo = 0; - Lib3MF_uint32 bytesWrittenPrereleaseInfo = 0; - CheckError(nullptr,m_WrapperTable.m_GetPrereleaseInformation(&resultHasPrereleaseInfo, 0, &bytesNeededPrereleaseInfo, nullptr)); - std::vector bufferPrereleaseInfo(bytesNeededPrereleaseInfo); - CheckError(nullptr,m_WrapperTable.m_GetPrereleaseInformation(&resultHasPrereleaseInfo, bytesNeededPrereleaseInfo, &bytesWrittenPrereleaseInfo, &bufferPrereleaseInfo[0])); - sPrereleaseInfo = std::string(&bufferPrereleaseInfo[0]); - - return resultHasPrereleaseInfo; } +}; + +/************************************************************************************************************************* + Class CTanhNode +**************************************************************************************************************************/ +class CTanhNode : public COneInputNode { +public: + /** - * CWrapper::GetBuildInformation - retrieves build information of this library. - * @return Does the library provide build version? - * @param[out] sBuildInformation - retrieves build information of this library. + * CTanhNode::CTanhNode - Constructor for TanhNode class. */ - inline bool CWrapper::GetBuildInformation(std::string & sBuildInformation) + CTanhNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - bool resultHasBuildInfo = 0; - Lib3MF_uint32 bytesNeededBuildInformation = 0; - Lib3MF_uint32 bytesWrittenBuildInformation = 0; - CheckError(nullptr,m_WrapperTable.m_GetBuildInformation(&resultHasBuildInfo, 0, &bytesNeededBuildInformation, nullptr)); - std::vector bufferBuildInformation(bytesNeededBuildInformation); - CheckError(nullptr,m_WrapperTable.m_GetBuildInformation(&resultHasBuildInfo, bytesNeededBuildInformation, &bytesWrittenBuildInformation, &bufferBuildInformation[0])); - sBuildInformation = std::string(&bufferBuildInformation[0]); - - return resultHasBuildInfo; } +}; + +/************************************************************************************************************************* + Class CRoundNode +**************************************************************************************************************************/ +class CRoundNode : public COneInputNode { +public: + /** - * CWrapper::GetSpecificationVersion - retrieves whether a specification is supported, and if so, which version. - * @param[in] sSpecificationURL - URL of extension to check - * @param[out] bIsSupported - returns whether this specification is supported - * @param[out] nMajor - returns the major version of the extension (if IsSupported) - * @param[out] nMinor - returns the minor version of the extension (if IsSupported) - * @param[out] nMicro - returns the micro version of the extension (if IsSupported) + * CRoundNode::CRoundNode - Constructor for RoundNode class. */ - inline void CWrapper::GetSpecificationVersion(const std::string & sSpecificationURL, bool & bIsSupported, Lib3MF_uint32 & nMajor, Lib3MF_uint32 & nMinor, Lib3MF_uint32 & nMicro) + CRoundNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - CheckError(nullptr,m_WrapperTable.m_GetSpecificationVersion(sSpecificationURL.c_str(), &bIsSupported, &nMajor, &nMinor, &nMicro)); } +}; + +/************************************************************************************************************************* + Class CCeilNode +**************************************************************************************************************************/ +class CCeilNode : public COneInputNode { +public: + /** - * CWrapper::CreateModel - creates an empty model instance. - * @return returns an empty model instance + * CCeilNode::CCeilNode - Constructor for CeilNode class. */ - inline PModel CWrapper::CreateModel() + CCeilNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - Lib3MFHandle hModel = nullptr; - CheckError(nullptr,m_WrapperTable.m_CreateModel(&hModel)); - - if (!hModel) { - CheckError(nullptr,LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(this->polymorphicFactory(hModel))); } +}; + +/************************************************************************************************************************* + Class CFloorNode +**************************************************************************************************************************/ +class CFloorNode : public COneInputNode { +public: + /** - * CWrapper::Release - releases shared ownership of an object instance - * @param[in] pInstance - the object instance to release + * CFloorNode::CFloorNode - Constructor for FloorNode class. */ - inline void CWrapper::Release(classParam pInstance) + CFloorNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - Lib3MFHandle hInstance = pInstance.GetHandle(); - CheckError(nullptr,m_WrapperTable.m_Release(hInstance)); } +}; + +/************************************************************************************************************************* + Class CSignNode +**************************************************************************************************************************/ +class CSignNode : public COneInputNode { +public: + /** - * CWrapper::Acquire - acquires shared ownership of an object instance - * @param[in] pInstance - the object instance to acquire + * CSignNode::CSignNode - Constructor for SignNode class. */ - inline void CWrapper::Acquire(classParam pInstance) + CSignNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - Lib3MFHandle hInstance = pInstance.GetHandle(); - CheckError(nullptr,m_WrapperTable.m_Acquire(hInstance)); } +}; + +/************************************************************************************************************************* + Class CFractNode +**************************************************************************************************************************/ +class CFractNode : public COneInputNode { +public: + /** - * CWrapper::SetJournal - Sets the journal file path - * @param[in] sJournalPath - File name of the journal file + * CFractNode::CFractNode - Constructor for FractNode class. */ - inline void CWrapper::SetJournal(const std::string & sJournalPath) + CFractNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - CheckError(nullptr,m_WrapperTable.m_SetJournal(sJournalPath.c_str())); } +}; + +/************************************************************************************************************************* + Class CAbsNode +**************************************************************************************************************************/ +class CAbsNode : public COneInputNode { +public: + /** - * CWrapper::GetLastError - Retrieves the last error string of an instance - * @param[in] pInstance - Object where the error occured. - * @param[out] sLastErrorString - Last Error String - * @return Returns if the instance has a last error. + * CAbsNode::CAbsNode - Constructor for AbsNode class. */ - inline bool CWrapper::GetLastError(classParam pInstance, std::string & sLastErrorString) + CAbsNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - Lib3MFHandle hInstance = pInstance.GetHandle(); - Lib3MF_uint32 bytesNeededLastErrorString = 0; - Lib3MF_uint32 bytesWrittenLastErrorString = 0; - bool resultHasLastError = 0; - CheckError(nullptr,m_WrapperTable.m_GetLastError(hInstance, 0, &bytesNeededLastErrorString, nullptr, &resultHasLastError)); - std::vector bufferLastErrorString(bytesNeededLastErrorString); - CheckError(nullptr,m_WrapperTable.m_GetLastError(hInstance, bytesNeededLastErrorString, &bytesWrittenLastErrorString, &bufferLastErrorString[0], &resultHasLastError)); - sLastErrorString = std::string(&bufferLastErrorString[0]); - - return resultHasLastError; } +}; + +/************************************************************************************************************************* + Class CExpNode +**************************************************************************************************************************/ +class CExpNode : public COneInputNode { +public: + /** - * CWrapper::GetSymbolLookupMethod - Returns the address of the SymbolLookupMethod - * @return Address of the SymbolAddressMethod + * CExpNode::CExpNode - Constructor for ExpNode class. */ - inline Lib3MF_pvoid CWrapper::GetSymbolLookupMethod() + CExpNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - Lib3MF_pvoid resultSymbolLookupMethod = 0; - CheckError(nullptr,m_WrapperTable.m_GetSymbolLookupMethod(&resultSymbolLookupMethod)); - - return resultSymbolLookupMethod; } +}; + +/************************************************************************************************************************* + Class CLogNode +**************************************************************************************************************************/ +class CLogNode : public COneInputNode { +public: + /** - * CWrapper::RetrieveProgressMessage - Return an English text for a progress identifier.|Note: this is the only function you can call from your callback function. - * @param[in] eTheProgressIdentifier - the progress identifier that is passed to the callback function - * @param[out] sProgressMessage - English text for the progress identifier + * CLogNode::CLogNode - Constructor for LogNode class. */ - inline void CWrapper::RetrieveProgressMessage(const eProgressIdentifier eTheProgressIdentifier, std::string & sProgressMessage) + CLogNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - Lib3MF_uint32 bytesNeededProgressMessage = 0; - Lib3MF_uint32 bytesWrittenProgressMessage = 0; - CheckError(nullptr,m_WrapperTable.m_RetrieveProgressMessage(eTheProgressIdentifier, 0, &bytesNeededProgressMessage, nullptr)); - std::vector bufferProgressMessage(bytesNeededProgressMessage); - CheckError(nullptr,m_WrapperTable.m_RetrieveProgressMessage(eTheProgressIdentifier, bytesNeededProgressMessage, &bytesWrittenProgressMessage, &bufferProgressMessage[0])); - sProgressMessage = std::string(&bufferProgressMessage[0]); } +}; + +/************************************************************************************************************************* + Class CLog2Node +**************************************************************************************************************************/ +class CLog2Node : public COneInputNode { +public: + /** - * CWrapper::RGBAToColor - Creates a Color from uint8 RGBA values - * @param[in] nRed - Red value of color (0-255) - * @param[in] nGreen - Green value of color (0-255) - * @param[in] nBlue - Blue value of color (0-255) - * @param[in] nAlpha - Alpha value of color (0-255) - * @return Assembled color + * CLog2Node::CLog2Node - Constructor for Log2Node class. */ - inline sColor CWrapper::RGBAToColor(const Lib3MF_uint8 nRed, const Lib3MF_uint8 nGreen, const Lib3MF_uint8 nBlue, const Lib3MF_uint8 nAlpha) + CLog2Node(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - sColor resultTheColor; - CheckError(nullptr,m_WrapperTable.m_RGBAToColor(nRed, nGreen, nBlue, nAlpha, &resultTheColor)); - - return resultTheColor; } +}; + +/************************************************************************************************************************* + Class CLog10Node +**************************************************************************************************************************/ +class CLog10Node : public COneInputNode { +public: + /** - * CWrapper::FloatRGBAToColor - Creates a Color from uint8 RGBA values - * @param[in] fRed - Red value of color (0-1) - * @param[in] fGreen - Green value of color (0-1) - * @param[in] fBlue - Blue value of color (0-1) - * @param[in] fAlpha - Alpha value of color (0-1) - * @return Assembled color + * CLog10Node::CLog10Node - Constructor for Log10Node class. */ - inline sColor CWrapper::FloatRGBAToColor(const Lib3MF_single fRed, const Lib3MF_single fGreen, const Lib3MF_single fBlue, const Lib3MF_single fAlpha) + CLog10Node(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - sColor resultTheColor; - CheckError(nullptr,m_WrapperTable.m_FloatRGBAToColor(fRed, fGreen, fBlue, fAlpha, &resultTheColor)); - - return resultTheColor; } +}; + +/************************************************************************************************************************* + Class CLengthNode +**************************************************************************************************************************/ +class CLengthNode : public COneInputNode { +public: + /** - * CWrapper::ColorToRGBA - Calculates uint8-RGBA-values from a Color - * @param[in] TheColor - Color to handle - * @param[out] nRed - Red value of color (0-255) - * @param[out] nGreen - Green value of color (0-255) - * @param[out] nBlue - Blue value of color (0-255) - * @param[out] nAlpha - Alpha value of color (0-255) + * CLengthNode::CLengthNode - Constructor for LengthNode class. */ - inline void CWrapper::ColorToRGBA(const sColor & TheColor, Lib3MF_uint8 & nRed, Lib3MF_uint8 & nGreen, Lib3MF_uint8 & nBlue, Lib3MF_uint8 & nAlpha) + CLengthNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - CheckError(nullptr,m_WrapperTable.m_ColorToRGBA(&TheColor, &nRed, &nGreen, &nBlue, &nAlpha)); } +}; + +/************************************************************************************************************************* + Class CTransposeNode +**************************************************************************************************************************/ +class CTransposeNode : public COneInputNode { +public: + /** - * CWrapper::ColorToFloatRGBA - Calculates float-RGBA-values from a Color - * @param[in] TheColor - Color to handle - * @param[out] fRed - Red value of color (0-1) - * @param[out] fGreen - Green value of color (0-1) - * @param[out] fBlue - Blue value of color (0-1) - * @param[out] fAlpha - Alpha value of color (0-1) + * CTransposeNode::CTransposeNode - Constructor for TransposeNode class. */ - inline void CWrapper::ColorToFloatRGBA(const sColor & TheColor, Lib3MF_single & fRed, Lib3MF_single & fGreen, Lib3MF_single & fBlue, Lib3MF_single & fAlpha) + CTransposeNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - CheckError(nullptr,m_WrapperTable.m_ColorToFloatRGBA(&TheColor, &fRed, &fGreen, &fBlue, &fAlpha)); } +}; + +/************************************************************************************************************************* + Class CInverseNode +**************************************************************************************************************************/ +class CInverseNode : public COneInputNode { +public: + /** - * CWrapper::GetIdentityTransform - Creates an identity transform - * @return Transformation matrix. + * CInverseNode::CInverseNode - Constructor for InverseNode class. */ - inline sTransform CWrapper::GetIdentityTransform() + CInverseNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - sTransform resultTransform; - CheckError(nullptr,m_WrapperTable.m_GetIdentityTransform(&resultTransform)); - - return resultTransform; } +}; + +/************************************************************************************************************************* + Class CSqrtNode +**************************************************************************************************************************/ +class CSqrtNode : public COneInputNode { +public: + /** - * CWrapper::GetUniformScaleTransform - Creates a uniform scale transform - * @param[in] fFactor - Factor in X, Y and Z - * @return Transformation matrix. + * CSqrtNode::CSqrtNode - Constructor for SqrtNode class. */ - inline sTransform CWrapper::GetUniformScaleTransform(const Lib3MF_single fFactor) + CSqrtNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - sTransform resultTransform; - CheckError(nullptr,m_WrapperTable.m_GetUniformScaleTransform(fFactor, &resultTransform)); - - return resultTransform; } +}; + +/************************************************************************************************************************* + Class CResourceIdNode +**************************************************************************************************************************/ +class CResourceIdNode : public CImplicitNode { +public: + /** - * CWrapper::GetScaleTransform - Creates a scale transform - * @param[in] fFactorX - Factor in X - * @param[in] fFactorY - Factor in Y - * @param[in] fFactorZ - Factor in Z - * @return Transformation matrix. + * CResourceIdNode::CResourceIdNode - Constructor for ResourceIdNode class. */ - inline sTransform CWrapper::GetScaleTransform(const Lib3MF_single fFactorX, const Lib3MF_single fFactorY, const Lib3MF_single fFactorZ) + CResourceIdNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) { - sTransform resultTransform; - CheckError(nullptr,m_WrapperTable.m_GetScaleTransform(fFactorX, fFactorY, fFactorZ, &resultTransform)); - - return resultTransform; } + inline void SetResource(classParam pResource); + inline PResource GetResource(); + inline PImplicitPort GetOutputValue(); +}; + +/************************************************************************************************************************* + Class CTwoInputNode +**************************************************************************************************************************/ +class CTwoInputNode : public COneInputNode { +public: + /** - * CWrapper::GetTranslationTransform - Creates an translation transform - * @param[in] fVectorX - Translation in X - * @param[in] fVectorY - Translation in Y - * @param[in] fVectorZ - Translation in Z - * @return Transformation matrix. + * CTwoInputNode::CTwoInputNode - Constructor for TwoInputNode class. */ - inline sTransform CWrapper::GetTranslationTransform(const Lib3MF_single fVectorX, const Lib3MF_single fVectorY, const Lib3MF_single fVectorZ) + CTwoInputNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) { - sTransform resultTransform; - CheckError(nullptr,m_WrapperTable.m_GetTranslationTransform(fVectorX, fVectorY, fVectorZ, &resultTransform)); - - return resultTransform; } - inline void CWrapper::CheckError(CBase * pBaseClass, Lib3MFResult nResult) + inline PImplicitPort GetInputB(); +}; + +/************************************************************************************************************************* + Class CAdditionNode +**************************************************************************************************************************/ +class CAdditionNode : public CTwoInputNode { +public: + + /** + * CAdditionNode::CAdditionNode - Constructor for AdditionNode class. + */ + CAdditionNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) { - if (nResult != 0) { - std::string sErrorMessage; - if (pBaseClass != nullptr) { - GetLastError(pBaseClass, sErrorMessage); - } - throw ELib3MFException(nResult, sErrorMessage); - } } - - inline Lib3MFResult CWrapper::initWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) +}; + +/************************************************************************************************************************* + Class CSubtractionNode +**************************************************************************************************************************/ +class CSubtractionNode : public CTwoInputNode { +public: + + /** + * CSubtractionNode::CSubtractionNode - Constructor for SubtractionNode class. + */ + CSubtractionNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) { - if (pWrapperTable == nullptr) - return LIB3MF_ERROR_INVALIDPARAM; - - pWrapperTable->m_LibraryHandle = nullptr; - pWrapperTable->m_Base_ClassTypeId = nullptr; - pWrapperTable->m_Writer_WriteToFile = nullptr; - pWrapperTable->m_Writer_GetStreamSize = nullptr; - pWrapperTable->m_Writer_WriteToBuffer = nullptr; - pWrapperTable->m_Writer_WriteToCallback = nullptr; - pWrapperTable->m_Writer_SetProgressCallback = nullptr; - pWrapperTable->m_Writer_GetDecimalPrecision = nullptr; - pWrapperTable->m_Writer_SetDecimalPrecision = nullptr; - pWrapperTable->m_Writer_SetStrictModeActive = nullptr; - pWrapperTable->m_Writer_GetStrictModeActive = nullptr; - pWrapperTable->m_Writer_GetWarning = nullptr; - pWrapperTable->m_Writer_GetWarningCount = nullptr; - pWrapperTable->m_Writer_AddKeyWrappingCallback = nullptr; - pWrapperTable->m_Writer_SetContentEncryptionCallback = nullptr; - pWrapperTable->m_Reader_ReadFromFile = nullptr; - pWrapperTable->m_Reader_ReadFromBuffer = nullptr; - pWrapperTable->m_Reader_ReadFromCallback = nullptr; - pWrapperTable->m_Reader_SetProgressCallback = nullptr; - pWrapperTable->m_Reader_AddRelationToRead = nullptr; - pWrapperTable->m_Reader_RemoveRelationToRead = nullptr; - pWrapperTable->m_Reader_SetStrictModeActive = nullptr; - pWrapperTable->m_Reader_GetStrictModeActive = nullptr; - pWrapperTable->m_Reader_GetWarning = nullptr; - pWrapperTable->m_Reader_GetWarningCount = nullptr; - pWrapperTable->m_Reader_AddKeyWrappingCallback = nullptr; - pWrapperTable->m_Reader_SetContentEncryptionCallback = nullptr; - pWrapperTable->m_PackagePart_GetPath = nullptr; - pWrapperTable->m_PackagePart_SetPath = nullptr; - pWrapperTable->m_Resource_GetResourceID = nullptr; - pWrapperTable->m_Resource_GetUniqueResourceID = nullptr; - pWrapperTable->m_Resource_PackagePart = nullptr; - pWrapperTable->m_Resource_SetPackagePart = nullptr; - pWrapperTable->m_Resource_GetModelResourceID = nullptr; - pWrapperTable->m_ResourceIterator_MoveNext = nullptr; - pWrapperTable->m_ResourceIterator_MovePrevious = nullptr; - pWrapperTable->m_ResourceIterator_GetCurrent = nullptr; - pWrapperTable->m_ResourceIterator_Clone = nullptr; - pWrapperTable->m_ResourceIterator_Count = nullptr; - pWrapperTable->m_SliceStackIterator_GetCurrentSliceStack = nullptr; - pWrapperTable->m_ObjectIterator_GetCurrentObject = nullptr; - pWrapperTable->m_MeshObjectIterator_GetCurrentMeshObject = nullptr; - pWrapperTable->m_ComponentsObjectIterator_GetCurrentComponentsObject = nullptr; - pWrapperTable->m_Texture2DIterator_GetCurrentTexture2D = nullptr; - pWrapperTable->m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup = nullptr; - pWrapperTable->m_ColorGroupIterator_GetCurrentColorGroup = nullptr; - pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup = nullptr; - pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials = nullptr; - pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup = nullptr; - pWrapperTable->m_MetaData_GetNameSpace = nullptr; - pWrapperTable->m_MetaData_SetNameSpace = nullptr; - pWrapperTable->m_MetaData_GetName = nullptr; - pWrapperTable->m_MetaData_SetName = nullptr; - pWrapperTable->m_MetaData_GetKey = nullptr; - pWrapperTable->m_MetaData_GetMustPreserve = nullptr; - pWrapperTable->m_MetaData_SetMustPreserve = nullptr; - pWrapperTable->m_MetaData_GetType = nullptr; - pWrapperTable->m_MetaData_SetType = nullptr; - pWrapperTable->m_MetaData_GetValue = nullptr; - pWrapperTable->m_MetaData_SetValue = nullptr; - pWrapperTable->m_MetaDataGroup_GetMetaDataCount = nullptr; - pWrapperTable->m_MetaDataGroup_GetMetaData = nullptr; + } + +}; + +/************************************************************************************************************************* + Class CMultiplicationNode +**************************************************************************************************************************/ +class CMultiplicationNode : public CTwoInputNode { +public: + + /** + * CMultiplicationNode::CMultiplicationNode - Constructor for MultiplicationNode class. + */ + CMultiplicationNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CDivisionNode +**************************************************************************************************************************/ +class CDivisionNode : public CTwoInputNode { +public: + + /** + * CDivisionNode::CDivisionNode - Constructor for DivisionNode class. + */ + CDivisionNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CDotNode +**************************************************************************************************************************/ +class CDotNode : public CTwoInputNode { +public: + + /** + * CDotNode::CDotNode - Constructor for DotNode class. + */ + CDotNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CCrossNode +**************************************************************************************************************************/ +class CCrossNode : public CTwoInputNode { +public: + + /** + * CCrossNode::CCrossNode - Constructor for CrossNode class. + */ + CCrossNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CArcTan2Node +**************************************************************************************************************************/ +class CArcTan2Node : public CTwoInputNode { +public: + + /** + * CArcTan2Node::CArcTan2Node - Constructor for ArcTan2Node class. + */ + CArcTan2Node(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CMatVecMultiplicationNode +**************************************************************************************************************************/ +class CMatVecMultiplicationNode : public CTwoInputNode { +public: + + /** + * CMatVecMultiplicationNode::CMatVecMultiplicationNode - Constructor for MatVecMultiplicationNode class. + */ + CMatVecMultiplicationNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CMinNode +**************************************************************************************************************************/ +class CMinNode : public CTwoInputNode { +public: + + /** + * CMinNode::CMinNode - Constructor for MinNode class. + */ + CMinNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CMaxNode +**************************************************************************************************************************/ +class CMaxNode : public CTwoInputNode { +public: + + /** + * CMaxNode::CMaxNode - Constructor for MaxNode class. + */ + CMaxNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CFmodNode +**************************************************************************************************************************/ +class CFmodNode : public CTwoInputNode { +public: + + /** + * CFmodNode::CFmodNode - Constructor for FmodNode class. + */ + CFmodNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CModNode +**************************************************************************************************************************/ +class CModNode : public CTwoInputNode { +public: + + /** + * CModNode::CModNode - Constructor for ModNode class. + */ + CModNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CPowNode +**************************************************************************************************************************/ +class CPowNode : public CTwoInputNode { +public: + + /** + * CPowNode::CPowNode - Constructor for PowNode class. + */ + CPowNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CTwoInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CSelectNode +**************************************************************************************************************************/ +class CSelectNode : public COneInputNode { +public: + + /** + * CSelectNode::CSelectNode - Constructor for SelectNode class. + */ + CSelectNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputB(); + inline PImplicitPort GetInputC(); + inline PImplicitPort GetInputD(); +}; + +/************************************************************************************************************************* + Class CClampNode +**************************************************************************************************************************/ +class CClampNode : public COneInputNode { +public: + + /** + * CClampNode::CClampNode - Constructor for ClampNode class. + */ + CClampNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputMin(); + inline PImplicitPort GetInputMax(); +}; + +/************************************************************************************************************************* + Class CComposeVectorNode +**************************************************************************************************************************/ +class CComposeVectorNode : public CImplicitNode { +public: + + /** + * CComposeVectorNode::CComposeVectorNode - Constructor for ComposeVectorNode class. + */ + CComposeVectorNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputX(); + inline PImplicitPort GetInputY(); + inline PImplicitPort GetInputZ(); + inline PImplicitPort GetOutputResult(); +}; + +/************************************************************************************************************************* + Class CVectorFromScalarNode +**************************************************************************************************************************/ +class CVectorFromScalarNode : public COneInputNode { +public: + + /** + * CVectorFromScalarNode::CVectorFromScalarNode - Constructor for VectorFromScalarNode class. + */ + CVectorFromScalarNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : COneInputNode(pWrapper, pHandle) + { + } + +}; + +/************************************************************************************************************************* + Class CDecomposeVectorNode +**************************************************************************************************************************/ +class CDecomposeVectorNode : public CImplicitNode { +public: + + /** + * CDecomposeVectorNode::CDecomposeVectorNode - Constructor for DecomposeVectorNode class. + */ + CDecomposeVectorNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputA(); + inline PImplicitPort GetOutputX(); + inline PImplicitPort GetOutputY(); + inline PImplicitPort GetOutputZ(); +}; + +/************************************************************************************************************************* + Class CComposeMatrixNode +**************************************************************************************************************************/ +class CComposeMatrixNode : public CImplicitNode { +public: + + /** + * CComposeMatrixNode::CComposeMatrixNode - Constructor for ComposeMatrixNode class. + */ + CComposeMatrixNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputM00(); + inline PImplicitPort GetInputM01(); + inline PImplicitPort GetInputM02(); + inline PImplicitPort GetInputM03(); + inline PImplicitPort GetInputM10(); + inline PImplicitPort GetInputM11(); + inline PImplicitPort GetInputM12(); + inline PImplicitPort GetInputM13(); + inline PImplicitPort GetInputM20(); + inline PImplicitPort GetInputM21(); + inline PImplicitPort GetInputM22(); + inline PImplicitPort GetInputM23(); + inline PImplicitPort GetInputM30(); + inline PImplicitPort GetInputM31(); + inline PImplicitPort GetInputM32(); + inline PImplicitPort GetInputM33(); + inline PImplicitPort GetOutputResult(); +}; + +/************************************************************************************************************************* + Class CMatrixFromRowsNode +**************************************************************************************************************************/ +class CMatrixFromRowsNode : public CImplicitNode { +public: + + /** + * CMatrixFromRowsNode::CMatrixFromRowsNode - Constructor for MatrixFromRowsNode class. + */ + CMatrixFromRowsNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputA(); + inline PImplicitPort GetInputB(); + inline PImplicitPort GetInputC(); + inline PImplicitPort GetInputD(); + inline PImplicitPort GetOutputResult(); +}; + +/************************************************************************************************************************* + Class CMatrixFromColumnsNode +**************************************************************************************************************************/ +class CMatrixFromColumnsNode : public CImplicitNode { +public: + + /** + * CMatrixFromColumnsNode::CMatrixFromColumnsNode - Constructor for MatrixFromColumnsNode class. + */ + CMatrixFromColumnsNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputA(); + inline PImplicitPort GetInputB(); + inline PImplicitPort GetInputC(); + inline PImplicitPort GetInputD(); + inline PImplicitPort GetOutputResult(); +}; + +/************************************************************************************************************************* + Class CConstantNode +**************************************************************************************************************************/ +class CConstantNode : public CImplicitNode { +public: + + /** + * CConstantNode::CConstantNode - Constructor for ConstantNode class. + */ + CConstantNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline void SetConstant(const Lib3MF_double dValue); + inline Lib3MF_double GetConstant(); + inline PImplicitPort GetOutputValue(); +}; + +/************************************************************************************************************************* + Class CConstVecNode +**************************************************************************************************************************/ +class CConstVecNode : public CImplicitNode { +public: + + /** + * CConstVecNode::CConstVecNode - Constructor for ConstVecNode class. + */ + CConstVecNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline void SetVector(const sVector & Value); + inline sVector GetVector(); + inline PImplicitPort GetOutputVector(); +}; + +/************************************************************************************************************************* + Class CConstMatNode +**************************************************************************************************************************/ +class CConstMatNode : public CImplicitNode { +public: + + /** + * CConstMatNode::CConstMatNode - Constructor for ConstMatNode class. + */ + CConstMatNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline void SetMatrix(const sMatrix4x4 & Value); + inline sMatrix4x4 GetMatrix(); + inline PImplicitPort GetOutputMatrix(); +}; + +/************************************************************************************************************************* + Class CMeshNode +**************************************************************************************************************************/ +class CMeshNode : public CImplicitNode { +public: + + /** + * CMeshNode::CMeshNode - Constructor for MeshNode class. + */ + CMeshNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputMesh(); + inline PImplicitPort GetInputPos(); + inline PImplicitPort GetOutputDistance(); +}; + +/************************************************************************************************************************* + Class CUnsignedMeshNode +**************************************************************************************************************************/ +class CUnsignedMeshNode : public CImplicitNode { +public: + + /** + * CUnsignedMeshNode::CUnsignedMeshNode - Constructor for UnsignedMeshNode class. + */ + CUnsignedMeshNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputMesh(); + inline PImplicitPort GetInputPos(); + inline PImplicitPort GetOutputDistance(); +}; + +/************************************************************************************************************************* + Class CFunctionCallNode +**************************************************************************************************************************/ +class CFunctionCallNode : public CImplicitNode { +public: + + /** + * CFunctionCallNode::CFunctionCallNode - Constructor for FunctionCallNode class. + */ + CFunctionCallNode(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CImplicitNode(pWrapper, pHandle) + { + } + + inline PImplicitPort GetInputFunctionID(); +}; + +/************************************************************************************************************************* + Class CNodeIterator +**************************************************************************************************************************/ +class CNodeIterator : public CIterator { +public: + + /** + * CNodeIterator::CNodeIterator - Constructor for NodeIterator class. + */ + CNodeIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CIterator(pWrapper, pHandle) + { + } + + inline PImplicitNode GetCurrent(); +}; + +/************************************************************************************************************************* + Class CFunction +**************************************************************************************************************************/ +class CFunction : public CResource { +public: + + /** + * CFunction::CFunction - Constructor for Function class. + */ + CFunction(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResource(pWrapper, pHandle) + { + } + + inline std::string GetDisplayName(); + inline void SetDisplayName(const std::string & sDisplayName); + inline PImplicitPort AddInput(const std::string & sIdentifier, const std::string & sDisplayName, const eImplicitPortType eType); + inline PImplicitPortIterator GetInputs(); + inline void RemoveInput(classParam pInput); + inline PImplicitPort AddOutput(const std::string & sIdentifier, const std::string & sDisplayName, const eImplicitPortType eType); + inline PImplicitPortIterator GetOutputs(); + inline void RemoveOutput(classParam pOutput); + inline PImplicitPort FindInput(const std::string & sIdentifier); + inline PImplicitPort FindOutput(const std::string & sIdentifier); +}; + +/************************************************************************************************************************* + Class CImplicitFunction +**************************************************************************************************************************/ +class CImplicitFunction : public CFunction { +public: + + /** + * CImplicitFunction::CImplicitFunction - Constructor for ImplicitFunction class. + */ + CImplicitFunction(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CFunction(pWrapper, pHandle) + { + } + + inline std::string GetIdentifier(); + inline void SetIdentifier(const std::string & sIdentifier); + inline PImplicitNode AddNode(const eImplicitNodeType eNodeType, const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PSinNode AddSinNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PCosNode AddCosNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PTanNode AddTanNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PArcSinNode AddArcSinNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PArcCosNode AddArcCosNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PArcTan2Node AddArcTan2Node(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PSinhNode AddSinhNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PCoshNode AddCoshNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PTanhNode AddTanhNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PRoundNode AddRoundNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PCeilNode AddCeilNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PFloorNode AddFloorNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PSignNode AddSignNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PFractNode AddFractNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PAbsNode AddAbsNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PExpNode AddExpNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PLogNode AddLogNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PLog2Node AddLog2Node(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PLog10Node AddLog10Node(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PLengthNode AddLengthNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PTransposeNode AddTransposeNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PInverseNode InverseNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PSqrtNode AddSqrtNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PResourceIdNode AddResourceIdNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PAdditionNode AddAdditionNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PSubtractionNode AddSubtractionNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PMultiplicationNode AddMultiplicationNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PDivisionNode AddDivisionNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PDotNode AddDotNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PCrossNode AddCrossNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PMatVecMultiplicationNode AddMatVecMultiplicationNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PMinNode AddMinNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PMaxNode AddMaxNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PFmodNode AddFmodNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PPowNode AddPowNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PSelectNode AddSelectNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PClampNode AddClampNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag); + inline PComposeVectorNode AddComposeVectorNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PVectorFromScalarNode AddVectorFromScalarNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PDecomposeVectorNode AddDecomposeVectorNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PComposeMatrixNode AddComposeMatrixNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PMatrixFromRowsNode AddMatrixFromRowsNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PMatrixFromColumnsNode AddMatrixFromColumnsNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PConstantNode AddConstantNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PConstVecNode AddConstVecNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PConstMatNode AddConstMatNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PMeshNode AddMeshNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PUnsignedMeshNode AddUnsignedMeshNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PFunctionCallNode AddFunctionCallNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag); + inline PNodeIterator GetNodes(); + inline void RemoveNode(classParam pNode); + inline void AddLink(classParam pSource, classParam pTarget); + inline void AddLinkByNames(const std::string & sSource, const std::string & sTarget); + inline void Clear(); + inline void SortNodesTopologically(); +}; + +/************************************************************************************************************************* + Class CFunctionFromImage3D +**************************************************************************************************************************/ +class CFunctionFromImage3D : public CFunction { +public: + + /** + * CFunctionFromImage3D::CFunctionFromImage3D - Constructor for FunctionFromImage3D class. + */ + CFunctionFromImage3D(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CFunction(pWrapper, pHandle) + { + } + + inline PImage3D GetImage3D(); + inline void SetImage3D(classParam pImage3D); + inline void SetFilter(const eTextureFilter eFilter); + inline eTextureFilter GetFilter(); + inline void SetTileStyles(const eTextureTileStyle eTileStyleU, const eTextureTileStyle eTileStyleV, const eTextureTileStyle eTileStyleW); + inline void GetTileStyles(eTextureTileStyle & eTileStyleU, eTextureTileStyle & eTileStyleV, eTextureTileStyle & eTileStyleW); + inline Lib3MF_double GetOffset(); + inline void SetOffset(const Lib3MF_double dOffset); + inline Lib3MF_double GetScale(); + inline void SetScale(const Lib3MF_double dScale); +}; + +/************************************************************************************************************************* + Class CBuildItem +**************************************************************************************************************************/ +class CBuildItem : public CBase { +public: + + /** + * CBuildItem::CBuildItem - Constructor for BuildItem class. + */ + CBuildItem(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline PObject GetObjectResource(); + inline std::string GetUUID(bool & bHasUUID); + inline void SetUUID(const std::string & sUUID); + inline Lib3MF_uint32 GetObjectResourceID(); + inline bool HasObjectTransform(); + inline sTransform GetObjectTransform(); + inline void SetObjectTransform(const sTransform & Transform); + inline std::string GetPartNumber(); + inline void SetPartNumber(const std::string & sSetPartnumber); + inline PMetaDataGroup GetMetaDataGroup(); + inline sBox GetOutbox(); +}; + +/************************************************************************************************************************* + Class CBuildItemIterator +**************************************************************************************************************************/ +class CBuildItemIterator : public CBase { +public: + + /** + * CBuildItemIterator::CBuildItemIterator - Constructor for BuildItemIterator class. + */ + CBuildItemIterator(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline bool MoveNext(); + inline bool MovePrevious(); + inline PBuildItem GetCurrent(); + inline PBuildItemIterator Clone(); + inline Lib3MF_uint64 Count(); +}; + +/************************************************************************************************************************* + Class CSlice +**************************************************************************************************************************/ +class CSlice : public CBase { +public: + + /** + * CSlice::CSlice - Constructor for Slice class. + */ + CSlice(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline void SetVertices(const CInputVector & VerticesBuffer); + inline void GetVertices(std::vector & VerticesBuffer); + inline Lib3MF_uint64 GetVertexCount(); + inline Lib3MF_uint64 AddPolygon(const CInputVector & IndicesBuffer); + inline Lib3MF_uint64 GetPolygonCount(); + inline void SetPolygonIndices(const Lib3MF_uint64 nIndex, const CInputVector & IndicesBuffer); + inline void GetPolygonIndices(const Lib3MF_uint64 nIndex, std::vector & IndicesBuffer); + inline Lib3MF_uint64 GetPolygonIndexCount(const Lib3MF_uint64 nIndex); + inline Lib3MF_double GetZTop(); +}; + +/************************************************************************************************************************* + Class CSliceStack +**************************************************************************************************************************/ +class CSliceStack : public CResource { +public: + + /** + * CSliceStack::CSliceStack - Constructor for SliceStack class. + */ + CSliceStack(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CResource(pWrapper, pHandle) + { + } + + inline Lib3MF_double GetBottomZ(); + inline Lib3MF_uint64 GetSliceCount(); + inline PSlice GetSlice(const Lib3MF_uint64 nSliceIndex); + inline PSlice AddSlice(const Lib3MF_double dZTop); + inline Lib3MF_uint64 GetSliceRefCount(); + inline void AddSliceStackReference(classParam pTheSliceStack); + inline PSliceStack GetSliceStackReference(const Lib3MF_uint64 nSliceRefIndex); + inline void CollapseSliceReferences(); + inline void SetOwnPath(const std::string & sPath); + inline std::string GetOwnPath(); +}; + +/************************************************************************************************************************* + Class CConsumer +**************************************************************************************************************************/ +class CConsumer : public CBase { +public: + + /** + * CConsumer::CConsumer - Constructor for Consumer class. + */ + CConsumer(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline std::string GetConsumerID(); + inline std::string GetKeyID(); + inline std::string GetKeyValue(); +}; + +/************************************************************************************************************************* + Class CAccessRight +**************************************************************************************************************************/ +class CAccessRight : public CBase { +public: + + /** + * CAccessRight::CAccessRight - Constructor for AccessRight class. + */ + CAccessRight(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline PConsumer GetConsumer(); + inline eWrappingAlgorithm GetWrappingAlgorithm(); + inline eMgfAlgorithm GetMgfAlgorithm(); + inline eDigestMethod GetDigestMethod(); +}; + +/************************************************************************************************************************* + Class CContentEncryptionParams +**************************************************************************************************************************/ +class CContentEncryptionParams : public CBase { +public: + + /** + * CContentEncryptionParams::CContentEncryptionParams - Constructor for ContentEncryptionParams class. + */ + CContentEncryptionParams(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline eEncryptionAlgorithm GetEncryptionAlgorithm(); + inline void GetKey(std::vector & ByteDataBuffer); + inline void GetInitializationVector(std::vector & ByteDataBuffer); + inline void GetAuthenticationTag(std::vector & ByteDataBuffer); + inline void SetAuthenticationTag(const CInputVector & ByteDataBuffer); + inline void GetAdditionalAuthenticationData(std::vector & ByteDataBuffer); + inline Lib3MF_uint64 GetDescriptor(); + inline std::string GetKeyUUID(); +}; + +/************************************************************************************************************************* + Class CResourceData +**************************************************************************************************************************/ +class CResourceData : public CBase { +public: + + /** + * CResourceData::CResourceData - Constructor for ResourceData class. + */ + CResourceData(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline PPackagePart GetPath(); + inline eEncryptionAlgorithm GetEncryptionAlgorithm(); + inline eCompression GetCompression(); + inline void GetAdditionalAuthenticationData(std::vector & ByteDataBuffer); +}; + +/************************************************************************************************************************* + Class CResourceDataGroup +**************************************************************************************************************************/ +class CResourceDataGroup : public CBase { +public: + + /** + * CResourceDataGroup::CResourceDataGroup - Constructor for ResourceDataGroup class. + */ + CResourceDataGroup(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline std::string GetKeyUUID(); + inline PAccessRight AddAccessRight(classParam pConsumer, const eWrappingAlgorithm eWrappingAlgorithm, const eMgfAlgorithm eMgfAlgorithm, const eDigestMethod eDigestMethod); + inline PAccessRight FindAccessRightByConsumer(classParam pConsumer); + inline void RemoveAccessRight(classParam pConsumer); +}; + +/************************************************************************************************************************* + Class CKeyStore +**************************************************************************************************************************/ +class CKeyStore : public CBase { +public: + + /** + * CKeyStore::CKeyStore - Constructor for KeyStore class. + */ + CKeyStore(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline PConsumer AddConsumer(const std::string & sConsumerID, const std::string & sKeyID, const std::string & sKeyValue); + inline Lib3MF_uint64 GetConsumerCount(); + inline PConsumer GetConsumer(const Lib3MF_uint64 nConsumerIndex); + inline void RemoveConsumer(classParam pConsumer); + inline PConsumer FindConsumer(const std::string & sConsumerID); + inline Lib3MF_uint64 GetResourceDataGroupCount(); + inline PResourceDataGroup AddResourceDataGroup(); + inline PResourceDataGroup GetResourceDataGroup(const Lib3MF_uint64 nResourceDataIndex); + inline void RemoveResourceDataGroup(classParam pResourceDataGroup); + inline PResourceDataGroup FindResourceDataGroup(classParam pPartPath); + inline PResourceData AddResourceData(classParam pResourceDataGroup, classParam pPartPath, const eEncryptionAlgorithm eAlgorithm, const eCompression eCompression, const CInputVector & AdditionalAuthenticationDataBuffer); + inline void RemoveResourceData(classParam pResourceData); + inline PResourceData FindResourceData(classParam pResourcePath); + inline Lib3MF_uint64 GetResourceDataCount(); + inline PResourceData GetResourceData(const Lib3MF_uint64 nResourceDataIndex); + inline std::string GetUUID(bool & bHasUUID); + inline void SetUUID(const std::string & sUUID); +}; + +/************************************************************************************************************************* + Class CModel +**************************************************************************************************************************/ +class CModel : public CBase { +public: + + /** + * CModel::CModel - Constructor for Model class. + */ + CModel(CWrapper* pWrapper, Lib3MFHandle pHandle) + : CBase(pWrapper, pHandle) + { + } + + inline PPackagePart RootModelPart(); + inline PPackagePart FindOrCreatePackagePart(const std::string & sAbsolutePath); + inline void SetUnit(const eModelUnit eUnit); + inline eModelUnit GetUnit(); + inline std::string GetLanguage(); + inline void SetLanguage(const std::string & sLanguage); + inline PWriter QueryWriter(const std::string & sWriterClass); + inline PReader QueryReader(const std::string & sReaderClass); + inline PResource GetResourceByID(const Lib3MF_uint32 nUniqueResourceID); + inline PTexture2D GetTexture2DByID(const Lib3MF_uint32 nUniqueResourceID); + inline ePropertyType GetPropertyTypeByID(const Lib3MF_uint32 nUniqueResourceID); + inline PBaseMaterialGroup GetBaseMaterialGroupByID(const Lib3MF_uint32 nUniqueResourceID); + inline PTexture2DGroup GetTexture2DGroupByID(const Lib3MF_uint32 nUniqueResourceID); + inline PCompositeMaterials GetCompositeMaterialsByID(const Lib3MF_uint32 nUniqueResourceID); + inline PMultiPropertyGroup GetMultiPropertyGroupByID(const Lib3MF_uint32 nUniqueResourceID); + inline PMeshObject GetMeshObjectByID(const Lib3MF_uint32 nUniqueResourceID); + inline PComponentsObject GetComponentsObjectByID(const Lib3MF_uint32 nUniqueResourceID); + inline PColorGroup GetColorGroupByID(const Lib3MF_uint32 nUniqueResourceID); + inline PSliceStack GetSliceStackByID(const Lib3MF_uint32 nUniqueResourceID); + inline PLevelSet GetLevelSetByID(const Lib3MF_uint32 nUniqueResourceID); + inline std::string GetBuildUUID(bool & bHasUUID); + inline void SetBuildUUID(const std::string & sUUID); + inline PBuildItemIterator GetBuildItems(); + inline sBox GetOutbox(); + inline PResourceIterator GetResources(); + inline PObjectIterator GetObjects(); + inline PMeshObjectIterator GetMeshObjects(); + inline PComponentsObjectIterator GetComponentsObjects(); + inline PTexture2DIterator GetTexture2Ds(); + inline PBaseMaterialGroupIterator GetBaseMaterialGroups(); + inline PColorGroupIterator GetColorGroups(); + inline PTexture2DGroupIterator GetTexture2DGroups(); + inline PCompositeMaterialsIterator GetCompositeMaterials(); + inline PMultiPropertyGroupIterator GetMultiPropertyGroups(); + inline PSliceStackIterator GetSliceStacks(); + inline PImage3DIterator GetImage3Ds(); + inline PModel MergeToModel(); + inline void MergeFromModel(classParam pModelInstance); + inline PMeshObject AddMeshObject(); + inline PComponentsObject AddComponentsObject(); + inline PSliceStack AddSliceStack(const Lib3MF_double dZBottom); + inline PTexture2D AddTexture2DFromAttachment(classParam pTextureAttachment); + inline PBaseMaterialGroup AddBaseMaterialGroup(); + inline PColorGroup AddColorGroup(); + inline PTexture2DGroup AddTexture2DGroup(classParam pTexture2DInstance); + inline PCompositeMaterials AddCompositeMaterials(classParam pBaseMaterialGroupInstance); + inline PMultiPropertyGroup AddMultiPropertyGroup(); + inline PImageStack AddImageStack(const Lib3MF_uint32 nColumnCount, const Lib3MF_uint32 nRowCount, const Lib3MF_uint32 nSheetCount); + inline PImageStack GetImageStackByID(const Lib3MF_uint32 nUniqueResourceID); + inline PBuildItem AddBuildItem(classParam pObject, const sTransform & Transform); + inline void RemoveBuildItem(classParam pBuildItemInstance); + inline PMetaDataGroup GetMetaDataGroup(); + inline PAttachment AddAttachment(const std::string & sURI, const std::string & sRelationShipType); + inline void RemoveAttachment(classParam pAttachmentInstance); + inline PAttachment GetAttachment(const Lib3MF_uint32 nIndex); + inline PAttachment FindAttachment(const std::string & sURI); + inline Lib3MF_uint32 GetAttachmentCount(); + inline bool HasPackageThumbnailAttachment(); + inline PAttachment CreatePackageThumbnailAttachment(); + inline PAttachment GetPackageThumbnailAttachment(); + inline void RemovePackageThumbnailAttachment(); + inline void AddCustomContentType(const std::string & sExtension, const std::string & sContentType); + inline void RemoveCustomContentType(const std::string & sExtension); + inline void SetRandomNumberCallback(const RandomNumberCallback pTheCallback, const Lib3MF_pvoid pUserData); + inline PKeyStore GetKeyStore(); + inline PFunctionIterator GetFunctions(); + inline PImplicitFunction AddImplicitFunction(); + inline PFunctionFromImage3D AddFunctionFromImage3D(classParam pImage3DInstance); + inline PVolumeData AddVolumeData(); + inline PLevelSet AddLevelSet(); + inline PLevelSetIterator GetLevelSets(); + inline void RemoveResource(classParam pResource); +}; + +/************************************************************************************************************************* + RTTI: Polymorphic Factory implementation +**************************************************************************************************************************/ + +/** +* IMPORTANT: PolymorphicFactory method should not be used by application directly. +* It's designed to be used on Lib3MFHandle object only once. +* If it's used on any existing object as a form of dynamic cast then +* CWrapper::AcquireInstance(CBase object) must be called after instantiating new object. +* This is important to keep reference count matching between application and library sides. +*/ +inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) +{ + Lib3MF_uint64 resultClassTypeId = 0; + CheckError(nullptr, m_WrapperTable.m_Base_ClassTypeId(pHandle, &resultClassTypeId)); + switch(resultClassTypeId) { + case 0x856632D0BAF1D8B7UL: return new CBase(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Base" + case 0xE76F642F363FD7E9UL: return new CWriter(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Writer" + case 0x2D86831DA59FBE72UL: return new CReader(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Reader" + case 0x0E55A826D377483EUL: return new CPackagePart(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::PackagePart" + case 0xDFE3889D1B269CBBUL: return new CResource(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Resource" + case 0x460F3515E2621DBEUL: return new CResourceIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceIterator" + case 0x69684DB99FA813F6UL: return new CSliceStackIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SliceStackIterator" + case 0xDE92510BD2112288UL: return new CObjectIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ObjectIterator" + case 0xF4196034E2B9FDE6UL: return new CMeshObjectIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MeshObjectIterator" + case 0x564DE4217ED7614AUL: return new CComponentsObjectIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObjectIterator" + case 0x4BD32B4870FFC03BUL: return new CTexture2DIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DIterator" + case 0x65E6EDD9362C79CBUL: return new CBaseMaterialGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroupIterator" + case 0x10274A1757C729C0UL: return new CColorGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ColorGroupIterator" + case 0x30D55F4DB88FE0CAUL: return new CTexture2DGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroupIterator" + case 0xA99CC6C3F70FB6F9UL: return new CCompositeMaterialsIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterialsIterator" + case 0xC2BDF5D8CBBDB1F0UL: return new CMultiPropertyGroupIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroupIterator" + case 0xC4B8EC00A82BF336UL: return new CImage3DIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Image3DIterator" + case 0x40E9035363ACE65EUL: return new CFunctionIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionIterator" + case 0xA0C005C035D5371DUL: return new CLevelSetIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::LevelSetIterator" + case 0xD17716D063DE2C22UL: return new CMetaData(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MetaData" + case 0x0C3B85369E9B25D3UL: return new CMetaDataGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MetaDataGroup" + case 0x2DA2136F577A779CUL: return new CObject(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Object" + case 0x3B3A6DC6EC610497UL: return new CMeshObject(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MeshObject" + case 0xE8A7D9C192EFD0E2UL: return new CLevelSet(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::LevelSet" + case 0x63B3B461B30B4BA5UL: return new CBeamLattice(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BeamLattice" + case 0x4DF17E76926221C2UL: return new CFunctionReference(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionReference" + case 0xD85B5B6143E787E3UL: return new CVolumeDataColor(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataColor" + case 0x241FE6B4817C3FE4UL: return new CMaterialMapping(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MaterialMapping" + case 0x46F1DAC40581B304UL: return new CVolumeDataComposite(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataComposite" + case 0xFC368AA44ACE42DAUL: return new CVolumeDataProperty(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataProperty" + case 0x9200586FB91587A7UL: return new CVolumeData(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeData" + case 0x4ECDB6A6F69F2BEBUL: return new CComponent(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Component" + case 0x6522CF04EB283FEDUL: return new CComponentsObject(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObject" + case 0x30CCDBE90E00B55BUL: return new CBeamSet(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BeamSet" + case 0xB27D4656E16609FAUL: return new CBaseMaterialGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroup" + case 0xD085FB2E49CDB5B1UL: return new CColorGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ColorGroup" + case 0xBC1208397E37055DUL: return new CTexture2DGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroup" + case 0xCE16224D688B86F2UL: return new CCompositeMaterials(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterials" + case 0xB989E02E43158FE6UL: return new CMultiPropertyGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroup" + case 0xBD938FF2D2663D61UL: return new CImage3D(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Image3D" + case 0x13A2561F0CFB712AUL: return new CImageStack(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ImageStack" + case 0x8CE7A1191A63A35DUL: return new CAttachment(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Attachment" + case 0xE0441CF976B36319UL: return new CTexture2D(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2D" + case 0xD5C49B04AF1963CDUL: return new CImplicitPort(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitPort" + case 0x52F06268CD098EFEUL: return new CIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Iterator" + case 0xC62268F2D7C7012CUL: return new CImplicitPortIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitPortIterator" + case 0xE72592A7725AB29BUL: return new CImplicitNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitNode" + case 0xB19B9FDA94B0A5E7UL: return new COneInputNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::OneInputNode" + case 0xD5AEA50A56306722UL: return new CSinNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SinNode" + case 0x59BC328F6FB5C5FFUL: return new CCosNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CosNode" + case 0x2614CC572AF350B7UL: return new CTanNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::TanNode" + case 0xE554C8A7E72AAF4DUL: return new CArcSinNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ArcSinNode" + case 0x943AF6AE0EFD2B8AUL: return new CArcCosNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ArcCosNode" + case 0xE47D547615816BADUL: return new CArcTanNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ArcTanNode" + case 0x3C7756A456F2D089UL: return new CSinhNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SinhNode" + case 0x4A993F91E1DE256DUL: return new CCoshNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CoshNode" + case 0xCF077B19B0B78E9DUL: return new CTanhNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::TanhNode" + case 0xD9F5A53C657765AEUL: return new CRoundNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::RoundNode" + case 0x627E211653E11D93UL: return new CCeilNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CeilNode" + case 0x392A0F4C041D249CUL: return new CFloorNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FloorNode" + case 0x8A45165E6C9646D7UL: return new CSignNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SignNode" + case 0x53E62FD67F4D9A65UL: return new CFractNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FractNode" + case 0x6B641C7060040BE3UL: return new CAbsNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::AbsNode" + case 0x3390243A8E2410F3UL: return new CExpNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ExpNode" + case 0x0070021D73AA89FDUL: return new CLogNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::LogNode" + case 0xE8C0ABF7C5DC7068UL: return new CLog2Node(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Log2Node" + case 0x87740AD53454E0DFUL: return new CLog10Node(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Log10Node" + case 0xD85889E2739A74B1UL: return new CLengthNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::LengthNode" + case 0xA808B7599C158CE6UL: return new CTransposeNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::TransposeNode" + case 0xE8601F66A23A0540UL: return new CInverseNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::InverseNode" + case 0x9F831944A3DE31DAUL: return new CSqrtNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SqrtNode" + case 0xCA86A77C71CD3FAEUL: return new CResourceIdNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceIdNode" + case 0x7DE3951BA4C1064CUL: return new CTwoInputNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::TwoInputNode" + case 0x57A2236998DF5248UL: return new CAdditionNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::AdditionNode" + case 0x6079B12FFF345D02UL: return new CSubtractionNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SubtractionNode" + case 0xA3C27CF54C2AA76CUL: return new CMultiplicationNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MultiplicationNode" + case 0xB896B6413C08CF39UL: return new CDivisionNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::DivisionNode" + case 0xFE60932A66375FADUL: return new CDotNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::DotNode" + case 0x106182D38CA5CFE3UL: return new CCrossNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::CrossNode" + case 0xB6153EF5DE7E5E11UL: return new CArcTan2Node(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ArcTan2Node" + case 0x7570C43B9721D0C0UL: return new CMatVecMultiplicationNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MatVecMultiplicationNode" + case 0x846AFDE9A091E997UL: return new CMinNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MinNode" + case 0x073F910381BF250DUL: return new CMaxNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MaxNode" + case 0x1EF703D298223F2AUL: return new CFmodNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FmodNode" + case 0xEA57335849379F22UL: return new CModNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ModNode" + case 0x7700AA17CA1AC0F8UL: return new CPowNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::PowNode" + case 0x1127ED71E05A9BD4UL: return new CSelectNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SelectNode" + case 0x77AF68C971B1485FUL: return new CClampNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ClampNode" + case 0x49C24B8840C01F7EUL: return new CComposeVectorNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ComposeVectorNode" + case 0x2E417B93351375E2UL: return new CVectorFromScalarNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::VectorFromScalarNode" + case 0xCC4F8D561CCE35D4UL: return new CDecomposeVectorNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::DecomposeVectorNode" + case 0x9EF9EB54A53AA40DUL: return new CComposeMatrixNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ComposeMatrixNode" + case 0xD6DFD0A7EB64AC33UL: return new CMatrixFromRowsNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MatrixFromRowsNode" + case 0x0DCBEAFCF83F3AACUL: return new CMatrixFromColumnsNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MatrixFromColumnsNode" + case 0x3F8E5D082F966B1BUL: return new CConstantNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ConstantNode" + case 0x9C9363B3F708D556UL: return new CConstVecNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ConstVecNode" + case 0xF85C90EDCE6F90A4UL: return new CConstMatNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ConstMatNode" + case 0x53601FD432E3DEF4UL: return new CMeshNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::MeshNode" + case 0x29985A628251A9CDUL: return new CUnsignedMeshNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::UnsignedMeshNode" + case 0x0765C17C952F24E3UL: return new CFunctionCallNode(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionCallNode" + case 0xFC006BC888CAB4D0UL: return new CNodeIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::NodeIterator" + case 0x9EFB2757CA1A5231UL: return new CFunction(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Function" + case 0x6CE54469EEA83BC1UL: return new CImplicitFunction(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitFunction" + case 0x9BD7D3C2026B8CE8UL: return new CFunctionFromImage3D(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionFromImage3D" + case 0x68FB2D5FFC4BA12AUL: return new CBuildItem(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItem" + case 0xA7D21BD364910860UL: return new CBuildItemIterator(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItemIterator" + case 0x2198BCF4D8DF9C40UL: return new CSlice(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Slice" + case 0x6594B031B6096238UL: return new CSliceStack(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::SliceStack" + case 0xD9E46D5E6D8118EEUL: return new CConsumer(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Consumer" + case 0x385C42FC5609498AUL: return new CAccessRight(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::AccessRight" + case 0x7FB36B91D4CE4671UL: return new CContentEncryptionParams(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ContentEncryptionParams" + case 0x1A47A5E258E22EF9UL: return new CResourceData(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceData" + case 0xD59067227E428AA4UL: return new CResourceDataGroup(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceDataGroup" + case 0x1CC9E0CC082253C6UL: return new CKeyStore(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::KeyStore" + case 0x5A8164ECEDB03F09UL: return new CModel(this, pHandle); break; // First 64 bits of SHA1 of a string: "Lib3MF::Model" + } + return new CBase(this, pHandle); +} + + /** + * CWrapper::GetLibraryVersion - retrieves the binary version of this library. + * @param[out] nMajor - returns the major version of this library + * @param[out] nMinor - returns the minor version of this library + * @param[out] nMicro - returns the micro version of this library + */ + inline void CWrapper::GetLibraryVersion(Lib3MF_uint32 & nMajor, Lib3MF_uint32 & nMinor, Lib3MF_uint32 & nMicro) + { + CheckError(nullptr,m_WrapperTable.m_GetLibraryVersion(&nMajor, &nMinor, &nMicro)); + } + + /** + * CWrapper::GetPrereleaseInformation - retrieves prerelease information of this library. + * @return Does the library provide prerelease version? + * @param[out] sPrereleaseInfo - retrieves prerelease information of this library. + */ + inline bool CWrapper::GetPrereleaseInformation(std::string & sPrereleaseInfo) + { + bool resultHasPrereleaseInfo = 0; + Lib3MF_uint32 bytesNeededPrereleaseInfo = 0; + Lib3MF_uint32 bytesWrittenPrereleaseInfo = 0; + CheckError(nullptr,m_WrapperTable.m_GetPrereleaseInformation(&resultHasPrereleaseInfo, 0, &bytesNeededPrereleaseInfo, nullptr)); + std::vector bufferPrereleaseInfo(bytesNeededPrereleaseInfo); + CheckError(nullptr,m_WrapperTable.m_GetPrereleaseInformation(&resultHasPrereleaseInfo, bytesNeededPrereleaseInfo, &bytesWrittenPrereleaseInfo, &bufferPrereleaseInfo[0])); + sPrereleaseInfo = std::string(&bufferPrereleaseInfo[0]); + + return resultHasPrereleaseInfo; + } + + /** + * CWrapper::GetBuildInformation - retrieves build information of this library. + * @return Does the library provide build version? + * @param[out] sBuildInformation - retrieves build information of this library. + */ + inline bool CWrapper::GetBuildInformation(std::string & sBuildInformation) + { + bool resultHasBuildInfo = 0; + Lib3MF_uint32 bytesNeededBuildInformation = 0; + Lib3MF_uint32 bytesWrittenBuildInformation = 0; + CheckError(nullptr,m_WrapperTable.m_GetBuildInformation(&resultHasBuildInfo, 0, &bytesNeededBuildInformation, nullptr)); + std::vector bufferBuildInformation(bytesNeededBuildInformation); + CheckError(nullptr,m_WrapperTable.m_GetBuildInformation(&resultHasBuildInfo, bytesNeededBuildInformation, &bytesWrittenBuildInformation, &bufferBuildInformation[0])); + sBuildInformation = std::string(&bufferBuildInformation[0]); + + return resultHasBuildInfo; + } + + /** + * CWrapper::GetSpecificationVersion - retrieves whether a specification is supported, and if so, which version. + * @param[in] sSpecificationURL - URL of extension to check + * @param[out] bIsSupported - returns whether this specification is supported + * @param[out] nMajor - returns the major version of the extension (if IsSupported) + * @param[out] nMinor - returns the minor version of the extension (if IsSupported) + * @param[out] nMicro - returns the micro version of the extension (if IsSupported) + */ + inline void CWrapper::GetSpecificationVersion(const std::string & sSpecificationURL, bool & bIsSupported, Lib3MF_uint32 & nMajor, Lib3MF_uint32 & nMinor, Lib3MF_uint32 & nMicro) + { + CheckError(nullptr,m_WrapperTable.m_GetSpecificationVersion(sSpecificationURL.c_str(), &bIsSupported, &nMajor, &nMinor, &nMicro)); + } + + /** + * CWrapper::CreateModel - creates an empty model instance. + * @return returns an empty model instance + */ + inline PModel CWrapper::CreateModel() + { + Lib3MFHandle hModel = nullptr; + CheckError(nullptr,m_WrapperTable.m_CreateModel(&hModel)); + + if (!hModel) { + CheckError(nullptr,LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(this->polymorphicFactory(hModel))); + } + + /** + * CWrapper::Release - releases shared ownership of an object instance + * @param[in] pInstance - the object instance to release + */ + inline void CWrapper::Release(classParam pInstance) + { + Lib3MFHandle hInstance = pInstance.GetHandle(); + CheckError(nullptr,m_WrapperTable.m_Release(hInstance)); + } + + /** + * CWrapper::Acquire - acquires shared ownership of an object instance + * @param[in] pInstance - the object instance to acquire + */ + inline void CWrapper::Acquire(classParam pInstance) + { + Lib3MFHandle hInstance = pInstance.GetHandle(); + CheckError(nullptr,m_WrapperTable.m_Acquire(hInstance)); + } + + /** + * CWrapper::SetJournal - Sets the journal file path + * @param[in] sJournalPath - File name of the journal file + */ + inline void CWrapper::SetJournal(const std::string & sJournalPath) + { + CheckError(nullptr,m_WrapperTable.m_SetJournal(sJournalPath.c_str())); + } + + /** + * CWrapper::GetLastError - Retrieves the last error string of an instance + * @param[in] pInstance - Object where the error occured. + * @param[out] sLastErrorString - Last Error String + * @return Returns if the instance has a last error. + */ + inline bool CWrapper::GetLastError(classParam pInstance, std::string & sLastErrorString) + { + Lib3MFHandle hInstance = pInstance.GetHandle(); + Lib3MF_uint32 bytesNeededLastErrorString = 0; + Lib3MF_uint32 bytesWrittenLastErrorString = 0; + bool resultHasLastError = 0; + CheckError(nullptr,m_WrapperTable.m_GetLastError(hInstance, 0, &bytesNeededLastErrorString, nullptr, &resultHasLastError)); + std::vector bufferLastErrorString(bytesNeededLastErrorString); + CheckError(nullptr,m_WrapperTable.m_GetLastError(hInstance, bytesNeededLastErrorString, &bytesWrittenLastErrorString, &bufferLastErrorString[0], &resultHasLastError)); + sLastErrorString = std::string(&bufferLastErrorString[0]); + + return resultHasLastError; + } + + /** + * CWrapper::GetSymbolLookupMethod - Returns the address of the SymbolLookupMethod + * @return Address of the SymbolAddressMethod + */ + inline Lib3MF_pvoid CWrapper::GetSymbolLookupMethod() + { + Lib3MF_pvoid resultSymbolLookupMethod = 0; + CheckError(nullptr,m_WrapperTable.m_GetSymbolLookupMethod(&resultSymbolLookupMethod)); + + return resultSymbolLookupMethod; + } + + /** + * CWrapper::RetrieveProgressMessage - Return an English text for a progress identifier.|Note: this is the only function you can call from your callback function. + * @param[in] eTheProgressIdentifier - the progress identifier that is passed to the callback function + * @param[out] sProgressMessage - English text for the progress identifier + */ + inline void CWrapper::RetrieveProgressMessage(const eProgressIdentifier eTheProgressIdentifier, std::string & sProgressMessage) + { + Lib3MF_uint32 bytesNeededProgressMessage = 0; + Lib3MF_uint32 bytesWrittenProgressMessage = 0; + CheckError(nullptr,m_WrapperTable.m_RetrieveProgressMessage(eTheProgressIdentifier, 0, &bytesNeededProgressMessage, nullptr)); + std::vector bufferProgressMessage(bytesNeededProgressMessage); + CheckError(nullptr,m_WrapperTable.m_RetrieveProgressMessage(eTheProgressIdentifier, bytesNeededProgressMessage, &bytesWrittenProgressMessage, &bufferProgressMessage[0])); + sProgressMessage = std::string(&bufferProgressMessage[0]); + } + + /** + * CWrapper::RGBAToColor - Creates a Color from uint8 RGBA values + * @param[in] nRed - Red value of color (0-255) + * @param[in] nGreen - Green value of color (0-255) + * @param[in] nBlue - Blue value of color (0-255) + * @param[in] nAlpha - Alpha value of color (0-255) + * @return Assembled color + */ + inline sColor CWrapper::RGBAToColor(const Lib3MF_uint8 nRed, const Lib3MF_uint8 nGreen, const Lib3MF_uint8 nBlue, const Lib3MF_uint8 nAlpha) + { + sColor resultTheColor; + CheckError(nullptr,m_WrapperTable.m_RGBAToColor(nRed, nGreen, nBlue, nAlpha, &resultTheColor)); + + return resultTheColor; + } + + /** + * CWrapper::FloatRGBAToColor - Creates a Color from uint8 RGBA values + * @param[in] fRed - Red value of color (0-1) + * @param[in] fGreen - Green value of color (0-1) + * @param[in] fBlue - Blue value of color (0-1) + * @param[in] fAlpha - Alpha value of color (0-1) + * @return Assembled color + */ + inline sColor CWrapper::FloatRGBAToColor(const Lib3MF_single fRed, const Lib3MF_single fGreen, const Lib3MF_single fBlue, const Lib3MF_single fAlpha) + { + sColor resultTheColor; + CheckError(nullptr,m_WrapperTable.m_FloatRGBAToColor(fRed, fGreen, fBlue, fAlpha, &resultTheColor)); + + return resultTheColor; + } + + /** + * CWrapper::ColorToRGBA - Calculates uint8-RGBA-values from a Color + * @param[in] TheColor - Color to handle + * @param[out] nRed - Red value of color (0-255) + * @param[out] nGreen - Green value of color (0-255) + * @param[out] nBlue - Blue value of color (0-255) + * @param[out] nAlpha - Alpha value of color (0-255) + */ + inline void CWrapper::ColorToRGBA(const sColor & TheColor, Lib3MF_uint8 & nRed, Lib3MF_uint8 & nGreen, Lib3MF_uint8 & nBlue, Lib3MF_uint8 & nAlpha) + { + CheckError(nullptr,m_WrapperTable.m_ColorToRGBA(&TheColor, &nRed, &nGreen, &nBlue, &nAlpha)); + } + + /** + * CWrapper::ColorToFloatRGBA - Calculates float-RGBA-values from a Color + * @param[in] TheColor - Color to handle + * @param[out] fRed - Red value of color (0-1) + * @param[out] fGreen - Green value of color (0-1) + * @param[out] fBlue - Blue value of color (0-1) + * @param[out] fAlpha - Alpha value of color (0-1) + */ + inline void CWrapper::ColorToFloatRGBA(const sColor & TheColor, Lib3MF_single & fRed, Lib3MF_single & fGreen, Lib3MF_single & fBlue, Lib3MF_single & fAlpha) + { + CheckError(nullptr,m_WrapperTable.m_ColorToFloatRGBA(&TheColor, &fRed, &fGreen, &fBlue, &fAlpha)); + } + + /** + * CWrapper::GetIdentityTransform - Creates an identity transform + * @return Transformation matrix. + */ + inline sTransform CWrapper::GetIdentityTransform() + { + sTransform resultTransform; + CheckError(nullptr,m_WrapperTable.m_GetIdentityTransform(&resultTransform)); + + return resultTransform; + } + + /** + * CWrapper::GetUniformScaleTransform - Creates a uniform scale transform + * @param[in] fFactor - Factor in X, Y and Z + * @return Transformation matrix. + */ + inline sTransform CWrapper::GetUniformScaleTransform(const Lib3MF_single fFactor) + { + sTransform resultTransform; + CheckError(nullptr,m_WrapperTable.m_GetUniformScaleTransform(fFactor, &resultTransform)); + + return resultTransform; + } + + /** + * CWrapper::GetScaleTransform - Creates a scale transform + * @param[in] fFactorX - Factor in X + * @param[in] fFactorY - Factor in Y + * @param[in] fFactorZ - Factor in Z + * @return Transformation matrix. + */ + inline sTransform CWrapper::GetScaleTransform(const Lib3MF_single fFactorX, const Lib3MF_single fFactorY, const Lib3MF_single fFactorZ) + { + sTransform resultTransform; + CheckError(nullptr,m_WrapperTable.m_GetScaleTransform(fFactorX, fFactorY, fFactorZ, &resultTransform)); + + return resultTransform; + } + + /** + * CWrapper::GetTranslationTransform - Creates an translation transform + * @param[in] fVectorX - Translation in X + * @param[in] fVectorY - Translation in Y + * @param[in] fVectorZ - Translation in Z + * @return Transformation matrix. + */ + inline sTransform CWrapper::GetTranslationTransform(const Lib3MF_single fVectorX, const Lib3MF_single fVectorY, const Lib3MF_single fVectorZ) + { + sTransform resultTransform; + CheckError(nullptr,m_WrapperTable.m_GetTranslationTransform(fVectorX, fVectorY, fVectorZ, &resultTransform)); + + return resultTransform; + } + + inline void CWrapper::CheckError(CBase * pBaseClass, Lib3MFResult nResult) + { + if (nResult != 0) { + std::string sErrorMessage; + if (pBaseClass != nullptr) { + GetLastError(pBaseClass, sErrorMessage); + } + throw ELib3MFException(nResult, sErrorMessage); + } + } + + + inline Lib3MFResult CWrapper::initWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) + { + if (pWrapperTable == nullptr) + return LIB3MF_ERROR_INVALIDPARAM; + + pWrapperTable->m_LibraryHandle = nullptr; + pWrapperTable->m_Base_ClassTypeId = nullptr; + pWrapperTable->m_Writer_WriteToFile = nullptr; + pWrapperTable->m_Writer_GetStreamSize = nullptr; + pWrapperTable->m_Writer_WriteToBuffer = nullptr; + pWrapperTable->m_Writer_WriteToCallback = nullptr; + pWrapperTable->m_Writer_SetProgressCallback = nullptr; + pWrapperTable->m_Writer_GetDecimalPrecision = nullptr; + pWrapperTable->m_Writer_SetDecimalPrecision = nullptr; + pWrapperTable->m_Writer_SetStrictModeActive = nullptr; + pWrapperTable->m_Writer_GetStrictModeActive = nullptr; + pWrapperTable->m_Writer_GetWarning = nullptr; + pWrapperTable->m_Writer_GetWarningCount = nullptr; + pWrapperTable->m_Writer_AddKeyWrappingCallback = nullptr; + pWrapperTable->m_Writer_SetContentEncryptionCallback = nullptr; + pWrapperTable->m_Reader_ReadFromFile = nullptr; + pWrapperTable->m_Reader_ReadFromBuffer = nullptr; + pWrapperTable->m_Reader_ReadFromCallback = nullptr; + pWrapperTable->m_Reader_SetProgressCallback = nullptr; + pWrapperTable->m_Reader_AddRelationToRead = nullptr; + pWrapperTable->m_Reader_RemoveRelationToRead = nullptr; + pWrapperTable->m_Reader_SetStrictModeActive = nullptr; + pWrapperTable->m_Reader_GetStrictModeActive = nullptr; + pWrapperTable->m_Reader_GetWarning = nullptr; + pWrapperTable->m_Reader_GetWarningCount = nullptr; + pWrapperTable->m_Reader_AddKeyWrappingCallback = nullptr; + pWrapperTable->m_Reader_SetContentEncryptionCallback = nullptr; + pWrapperTable->m_PackagePart_GetPath = nullptr; + pWrapperTable->m_PackagePart_SetPath = nullptr; + pWrapperTable->m_Resource_GetResourceID = nullptr; + pWrapperTable->m_Resource_GetUniqueResourceID = nullptr; + pWrapperTable->m_Resource_PackagePart = nullptr; + pWrapperTable->m_Resource_SetPackagePart = nullptr; + pWrapperTable->m_Resource_GetModelResourceID = nullptr; + pWrapperTable->m_ResourceIterator_MoveNext = nullptr; + pWrapperTable->m_ResourceIterator_MovePrevious = nullptr; + pWrapperTable->m_ResourceIterator_GetCurrent = nullptr; + pWrapperTable->m_ResourceIterator_Clone = nullptr; + pWrapperTable->m_ResourceIterator_Count = nullptr; + pWrapperTable->m_SliceStackIterator_GetCurrentSliceStack = nullptr; + pWrapperTable->m_ObjectIterator_GetCurrentObject = nullptr; + pWrapperTable->m_MeshObjectIterator_GetCurrentMeshObject = nullptr; + pWrapperTable->m_ComponentsObjectIterator_GetCurrentComponentsObject = nullptr; + pWrapperTable->m_Texture2DIterator_GetCurrentTexture2D = nullptr; + pWrapperTable->m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup = nullptr; + pWrapperTable->m_ColorGroupIterator_GetCurrentColorGroup = nullptr; + pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup = nullptr; + pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials = nullptr; + pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup = nullptr; + pWrapperTable->m_Image3DIterator_GetCurrentImage3D = nullptr; + pWrapperTable->m_FunctionIterator_GetCurrentFunction = nullptr; + pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet = nullptr; + pWrapperTable->m_MetaData_GetNameSpace = nullptr; + pWrapperTable->m_MetaData_SetNameSpace = nullptr; + pWrapperTable->m_MetaData_GetName = nullptr; + pWrapperTable->m_MetaData_SetName = nullptr; + pWrapperTable->m_MetaData_GetKey = nullptr; + pWrapperTable->m_MetaData_GetMustPreserve = nullptr; + pWrapperTable->m_MetaData_SetMustPreserve = nullptr; + pWrapperTable->m_MetaData_GetType = nullptr; + pWrapperTable->m_MetaData_SetType = nullptr; + pWrapperTable->m_MetaData_GetValue = nullptr; + pWrapperTable->m_MetaData_SetValue = nullptr; + pWrapperTable->m_MetaDataGroup_GetMetaDataCount = nullptr; + pWrapperTable->m_MetaDataGroup_GetMetaData = nullptr; pWrapperTable->m_MetaDataGroup_GetMetaDataByKey = nullptr; pWrapperTable->m_MetaDataGroup_RemoveMetaDataByIndex = nullptr; pWrapperTable->m_MetaDataGroup_RemoveMetaData = nullptr; @@ -2060,6 +3922,7 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) pWrapperTable->m_Object_SetPartNumber = nullptr; pWrapperTable->m_Object_IsMeshObject = nullptr; pWrapperTable->m_Object_IsComponentsObject = nullptr; + pWrapperTable->m_Object_IsLevelSetObject = nullptr; pWrapperTable->m_Object_IsValid = nullptr; pWrapperTable->m_Object_SetAttachmentAsThumbnail = nullptr; pWrapperTable->m_Object_GetThumbnailAttachment = nullptr; @@ -2094,6 +3957,24 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) pWrapperTable->m_MeshObject_SetGeometry = nullptr; pWrapperTable->m_MeshObject_IsManifoldAndOriented = nullptr; pWrapperTable->m_MeshObject_BeamLattice = nullptr; + pWrapperTable->m_MeshObject_GetVolumeData = nullptr; + pWrapperTable->m_MeshObject_SetVolumeData = nullptr; + pWrapperTable->m_LevelSet_GetFunction = nullptr; + pWrapperTable->m_LevelSet_SetFunction = nullptr; + pWrapperTable->m_LevelSet_GetTransform = nullptr; + pWrapperTable->m_LevelSet_SetTransform = nullptr; + pWrapperTable->m_LevelSet_GetChannelName = nullptr; + pWrapperTable->m_LevelSet_SetChannelName = nullptr; + pWrapperTable->m_LevelSet_SetMinFeatureSize = nullptr; + pWrapperTable->m_LevelSet_GetMinFeatureSize = nullptr; + pWrapperTable->m_LevelSet_SetFallBackValue = nullptr; + pWrapperTable->m_LevelSet_GetFallBackValue = nullptr; + pWrapperTable->m_LevelSet_SetMeshBBoxOnly = nullptr; + pWrapperTable->m_LevelSet_GetMeshBBoxOnly = nullptr; + pWrapperTable->m_LevelSet_SetMesh = nullptr; + pWrapperTable->m_LevelSet_GetMesh = nullptr; + pWrapperTable->m_LevelSet_GetVolumeData = nullptr; + pWrapperTable->m_LevelSet_SetVolumeData = nullptr; pWrapperTable->m_BeamLattice_GetMinLength = nullptr; pWrapperTable->m_BeamLattice_SetMinLength = nullptr; pWrapperTable->m_BeamLattice_GetClipping = nullptr; @@ -2117,6 +3998,35 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) pWrapperTable->m_BeamLattice_GetBeamSetCount = nullptr; pWrapperTable->m_BeamLattice_AddBeamSet = nullptr; pWrapperTable->m_BeamLattice_GetBeamSet = nullptr; + pWrapperTable->m_FunctionReference_GetFunctionResourceID = nullptr; + pWrapperTable->m_FunctionReference_SetFunctionResourceID = nullptr; + pWrapperTable->m_FunctionReference_GetTransform = nullptr; + pWrapperTable->m_FunctionReference_SetTransform = nullptr; + pWrapperTable->m_FunctionReference_GetChannelName = nullptr; + pWrapperTable->m_FunctionReference_SetChannelName = nullptr; + pWrapperTable->m_FunctionReference_SetMinFeatureSize = nullptr; + pWrapperTable->m_FunctionReference_GetMinFeatureSize = nullptr; + pWrapperTable->m_FunctionReference_SetFallBackValue = nullptr; + pWrapperTable->m_FunctionReference_GetFallBackValue = nullptr; + pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup = nullptr; + pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup = nullptr; + pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount = nullptr; + pWrapperTable->m_VolumeDataComposite_GetMaterialMapping = nullptr; + pWrapperTable->m_VolumeDataComposite_AddMaterialMapping = nullptr; + pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping = nullptr; + pWrapperTable->m_VolumeDataProperty_GetName = nullptr; + pWrapperTable->m_VolumeDataProperty_SetIsRequired = nullptr; + pWrapperTable->m_VolumeDataProperty_IsRequired = nullptr; + pWrapperTable->m_VolumeData_GetComposite = nullptr; + pWrapperTable->m_VolumeData_CreateNewComposite = nullptr; + pWrapperTable->m_VolumeData_RemoveComposite = nullptr; + pWrapperTable->m_VolumeData_GetColor = nullptr; + pWrapperTable->m_VolumeData_CreateNewColor = nullptr; + pWrapperTable->m_VolumeData_RemoveColor = nullptr; + pWrapperTable->m_VolumeData_GetPropertyCount = nullptr; + pWrapperTable->m_VolumeData_GetProperty = nullptr; + pWrapperTable->m_VolumeData_AddPropertyFromFunction = nullptr; + pWrapperTable->m_VolumeData_RemoveProperty = nullptr; pWrapperTable->m_Component_GetObjectResource = nullptr; pWrapperTable->m_Component_GetObjectResourceID = nullptr; pWrapperTable->m_Component_GetUUID = nullptr; @@ -2173,6 +4083,19 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) pWrapperTable->m_MultiPropertyGroup_AddLayer = nullptr; pWrapperTable->m_MultiPropertyGroup_GetLayer = nullptr; pWrapperTable->m_MultiPropertyGroup_RemoveLayer = nullptr; + pWrapperTable->m_Image3D_GetName = nullptr; + pWrapperTable->m_Image3D_SetName = nullptr; + pWrapperTable->m_Image3D_IsImageStack = nullptr; + pWrapperTable->m_ImageStack_GetRowCount = nullptr; + pWrapperTable->m_ImageStack_SetRowCount = nullptr; + pWrapperTable->m_ImageStack_GetColumnCount = nullptr; + pWrapperTable->m_ImageStack_SetColumnCount = nullptr; + pWrapperTable->m_ImageStack_GetSheetCount = nullptr; + pWrapperTable->m_ImageStack_GetSheet = nullptr; + pWrapperTable->m_ImageStack_SetSheet = nullptr; + pWrapperTable->m_ImageStack_CreateEmptySheet = nullptr; + pWrapperTable->m_ImageStack_CreateSheetFromBuffer = nullptr; + pWrapperTable->m_ImageStack_CreateSheetFromFile = nullptr; pWrapperTable->m_Attachment_GetPath = nullptr; pWrapperTable->m_Attachment_SetPath = nullptr; pWrapperTable->m_Attachment_PackagePart = nullptr; @@ -2192,6 +4115,173 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) pWrapperTable->m_Texture2D_SetTileStyleUV = nullptr; pWrapperTable->m_Texture2D_GetFilter = nullptr; pWrapperTable->m_Texture2D_SetFilter = nullptr; + pWrapperTable->m_ImplicitPort_GetIdentifier = nullptr; + pWrapperTable->m_ImplicitPort_SetIdentifier = nullptr; + pWrapperTable->m_ImplicitPort_GetDisplayName = nullptr; + pWrapperTable->m_ImplicitPort_SetDisplayName = nullptr; + pWrapperTable->m_ImplicitPort_SetType = nullptr; + pWrapperTable->m_ImplicitPort_GetType = nullptr; + pWrapperTable->m_ImplicitPort_GetReference = nullptr; + pWrapperTable->m_ImplicitPort_SetReference = nullptr; + pWrapperTable->m_Iterator_MoveNext = nullptr; + pWrapperTable->m_Iterator_MovePrevious = nullptr; + pWrapperTable->m_Iterator_Count = nullptr; + pWrapperTable->m_ImplicitPortIterator_GetCurrent = nullptr; + pWrapperTable->m_ImplicitNode_GetIdentifier = nullptr; + pWrapperTable->m_ImplicitNode_SetIdentifier = nullptr; + pWrapperTable->m_ImplicitNode_GetDisplayName = nullptr; + pWrapperTable->m_ImplicitNode_SetDisplayName = nullptr; + pWrapperTable->m_ImplicitNode_GetTag = nullptr; + pWrapperTable->m_ImplicitNode_SetTag = nullptr; + pWrapperTable->m_ImplicitNode_GetNodeType = nullptr; + pWrapperTable->m_ImplicitNode_AddInput = nullptr; + pWrapperTable->m_ImplicitNode_GetInputs = nullptr; + pWrapperTable->m_ImplicitNode_AddOutput = nullptr; + pWrapperTable->m_ImplicitNode_GetOutputs = nullptr; + pWrapperTable->m_ImplicitNode_FindInput = nullptr; + pWrapperTable->m_ImplicitNode_FindOutput = nullptr; + pWrapperTable->m_ImplicitNode_AreTypesValid = nullptr; + pWrapperTable->m_OneInputNode_GetInputA = nullptr; + pWrapperTable->m_OneInputNode_GetOutputResult = nullptr; + pWrapperTable->m_ResourceIdNode_SetResource = nullptr; + pWrapperTable->m_ResourceIdNode_GetResource = nullptr; + pWrapperTable->m_ResourceIdNode_GetOutputValue = nullptr; + pWrapperTable->m_TwoInputNode_GetInputB = nullptr; + pWrapperTable->m_SelectNode_GetInputB = nullptr; + pWrapperTable->m_SelectNode_GetInputC = nullptr; + pWrapperTable->m_SelectNode_GetInputD = nullptr; + pWrapperTable->m_ClampNode_GetInputMin = nullptr; + pWrapperTable->m_ClampNode_GetInputMax = nullptr; + pWrapperTable->m_ComposeVectorNode_GetInputX = nullptr; + pWrapperTable->m_ComposeVectorNode_GetInputY = nullptr; + pWrapperTable->m_ComposeVectorNode_GetInputZ = nullptr; + pWrapperTable->m_ComposeVectorNode_GetOutputResult = nullptr; + pWrapperTable->m_DecomposeVectorNode_GetInputA = nullptr; + pWrapperTable->m_DecomposeVectorNode_GetOutputX = nullptr; + pWrapperTable->m_DecomposeVectorNode_GetOutputY = nullptr; + pWrapperTable->m_DecomposeVectorNode_GetOutputZ = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM00 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM01 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM02 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM03 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM10 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM11 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM12 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM13 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM20 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM21 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM22 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM23 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM30 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM31 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM32 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetInputM33 = nullptr; + pWrapperTable->m_ComposeMatrixNode_GetOutputResult = nullptr; + pWrapperTable->m_MatrixFromRowsNode_GetInputA = nullptr; + pWrapperTable->m_MatrixFromRowsNode_GetInputB = nullptr; + pWrapperTable->m_MatrixFromRowsNode_GetInputC = nullptr; + pWrapperTable->m_MatrixFromRowsNode_GetInputD = nullptr; + pWrapperTable->m_MatrixFromRowsNode_GetOutputResult = nullptr; + pWrapperTable->m_MatrixFromColumnsNode_GetInputA = nullptr; + pWrapperTable->m_MatrixFromColumnsNode_GetInputB = nullptr; + pWrapperTable->m_MatrixFromColumnsNode_GetInputC = nullptr; + pWrapperTable->m_MatrixFromColumnsNode_GetInputD = nullptr; + pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult = nullptr; + pWrapperTable->m_ConstantNode_SetConstant = nullptr; + pWrapperTable->m_ConstantNode_GetConstant = nullptr; + pWrapperTable->m_ConstantNode_GetOutputValue = nullptr; + pWrapperTable->m_ConstVecNode_SetVector = nullptr; + pWrapperTable->m_ConstVecNode_GetVector = nullptr; + pWrapperTable->m_ConstVecNode_GetOutputVector = nullptr; + pWrapperTable->m_ConstMatNode_SetMatrix = nullptr; + pWrapperTable->m_ConstMatNode_GetMatrix = nullptr; + pWrapperTable->m_ConstMatNode_GetOutputMatrix = nullptr; + pWrapperTable->m_MeshNode_GetInputMesh = nullptr; + pWrapperTable->m_MeshNode_GetInputPos = nullptr; + pWrapperTable->m_MeshNode_GetOutputDistance = nullptr; + pWrapperTable->m_UnsignedMeshNode_GetInputMesh = nullptr; + pWrapperTable->m_UnsignedMeshNode_GetInputPos = nullptr; + pWrapperTable->m_UnsignedMeshNode_GetOutputDistance = nullptr; + pWrapperTable->m_FunctionCallNode_GetInputFunctionID = nullptr; + pWrapperTable->m_NodeIterator_GetCurrent = nullptr; + pWrapperTable->m_Function_GetDisplayName = nullptr; + pWrapperTable->m_Function_SetDisplayName = nullptr; + pWrapperTable->m_Function_AddInput = nullptr; + pWrapperTable->m_Function_GetInputs = nullptr; + pWrapperTable->m_Function_RemoveInput = nullptr; + pWrapperTable->m_Function_AddOutput = nullptr; + pWrapperTable->m_Function_GetOutputs = nullptr; + pWrapperTable->m_Function_RemoveOutput = nullptr; + pWrapperTable->m_Function_FindInput = nullptr; + pWrapperTable->m_Function_FindOutput = nullptr; + pWrapperTable->m_ImplicitFunction_GetIdentifier = nullptr; + pWrapperTable->m_ImplicitFunction_SetIdentifier = nullptr; + pWrapperTable->m_ImplicitFunction_AddNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddSinNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddCosNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddTanNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddArcSinNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddArcCosNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddArcTan2Node = nullptr; + pWrapperTable->m_ImplicitFunction_AddSinhNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddCoshNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddTanhNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddRoundNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddCeilNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddFloorNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddSignNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddFractNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddAbsNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddExpNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddLogNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddLog2Node = nullptr; + pWrapperTable->m_ImplicitFunction_AddLog10Node = nullptr; + pWrapperTable->m_ImplicitFunction_AddLengthNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddTransposeNode = nullptr; + pWrapperTable->m_ImplicitFunction_InverseNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddSqrtNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddResourceIdNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddAdditionNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddSubtractionNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddMultiplicationNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddDivisionNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddDotNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddCrossNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddMinNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddMaxNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddFmodNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddPowNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddSelectNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddClampNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddComposeVectorNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddConstantNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddConstVecNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddConstMatNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddMeshNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddFunctionCallNode = nullptr; + pWrapperTable->m_ImplicitFunction_GetNodes = nullptr; + pWrapperTable->m_ImplicitFunction_RemoveNode = nullptr; + pWrapperTable->m_ImplicitFunction_AddLink = nullptr; + pWrapperTable->m_ImplicitFunction_AddLinkByNames = nullptr; + pWrapperTable->m_ImplicitFunction_Clear = nullptr; + pWrapperTable->m_ImplicitFunction_SortNodesTopologically = nullptr; + pWrapperTable->m_FunctionFromImage3D_GetImage3D = nullptr; + pWrapperTable->m_FunctionFromImage3D_SetImage3D = nullptr; + pWrapperTable->m_FunctionFromImage3D_SetFilter = nullptr; + pWrapperTable->m_FunctionFromImage3D_GetFilter = nullptr; + pWrapperTable->m_FunctionFromImage3D_SetTileStyles = nullptr; + pWrapperTable->m_FunctionFromImage3D_GetTileStyles = nullptr; + pWrapperTable->m_FunctionFromImage3D_GetOffset = nullptr; + pWrapperTable->m_FunctionFromImage3D_SetOffset = nullptr; + pWrapperTable->m_FunctionFromImage3D_GetScale = nullptr; + pWrapperTable->m_FunctionFromImage3D_SetScale = nullptr; pWrapperTable->m_BuildItem_GetObjectResource = nullptr; pWrapperTable->m_BuildItem_GetUUID = nullptr; pWrapperTable->m_BuildItem_SetUUID = nullptr; @@ -2286,6 +4376,7 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) pWrapperTable->m_Model_GetComponentsObjectByID = nullptr; pWrapperTable->m_Model_GetColorGroupByID = nullptr; pWrapperTable->m_Model_GetSliceStackByID = nullptr; + pWrapperTable->m_Model_GetLevelSetByID = nullptr; pWrapperTable->m_Model_GetBuildUUID = nullptr; pWrapperTable->m_Model_SetBuildUUID = nullptr; pWrapperTable->m_Model_GetBuildItems = nullptr; @@ -2301,7 +4392,9 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) pWrapperTable->m_Model_GetCompositeMaterials = nullptr; pWrapperTable->m_Model_GetMultiPropertyGroups = nullptr; pWrapperTable->m_Model_GetSliceStacks = nullptr; + pWrapperTable->m_Model_GetImage3Ds = nullptr; pWrapperTable->m_Model_MergeToModel = nullptr; + pWrapperTable->m_Model_MergeFromModel = nullptr; pWrapperTable->m_Model_AddMeshObject = nullptr; pWrapperTable->m_Model_AddComponentsObject = nullptr; pWrapperTable->m_Model_AddSliceStack = nullptr; @@ -2311,6 +4404,8 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) pWrapperTable->m_Model_AddTexture2DGroup = nullptr; pWrapperTable->m_Model_AddCompositeMaterials = nullptr; pWrapperTable->m_Model_AddMultiPropertyGroup = nullptr; + pWrapperTable->m_Model_AddImageStack = nullptr; + pWrapperTable->m_Model_GetImageStackByID = nullptr; pWrapperTable->m_Model_AddBuildItem = nullptr; pWrapperTable->m_Model_RemoveBuildItem = nullptr; pWrapperTable->m_Model_GetMetaDataGroup = nullptr; @@ -2327,6 +4422,13 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) pWrapperTable->m_Model_RemoveCustomContentType = nullptr; pWrapperTable->m_Model_SetRandomNumberCallback = nullptr; pWrapperTable->m_Model_GetKeyStore = nullptr; + pWrapperTable->m_Model_GetFunctions = nullptr; + pWrapperTable->m_Model_AddImplicitFunction = nullptr; + pWrapperTable->m_Model_AddFunctionFromImage3D = nullptr; + pWrapperTable->m_Model_AddVolumeData = nullptr; + pWrapperTable->m_Model_AddLevelSet = nullptr; + pWrapperTable->m_Model_GetLevelSets = nullptr; + pWrapperTable->m_Model_RemoveResource = nullptr; pWrapperTable->m_GetLibraryVersion = nullptr; pWrapperTable->m_GetPrereleaseInformation = nullptr; pWrapperTable->m_GetBuildInformation = nullptr; @@ -2347,5107 +4449,11143 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) pWrapperTable->m_GetScaleTransform = nullptr; pWrapperTable->m_GetTranslationTransform = nullptr; - return LIB3MF_SUCCESS; - } - - inline Lib3MFResult CWrapper::releaseWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) - { - if (pWrapperTable == nullptr) - return LIB3MF_ERROR_INVALIDPARAM; + return LIB3MF_SUCCESS; + } + + inline Lib3MFResult CWrapper::releaseWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) + { + if (pWrapperTable == nullptr) + return LIB3MF_ERROR_INVALIDPARAM; + + if (pWrapperTable->m_LibraryHandle != nullptr) { + #ifdef _WIN32 + HMODULE hModule = (HMODULE) pWrapperTable->m_LibraryHandle; + FreeLibrary(hModule); + #else // _WIN32 + dlclose(pWrapperTable->m_LibraryHandle); + #endif // _WIN32 + return initWrapperTable(pWrapperTable); + } + + return LIB3MF_SUCCESS; + } + + inline Lib3MFResult CWrapper::loadWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, const char * pLibraryFileName) + { + if (pWrapperTable == nullptr) + return LIB3MF_ERROR_INVALIDPARAM; + if (pLibraryFileName == nullptr) + return LIB3MF_ERROR_INVALIDPARAM; + + #ifdef _WIN32 + // Convert filename to UTF16-string + int nLength = 0; + while ((pLibraryFileName[nLength] != 0) && (nLength < MAX_PATH)) + nLength++; + int nBufferSize = nLength * 2 + 2; + std::vector wsLibraryFileName(nBufferSize); + int nResult = MultiByteToWideChar(CP_UTF8, 0, pLibraryFileName, nLength, &wsLibraryFileName[0], nBufferSize); + if (nResult == 0) + return LIB3MF_ERROR_COULDNOTLOADLIBRARY; + + HMODULE hLibrary = LoadLibraryW(wsLibraryFileName.data()); + if (hLibrary == 0) + return LIB3MF_ERROR_COULDNOTLOADLIBRARY; + #else // _WIN32 + void* hLibrary = dlopen(pLibraryFileName, RTLD_LAZY); + if (hLibrary == 0) + return LIB3MF_ERROR_COULDNOTLOADLIBRARY; + dlerror(); + #endif // _WIN32 + + #ifdef _WIN32 + pWrapperTable->m_Base_ClassTypeId = (PLib3MFBase_ClassTypeIdPtr) GetProcAddress(hLibrary, "lib3mf_base_classtypeid"); + #else // _WIN32 + pWrapperTable->m_Base_ClassTypeId = (PLib3MFBase_ClassTypeIdPtr) dlsym(hLibrary, "lib3mf_base_classtypeid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Base_ClassTypeId == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Writer_WriteToFile = (PLib3MFWriter_WriteToFilePtr) GetProcAddress(hLibrary, "lib3mf_writer_writetofile"); + #else // _WIN32 + pWrapperTable->m_Writer_WriteToFile = (PLib3MFWriter_WriteToFilePtr) dlsym(hLibrary, "lib3mf_writer_writetofile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Writer_WriteToFile == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Writer_GetStreamSize = (PLib3MFWriter_GetStreamSizePtr) GetProcAddress(hLibrary, "lib3mf_writer_getstreamsize"); + #else // _WIN32 + pWrapperTable->m_Writer_GetStreamSize = (PLib3MFWriter_GetStreamSizePtr) dlsym(hLibrary, "lib3mf_writer_getstreamsize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Writer_GetStreamSize == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Writer_WriteToBuffer = (PLib3MFWriter_WriteToBufferPtr) GetProcAddress(hLibrary, "lib3mf_writer_writetobuffer"); + #else // _WIN32 + pWrapperTable->m_Writer_WriteToBuffer = (PLib3MFWriter_WriteToBufferPtr) dlsym(hLibrary, "lib3mf_writer_writetobuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Writer_WriteToBuffer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Writer_WriteToCallback = (PLib3MFWriter_WriteToCallbackPtr) GetProcAddress(hLibrary, "lib3mf_writer_writetocallback"); + #else // _WIN32 + pWrapperTable->m_Writer_WriteToCallback = (PLib3MFWriter_WriteToCallbackPtr) dlsym(hLibrary, "lib3mf_writer_writetocallback"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Writer_WriteToCallback == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Writer_SetProgressCallback = (PLib3MFWriter_SetProgressCallbackPtr) GetProcAddress(hLibrary, "lib3mf_writer_setprogresscallback"); + #else // _WIN32 + pWrapperTable->m_Writer_SetProgressCallback = (PLib3MFWriter_SetProgressCallbackPtr) dlsym(hLibrary, "lib3mf_writer_setprogresscallback"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Writer_SetProgressCallback == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Writer_GetDecimalPrecision = (PLib3MFWriter_GetDecimalPrecisionPtr) GetProcAddress(hLibrary, "lib3mf_writer_getdecimalprecision"); + #else // _WIN32 + pWrapperTable->m_Writer_GetDecimalPrecision = (PLib3MFWriter_GetDecimalPrecisionPtr) dlsym(hLibrary, "lib3mf_writer_getdecimalprecision"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Writer_GetDecimalPrecision == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Writer_SetDecimalPrecision = (PLib3MFWriter_SetDecimalPrecisionPtr) GetProcAddress(hLibrary, "lib3mf_writer_setdecimalprecision"); + #else // _WIN32 + pWrapperTable->m_Writer_SetDecimalPrecision = (PLib3MFWriter_SetDecimalPrecisionPtr) dlsym(hLibrary, "lib3mf_writer_setdecimalprecision"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Writer_SetDecimalPrecision == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Writer_SetStrictModeActive = (PLib3MFWriter_SetStrictModeActivePtr) GetProcAddress(hLibrary, "lib3mf_writer_setstrictmodeactive"); + #else // _WIN32 + pWrapperTable->m_Writer_SetStrictModeActive = (PLib3MFWriter_SetStrictModeActivePtr) dlsym(hLibrary, "lib3mf_writer_setstrictmodeactive"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Writer_SetStrictModeActive == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Writer_GetStrictModeActive = (PLib3MFWriter_GetStrictModeActivePtr) GetProcAddress(hLibrary, "lib3mf_writer_getstrictmodeactive"); + #else // _WIN32 + pWrapperTable->m_Writer_GetStrictModeActive = (PLib3MFWriter_GetStrictModeActivePtr) dlsym(hLibrary, "lib3mf_writer_getstrictmodeactive"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Writer_GetStrictModeActive == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Writer_GetWarning = (PLib3MFWriter_GetWarningPtr) GetProcAddress(hLibrary, "lib3mf_writer_getwarning"); + #else // _WIN32 + pWrapperTable->m_Writer_GetWarning = (PLib3MFWriter_GetWarningPtr) dlsym(hLibrary, "lib3mf_writer_getwarning"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Writer_GetWarning == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Writer_GetWarningCount = (PLib3MFWriter_GetWarningCountPtr) GetProcAddress(hLibrary, "lib3mf_writer_getwarningcount"); + #else // _WIN32 + pWrapperTable->m_Writer_GetWarningCount = (PLib3MFWriter_GetWarningCountPtr) dlsym(hLibrary, "lib3mf_writer_getwarningcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Writer_GetWarningCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Writer_AddKeyWrappingCallback = (PLib3MFWriter_AddKeyWrappingCallbackPtr) GetProcAddress(hLibrary, "lib3mf_writer_addkeywrappingcallback"); + #else // _WIN32 + pWrapperTable->m_Writer_AddKeyWrappingCallback = (PLib3MFWriter_AddKeyWrappingCallbackPtr) dlsym(hLibrary, "lib3mf_writer_addkeywrappingcallback"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Writer_AddKeyWrappingCallback == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Writer_SetContentEncryptionCallback = (PLib3MFWriter_SetContentEncryptionCallbackPtr) GetProcAddress(hLibrary, "lib3mf_writer_setcontentencryptioncallback"); + #else // _WIN32 + pWrapperTable->m_Writer_SetContentEncryptionCallback = (PLib3MFWriter_SetContentEncryptionCallbackPtr) dlsym(hLibrary, "lib3mf_writer_setcontentencryptioncallback"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Writer_SetContentEncryptionCallback == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Reader_ReadFromFile = (PLib3MFReader_ReadFromFilePtr) GetProcAddress(hLibrary, "lib3mf_reader_readfromfile"); + #else // _WIN32 + pWrapperTable->m_Reader_ReadFromFile = (PLib3MFReader_ReadFromFilePtr) dlsym(hLibrary, "lib3mf_reader_readfromfile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Reader_ReadFromFile == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Reader_ReadFromBuffer = (PLib3MFReader_ReadFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_reader_readfrombuffer"); + #else // _WIN32 + pWrapperTable->m_Reader_ReadFromBuffer = (PLib3MFReader_ReadFromBufferPtr) dlsym(hLibrary, "lib3mf_reader_readfrombuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Reader_ReadFromBuffer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Reader_ReadFromCallback = (PLib3MFReader_ReadFromCallbackPtr) GetProcAddress(hLibrary, "lib3mf_reader_readfromcallback"); + #else // _WIN32 + pWrapperTable->m_Reader_ReadFromCallback = (PLib3MFReader_ReadFromCallbackPtr) dlsym(hLibrary, "lib3mf_reader_readfromcallback"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Reader_ReadFromCallback == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Reader_SetProgressCallback = (PLib3MFReader_SetProgressCallbackPtr) GetProcAddress(hLibrary, "lib3mf_reader_setprogresscallback"); + #else // _WIN32 + pWrapperTable->m_Reader_SetProgressCallback = (PLib3MFReader_SetProgressCallbackPtr) dlsym(hLibrary, "lib3mf_reader_setprogresscallback"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Reader_SetProgressCallback == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Reader_AddRelationToRead = (PLib3MFReader_AddRelationToReadPtr) GetProcAddress(hLibrary, "lib3mf_reader_addrelationtoread"); + #else // _WIN32 + pWrapperTable->m_Reader_AddRelationToRead = (PLib3MFReader_AddRelationToReadPtr) dlsym(hLibrary, "lib3mf_reader_addrelationtoread"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Reader_AddRelationToRead == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Reader_RemoveRelationToRead = (PLib3MFReader_RemoveRelationToReadPtr) GetProcAddress(hLibrary, "lib3mf_reader_removerelationtoread"); + #else // _WIN32 + pWrapperTable->m_Reader_RemoveRelationToRead = (PLib3MFReader_RemoveRelationToReadPtr) dlsym(hLibrary, "lib3mf_reader_removerelationtoread"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Reader_RemoveRelationToRead == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Reader_SetStrictModeActive = (PLib3MFReader_SetStrictModeActivePtr) GetProcAddress(hLibrary, "lib3mf_reader_setstrictmodeactive"); + #else // _WIN32 + pWrapperTable->m_Reader_SetStrictModeActive = (PLib3MFReader_SetStrictModeActivePtr) dlsym(hLibrary, "lib3mf_reader_setstrictmodeactive"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Reader_SetStrictModeActive == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Reader_GetStrictModeActive = (PLib3MFReader_GetStrictModeActivePtr) GetProcAddress(hLibrary, "lib3mf_reader_getstrictmodeactive"); + #else // _WIN32 + pWrapperTable->m_Reader_GetStrictModeActive = (PLib3MFReader_GetStrictModeActivePtr) dlsym(hLibrary, "lib3mf_reader_getstrictmodeactive"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Reader_GetStrictModeActive == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Reader_GetWarning = (PLib3MFReader_GetWarningPtr) GetProcAddress(hLibrary, "lib3mf_reader_getwarning"); + #else // _WIN32 + pWrapperTable->m_Reader_GetWarning = (PLib3MFReader_GetWarningPtr) dlsym(hLibrary, "lib3mf_reader_getwarning"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Reader_GetWarning == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Reader_GetWarningCount = (PLib3MFReader_GetWarningCountPtr) GetProcAddress(hLibrary, "lib3mf_reader_getwarningcount"); + #else // _WIN32 + pWrapperTable->m_Reader_GetWarningCount = (PLib3MFReader_GetWarningCountPtr) dlsym(hLibrary, "lib3mf_reader_getwarningcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Reader_GetWarningCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Reader_AddKeyWrappingCallback = (PLib3MFReader_AddKeyWrappingCallbackPtr) GetProcAddress(hLibrary, "lib3mf_reader_addkeywrappingcallback"); + #else // _WIN32 + pWrapperTable->m_Reader_AddKeyWrappingCallback = (PLib3MFReader_AddKeyWrappingCallbackPtr) dlsym(hLibrary, "lib3mf_reader_addkeywrappingcallback"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Reader_AddKeyWrappingCallback == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Reader_SetContentEncryptionCallback = (PLib3MFReader_SetContentEncryptionCallbackPtr) GetProcAddress(hLibrary, "lib3mf_reader_setcontentencryptioncallback"); + #else // _WIN32 + pWrapperTable->m_Reader_SetContentEncryptionCallback = (PLib3MFReader_SetContentEncryptionCallbackPtr) dlsym(hLibrary, "lib3mf_reader_setcontentencryptioncallback"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Reader_SetContentEncryptionCallback == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_PackagePart_GetPath = (PLib3MFPackagePart_GetPathPtr) GetProcAddress(hLibrary, "lib3mf_packagepart_getpath"); + #else // _WIN32 + pWrapperTable->m_PackagePart_GetPath = (PLib3MFPackagePart_GetPathPtr) dlsym(hLibrary, "lib3mf_packagepart_getpath"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_PackagePart_GetPath == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_PackagePart_SetPath = (PLib3MFPackagePart_SetPathPtr) GetProcAddress(hLibrary, "lib3mf_packagepart_setpath"); + #else // _WIN32 + pWrapperTable->m_PackagePart_SetPath = (PLib3MFPackagePart_SetPathPtr) dlsym(hLibrary, "lib3mf_packagepart_setpath"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_PackagePart_SetPath == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Resource_GetResourceID = (PLib3MFResource_GetResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_resource_getresourceid"); + #else // _WIN32 + pWrapperTable->m_Resource_GetResourceID = (PLib3MFResource_GetResourceIDPtr) dlsym(hLibrary, "lib3mf_resource_getresourceid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Resource_GetResourceID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Resource_GetUniqueResourceID = (PLib3MFResource_GetUniqueResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_resource_getuniqueresourceid"); + #else // _WIN32 + pWrapperTable->m_Resource_GetUniqueResourceID = (PLib3MFResource_GetUniqueResourceIDPtr) dlsym(hLibrary, "lib3mf_resource_getuniqueresourceid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Resource_GetUniqueResourceID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Resource_PackagePart = (PLib3MFResource_PackagePartPtr) GetProcAddress(hLibrary, "lib3mf_resource_packagepart"); + #else // _WIN32 + pWrapperTable->m_Resource_PackagePart = (PLib3MFResource_PackagePartPtr) dlsym(hLibrary, "lib3mf_resource_packagepart"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Resource_PackagePart == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Resource_SetPackagePart = (PLib3MFResource_SetPackagePartPtr) GetProcAddress(hLibrary, "lib3mf_resource_setpackagepart"); + #else // _WIN32 + pWrapperTable->m_Resource_SetPackagePart = (PLib3MFResource_SetPackagePartPtr) dlsym(hLibrary, "lib3mf_resource_setpackagepart"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Resource_SetPackagePart == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Resource_GetModelResourceID = (PLib3MFResource_GetModelResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_resource_getmodelresourceid"); + #else // _WIN32 + pWrapperTable->m_Resource_GetModelResourceID = (PLib3MFResource_GetModelResourceIDPtr) dlsym(hLibrary, "lib3mf_resource_getmodelresourceid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Resource_GetModelResourceID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIterator_MoveNext = (PLib3MFResourceIterator_MoveNextPtr) GetProcAddress(hLibrary, "lib3mf_resourceiterator_movenext"); + #else // _WIN32 + pWrapperTable->m_ResourceIterator_MoveNext = (PLib3MFResourceIterator_MoveNextPtr) dlsym(hLibrary, "lib3mf_resourceiterator_movenext"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIterator_MoveNext == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIterator_MovePrevious = (PLib3MFResourceIterator_MovePreviousPtr) GetProcAddress(hLibrary, "lib3mf_resourceiterator_moveprevious"); + #else // _WIN32 + pWrapperTable->m_ResourceIterator_MovePrevious = (PLib3MFResourceIterator_MovePreviousPtr) dlsym(hLibrary, "lib3mf_resourceiterator_moveprevious"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIterator_MovePrevious == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIterator_GetCurrent = (PLib3MFResourceIterator_GetCurrentPtr) GetProcAddress(hLibrary, "lib3mf_resourceiterator_getcurrent"); + #else // _WIN32 + pWrapperTable->m_ResourceIterator_GetCurrent = (PLib3MFResourceIterator_GetCurrentPtr) dlsym(hLibrary, "lib3mf_resourceiterator_getcurrent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIterator_GetCurrent == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIterator_Clone = (PLib3MFResourceIterator_ClonePtr) GetProcAddress(hLibrary, "lib3mf_resourceiterator_clone"); + #else // _WIN32 + pWrapperTable->m_ResourceIterator_Clone = (PLib3MFResourceIterator_ClonePtr) dlsym(hLibrary, "lib3mf_resourceiterator_clone"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIterator_Clone == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIterator_Count = (PLib3MFResourceIterator_CountPtr) GetProcAddress(hLibrary, "lib3mf_resourceiterator_count"); + #else // _WIN32 + pWrapperTable->m_ResourceIterator_Count = (PLib3MFResourceIterator_CountPtr) dlsym(hLibrary, "lib3mf_resourceiterator_count"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIterator_Count == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SliceStackIterator_GetCurrentSliceStack = (PLib3MFSliceStackIterator_GetCurrentSliceStackPtr) GetProcAddress(hLibrary, "lib3mf_slicestackiterator_getcurrentslicestack"); + #else // _WIN32 + pWrapperTable->m_SliceStackIterator_GetCurrentSliceStack = (PLib3MFSliceStackIterator_GetCurrentSliceStackPtr) dlsym(hLibrary, "lib3mf_slicestackiterator_getcurrentslicestack"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SliceStackIterator_GetCurrentSliceStack == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ObjectIterator_GetCurrentObject = (PLib3MFObjectIterator_GetCurrentObjectPtr) GetProcAddress(hLibrary, "lib3mf_objectiterator_getcurrentobject"); + #else // _WIN32 + pWrapperTable->m_ObjectIterator_GetCurrentObject = (PLib3MFObjectIterator_GetCurrentObjectPtr) dlsym(hLibrary, "lib3mf_objectiterator_getcurrentobject"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ObjectIterator_GetCurrentObject == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObjectIterator_GetCurrentMeshObject = (PLib3MFMeshObjectIterator_GetCurrentMeshObjectPtr) GetProcAddress(hLibrary, "lib3mf_meshobjectiterator_getcurrentmeshobject"); + #else // _WIN32 + pWrapperTable->m_MeshObjectIterator_GetCurrentMeshObject = (PLib3MFMeshObjectIterator_GetCurrentMeshObjectPtr) dlsym(hLibrary, "lib3mf_meshobjectiterator_getcurrentmeshobject"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObjectIterator_GetCurrentMeshObject == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComponentsObjectIterator_GetCurrentComponentsObject = (PLib3MFComponentsObjectIterator_GetCurrentComponentsObjectPtr) GetProcAddress(hLibrary, "lib3mf_componentsobjectiterator_getcurrentcomponentsobject"); + #else // _WIN32 + pWrapperTable->m_ComponentsObjectIterator_GetCurrentComponentsObject = (PLib3MFComponentsObjectIterator_GetCurrentComponentsObjectPtr) dlsym(hLibrary, "lib3mf_componentsobjectiterator_getcurrentcomponentsobject"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComponentsObjectIterator_GetCurrentComponentsObject == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DIterator_GetCurrentTexture2D = (PLib3MFTexture2DIterator_GetCurrentTexture2DPtr) GetProcAddress(hLibrary, "lib3mf_texture2diterator_getcurrenttexture2d"); + #else // _WIN32 + pWrapperTable->m_Texture2DIterator_GetCurrentTexture2D = (PLib3MFTexture2DIterator_GetCurrentTexture2DPtr) dlsym(hLibrary, "lib3mf_texture2diterator_getcurrenttexture2d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DIterator_GetCurrentTexture2D == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup = (PLib3MFBaseMaterialGroupIterator_GetCurrentBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup = (PLib3MFBaseMaterialGroupIterator_GetCurrentBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroupIterator_GetCurrentColorGroup = (PLib3MFColorGroupIterator_GetCurrentColorGroupPtr) GetProcAddress(hLibrary, "lib3mf_colorgroupiterator_getcurrentcolorgroup"); + #else // _WIN32 + pWrapperTable->m_ColorGroupIterator_GetCurrentColorGroup = (PLib3MFColorGroupIterator_GetCurrentColorGroupPtr) dlsym(hLibrary, "lib3mf_colorgroupiterator_getcurrentcolorgroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroupIterator_GetCurrentColorGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup = (PLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup = (PLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupPtr) dlsym(hLibrary, "lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials = (PLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsPtr) GetProcAddress(hLibrary, "lib3mf_compositematerialsiterator_getcurrentcompositematerials"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials = (PLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsPtr) dlsym(hLibrary, "lib3mf_compositematerialsiterator_getcurrentcompositematerials"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup = (PLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup = (PLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupPtr) dlsym(hLibrary, "lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Image3DIterator_GetCurrentImage3D = (PLib3MFImage3DIterator_GetCurrentImage3DPtr) GetProcAddress(hLibrary, "lib3mf_image3diterator_getcurrentimage3d"); + #else // _WIN32 + pWrapperTable->m_Image3DIterator_GetCurrentImage3D = (PLib3MFImage3DIterator_GetCurrentImage3DPtr) dlsym(hLibrary, "lib3mf_image3diterator_getcurrentimage3d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3DIterator_GetCurrentImage3D == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionIterator_GetCurrentFunction = (PLib3MFFunctionIterator_GetCurrentFunctionPtr) GetProcAddress(hLibrary, "lib3mf_functioniterator_getcurrentfunction"); + #else // _WIN32 + pWrapperTable->m_FunctionIterator_GetCurrentFunction = (PLib3MFFunctionIterator_GetCurrentFunctionPtr) dlsym(hLibrary, "lib3mf_functioniterator_getcurrentfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionIterator_GetCurrentFunction == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet = (PLib3MFLevelSetIterator_GetCurrentLevelSetPtr) GetProcAddress(hLibrary, "lib3mf_levelsetiterator_getcurrentlevelset"); + #else // _WIN32 + pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet = (PLib3MFLevelSetIterator_GetCurrentLevelSetPtr) dlsym(hLibrary, "lib3mf_levelsetiterator_getcurrentlevelset"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaData_GetNameSpace = (PLib3MFMetaData_GetNameSpacePtr) GetProcAddress(hLibrary, "lib3mf_metadata_getnamespace"); + #else // _WIN32 + pWrapperTable->m_MetaData_GetNameSpace = (PLib3MFMetaData_GetNameSpacePtr) dlsym(hLibrary, "lib3mf_metadata_getnamespace"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaData_GetNameSpace == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaData_SetNameSpace = (PLib3MFMetaData_SetNameSpacePtr) GetProcAddress(hLibrary, "lib3mf_metadata_setnamespace"); + #else // _WIN32 + pWrapperTable->m_MetaData_SetNameSpace = (PLib3MFMetaData_SetNameSpacePtr) dlsym(hLibrary, "lib3mf_metadata_setnamespace"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaData_SetNameSpace == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaData_GetName = (PLib3MFMetaData_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_metadata_getname"); + #else // _WIN32 + pWrapperTable->m_MetaData_GetName = (PLib3MFMetaData_GetNamePtr) dlsym(hLibrary, "lib3mf_metadata_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaData_GetName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaData_SetName = (PLib3MFMetaData_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_metadata_setname"); + #else // _WIN32 + pWrapperTable->m_MetaData_SetName = (PLib3MFMetaData_SetNamePtr) dlsym(hLibrary, "lib3mf_metadata_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaData_SetName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaData_GetKey = (PLib3MFMetaData_GetKeyPtr) GetProcAddress(hLibrary, "lib3mf_metadata_getkey"); + #else // _WIN32 + pWrapperTable->m_MetaData_GetKey = (PLib3MFMetaData_GetKeyPtr) dlsym(hLibrary, "lib3mf_metadata_getkey"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaData_GetKey == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaData_GetMustPreserve = (PLib3MFMetaData_GetMustPreservePtr) GetProcAddress(hLibrary, "lib3mf_metadata_getmustpreserve"); + #else // _WIN32 + pWrapperTable->m_MetaData_GetMustPreserve = (PLib3MFMetaData_GetMustPreservePtr) dlsym(hLibrary, "lib3mf_metadata_getmustpreserve"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaData_GetMustPreserve == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaData_SetMustPreserve = (PLib3MFMetaData_SetMustPreservePtr) GetProcAddress(hLibrary, "lib3mf_metadata_setmustpreserve"); + #else // _WIN32 + pWrapperTable->m_MetaData_SetMustPreserve = (PLib3MFMetaData_SetMustPreservePtr) dlsym(hLibrary, "lib3mf_metadata_setmustpreserve"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaData_SetMustPreserve == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaData_GetType = (PLib3MFMetaData_GetTypePtr) GetProcAddress(hLibrary, "lib3mf_metadata_gettype"); + #else // _WIN32 + pWrapperTable->m_MetaData_GetType = (PLib3MFMetaData_GetTypePtr) dlsym(hLibrary, "lib3mf_metadata_gettype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaData_GetType == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaData_SetType = (PLib3MFMetaData_SetTypePtr) GetProcAddress(hLibrary, "lib3mf_metadata_settype"); + #else // _WIN32 + pWrapperTable->m_MetaData_SetType = (PLib3MFMetaData_SetTypePtr) dlsym(hLibrary, "lib3mf_metadata_settype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaData_SetType == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaData_GetValue = (PLib3MFMetaData_GetValuePtr) GetProcAddress(hLibrary, "lib3mf_metadata_getvalue"); + #else // _WIN32 + pWrapperTable->m_MetaData_GetValue = (PLib3MFMetaData_GetValuePtr) dlsym(hLibrary, "lib3mf_metadata_getvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaData_GetValue == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaData_SetValue = (PLib3MFMetaData_SetValuePtr) GetProcAddress(hLibrary, "lib3mf_metadata_setvalue"); + #else // _WIN32 + pWrapperTable->m_MetaData_SetValue = (PLib3MFMetaData_SetValuePtr) dlsym(hLibrary, "lib3mf_metadata_setvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaData_SetValue == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaDataGroup_GetMetaDataCount = (PLib3MFMetaDataGroup_GetMetaDataCountPtr) GetProcAddress(hLibrary, "lib3mf_metadatagroup_getmetadatacount"); + #else // _WIN32 + pWrapperTable->m_MetaDataGroup_GetMetaDataCount = (PLib3MFMetaDataGroup_GetMetaDataCountPtr) dlsym(hLibrary, "lib3mf_metadatagroup_getmetadatacount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaDataGroup_GetMetaDataCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaDataGroup_GetMetaData = (PLib3MFMetaDataGroup_GetMetaDataPtr) GetProcAddress(hLibrary, "lib3mf_metadatagroup_getmetadata"); + #else // _WIN32 + pWrapperTable->m_MetaDataGroup_GetMetaData = (PLib3MFMetaDataGroup_GetMetaDataPtr) dlsym(hLibrary, "lib3mf_metadatagroup_getmetadata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaDataGroup_GetMetaData == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaDataGroup_GetMetaDataByKey = (PLib3MFMetaDataGroup_GetMetaDataByKeyPtr) GetProcAddress(hLibrary, "lib3mf_metadatagroup_getmetadatabykey"); + #else // _WIN32 + pWrapperTable->m_MetaDataGroup_GetMetaDataByKey = (PLib3MFMetaDataGroup_GetMetaDataByKeyPtr) dlsym(hLibrary, "lib3mf_metadatagroup_getmetadatabykey"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaDataGroup_GetMetaDataByKey == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaDataGroup_RemoveMetaDataByIndex = (PLib3MFMetaDataGroup_RemoveMetaDataByIndexPtr) GetProcAddress(hLibrary, "lib3mf_metadatagroup_removemetadatabyindex"); + #else // _WIN32 + pWrapperTable->m_MetaDataGroup_RemoveMetaDataByIndex = (PLib3MFMetaDataGroup_RemoveMetaDataByIndexPtr) dlsym(hLibrary, "lib3mf_metadatagroup_removemetadatabyindex"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaDataGroup_RemoveMetaDataByIndex == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaDataGroup_RemoveMetaData = (PLib3MFMetaDataGroup_RemoveMetaDataPtr) GetProcAddress(hLibrary, "lib3mf_metadatagroup_removemetadata"); + #else // _WIN32 + pWrapperTable->m_MetaDataGroup_RemoveMetaData = (PLib3MFMetaDataGroup_RemoveMetaDataPtr) dlsym(hLibrary, "lib3mf_metadatagroup_removemetadata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaDataGroup_RemoveMetaData == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MetaDataGroup_AddMetaData = (PLib3MFMetaDataGroup_AddMetaDataPtr) GetProcAddress(hLibrary, "lib3mf_metadatagroup_addmetadata"); + #else // _WIN32 + pWrapperTable->m_MetaDataGroup_AddMetaData = (PLib3MFMetaDataGroup_AddMetaDataPtr) dlsym(hLibrary, "lib3mf_metadatagroup_addmetadata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MetaDataGroup_AddMetaData == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_GetType = (PLib3MFObject_GetTypePtr) GetProcAddress(hLibrary, "lib3mf_object_gettype"); + #else // _WIN32 + pWrapperTable->m_Object_GetType = (PLib3MFObject_GetTypePtr) dlsym(hLibrary, "lib3mf_object_gettype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_GetType == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_SetType = (PLib3MFObject_SetTypePtr) GetProcAddress(hLibrary, "lib3mf_object_settype"); + #else // _WIN32 + pWrapperTable->m_Object_SetType = (PLib3MFObject_SetTypePtr) dlsym(hLibrary, "lib3mf_object_settype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_SetType == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_GetName = (PLib3MFObject_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_object_getname"); + #else // _WIN32 + pWrapperTable->m_Object_GetName = (PLib3MFObject_GetNamePtr) dlsym(hLibrary, "lib3mf_object_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_GetName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_SetName = (PLib3MFObject_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_object_setname"); + #else // _WIN32 + pWrapperTable->m_Object_SetName = (PLib3MFObject_SetNamePtr) dlsym(hLibrary, "lib3mf_object_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_SetName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_GetPartNumber = (PLib3MFObject_GetPartNumberPtr) GetProcAddress(hLibrary, "lib3mf_object_getpartnumber"); + #else // _WIN32 + pWrapperTable->m_Object_GetPartNumber = (PLib3MFObject_GetPartNumberPtr) dlsym(hLibrary, "lib3mf_object_getpartnumber"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_GetPartNumber == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_SetPartNumber = (PLib3MFObject_SetPartNumberPtr) GetProcAddress(hLibrary, "lib3mf_object_setpartnumber"); + #else // _WIN32 + pWrapperTable->m_Object_SetPartNumber = (PLib3MFObject_SetPartNumberPtr) dlsym(hLibrary, "lib3mf_object_setpartnumber"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_SetPartNumber == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_IsMeshObject = (PLib3MFObject_IsMeshObjectPtr) GetProcAddress(hLibrary, "lib3mf_object_ismeshobject"); + #else // _WIN32 + pWrapperTable->m_Object_IsMeshObject = (PLib3MFObject_IsMeshObjectPtr) dlsym(hLibrary, "lib3mf_object_ismeshobject"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_IsMeshObject == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_IsComponentsObject = (PLib3MFObject_IsComponentsObjectPtr) GetProcAddress(hLibrary, "lib3mf_object_iscomponentsobject"); + #else // _WIN32 + pWrapperTable->m_Object_IsComponentsObject = (PLib3MFObject_IsComponentsObjectPtr) dlsym(hLibrary, "lib3mf_object_iscomponentsobject"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_IsComponentsObject == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_IsLevelSetObject = (PLib3MFObject_IsLevelSetObjectPtr) GetProcAddress(hLibrary, "lib3mf_object_islevelsetobject"); + #else // _WIN32 + pWrapperTable->m_Object_IsLevelSetObject = (PLib3MFObject_IsLevelSetObjectPtr) dlsym(hLibrary, "lib3mf_object_islevelsetobject"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_IsLevelSetObject == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_IsValid = (PLib3MFObject_IsValidPtr) GetProcAddress(hLibrary, "lib3mf_object_isvalid"); + #else // _WIN32 + pWrapperTable->m_Object_IsValid = (PLib3MFObject_IsValidPtr) dlsym(hLibrary, "lib3mf_object_isvalid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_IsValid == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_SetAttachmentAsThumbnail = (PLib3MFObject_SetAttachmentAsThumbnailPtr) GetProcAddress(hLibrary, "lib3mf_object_setattachmentasthumbnail"); + #else // _WIN32 + pWrapperTable->m_Object_SetAttachmentAsThumbnail = (PLib3MFObject_SetAttachmentAsThumbnailPtr) dlsym(hLibrary, "lib3mf_object_setattachmentasthumbnail"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_SetAttachmentAsThumbnail == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_GetThumbnailAttachment = (PLib3MFObject_GetThumbnailAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_object_getthumbnailattachment"); + #else // _WIN32 + pWrapperTable->m_Object_GetThumbnailAttachment = (PLib3MFObject_GetThumbnailAttachmentPtr) dlsym(hLibrary, "lib3mf_object_getthumbnailattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_GetThumbnailAttachment == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_ClearThumbnailAttachment = (PLib3MFObject_ClearThumbnailAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_object_clearthumbnailattachment"); + #else // _WIN32 + pWrapperTable->m_Object_ClearThumbnailAttachment = (PLib3MFObject_ClearThumbnailAttachmentPtr) dlsym(hLibrary, "lib3mf_object_clearthumbnailattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_ClearThumbnailAttachment == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_GetOutbox = (PLib3MFObject_GetOutboxPtr) GetProcAddress(hLibrary, "lib3mf_object_getoutbox"); + #else // _WIN32 + pWrapperTable->m_Object_GetOutbox = (PLib3MFObject_GetOutboxPtr) dlsym(hLibrary, "lib3mf_object_getoutbox"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_GetOutbox == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_GetUUID = (PLib3MFObject_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_object_getuuid"); + #else // _WIN32 + pWrapperTable->m_Object_GetUUID = (PLib3MFObject_GetUUIDPtr) dlsym(hLibrary, "lib3mf_object_getuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_GetUUID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_SetUUID = (PLib3MFObject_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_object_setuuid"); + #else // _WIN32 + pWrapperTable->m_Object_SetUUID = (PLib3MFObject_SetUUIDPtr) dlsym(hLibrary, "lib3mf_object_setuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_SetUUID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_GetMetaDataGroup = (PLib3MFObject_GetMetaDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_object_getmetadatagroup"); + #else // _WIN32 + pWrapperTable->m_Object_GetMetaDataGroup = (PLib3MFObject_GetMetaDataGroupPtr) dlsym(hLibrary, "lib3mf_object_getmetadatagroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_GetMetaDataGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_SetSlicesMeshResolution = (PLib3MFObject_SetSlicesMeshResolutionPtr) GetProcAddress(hLibrary, "lib3mf_object_setslicesmeshresolution"); + #else // _WIN32 + pWrapperTable->m_Object_SetSlicesMeshResolution = (PLib3MFObject_SetSlicesMeshResolutionPtr) dlsym(hLibrary, "lib3mf_object_setslicesmeshresolution"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_SetSlicesMeshResolution == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_GetSlicesMeshResolution = (PLib3MFObject_GetSlicesMeshResolutionPtr) GetProcAddress(hLibrary, "lib3mf_object_getslicesmeshresolution"); + #else // _WIN32 + pWrapperTable->m_Object_GetSlicesMeshResolution = (PLib3MFObject_GetSlicesMeshResolutionPtr) dlsym(hLibrary, "lib3mf_object_getslicesmeshresolution"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_GetSlicesMeshResolution == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_HasSlices = (PLib3MFObject_HasSlicesPtr) GetProcAddress(hLibrary, "lib3mf_object_hasslices"); + #else // _WIN32 + pWrapperTable->m_Object_HasSlices = (PLib3MFObject_HasSlicesPtr) dlsym(hLibrary, "lib3mf_object_hasslices"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_HasSlices == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_ClearSliceStack = (PLib3MFObject_ClearSliceStackPtr) GetProcAddress(hLibrary, "lib3mf_object_clearslicestack"); + #else // _WIN32 + pWrapperTable->m_Object_ClearSliceStack = (PLib3MFObject_ClearSliceStackPtr) dlsym(hLibrary, "lib3mf_object_clearslicestack"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_ClearSliceStack == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_GetSliceStack = (PLib3MFObject_GetSliceStackPtr) GetProcAddress(hLibrary, "lib3mf_object_getslicestack"); + #else // _WIN32 + pWrapperTable->m_Object_GetSliceStack = (PLib3MFObject_GetSliceStackPtr) dlsym(hLibrary, "lib3mf_object_getslicestack"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_GetSliceStack == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Object_AssignSliceStack = (PLib3MFObject_AssignSliceStackPtr) GetProcAddress(hLibrary, "lib3mf_object_assignslicestack"); + #else // _WIN32 + pWrapperTable->m_Object_AssignSliceStack = (PLib3MFObject_AssignSliceStackPtr) dlsym(hLibrary, "lib3mf_object_assignslicestack"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_AssignSliceStack == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_GetVertexCount = (PLib3MFMeshObject_GetVertexCountPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getvertexcount"); + #else // _WIN32 + pWrapperTable->m_MeshObject_GetVertexCount = (PLib3MFMeshObject_GetVertexCountPtr) dlsym(hLibrary, "lib3mf_meshobject_getvertexcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_GetVertexCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_GetTriangleCount = (PLib3MFMeshObject_GetTriangleCountPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_gettrianglecount"); + #else // _WIN32 + pWrapperTable->m_MeshObject_GetTriangleCount = (PLib3MFMeshObject_GetTriangleCountPtr) dlsym(hLibrary, "lib3mf_meshobject_gettrianglecount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_GetTriangleCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_GetVertex = (PLib3MFMeshObject_GetVertexPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getvertex"); + #else // _WIN32 + pWrapperTable->m_MeshObject_GetVertex = (PLib3MFMeshObject_GetVertexPtr) dlsym(hLibrary, "lib3mf_meshobject_getvertex"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_GetVertex == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_SetVertex = (PLib3MFMeshObject_SetVertexPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_setvertex"); + #else // _WIN32 + pWrapperTable->m_MeshObject_SetVertex = (PLib3MFMeshObject_SetVertexPtr) dlsym(hLibrary, "lib3mf_meshobject_setvertex"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_SetVertex == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_AddVertex = (PLib3MFMeshObject_AddVertexPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_addvertex"); + #else // _WIN32 + pWrapperTable->m_MeshObject_AddVertex = (PLib3MFMeshObject_AddVertexPtr) dlsym(hLibrary, "lib3mf_meshobject_addvertex"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_AddVertex == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_GetVertices = (PLib3MFMeshObject_GetVerticesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getvertices"); + #else // _WIN32 + pWrapperTable->m_MeshObject_GetVertices = (PLib3MFMeshObject_GetVerticesPtr) dlsym(hLibrary, "lib3mf_meshobject_getvertices"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_GetVertices == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_GetTriangle = (PLib3MFMeshObject_GetTrianglePtr) GetProcAddress(hLibrary, "lib3mf_meshobject_gettriangle"); + #else // _WIN32 + pWrapperTable->m_MeshObject_GetTriangle = (PLib3MFMeshObject_GetTrianglePtr) dlsym(hLibrary, "lib3mf_meshobject_gettriangle"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_GetTriangle == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_SetTriangle = (PLib3MFMeshObject_SetTrianglePtr) GetProcAddress(hLibrary, "lib3mf_meshobject_settriangle"); + #else // _WIN32 + pWrapperTable->m_MeshObject_SetTriangle = (PLib3MFMeshObject_SetTrianglePtr) dlsym(hLibrary, "lib3mf_meshobject_settriangle"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_SetTriangle == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_AddTriangle = (PLib3MFMeshObject_AddTrianglePtr) GetProcAddress(hLibrary, "lib3mf_meshobject_addtriangle"); + #else // _WIN32 + pWrapperTable->m_MeshObject_AddTriangle = (PLib3MFMeshObject_AddTrianglePtr) dlsym(hLibrary, "lib3mf_meshobject_addtriangle"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_AddTriangle == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_GetTriangleIndices = (PLib3MFMeshObject_GetTriangleIndicesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_gettriangleindices"); + #else // _WIN32 + pWrapperTable->m_MeshObject_GetTriangleIndices = (PLib3MFMeshObject_GetTriangleIndicesPtr) dlsym(hLibrary, "lib3mf_meshobject_gettriangleindices"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_GetTriangleIndices == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_SetObjectLevelProperty = (PLib3MFMeshObject_SetObjectLevelPropertyPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_setobjectlevelproperty"); + #else // _WIN32 + pWrapperTable->m_MeshObject_SetObjectLevelProperty = (PLib3MFMeshObject_SetObjectLevelPropertyPtr) dlsym(hLibrary, "lib3mf_meshobject_setobjectlevelproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_SetObjectLevelProperty == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_GetObjectLevelProperty = (PLib3MFMeshObject_GetObjectLevelPropertyPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getobjectlevelproperty"); + #else // _WIN32 + pWrapperTable->m_MeshObject_GetObjectLevelProperty = (PLib3MFMeshObject_GetObjectLevelPropertyPtr) dlsym(hLibrary, "lib3mf_meshobject_getobjectlevelproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_GetObjectLevelProperty == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_SetTriangleProperties = (PLib3MFMeshObject_SetTrianglePropertiesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_settriangleproperties"); + #else // _WIN32 + pWrapperTable->m_MeshObject_SetTriangleProperties = (PLib3MFMeshObject_SetTrianglePropertiesPtr) dlsym(hLibrary, "lib3mf_meshobject_settriangleproperties"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_SetTriangleProperties == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_GetTriangleProperties = (PLib3MFMeshObject_GetTrianglePropertiesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_gettriangleproperties"); + #else // _WIN32 + pWrapperTable->m_MeshObject_GetTriangleProperties = (PLib3MFMeshObject_GetTrianglePropertiesPtr) dlsym(hLibrary, "lib3mf_meshobject_gettriangleproperties"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_GetTriangleProperties == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_SetAllTriangleProperties = (PLib3MFMeshObject_SetAllTrianglePropertiesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_setalltriangleproperties"); + #else // _WIN32 + pWrapperTable->m_MeshObject_SetAllTriangleProperties = (PLib3MFMeshObject_SetAllTrianglePropertiesPtr) dlsym(hLibrary, "lib3mf_meshobject_setalltriangleproperties"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_SetAllTriangleProperties == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_GetAllTriangleProperties = (PLib3MFMeshObject_GetAllTrianglePropertiesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getalltriangleproperties"); + #else // _WIN32 + pWrapperTable->m_MeshObject_GetAllTriangleProperties = (PLib3MFMeshObject_GetAllTrianglePropertiesPtr) dlsym(hLibrary, "lib3mf_meshobject_getalltriangleproperties"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_GetAllTriangleProperties == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_ClearAllProperties = (PLib3MFMeshObject_ClearAllPropertiesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_clearallproperties"); + #else // _WIN32 + pWrapperTable->m_MeshObject_ClearAllProperties = (PLib3MFMeshObject_ClearAllPropertiesPtr) dlsym(hLibrary, "lib3mf_meshobject_clearallproperties"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_ClearAllProperties == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_SetGeometry = (PLib3MFMeshObject_SetGeometryPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_setgeometry"); + #else // _WIN32 + pWrapperTable->m_MeshObject_SetGeometry = (PLib3MFMeshObject_SetGeometryPtr) dlsym(hLibrary, "lib3mf_meshobject_setgeometry"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_SetGeometry == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_IsManifoldAndOriented = (PLib3MFMeshObject_IsManifoldAndOrientedPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_ismanifoldandoriented"); + #else // _WIN32 + pWrapperTable->m_MeshObject_IsManifoldAndOriented = (PLib3MFMeshObject_IsManifoldAndOrientedPtr) dlsym(hLibrary, "lib3mf_meshobject_ismanifoldandoriented"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_IsManifoldAndOriented == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_BeamLattice = (PLib3MFMeshObject_BeamLatticePtr) GetProcAddress(hLibrary, "lib3mf_meshobject_beamlattice"); + #else // _WIN32 + pWrapperTable->m_MeshObject_BeamLattice = (PLib3MFMeshObject_BeamLatticePtr) dlsym(hLibrary, "lib3mf_meshobject_beamlattice"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_BeamLattice == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_GetVolumeData = (PLib3MFMeshObject_GetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getvolumedata"); + #else // _WIN32 + pWrapperTable->m_MeshObject_GetVolumeData = (PLib3MFMeshObject_GetVolumeDataPtr) dlsym(hLibrary, "lib3mf_meshobject_getvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_GetVolumeData == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_SetVolumeData = (PLib3MFMeshObject_SetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_setvolumedata"); + #else // _WIN32 + pWrapperTable->m_MeshObject_SetVolumeData = (PLib3MFMeshObject_SetVolumeDataPtr) dlsym(hLibrary, "lib3mf_meshobject_setvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_SetVolumeData == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetFunction = (PLib3MFLevelSet_GetFunctionPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getfunction"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetFunction = (PLib3MFLevelSet_GetFunctionPtr) dlsym(hLibrary, "lib3mf_levelset_getfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetFunction == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetFunction = (PLib3MFLevelSet_SetFunctionPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setfunction"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetFunction = (PLib3MFLevelSet_SetFunctionPtr) dlsym(hLibrary, "lib3mf_levelset_setfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetFunction == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetTransform = (PLib3MFLevelSet_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_levelset_gettransform"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetTransform = (PLib3MFLevelSet_GetTransformPtr) dlsym(hLibrary, "lib3mf_levelset_gettransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetTransform == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetTransform = (PLib3MFLevelSet_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_levelset_settransform"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetTransform = (PLib3MFLevelSet_SetTransformPtr) dlsym(hLibrary, "lib3mf_levelset_settransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetTransform == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetChannelName = (PLib3MFLevelSet_GetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_levelset_getchannelname"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetChannelName = (PLib3MFLevelSet_GetChannelNamePtr) dlsym(hLibrary, "lib3mf_levelset_getchannelname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetChannelName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetChannelName = (PLib3MFLevelSet_SetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_levelset_setchannelname"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetChannelName = (PLib3MFLevelSet_SetChannelNamePtr) dlsym(hLibrary, "lib3mf_levelset_setchannelname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetChannelName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetMinFeatureSize = (PLib3MFLevelSet_SetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_levelset_setminfeaturesize"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetMinFeatureSize = (PLib3MFLevelSet_SetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_levelset_setminfeaturesize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetMinFeatureSize == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetMinFeatureSize = (PLib3MFLevelSet_GetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_levelset_getminfeaturesize"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetMinFeatureSize = (PLib3MFLevelSet_GetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_levelset_getminfeaturesize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetMinFeatureSize == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetFallBackValue = (PLib3MFLevelSet_SetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_levelset_setfallbackvalue"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetFallBackValue = (PLib3MFLevelSet_SetFallBackValuePtr) dlsym(hLibrary, "lib3mf_levelset_setfallbackvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetFallBackValue == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetFallBackValue = (PLib3MFLevelSet_GetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_levelset_getfallbackvalue"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetFallBackValue = (PLib3MFLevelSet_GetFallBackValuePtr) dlsym(hLibrary, "lib3mf_levelset_getfallbackvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetFallBackValue == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetMeshBBoxOnly = (PLib3MFLevelSet_SetMeshBBoxOnlyPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setmeshbboxonly"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetMeshBBoxOnly = (PLib3MFLevelSet_SetMeshBBoxOnlyPtr) dlsym(hLibrary, "lib3mf_levelset_setmeshbboxonly"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetMeshBBoxOnly == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetMeshBBoxOnly = (PLib3MFLevelSet_GetMeshBBoxOnlyPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getmeshbboxonly"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetMeshBBoxOnly = (PLib3MFLevelSet_GetMeshBBoxOnlyPtr) dlsym(hLibrary, "lib3mf_levelset_getmeshbboxonly"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetMeshBBoxOnly == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetMesh = (PLib3MFLevelSet_SetMeshPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setmesh"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetMesh = (PLib3MFLevelSet_SetMeshPtr) dlsym(hLibrary, "lib3mf_levelset_setmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetMesh == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetMesh = (PLib3MFLevelSet_GetMeshPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getmesh"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetMesh = (PLib3MFLevelSet_GetMeshPtr) dlsym(hLibrary, "lib3mf_levelset_getmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetMesh == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetVolumeData = (PLib3MFLevelSet_GetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getvolumedata"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetVolumeData = (PLib3MFLevelSet_GetVolumeDataPtr) dlsym(hLibrary, "lib3mf_levelset_getvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetVolumeData == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetVolumeData = (PLib3MFLevelSet_SetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setvolumedata"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetVolumeData = (PLib3MFLevelSet_SetVolumeDataPtr) dlsym(hLibrary, "lib3mf_levelset_setvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetVolumeData == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_GetMinLength = (PLib3MFBeamLattice_GetMinLengthPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getminlength"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_GetMinLength = (PLib3MFBeamLattice_GetMinLengthPtr) dlsym(hLibrary, "lib3mf_beamlattice_getminlength"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_GetMinLength == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_SetMinLength = (PLib3MFBeamLattice_SetMinLengthPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setminlength"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_SetMinLength = (PLib3MFBeamLattice_SetMinLengthPtr) dlsym(hLibrary, "lib3mf_beamlattice_setminlength"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_SetMinLength == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_GetClipping = (PLib3MFBeamLattice_GetClippingPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getclipping"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_GetClipping = (PLib3MFBeamLattice_GetClippingPtr) dlsym(hLibrary, "lib3mf_beamlattice_getclipping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_GetClipping == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_SetClipping = (PLib3MFBeamLattice_SetClippingPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setclipping"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_SetClipping = (PLib3MFBeamLattice_SetClippingPtr) dlsym(hLibrary, "lib3mf_beamlattice_setclipping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_SetClipping == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_GetRepresentation = (PLib3MFBeamLattice_GetRepresentationPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getrepresentation"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_GetRepresentation = (PLib3MFBeamLattice_GetRepresentationPtr) dlsym(hLibrary, "lib3mf_beamlattice_getrepresentation"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_GetRepresentation == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_SetRepresentation = (PLib3MFBeamLattice_SetRepresentationPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setrepresentation"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_SetRepresentation = (PLib3MFBeamLattice_SetRepresentationPtr) dlsym(hLibrary, "lib3mf_beamlattice_setrepresentation"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_SetRepresentation == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_GetBallOptions = (PLib3MFBeamLattice_GetBallOptionsPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getballoptions"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_GetBallOptions = (PLib3MFBeamLattice_GetBallOptionsPtr) dlsym(hLibrary, "lib3mf_beamlattice_getballoptions"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_GetBallOptions == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_SetBallOptions = (PLib3MFBeamLattice_SetBallOptionsPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setballoptions"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_SetBallOptions = (PLib3MFBeamLattice_SetBallOptionsPtr) dlsym(hLibrary, "lib3mf_beamlattice_setballoptions"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_SetBallOptions == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_GetBeamCount = (PLib3MFBeamLattice_GetBeamCountPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getbeamcount"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_GetBeamCount = (PLib3MFBeamLattice_GetBeamCountPtr) dlsym(hLibrary, "lib3mf_beamlattice_getbeamcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_GetBeamCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_GetBeam = (PLib3MFBeamLattice_GetBeamPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getbeam"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_GetBeam = (PLib3MFBeamLattice_GetBeamPtr) dlsym(hLibrary, "lib3mf_beamlattice_getbeam"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_GetBeam == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_AddBeam = (PLib3MFBeamLattice_AddBeamPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_addbeam"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_AddBeam = (PLib3MFBeamLattice_AddBeamPtr) dlsym(hLibrary, "lib3mf_beamlattice_addbeam"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_AddBeam == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_SetBeam = (PLib3MFBeamLattice_SetBeamPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setbeam"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_SetBeam = (PLib3MFBeamLattice_SetBeamPtr) dlsym(hLibrary, "lib3mf_beamlattice_setbeam"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_SetBeam == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_SetBeams = (PLib3MFBeamLattice_SetBeamsPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setbeams"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_SetBeams = (PLib3MFBeamLattice_SetBeamsPtr) dlsym(hLibrary, "lib3mf_beamlattice_setbeams"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_SetBeams == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_GetBeams = (PLib3MFBeamLattice_GetBeamsPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getbeams"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_GetBeams = (PLib3MFBeamLattice_GetBeamsPtr) dlsym(hLibrary, "lib3mf_beamlattice_getbeams"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_GetBeams == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_GetBallCount = (PLib3MFBeamLattice_GetBallCountPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getballcount"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_GetBallCount = (PLib3MFBeamLattice_GetBallCountPtr) dlsym(hLibrary, "lib3mf_beamlattice_getballcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_GetBallCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_GetBall = (PLib3MFBeamLattice_GetBallPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getball"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_GetBall = (PLib3MFBeamLattice_GetBallPtr) dlsym(hLibrary, "lib3mf_beamlattice_getball"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_GetBall == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_AddBall = (PLib3MFBeamLattice_AddBallPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_addball"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_AddBall = (PLib3MFBeamLattice_AddBallPtr) dlsym(hLibrary, "lib3mf_beamlattice_addball"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_AddBall == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_SetBall = (PLib3MFBeamLattice_SetBallPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setball"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_SetBall = (PLib3MFBeamLattice_SetBallPtr) dlsym(hLibrary, "lib3mf_beamlattice_setball"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_SetBall == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_SetBalls = (PLib3MFBeamLattice_SetBallsPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setballs"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_SetBalls = (PLib3MFBeamLattice_SetBallsPtr) dlsym(hLibrary, "lib3mf_beamlattice_setballs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_SetBalls == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_GetBalls = (PLib3MFBeamLattice_GetBallsPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getballs"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_GetBalls = (PLib3MFBeamLattice_GetBallsPtr) dlsym(hLibrary, "lib3mf_beamlattice_getballs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_GetBalls == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_GetBeamSetCount = (PLib3MFBeamLattice_GetBeamSetCountPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getbeamsetcount"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_GetBeamSetCount = (PLib3MFBeamLattice_GetBeamSetCountPtr) dlsym(hLibrary, "lib3mf_beamlattice_getbeamsetcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_GetBeamSetCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_AddBeamSet = (PLib3MFBeamLattice_AddBeamSetPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_addbeamset"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_AddBeamSet = (PLib3MFBeamLattice_AddBeamSetPtr) dlsym(hLibrary, "lib3mf_beamlattice_addbeamset"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_AddBeamSet == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamLattice_GetBeamSet = (PLib3MFBeamLattice_GetBeamSetPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getbeamset"); + #else // _WIN32 + pWrapperTable->m_BeamLattice_GetBeamSet = (PLib3MFBeamLattice_GetBeamSetPtr) dlsym(hLibrary, "lib3mf_beamlattice_getbeamset"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamLattice_GetBeamSet == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionReference_GetFunctionResourceID = (PLib3MFFunctionReference_GetFunctionResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getfunctionresourceid"); + #else // _WIN32 + pWrapperTable->m_FunctionReference_GetFunctionResourceID = (PLib3MFFunctionReference_GetFunctionResourceIDPtr) dlsym(hLibrary, "lib3mf_functionreference_getfunctionresourceid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionReference_GetFunctionResourceID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionReference_SetFunctionResourceID = (PLib3MFFunctionReference_SetFunctionResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setfunctionresourceid"); + #else // _WIN32 + pWrapperTable->m_FunctionReference_SetFunctionResourceID = (PLib3MFFunctionReference_SetFunctionResourceIDPtr) dlsym(hLibrary, "lib3mf_functionreference_setfunctionresourceid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionReference_SetFunctionResourceID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionReference_GetTransform = (PLib3MFFunctionReference_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_gettransform"); + #else // _WIN32 + pWrapperTable->m_FunctionReference_GetTransform = (PLib3MFFunctionReference_GetTransformPtr) dlsym(hLibrary, "lib3mf_functionreference_gettransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionReference_GetTransform == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionReference_SetTransform = (PLib3MFFunctionReference_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_settransform"); + #else // _WIN32 + pWrapperTable->m_FunctionReference_SetTransform = (PLib3MFFunctionReference_SetTransformPtr) dlsym(hLibrary, "lib3mf_functionreference_settransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionReference_SetTransform == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionReference_GetChannelName = (PLib3MFFunctionReference_GetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getchannelname"); + #else // _WIN32 + pWrapperTable->m_FunctionReference_GetChannelName = (PLib3MFFunctionReference_GetChannelNamePtr) dlsym(hLibrary, "lib3mf_functionreference_getchannelname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionReference_GetChannelName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionReference_SetChannelName = (PLib3MFFunctionReference_SetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setchannelname"); + #else // _WIN32 + pWrapperTable->m_FunctionReference_SetChannelName = (PLib3MFFunctionReference_SetChannelNamePtr) dlsym(hLibrary, "lib3mf_functionreference_setchannelname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionReference_SetChannelName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionReference_SetMinFeatureSize = (PLib3MFFunctionReference_SetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setminfeaturesize"); + #else // _WIN32 + pWrapperTable->m_FunctionReference_SetMinFeatureSize = (PLib3MFFunctionReference_SetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_functionreference_setminfeaturesize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionReference_SetMinFeatureSize == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionReference_GetMinFeatureSize = (PLib3MFFunctionReference_GetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getminfeaturesize"); + #else // _WIN32 + pWrapperTable->m_FunctionReference_GetMinFeatureSize = (PLib3MFFunctionReference_GetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_functionreference_getminfeaturesize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionReference_GetMinFeatureSize == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionReference_SetFallBackValue = (PLib3MFFunctionReference_SetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setfallbackvalue"); + #else // _WIN32 + pWrapperTable->m_FunctionReference_SetFallBackValue = (PLib3MFFunctionReference_SetFallBackValuePtr) dlsym(hLibrary, "lib3mf_functionreference_setfallbackvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionReference_SetFallBackValue == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionReference_GetFallBackValue = (PLib3MFFunctionReference_GetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getfallbackvalue"); + #else // _WIN32 + pWrapperTable->m_FunctionReference_GetFallBackValue = (PLib3MFFunctionReference_GetFallBackValuePtr) dlsym(hLibrary, "lib3mf_functionreference_getfallbackvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionReference_GetFallBackValue == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup = (PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_getbasematerialgroup"); + #else // _WIN32 + pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup = (PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_getbasematerialgroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup = (PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_setbasematerialgroup"); + #else // _WIN32 + pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup = (PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_setbasematerialgroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount = (PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_getmaterialmappingcount"); + #else // _WIN32 + pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount = (PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_getmaterialmappingcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataComposite_GetMaterialMapping = (PLib3MFVolumeDataComposite_GetMaterialMappingPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_getmaterialmapping"); + #else // _WIN32 + pWrapperTable->m_VolumeDataComposite_GetMaterialMapping = (PLib3MFVolumeDataComposite_GetMaterialMappingPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_getmaterialmapping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_GetMaterialMapping == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataComposite_AddMaterialMapping = (PLib3MFVolumeDataComposite_AddMaterialMappingPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_addmaterialmapping"); + #else // _WIN32 + pWrapperTable->m_VolumeDataComposite_AddMaterialMapping = (PLib3MFVolumeDataComposite_AddMaterialMappingPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_addmaterialmapping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_AddMaterialMapping == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping = (PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_removematerialmapping"); + #else // _WIN32 + pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping = (PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_removematerialmapping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataProperty_GetName = (PLib3MFVolumeDataProperty_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_volumedataproperty_getname"); + #else // _WIN32 + pWrapperTable->m_VolumeDataProperty_GetName = (PLib3MFVolumeDataProperty_GetNamePtr) dlsym(hLibrary, "lib3mf_volumedataproperty_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataProperty_GetName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataProperty_SetIsRequired = (PLib3MFVolumeDataProperty_SetIsRequiredPtr) GetProcAddress(hLibrary, "lib3mf_volumedataproperty_setisrequired"); + #else // _WIN32 + pWrapperTable->m_VolumeDataProperty_SetIsRequired = (PLib3MFVolumeDataProperty_SetIsRequiredPtr) dlsym(hLibrary, "lib3mf_volumedataproperty_setisrequired"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataProperty_SetIsRequired == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataProperty_IsRequired = (PLib3MFVolumeDataProperty_IsRequiredPtr) GetProcAddress(hLibrary, "lib3mf_volumedataproperty_isrequired"); + #else // _WIN32 + pWrapperTable->m_VolumeDataProperty_IsRequired = (PLib3MFVolumeDataProperty_IsRequiredPtr) dlsym(hLibrary, "lib3mf_volumedataproperty_isrequired"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataProperty_IsRequired == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetComposite = (PLib3MFVolumeData_GetCompositePtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getcomposite"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetComposite = (PLib3MFVolumeData_GetCompositePtr) dlsym(hLibrary, "lib3mf_volumedata_getcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetComposite == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_CreateNewComposite = (PLib3MFVolumeData_CreateNewCompositePtr) GetProcAddress(hLibrary, "lib3mf_volumedata_createnewcomposite"); + #else // _WIN32 + pWrapperTable->m_VolumeData_CreateNewComposite = (PLib3MFVolumeData_CreateNewCompositePtr) dlsym(hLibrary, "lib3mf_volumedata_createnewcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_CreateNewComposite == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_RemoveComposite = (PLib3MFVolumeData_RemoveCompositePtr) GetProcAddress(hLibrary, "lib3mf_volumedata_removecomposite"); + #else // _WIN32 + pWrapperTable->m_VolumeData_RemoveComposite = (PLib3MFVolumeData_RemoveCompositePtr) dlsym(hLibrary, "lib3mf_volumedata_removecomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_RemoveComposite == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetColor = (PLib3MFVolumeData_GetColorPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getcolor"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetColor = (PLib3MFVolumeData_GetColorPtr) dlsym(hLibrary, "lib3mf_volumedata_getcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetColor == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_CreateNewColor = (PLib3MFVolumeData_CreateNewColorPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_createnewcolor"); + #else // _WIN32 + pWrapperTable->m_VolumeData_CreateNewColor = (PLib3MFVolumeData_CreateNewColorPtr) dlsym(hLibrary, "lib3mf_volumedata_createnewcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_CreateNewColor == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_RemoveColor = (PLib3MFVolumeData_RemoveColorPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_removecolor"); + #else // _WIN32 + pWrapperTable->m_VolumeData_RemoveColor = (PLib3MFVolumeData_RemoveColorPtr) dlsym(hLibrary, "lib3mf_volumedata_removecolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_RemoveColor == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetPropertyCount = (PLib3MFVolumeData_GetPropertyCountPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getpropertycount"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetPropertyCount = (PLib3MFVolumeData_GetPropertyCountPtr) dlsym(hLibrary, "lib3mf_volumedata_getpropertycount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetPropertyCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetProperty = (PLib3MFVolumeData_GetPropertyPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getproperty"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetProperty = (PLib3MFVolumeData_GetPropertyPtr) dlsym(hLibrary, "lib3mf_volumedata_getproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetProperty == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_AddPropertyFromFunction = (PLib3MFVolumeData_AddPropertyFromFunctionPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_addpropertyfromfunction"); + #else // _WIN32 + pWrapperTable->m_VolumeData_AddPropertyFromFunction = (PLib3MFVolumeData_AddPropertyFromFunctionPtr) dlsym(hLibrary, "lib3mf_volumedata_addpropertyfromfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_AddPropertyFromFunction == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_RemoveProperty = (PLib3MFVolumeData_RemovePropertyPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_removeproperty"); + #else // _WIN32 + pWrapperTable->m_VolumeData_RemoveProperty = (PLib3MFVolumeData_RemovePropertyPtr) dlsym(hLibrary, "lib3mf_volumedata_removeproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_RemoveProperty == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresource"); + #else // _WIN32 + pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) dlsym(hLibrary, "lib3mf_component_getobjectresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetObjectResource == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresourceid"); + #else // _WIN32 + pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) dlsym(hLibrary, "lib3mf_component_getobjectresourceid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetObjectResourceID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getuuid"); + #else // _WIN32 + pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) dlsym(hLibrary, "lib3mf_component_getuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetUUID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_setuuid"); + #else // _WIN32 + pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) dlsym(hLibrary, "lib3mf_component_setuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_SetUUID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_hastransform"); + #else // _WIN32 + pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) dlsym(hLibrary, "lib3mf_component_hastransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_HasTransform == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_gettransform"); + #else // _WIN32 + pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) dlsym(hLibrary, "lib3mf_component_gettransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetTransform == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_settransform"); + #else // _WIN32 + pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) dlsym(hLibrary, "lib3mf_component_settransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_SetTransform == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_addcomponent"); + #else // _WIN32 + pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_addcomponent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComponentsObject_AddComponent == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponent"); + #else // _WIN32 + pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComponentsObject_GetComponent == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + #else // _WIN32 + pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComponentsObject_GetComponentCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_setname"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) dlsym(hLibrary, "lib3mf_beamset_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_getname"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) dlsym(hLibrary, "lib3mf_beamset_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setidentifier"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetIdentifier == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getidentifier"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetIdentifier == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferencecount"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getreferencecount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetReferenceCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetReferences == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetReferences == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferencecount"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferencecount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetBallReferenceCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setballreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setballreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetBallReferences == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetBallReferences == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getcount"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_AddMaterial == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_removematerial"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_removematerial"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_RemoveMaterial == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getname"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setname"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_SetName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_SetDisplayColor == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetDisplayColor == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcount"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_GetCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_GetAllPropertyIDs == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_addcolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_addcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_AddColor == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_removecolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_removecolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_RemoveColor == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_setcolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_setcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_SetColor == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_GetColor == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getcount"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_AddTex2Coord == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetTex2Coord == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_RemoveTex2Coord == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetTexture2D == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcount"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) dlsym(hLibrary, "lib3mf_compositematerials_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_addcomposite"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_addcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_AddComposite == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_removecomposite"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_removecomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_RemoveComposite == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcomposite"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_getcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetComposite == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getcount"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_AddMultiProperty == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_SetMultiProperty == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetMultiProperty == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetLayerCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addlayer"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addlayer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_AddLayer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayer"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetLayer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removelayer"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removelayer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_RemoveLayer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Image3D_GetName = (PLib3MFImage3D_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_image3d_getname"); + #else // _WIN32 + pWrapperTable->m_Image3D_GetName = (PLib3MFImage3D_GetNamePtr) dlsym(hLibrary, "lib3mf_image3d_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3D_GetName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Image3D_SetName = (PLib3MFImage3D_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_image3d_setname"); + #else // _WIN32 + pWrapperTable->m_Image3D_SetName = (PLib3MFImage3D_SetNamePtr) dlsym(hLibrary, "lib3mf_image3d_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3D_SetName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Image3D_IsImageStack = (PLib3MFImage3D_IsImageStackPtr) GetProcAddress(hLibrary, "lib3mf_image3d_isimagestack"); + #else // _WIN32 + pWrapperTable->m_Image3D_IsImageStack = (PLib3MFImage3D_IsImageStackPtr) dlsym(hLibrary, "lib3mf_image3d_isimagestack"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3D_IsImageStack == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetRowCount = (PLib3MFImageStack_GetRowCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getrowcount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetRowCount = (PLib3MFImageStack_GetRowCountPtr) dlsym(hLibrary, "lib3mf_imagestack_getrowcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetRowCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_SetRowCount = (PLib3MFImageStack_SetRowCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_setrowcount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_SetRowCount = (PLib3MFImageStack_SetRowCountPtr) dlsym(hLibrary, "lib3mf_imagestack_setrowcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_SetRowCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetColumnCount = (PLib3MFImageStack_GetColumnCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getcolumncount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetColumnCount = (PLib3MFImageStack_GetColumnCountPtr) dlsym(hLibrary, "lib3mf_imagestack_getcolumncount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetColumnCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_SetColumnCount = (PLib3MFImageStack_SetColumnCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_setcolumncount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_SetColumnCount = (PLib3MFImageStack_SetColumnCountPtr) dlsym(hLibrary, "lib3mf_imagestack_setcolumncount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_SetColumnCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetSheetCount = (PLib3MFImageStack_GetSheetCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getsheetcount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetSheetCount = (PLib3MFImageStack_GetSheetCountPtr) dlsym(hLibrary, "lib3mf_imagestack_getsheetcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetSheetCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetSheet = (PLib3MFImageStack_GetSheetPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getsheet"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetSheet = (PLib3MFImageStack_GetSheetPtr) dlsym(hLibrary, "lib3mf_imagestack_getsheet"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetSheet == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_SetSheet = (PLib3MFImageStack_SetSheetPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_setsheet"); + #else // _WIN32 + pWrapperTable->m_ImageStack_SetSheet = (PLib3MFImageStack_SetSheetPtr) dlsym(hLibrary, "lib3mf_imagestack_setsheet"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_SetSheet == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_CreateEmptySheet = (PLib3MFImageStack_CreateEmptySheetPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_createemptysheet"); + #else // _WIN32 + pWrapperTable->m_ImageStack_CreateEmptySheet = (PLib3MFImageStack_CreateEmptySheetPtr) dlsym(hLibrary, "lib3mf_imagestack_createemptysheet"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_CreateEmptySheet == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromBuffer = (PLib3MFImageStack_CreateSheetFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_createsheetfrombuffer"); + #else // _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromBuffer = (PLib3MFImageStack_CreateSheetFromBufferPtr) dlsym(hLibrary, "lib3mf_imagestack_createsheetfrombuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_CreateSheetFromBuffer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromFile = (PLib3MFImageStack_CreateSheetFromFilePtr) GetProcAddress(hLibrary, "lib3mf_imagestack_createsheetfromfile"); + #else // _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromFile = (PLib3MFImageStack_CreateSheetFromFilePtr) dlsym(hLibrary, "lib3mf_imagestack_createsheetfromfile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_CreateSheetFromFile == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_getpath"); + #else // _WIN32 + pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) dlsym(hLibrary, "lib3mf_attachment_getpath"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_GetPath == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_setpath"); + #else // _WIN32 + pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) dlsym(hLibrary, "lib3mf_attachment_setpath"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_SetPath == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) GetProcAddress(hLibrary, "lib3mf_attachment_packagepart"); + #else // _WIN32 + pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) dlsym(hLibrary, "lib3mf_attachment_packagepart"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_PackagePart == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getrelationshiptype"); + #else // _WIN32 + pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_getrelationshiptype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_GetRelationShipType == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_setrelationshiptype"); + #else // _WIN32 + pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_setrelationshiptype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_SetRelationShipType == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetofile"); + #else // _WIN32 + pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) dlsym(hLibrary, "lib3mf_attachment_writetofile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_WriteToFile == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromfile"); + #else // _WIN32 + pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) dlsym(hLibrary, "lib3mf_attachment_readfromfile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_ReadFromFile == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromcallback"); + #else // _WIN32 + pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) dlsym(hLibrary, "lib3mf_attachment_readfromcallback"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_ReadFromCallback == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getstreamsize"); + #else // _WIN32 + pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) dlsym(hLibrary, "lib3mf_attachment_getstreamsize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_GetStreamSize == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetobuffer"); + #else // _WIN32 + pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) dlsym(hLibrary, "lib3mf_attachment_writetobuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_WriteToBuffer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfrombuffer"); + #else // _WIN32 + pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) dlsym(hLibrary, "lib3mf_attachment_readfrombuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_ReadFromBuffer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getattachment"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_getattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetAttachment == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setattachment"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_setattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetAttachment == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getcontenttype"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_getcontenttype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetContentType == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setcontenttype"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_setcontenttype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetContentType == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetTileStyleUV == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_settilestyleuv"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_settilestyleuv"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetTileStyleUV == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getfilter"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_getfilter"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetFilter == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setfilter"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_setfilter"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetFilter == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetIdentifier = (PLib3MFImplicitPort_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitport_getidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetIdentifier = (PLib3MFImplicitPort_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitport_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetIdentifier == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetIdentifier = (PLib3MFImplicitPort_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitport_setidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetIdentifier = (PLib3MFImplicitPort_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitport_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetIdentifier == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetDisplayName = (PLib3MFImplicitPort_GetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_getdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetDisplayName = (PLib3MFImplicitPort_GetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitport_getdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetDisplayName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetDisplayName = (PLib3MFImplicitPort_SetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_setdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetDisplayName = (PLib3MFImplicitPort_SetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitport_setdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetDisplayName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetType = (PLib3MFImplicitPort_SetTypePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_settype"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetType = (PLib3MFImplicitPort_SetTypePtr) dlsym(hLibrary, "lib3mf_implicitport_settype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetType == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetType = (PLib3MFImplicitPort_GetTypePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_gettype"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetType = (PLib3MFImplicitPort_GetTypePtr) dlsym(hLibrary, "lib3mf_implicitport_gettype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetType == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetReference = (PLib3MFImplicitPort_GetReferencePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_getreference"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetReference = (PLib3MFImplicitPort_GetReferencePtr) dlsym(hLibrary, "lib3mf_implicitport_getreference"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetReference == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetReference = (PLib3MFImplicitPort_SetReferencePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_setreference"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetReference = (PLib3MFImplicitPort_SetReferencePtr) dlsym(hLibrary, "lib3mf_implicitport_setreference"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetReference == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Iterator_MoveNext = (PLib3MFIterator_MoveNextPtr) GetProcAddress(hLibrary, "lib3mf_iterator_movenext"); + #else // _WIN32 + pWrapperTable->m_Iterator_MoveNext = (PLib3MFIterator_MoveNextPtr) dlsym(hLibrary, "lib3mf_iterator_movenext"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Iterator_MoveNext == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Iterator_MovePrevious = (PLib3MFIterator_MovePreviousPtr) GetProcAddress(hLibrary, "lib3mf_iterator_moveprevious"); + #else // _WIN32 + pWrapperTable->m_Iterator_MovePrevious = (PLib3MFIterator_MovePreviousPtr) dlsym(hLibrary, "lib3mf_iterator_moveprevious"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Iterator_MovePrevious == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Iterator_Count = (PLib3MFIterator_CountPtr) GetProcAddress(hLibrary, "lib3mf_iterator_count"); + #else // _WIN32 + pWrapperTable->m_Iterator_Count = (PLib3MFIterator_CountPtr) dlsym(hLibrary, "lib3mf_iterator_count"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Iterator_Count == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPortIterator_GetCurrent = (PLib3MFImplicitPortIterator_GetCurrentPtr) GetProcAddress(hLibrary, "lib3mf_implicitportiterator_getcurrent"); + #else // _WIN32 + pWrapperTable->m_ImplicitPortIterator_GetCurrent = (PLib3MFImplicitPortIterator_GetCurrentPtr) dlsym(hLibrary, "lib3mf_implicitportiterator_getcurrent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPortIterator_GetCurrent == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetIdentifier = (PLib3MFImplicitNode_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetIdentifier = (PLib3MFImplicitNode_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitnode_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetIdentifier == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_SetIdentifier = (PLib3MFImplicitNode_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_setidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_SetIdentifier = (PLib3MFImplicitNode_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitnode_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_SetIdentifier == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetDisplayName = (PLib3MFImplicitNode_GetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetDisplayName = (PLib3MFImplicitNode_GetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitnode_getdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetDisplayName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_SetDisplayName = (PLib3MFImplicitNode_SetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_setdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_SetDisplayName = (PLib3MFImplicitNode_SetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitnode_setdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_SetDisplayName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetTag = (PLib3MFImplicitNode_GetTagPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_gettag"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetTag = (PLib3MFImplicitNode_GetTagPtr) dlsym(hLibrary, "lib3mf_implicitnode_gettag"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetTag == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_SetTag = (PLib3MFImplicitNode_SetTagPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_settag"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_SetTag = (PLib3MFImplicitNode_SetTagPtr) dlsym(hLibrary, "lib3mf_implicitnode_settag"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_SetTag == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetNodeType = (PLib3MFImplicitNode_GetNodeTypePtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getnodetype"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetNodeType = (PLib3MFImplicitNode_GetNodeTypePtr) dlsym(hLibrary, "lib3mf_implicitnode_getnodetype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetNodeType == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_AddInput = (PLib3MFImplicitNode_AddInputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_addinput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_AddInput = (PLib3MFImplicitNode_AddInputPtr) dlsym(hLibrary, "lib3mf_implicitnode_addinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_AddInput == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetInputs = (PLib3MFImplicitNode_GetInputsPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getinputs"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetInputs = (PLib3MFImplicitNode_GetInputsPtr) dlsym(hLibrary, "lib3mf_implicitnode_getinputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetInputs == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_AddOutput = (PLib3MFImplicitNode_AddOutputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_addoutput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_AddOutput = (PLib3MFImplicitNode_AddOutputPtr) dlsym(hLibrary, "lib3mf_implicitnode_addoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_AddOutput == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetOutputs = (PLib3MFImplicitNode_GetOutputsPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getoutputs"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetOutputs = (PLib3MFImplicitNode_GetOutputsPtr) dlsym(hLibrary, "lib3mf_implicitnode_getoutputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetOutputs == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_FindInput = (PLib3MFImplicitNode_FindInputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_findinput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_FindInput = (PLib3MFImplicitNode_FindInputPtr) dlsym(hLibrary, "lib3mf_implicitnode_findinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_FindInput == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_FindOutput = (PLib3MFImplicitNode_FindOutputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_findoutput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_FindOutput = (PLib3MFImplicitNode_FindOutputPtr) dlsym(hLibrary, "lib3mf_implicitnode_findoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_FindOutput == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_AreTypesValid = (PLib3MFImplicitNode_AreTypesValidPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_aretypesvalid"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_AreTypesValid = (PLib3MFImplicitNode_AreTypesValidPtr) dlsym(hLibrary, "lib3mf_implicitnode_aretypesvalid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_AreTypesValid == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_OneInputNode_GetInputA = (PLib3MFOneInputNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_oneinputnode_getinputa"); + #else // _WIN32 + pWrapperTable->m_OneInputNode_GetInputA = (PLib3MFOneInputNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_oneinputnode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_OneInputNode_GetInputA == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_OneInputNode_GetOutputResult = (PLib3MFOneInputNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_oneinputnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_OneInputNode_GetOutputResult = (PLib3MFOneInputNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_oneinputnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_OneInputNode_GetOutputResult == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIdNode_SetResource = (PLib3MFResourceIdNode_SetResourcePtr) GetProcAddress(hLibrary, "lib3mf_resourceidnode_setresource"); + #else // _WIN32 + pWrapperTable->m_ResourceIdNode_SetResource = (PLib3MFResourceIdNode_SetResourcePtr) dlsym(hLibrary, "lib3mf_resourceidnode_setresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIdNode_SetResource == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIdNode_GetResource = (PLib3MFResourceIdNode_GetResourcePtr) GetProcAddress(hLibrary, "lib3mf_resourceidnode_getresource"); + #else // _WIN32 + pWrapperTable->m_ResourceIdNode_GetResource = (PLib3MFResourceIdNode_GetResourcePtr) dlsym(hLibrary, "lib3mf_resourceidnode_getresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIdNode_GetResource == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIdNode_GetOutputValue = (PLib3MFResourceIdNode_GetOutputValuePtr) GetProcAddress(hLibrary, "lib3mf_resourceidnode_getoutputvalue"); + #else // _WIN32 + pWrapperTable->m_ResourceIdNode_GetOutputValue = (PLib3MFResourceIdNode_GetOutputValuePtr) dlsym(hLibrary, "lib3mf_resourceidnode_getoutputvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIdNode_GetOutputValue == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_TwoInputNode_GetInputB = (PLib3MFTwoInputNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_twoinputnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_TwoInputNode_GetInputB = (PLib3MFTwoInputNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_twoinputnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_TwoInputNode_GetInputB == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SelectNode_GetInputB = (PLib3MFSelectNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_selectnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_SelectNode_GetInputB = (PLib3MFSelectNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_selectnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SelectNode_GetInputB == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SelectNode_GetInputC = (PLib3MFSelectNode_GetInputCPtr) GetProcAddress(hLibrary, "lib3mf_selectnode_getinputc"); + #else // _WIN32 + pWrapperTable->m_SelectNode_GetInputC = (PLib3MFSelectNode_GetInputCPtr) dlsym(hLibrary, "lib3mf_selectnode_getinputc"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SelectNode_GetInputC == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SelectNode_GetInputD = (PLib3MFSelectNode_GetInputDPtr) GetProcAddress(hLibrary, "lib3mf_selectnode_getinputd"); + #else // _WIN32 + pWrapperTable->m_SelectNode_GetInputD = (PLib3MFSelectNode_GetInputDPtr) dlsym(hLibrary, "lib3mf_selectnode_getinputd"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SelectNode_GetInputD == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ClampNode_GetInputMin = (PLib3MFClampNode_GetInputMinPtr) GetProcAddress(hLibrary, "lib3mf_clampnode_getinputmin"); + #else // _WIN32 + pWrapperTable->m_ClampNode_GetInputMin = (PLib3MFClampNode_GetInputMinPtr) dlsym(hLibrary, "lib3mf_clampnode_getinputmin"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ClampNode_GetInputMin == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ClampNode_GetInputMax = (PLib3MFClampNode_GetInputMaxPtr) GetProcAddress(hLibrary, "lib3mf_clampnode_getinputmax"); + #else // _WIN32 + pWrapperTable->m_ClampNode_GetInputMax = (PLib3MFClampNode_GetInputMaxPtr) dlsym(hLibrary, "lib3mf_clampnode_getinputmax"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ClampNode_GetInputMax == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputX = (PLib3MFComposeVectorNode_GetInputXPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getinputx"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputX = (PLib3MFComposeVectorNode_GetInputXPtr) dlsym(hLibrary, "lib3mf_composevectornode_getinputx"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetInputX == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputY = (PLib3MFComposeVectorNode_GetInputYPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getinputy"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputY = (PLib3MFComposeVectorNode_GetInputYPtr) dlsym(hLibrary, "lib3mf_composevectornode_getinputy"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetInputY == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputZ = (PLib3MFComposeVectorNode_GetInputZPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getinputz"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputZ = (PLib3MFComposeVectorNode_GetInputZPtr) dlsym(hLibrary, "lib3mf_composevectornode_getinputz"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetInputZ == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetOutputResult = (PLib3MFComposeVectorNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetOutputResult = (PLib3MFComposeVectorNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_composevectornode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetOutputResult == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetInputA = (PLib3MFDecomposeVectorNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getinputa"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetInputA = (PLib3MFDecomposeVectorNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetInputA == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputX = (PLib3MFDecomposeVectorNode_GetOutputXPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getoutputx"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputX = (PLib3MFDecomposeVectorNode_GetOutputXPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getoutputx"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetOutputX == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputY = (PLib3MFDecomposeVectorNode_GetOutputYPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getoutputy"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputY = (PLib3MFDecomposeVectorNode_GetOutputYPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getoutputy"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetOutputY == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputZ = (PLib3MFDecomposeVectorNode_GetOutputZPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getoutputz"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputZ = (PLib3MFDecomposeVectorNode_GetOutputZPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getoutputz"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetOutputZ == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM00 = (PLib3MFComposeMatrixNode_GetInputM00Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm00"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM00 = (PLib3MFComposeMatrixNode_GetInputM00Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm00"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM00 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM01 = (PLib3MFComposeMatrixNode_GetInputM01Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm01"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM01 = (PLib3MFComposeMatrixNode_GetInputM01Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm01"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM01 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM02 = (PLib3MFComposeMatrixNode_GetInputM02Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm02"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM02 = (PLib3MFComposeMatrixNode_GetInputM02Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm02"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM02 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM03 = (PLib3MFComposeMatrixNode_GetInputM03Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm03"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM03 = (PLib3MFComposeMatrixNode_GetInputM03Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm03"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM03 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM10 = (PLib3MFComposeMatrixNode_GetInputM10Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm10"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM10 = (PLib3MFComposeMatrixNode_GetInputM10Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm10"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM10 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM11 = (PLib3MFComposeMatrixNode_GetInputM11Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm11"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM11 = (PLib3MFComposeMatrixNode_GetInputM11Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm11"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM11 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM12 = (PLib3MFComposeMatrixNode_GetInputM12Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm12"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM12 = (PLib3MFComposeMatrixNode_GetInputM12Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm12"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM12 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM13 = (PLib3MFComposeMatrixNode_GetInputM13Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm13"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM13 = (PLib3MFComposeMatrixNode_GetInputM13Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm13"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM13 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM20 = (PLib3MFComposeMatrixNode_GetInputM20Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm20"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM20 = (PLib3MFComposeMatrixNode_GetInputM20Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm20"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM20 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM21 = (PLib3MFComposeMatrixNode_GetInputM21Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm21"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM21 = (PLib3MFComposeMatrixNode_GetInputM21Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm21"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM21 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM22 = (PLib3MFComposeMatrixNode_GetInputM22Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm22"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM22 = (PLib3MFComposeMatrixNode_GetInputM22Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm22"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM22 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM23 = (PLib3MFComposeMatrixNode_GetInputM23Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm23"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM23 = (PLib3MFComposeMatrixNode_GetInputM23Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm23"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM23 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM30 = (PLib3MFComposeMatrixNode_GetInputM30Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm30"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM30 = (PLib3MFComposeMatrixNode_GetInputM30Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm30"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM30 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM31 = (PLib3MFComposeMatrixNode_GetInputM31Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm31"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM31 = (PLib3MFComposeMatrixNode_GetInputM31Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm31"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM31 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM32 = (PLib3MFComposeMatrixNode_GetInputM32Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm32"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM32 = (PLib3MFComposeMatrixNode_GetInputM32Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm32"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM32 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM33 = (PLib3MFComposeMatrixNode_GetInputM33Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm33"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM33 = (PLib3MFComposeMatrixNode_GetInputM33Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm33"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM33 == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetOutputResult = (PLib3MFComposeMatrixNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetOutputResult = (PLib3MFComposeMatrixNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_composematrixnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetOutputResult == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputA = (PLib3MFMatrixFromRowsNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputa"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputA = (PLib3MFMatrixFromRowsNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputA == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputB = (PLib3MFMatrixFromRowsNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputB = (PLib3MFMatrixFromRowsNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputB == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputC = (PLib3MFMatrixFromRowsNode_GetInputCPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputc"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputC = (PLib3MFMatrixFromRowsNode_GetInputCPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputc"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputC == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputD = (PLib3MFMatrixFromRowsNode_GetInputDPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputd"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputD = (PLib3MFMatrixFromRowsNode_GetInputDPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputd"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputD == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetOutputResult = (PLib3MFMatrixFromRowsNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetOutputResult = (PLib3MFMatrixFromRowsNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetOutputResult == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputA = (PLib3MFMatrixFromColumnsNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputa"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputA = (PLib3MFMatrixFromColumnsNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputA == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputB = (PLib3MFMatrixFromColumnsNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputB = (PLib3MFMatrixFromColumnsNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputB == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputC = (PLib3MFMatrixFromColumnsNode_GetInputCPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputc"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputC = (PLib3MFMatrixFromColumnsNode_GetInputCPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputc"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputC == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputD = (PLib3MFMatrixFromColumnsNode_GetInputDPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputd"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputD = (PLib3MFMatrixFromColumnsNode_GetInputDPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputd"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputD == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult = (PLib3MFMatrixFromColumnsNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult = (PLib3MFMatrixFromColumnsNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstantNode_SetConstant = (PLib3MFConstantNode_SetConstantPtr) GetProcAddress(hLibrary, "lib3mf_constantnode_setconstant"); + #else // _WIN32 + pWrapperTable->m_ConstantNode_SetConstant = (PLib3MFConstantNode_SetConstantPtr) dlsym(hLibrary, "lib3mf_constantnode_setconstant"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstantNode_SetConstant == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstantNode_GetConstant = (PLib3MFConstantNode_GetConstantPtr) GetProcAddress(hLibrary, "lib3mf_constantnode_getconstant"); + #else // _WIN32 + pWrapperTable->m_ConstantNode_GetConstant = (PLib3MFConstantNode_GetConstantPtr) dlsym(hLibrary, "lib3mf_constantnode_getconstant"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstantNode_GetConstant == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstantNode_GetOutputValue = (PLib3MFConstantNode_GetOutputValuePtr) GetProcAddress(hLibrary, "lib3mf_constantnode_getoutputvalue"); + #else // _WIN32 + pWrapperTable->m_ConstantNode_GetOutputValue = (PLib3MFConstantNode_GetOutputValuePtr) dlsym(hLibrary, "lib3mf_constantnode_getoutputvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstantNode_GetOutputValue == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstVecNode_SetVector = (PLib3MFConstVecNode_SetVectorPtr) GetProcAddress(hLibrary, "lib3mf_constvecnode_setvector"); + #else // _WIN32 + pWrapperTable->m_ConstVecNode_SetVector = (PLib3MFConstVecNode_SetVectorPtr) dlsym(hLibrary, "lib3mf_constvecnode_setvector"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstVecNode_SetVector == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstVecNode_GetVector = (PLib3MFConstVecNode_GetVectorPtr) GetProcAddress(hLibrary, "lib3mf_constvecnode_getvector"); + #else // _WIN32 + pWrapperTable->m_ConstVecNode_GetVector = (PLib3MFConstVecNode_GetVectorPtr) dlsym(hLibrary, "lib3mf_constvecnode_getvector"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstVecNode_GetVector == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstVecNode_GetOutputVector = (PLib3MFConstVecNode_GetOutputVectorPtr) GetProcAddress(hLibrary, "lib3mf_constvecnode_getoutputvector"); + #else // _WIN32 + pWrapperTable->m_ConstVecNode_GetOutputVector = (PLib3MFConstVecNode_GetOutputVectorPtr) dlsym(hLibrary, "lib3mf_constvecnode_getoutputvector"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstVecNode_GetOutputVector == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstMatNode_SetMatrix = (PLib3MFConstMatNode_SetMatrixPtr) GetProcAddress(hLibrary, "lib3mf_constmatnode_setmatrix"); + #else // _WIN32 + pWrapperTable->m_ConstMatNode_SetMatrix = (PLib3MFConstMatNode_SetMatrixPtr) dlsym(hLibrary, "lib3mf_constmatnode_setmatrix"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstMatNode_SetMatrix == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstMatNode_GetMatrix = (PLib3MFConstMatNode_GetMatrixPtr) GetProcAddress(hLibrary, "lib3mf_constmatnode_getmatrix"); + #else // _WIN32 + pWrapperTable->m_ConstMatNode_GetMatrix = (PLib3MFConstMatNode_GetMatrixPtr) dlsym(hLibrary, "lib3mf_constmatnode_getmatrix"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstMatNode_GetMatrix == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstMatNode_GetOutputMatrix = (PLib3MFConstMatNode_GetOutputMatrixPtr) GetProcAddress(hLibrary, "lib3mf_constmatnode_getoutputmatrix"); + #else // _WIN32 + pWrapperTable->m_ConstMatNode_GetOutputMatrix = (PLib3MFConstMatNode_GetOutputMatrixPtr) dlsym(hLibrary, "lib3mf_constmatnode_getoutputmatrix"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstMatNode_GetOutputMatrix == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshNode_GetInputMesh = (PLib3MFMeshNode_GetInputMeshPtr) GetProcAddress(hLibrary, "lib3mf_meshnode_getinputmesh"); + #else // _WIN32 + pWrapperTable->m_MeshNode_GetInputMesh = (PLib3MFMeshNode_GetInputMeshPtr) dlsym(hLibrary, "lib3mf_meshnode_getinputmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshNode_GetInputMesh == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshNode_GetInputPos = (PLib3MFMeshNode_GetInputPosPtr) GetProcAddress(hLibrary, "lib3mf_meshnode_getinputpos"); + #else // _WIN32 + pWrapperTable->m_MeshNode_GetInputPos = (PLib3MFMeshNode_GetInputPosPtr) dlsym(hLibrary, "lib3mf_meshnode_getinputpos"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshNode_GetInputPos == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshNode_GetOutputDistance = (PLib3MFMeshNode_GetOutputDistancePtr) GetProcAddress(hLibrary, "lib3mf_meshnode_getoutputdistance"); + #else // _WIN32 + pWrapperTable->m_MeshNode_GetOutputDistance = (PLib3MFMeshNode_GetOutputDistancePtr) dlsym(hLibrary, "lib3mf_meshnode_getoutputdistance"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshNode_GetOutputDistance == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputMesh = (PLib3MFUnsignedMeshNode_GetInputMeshPtr) GetProcAddress(hLibrary, "lib3mf_unsignedmeshnode_getinputmesh"); + #else // _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputMesh = (PLib3MFUnsignedMeshNode_GetInputMeshPtr) dlsym(hLibrary, "lib3mf_unsignedmeshnode_getinputmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_UnsignedMeshNode_GetInputMesh == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputPos = (PLib3MFUnsignedMeshNode_GetInputPosPtr) GetProcAddress(hLibrary, "lib3mf_unsignedmeshnode_getinputpos"); + #else // _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputPos = (PLib3MFUnsignedMeshNode_GetInputPosPtr) dlsym(hLibrary, "lib3mf_unsignedmeshnode_getinputpos"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_UnsignedMeshNode_GetInputPos == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetOutputDistance = (PLib3MFUnsignedMeshNode_GetOutputDistancePtr) GetProcAddress(hLibrary, "lib3mf_unsignedmeshnode_getoutputdistance"); + #else // _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetOutputDistance = (PLib3MFUnsignedMeshNode_GetOutputDistancePtr) dlsym(hLibrary, "lib3mf_unsignedmeshnode_getoutputdistance"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_UnsignedMeshNode_GetOutputDistance == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionCallNode_GetInputFunctionID = (PLib3MFFunctionCallNode_GetInputFunctionIDPtr) GetProcAddress(hLibrary, "lib3mf_functioncallnode_getinputfunctionid"); + #else // _WIN32 + pWrapperTable->m_FunctionCallNode_GetInputFunctionID = (PLib3MFFunctionCallNode_GetInputFunctionIDPtr) dlsym(hLibrary, "lib3mf_functioncallnode_getinputfunctionid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionCallNode_GetInputFunctionID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_NodeIterator_GetCurrent = (PLib3MFNodeIterator_GetCurrentPtr) GetProcAddress(hLibrary, "lib3mf_nodeiterator_getcurrent"); + #else // _WIN32 + pWrapperTable->m_NodeIterator_GetCurrent = (PLib3MFNodeIterator_GetCurrentPtr) dlsym(hLibrary, "lib3mf_nodeiterator_getcurrent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_NodeIterator_GetCurrent == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_GetDisplayName = (PLib3MFFunction_GetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_function_getdisplayname"); + #else // _WIN32 + pWrapperTable->m_Function_GetDisplayName = (PLib3MFFunction_GetDisplayNamePtr) dlsym(hLibrary, "lib3mf_function_getdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_GetDisplayName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_SetDisplayName = (PLib3MFFunction_SetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_function_setdisplayname"); + #else // _WIN32 + pWrapperTable->m_Function_SetDisplayName = (PLib3MFFunction_SetDisplayNamePtr) dlsym(hLibrary, "lib3mf_function_setdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_SetDisplayName == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_AddInput = (PLib3MFFunction_AddInputPtr) GetProcAddress(hLibrary, "lib3mf_function_addinput"); + #else // _WIN32 + pWrapperTable->m_Function_AddInput = (PLib3MFFunction_AddInputPtr) dlsym(hLibrary, "lib3mf_function_addinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_AddInput == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_GetInputs = (PLib3MFFunction_GetInputsPtr) GetProcAddress(hLibrary, "lib3mf_function_getinputs"); + #else // _WIN32 + pWrapperTable->m_Function_GetInputs = (PLib3MFFunction_GetInputsPtr) dlsym(hLibrary, "lib3mf_function_getinputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_GetInputs == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_RemoveInput = (PLib3MFFunction_RemoveInputPtr) GetProcAddress(hLibrary, "lib3mf_function_removeinput"); + #else // _WIN32 + pWrapperTable->m_Function_RemoveInput = (PLib3MFFunction_RemoveInputPtr) dlsym(hLibrary, "lib3mf_function_removeinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_RemoveInput == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_AddOutput = (PLib3MFFunction_AddOutputPtr) GetProcAddress(hLibrary, "lib3mf_function_addoutput"); + #else // _WIN32 + pWrapperTable->m_Function_AddOutput = (PLib3MFFunction_AddOutputPtr) dlsym(hLibrary, "lib3mf_function_addoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_AddOutput == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_GetOutputs = (PLib3MFFunction_GetOutputsPtr) GetProcAddress(hLibrary, "lib3mf_function_getoutputs"); + #else // _WIN32 + pWrapperTable->m_Function_GetOutputs = (PLib3MFFunction_GetOutputsPtr) dlsym(hLibrary, "lib3mf_function_getoutputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_GetOutputs == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_RemoveOutput = (PLib3MFFunction_RemoveOutputPtr) GetProcAddress(hLibrary, "lib3mf_function_removeoutput"); + #else // _WIN32 + pWrapperTable->m_Function_RemoveOutput = (PLib3MFFunction_RemoveOutputPtr) dlsym(hLibrary, "lib3mf_function_removeoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_RemoveOutput == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_FindInput = (PLib3MFFunction_FindInputPtr) GetProcAddress(hLibrary, "lib3mf_function_findinput"); + #else // _WIN32 + pWrapperTable->m_Function_FindInput = (PLib3MFFunction_FindInputPtr) dlsym(hLibrary, "lib3mf_function_findinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_FindInput == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_FindOutput = (PLib3MFFunction_FindOutputPtr) GetProcAddress(hLibrary, "lib3mf_function_findoutput"); + #else // _WIN32 + pWrapperTable->m_Function_FindOutput = (PLib3MFFunction_FindOutputPtr) dlsym(hLibrary, "lib3mf_function_findoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_FindOutput == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_GetIdentifier = (PLib3MFImplicitFunction_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_getidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_GetIdentifier = (PLib3MFImplicitFunction_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitfunction_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_GetIdentifier == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_SetIdentifier = (PLib3MFImplicitFunction_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_setidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_SetIdentifier = (PLib3MFImplicitFunction_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitfunction_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_SetIdentifier == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddNode = (PLib3MFImplicitFunction_AddNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddNode = (PLib3MFImplicitFunction_AddNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddSinNode = (PLib3MFImplicitFunction_AddSinNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsinnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddSinNode = (PLib3MFImplicitFunction_AddSinNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsinnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddSinNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddCosNode = (PLib3MFImplicitFunction_AddCosNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcosnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddCosNode = (PLib3MFImplicitFunction_AddCosNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcosnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddCosNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddTanNode = (PLib3MFImplicitFunction_AddTanNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addtannode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddTanNode = (PLib3MFImplicitFunction_AddTanNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addtannode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddTanNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddArcSinNode = (PLib3MFImplicitFunction_AddArcSinNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addarcsinnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddArcSinNode = (PLib3MFImplicitFunction_AddArcSinNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addarcsinnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddArcSinNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddArcCosNode = (PLib3MFImplicitFunction_AddArcCosNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addarccosnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddArcCosNode = (PLib3MFImplicitFunction_AddArcCosNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addarccosnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddArcCosNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddArcTan2Node = (PLib3MFImplicitFunction_AddArcTan2NodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addarctan2node"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddArcTan2Node = (PLib3MFImplicitFunction_AddArcTan2NodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addarctan2node"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddArcTan2Node == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddSinhNode = (PLib3MFImplicitFunction_AddSinhNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsinhnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddSinhNode = (PLib3MFImplicitFunction_AddSinhNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsinhnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddSinhNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddCoshNode = (PLib3MFImplicitFunction_AddCoshNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcoshnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddCoshNode = (PLib3MFImplicitFunction_AddCoshNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcoshnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddCoshNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddTanhNode = (PLib3MFImplicitFunction_AddTanhNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addtanhnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddTanhNode = (PLib3MFImplicitFunction_AddTanhNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addtanhnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddTanhNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddRoundNode = (PLib3MFImplicitFunction_AddRoundNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addroundnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddRoundNode = (PLib3MFImplicitFunction_AddRoundNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addroundnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddRoundNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddCeilNode = (PLib3MFImplicitFunction_AddCeilNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addceilnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddCeilNode = (PLib3MFImplicitFunction_AddCeilNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addceilnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddCeilNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddFloorNode = (PLib3MFImplicitFunction_AddFloorNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfloornode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddFloorNode = (PLib3MFImplicitFunction_AddFloorNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfloornode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddFloorNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddSignNode = (PLib3MFImplicitFunction_AddSignNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsignnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddSignNode = (PLib3MFImplicitFunction_AddSignNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsignnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddSignNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddFractNode = (PLib3MFImplicitFunction_AddFractNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfractnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddFractNode = (PLib3MFImplicitFunction_AddFractNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfractnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddFractNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddAbsNode = (PLib3MFImplicitFunction_AddAbsNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addabsnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddAbsNode = (PLib3MFImplicitFunction_AddAbsNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addabsnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddAbsNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddExpNode = (PLib3MFImplicitFunction_AddExpNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addexpnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddExpNode = (PLib3MFImplicitFunction_AddExpNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addexpnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddExpNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddLogNode = (PLib3MFImplicitFunction_AddLogNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlognode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddLogNode = (PLib3MFImplicitFunction_AddLogNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlognode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddLogNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddLog2Node = (PLib3MFImplicitFunction_AddLog2NodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlog2node"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddLog2Node = (PLib3MFImplicitFunction_AddLog2NodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlog2node"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddLog2Node == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddLog10Node = (PLib3MFImplicitFunction_AddLog10NodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlog10node"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddLog10Node = (PLib3MFImplicitFunction_AddLog10NodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlog10node"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddLog10Node == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddLengthNode = (PLib3MFImplicitFunction_AddLengthNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlengthnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddLengthNode = (PLib3MFImplicitFunction_AddLengthNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlengthnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddLengthNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddTransposeNode = (PLib3MFImplicitFunction_AddTransposeNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addtransposenode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddTransposeNode = (PLib3MFImplicitFunction_AddTransposeNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addtransposenode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddTransposeNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_InverseNode = (PLib3MFImplicitFunction_InverseNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_inversenode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_InverseNode = (PLib3MFImplicitFunction_InverseNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_inversenode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_InverseNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddSqrtNode = (PLib3MFImplicitFunction_AddSqrtNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsqrtnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddSqrtNode = (PLib3MFImplicitFunction_AddSqrtNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsqrtnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddSqrtNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddResourceIdNode = (PLib3MFImplicitFunction_AddResourceIdNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addresourceidnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddResourceIdNode = (PLib3MFImplicitFunction_AddResourceIdNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addresourceidnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddResourceIdNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddAdditionNode = (PLib3MFImplicitFunction_AddAdditionNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addadditionnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddAdditionNode = (PLib3MFImplicitFunction_AddAdditionNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addadditionnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddAdditionNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddSubtractionNode = (PLib3MFImplicitFunction_AddSubtractionNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsubtractionnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddSubtractionNode = (PLib3MFImplicitFunction_AddSubtractionNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsubtractionnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddSubtractionNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddMultiplicationNode = (PLib3MFImplicitFunction_AddMultiplicationNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmultiplicationnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddMultiplicationNode = (PLib3MFImplicitFunction_AddMultiplicationNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmultiplicationnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddMultiplicationNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddDivisionNode = (PLib3MFImplicitFunction_AddDivisionNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_adddivisionnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddDivisionNode = (PLib3MFImplicitFunction_AddDivisionNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_adddivisionnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddDivisionNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddDotNode = (PLib3MFImplicitFunction_AddDotNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_adddotnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddDotNode = (PLib3MFImplicitFunction_AddDotNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_adddotnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddDotNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddCrossNode = (PLib3MFImplicitFunction_AddCrossNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcrossnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddCrossNode = (PLib3MFImplicitFunction_AddCrossNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcrossnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddCrossNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode = (PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmatvecmultiplicationnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode = (PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmatvecmultiplicationnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddMinNode = (PLib3MFImplicitFunction_AddMinNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addminnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddMinNode = (PLib3MFImplicitFunction_AddMinNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addminnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddMinNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddMaxNode = (PLib3MFImplicitFunction_AddMaxNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmaxnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddMaxNode = (PLib3MFImplicitFunction_AddMaxNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmaxnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddMaxNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddFmodNode = (PLib3MFImplicitFunction_AddFmodNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfmodnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddFmodNode = (PLib3MFImplicitFunction_AddFmodNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfmodnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddFmodNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddPowNode = (PLib3MFImplicitFunction_AddPowNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addpownode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddPowNode = (PLib3MFImplicitFunction_AddPowNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addpownode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddPowNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddSelectNode = (PLib3MFImplicitFunction_AddSelectNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addselectnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddSelectNode = (PLib3MFImplicitFunction_AddSelectNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addselectnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddSelectNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddClampNode = (PLib3MFImplicitFunction_AddClampNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addclampnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddClampNode = (PLib3MFImplicitFunction_AddClampNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addclampnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddClampNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddComposeVectorNode = (PLib3MFImplicitFunction_AddComposeVectorNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcomposevectornode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddComposeVectorNode = (PLib3MFImplicitFunction_AddComposeVectorNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcomposevectornode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddComposeVectorNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode = (PLib3MFImplicitFunction_AddVectorFromScalarNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addvectorfromscalarnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode = (PLib3MFImplicitFunction_AddVectorFromScalarNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addvectorfromscalarnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode = (PLib3MFImplicitFunction_AddDecomposeVectorNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_adddecomposevectornode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode = (PLib3MFImplicitFunction_AddDecomposeVectorNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_adddecomposevectornode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode = (PLib3MFImplicitFunction_AddComposeMatrixNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcomposematrixnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode = (PLib3MFImplicitFunction_AddComposeMatrixNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcomposematrixnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode = (PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmatrixfromrowsnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode = (PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmatrixfromrowsnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode = (PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmatrixfromcolumnsnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode = (PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmatrixfromcolumnsnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddConstantNode = (PLib3MFImplicitFunction_AddConstantNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addconstantnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddConstantNode = (PLib3MFImplicitFunction_AddConstantNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addconstantnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddConstantNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddConstVecNode = (PLib3MFImplicitFunction_AddConstVecNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addconstvecnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddConstVecNode = (PLib3MFImplicitFunction_AddConstVecNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addconstvecnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddConstVecNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddConstMatNode = (PLib3MFImplicitFunction_AddConstMatNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addconstmatnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddConstMatNode = (PLib3MFImplicitFunction_AddConstMatNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addconstmatnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddConstMatNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddMeshNode = (PLib3MFImplicitFunction_AddMeshNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmeshnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddMeshNode = (PLib3MFImplicitFunction_AddMeshNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmeshnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddMeshNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode = (PLib3MFImplicitFunction_AddUnsignedMeshNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addunsignedmeshnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode = (PLib3MFImplicitFunction_AddUnsignedMeshNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addunsignedmeshnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddFunctionCallNode = (PLib3MFImplicitFunction_AddFunctionCallNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfunctioncallnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddFunctionCallNode = (PLib3MFImplicitFunction_AddFunctionCallNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfunctioncallnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddFunctionCallNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_GetNodes = (PLib3MFImplicitFunction_GetNodesPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_getnodes"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_GetNodes = (PLib3MFImplicitFunction_GetNodesPtr) dlsym(hLibrary, "lib3mf_implicitfunction_getnodes"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_GetNodes == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_RemoveNode = (PLib3MFImplicitFunction_RemoveNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_removenode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_RemoveNode = (PLib3MFImplicitFunction_RemoveNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_removenode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_RemoveNode == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddLink = (PLib3MFImplicitFunction_AddLinkPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlink"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddLink = (PLib3MFImplicitFunction_AddLinkPtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlink"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddLink == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddLinkByNames = (PLib3MFImplicitFunction_AddLinkByNamesPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlinkbynames"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddLinkByNames = (PLib3MFImplicitFunction_AddLinkByNamesPtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlinkbynames"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddLinkByNames == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_Clear = (PLib3MFImplicitFunction_ClearPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_clear"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_Clear = (PLib3MFImplicitFunction_ClearPtr) dlsym(hLibrary, "lib3mf_implicitfunction_clear"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_Clear == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_SortNodesTopologically = (PLib3MFImplicitFunction_SortNodesTopologicallyPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_sortnodestopologically"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_SortNodesTopologically = (PLib3MFImplicitFunction_SortNodesTopologicallyPtr) dlsym(hLibrary, "lib3mf_implicitfunction_sortnodestopologically"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_SortNodesTopologically == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionFromImage3D_GetImage3D = (PLib3MFFunctionFromImage3D_GetImage3DPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getimage3d"); + #else // _WIN32 + pWrapperTable->m_FunctionFromImage3D_GetImage3D = (PLib3MFFunctionFromImage3D_GetImage3DPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getimage3d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionFromImage3D_GetImage3D == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionFromImage3D_SetImage3D = (PLib3MFFunctionFromImage3D_SetImage3DPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setimage3d"); + #else // _WIN32 + pWrapperTable->m_FunctionFromImage3D_SetImage3D = (PLib3MFFunctionFromImage3D_SetImage3DPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setimage3d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionFromImage3D_SetImage3D == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionFromImage3D_SetFilter = (PLib3MFFunctionFromImage3D_SetFilterPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setfilter"); + #else // _WIN32 + pWrapperTable->m_FunctionFromImage3D_SetFilter = (PLib3MFFunctionFromImage3D_SetFilterPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setfilter"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionFromImage3D_SetFilter == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionFromImage3D_GetFilter = (PLib3MFFunctionFromImage3D_GetFilterPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getfilter"); + #else // _WIN32 + pWrapperTable->m_FunctionFromImage3D_GetFilter = (PLib3MFFunctionFromImage3D_GetFilterPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getfilter"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionFromImage3D_GetFilter == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionFromImage3D_SetTileStyles = (PLib3MFFunctionFromImage3D_SetTileStylesPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_settilestyles"); + #else // _WIN32 + pWrapperTable->m_FunctionFromImage3D_SetTileStyles = (PLib3MFFunctionFromImage3D_SetTileStylesPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_settilestyles"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionFromImage3D_SetTileStyles == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionFromImage3D_GetTileStyles = (PLib3MFFunctionFromImage3D_GetTileStylesPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_gettilestyles"); + #else // _WIN32 + pWrapperTable->m_FunctionFromImage3D_GetTileStyles = (PLib3MFFunctionFromImage3D_GetTileStylesPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_gettilestyles"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionFromImage3D_GetTileStyles == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionFromImage3D_GetOffset = (PLib3MFFunctionFromImage3D_GetOffsetPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getoffset"); + #else // _WIN32 + pWrapperTable->m_FunctionFromImage3D_GetOffset = (PLib3MFFunctionFromImage3D_GetOffsetPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getoffset"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionFromImage3D_GetOffset == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionFromImage3D_SetOffset = (PLib3MFFunctionFromImage3D_SetOffsetPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setoffset"); + #else // _WIN32 + pWrapperTable->m_FunctionFromImage3D_SetOffset = (PLib3MFFunctionFromImage3D_SetOffsetPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setoffset"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionFromImage3D_SetOffset == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionFromImage3D_GetScale = (PLib3MFFunctionFromImage3D_GetScalePtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getscale"); + #else // _WIN32 + pWrapperTable->m_FunctionFromImage3D_GetScale = (PLib3MFFunctionFromImage3D_GetScalePtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getscale"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionFromImage3D_GetScale == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionFromImage3D_SetScale = (PLib3MFFunctionFromImage3D_SetScalePtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setscale"); + #else // _WIN32 + pWrapperTable->m_FunctionFromImage3D_SetScale = (PLib3MFFunctionFromImage3D_SetScalePtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setscale"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionFromImage3D_SetScale == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItem_GetObjectResource = (PLib3MFBuildItem_GetObjectResourcePtr) GetProcAddress(hLibrary, "lib3mf_builditem_getobjectresource"); + #else // _WIN32 + pWrapperTable->m_BuildItem_GetObjectResource = (PLib3MFBuildItem_GetObjectResourcePtr) dlsym(hLibrary, "lib3mf_builditem_getobjectresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItem_GetObjectResource == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItem_GetUUID = (PLib3MFBuildItem_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_builditem_getuuid"); + #else // _WIN32 + pWrapperTable->m_BuildItem_GetUUID = (PLib3MFBuildItem_GetUUIDPtr) dlsym(hLibrary, "lib3mf_builditem_getuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItem_GetUUID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItem_SetUUID = (PLib3MFBuildItem_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_builditem_setuuid"); + #else // _WIN32 + pWrapperTable->m_BuildItem_SetUUID = (PLib3MFBuildItem_SetUUIDPtr) dlsym(hLibrary, "lib3mf_builditem_setuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItem_SetUUID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItem_GetObjectResourceID = (PLib3MFBuildItem_GetObjectResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_builditem_getobjectresourceid"); + #else // _WIN32 + pWrapperTable->m_BuildItem_GetObjectResourceID = (PLib3MFBuildItem_GetObjectResourceIDPtr) dlsym(hLibrary, "lib3mf_builditem_getobjectresourceid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItem_GetObjectResourceID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItem_HasObjectTransform = (PLib3MFBuildItem_HasObjectTransformPtr) GetProcAddress(hLibrary, "lib3mf_builditem_hasobjecttransform"); + #else // _WIN32 + pWrapperTable->m_BuildItem_HasObjectTransform = (PLib3MFBuildItem_HasObjectTransformPtr) dlsym(hLibrary, "lib3mf_builditem_hasobjecttransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItem_HasObjectTransform == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItem_GetObjectTransform = (PLib3MFBuildItem_GetObjectTransformPtr) GetProcAddress(hLibrary, "lib3mf_builditem_getobjecttransform"); + #else // _WIN32 + pWrapperTable->m_BuildItem_GetObjectTransform = (PLib3MFBuildItem_GetObjectTransformPtr) dlsym(hLibrary, "lib3mf_builditem_getobjecttransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItem_GetObjectTransform == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItem_SetObjectTransform = (PLib3MFBuildItem_SetObjectTransformPtr) GetProcAddress(hLibrary, "lib3mf_builditem_setobjecttransform"); + #else // _WIN32 + pWrapperTable->m_BuildItem_SetObjectTransform = (PLib3MFBuildItem_SetObjectTransformPtr) dlsym(hLibrary, "lib3mf_builditem_setobjecttransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItem_SetObjectTransform == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItem_GetPartNumber = (PLib3MFBuildItem_GetPartNumberPtr) GetProcAddress(hLibrary, "lib3mf_builditem_getpartnumber"); + #else // _WIN32 + pWrapperTable->m_BuildItem_GetPartNumber = (PLib3MFBuildItem_GetPartNumberPtr) dlsym(hLibrary, "lib3mf_builditem_getpartnumber"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItem_GetPartNumber == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItem_SetPartNumber = (PLib3MFBuildItem_SetPartNumberPtr) GetProcAddress(hLibrary, "lib3mf_builditem_setpartnumber"); + #else // _WIN32 + pWrapperTable->m_BuildItem_SetPartNumber = (PLib3MFBuildItem_SetPartNumberPtr) dlsym(hLibrary, "lib3mf_builditem_setpartnumber"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItem_SetPartNumber == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItem_GetMetaDataGroup = (PLib3MFBuildItem_GetMetaDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_builditem_getmetadatagroup"); + #else // _WIN32 + pWrapperTable->m_BuildItem_GetMetaDataGroup = (PLib3MFBuildItem_GetMetaDataGroupPtr) dlsym(hLibrary, "lib3mf_builditem_getmetadatagroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItem_GetMetaDataGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItem_GetOutbox = (PLib3MFBuildItem_GetOutboxPtr) GetProcAddress(hLibrary, "lib3mf_builditem_getoutbox"); + #else // _WIN32 + pWrapperTable->m_BuildItem_GetOutbox = (PLib3MFBuildItem_GetOutboxPtr) dlsym(hLibrary, "lib3mf_builditem_getoutbox"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItem_GetOutbox == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItemIterator_MoveNext = (PLib3MFBuildItemIterator_MoveNextPtr) GetProcAddress(hLibrary, "lib3mf_builditemiterator_movenext"); + #else // _WIN32 + pWrapperTable->m_BuildItemIterator_MoveNext = (PLib3MFBuildItemIterator_MoveNextPtr) dlsym(hLibrary, "lib3mf_builditemiterator_movenext"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItemIterator_MoveNext == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItemIterator_MovePrevious = (PLib3MFBuildItemIterator_MovePreviousPtr) GetProcAddress(hLibrary, "lib3mf_builditemiterator_moveprevious"); + #else // _WIN32 + pWrapperTable->m_BuildItemIterator_MovePrevious = (PLib3MFBuildItemIterator_MovePreviousPtr) dlsym(hLibrary, "lib3mf_builditemiterator_moveprevious"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItemIterator_MovePrevious == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItemIterator_GetCurrent = (PLib3MFBuildItemIterator_GetCurrentPtr) GetProcAddress(hLibrary, "lib3mf_builditemiterator_getcurrent"); + #else // _WIN32 + pWrapperTable->m_BuildItemIterator_GetCurrent = (PLib3MFBuildItemIterator_GetCurrentPtr) dlsym(hLibrary, "lib3mf_builditemiterator_getcurrent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItemIterator_GetCurrent == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItemIterator_Clone = (PLib3MFBuildItemIterator_ClonePtr) GetProcAddress(hLibrary, "lib3mf_builditemiterator_clone"); + #else // _WIN32 + pWrapperTable->m_BuildItemIterator_Clone = (PLib3MFBuildItemIterator_ClonePtr) dlsym(hLibrary, "lib3mf_builditemiterator_clone"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItemIterator_Clone == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BuildItemIterator_Count = (PLib3MFBuildItemIterator_CountPtr) GetProcAddress(hLibrary, "lib3mf_builditemiterator_count"); + #else // _WIN32 + pWrapperTable->m_BuildItemIterator_Count = (PLib3MFBuildItemIterator_CountPtr) dlsym(hLibrary, "lib3mf_builditemiterator_count"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BuildItemIterator_Count == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Slice_SetVertices = (PLib3MFSlice_SetVerticesPtr) GetProcAddress(hLibrary, "lib3mf_slice_setvertices"); + #else // _WIN32 + pWrapperTable->m_Slice_SetVertices = (PLib3MFSlice_SetVerticesPtr) dlsym(hLibrary, "lib3mf_slice_setvertices"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Slice_SetVertices == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Slice_GetVertices = (PLib3MFSlice_GetVerticesPtr) GetProcAddress(hLibrary, "lib3mf_slice_getvertices"); + #else // _WIN32 + pWrapperTable->m_Slice_GetVertices = (PLib3MFSlice_GetVerticesPtr) dlsym(hLibrary, "lib3mf_slice_getvertices"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Slice_GetVertices == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Slice_GetVertexCount = (PLib3MFSlice_GetVertexCountPtr) GetProcAddress(hLibrary, "lib3mf_slice_getvertexcount"); + #else // _WIN32 + pWrapperTable->m_Slice_GetVertexCount = (PLib3MFSlice_GetVertexCountPtr) dlsym(hLibrary, "lib3mf_slice_getvertexcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Slice_GetVertexCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Slice_AddPolygon = (PLib3MFSlice_AddPolygonPtr) GetProcAddress(hLibrary, "lib3mf_slice_addpolygon"); + #else // _WIN32 + pWrapperTable->m_Slice_AddPolygon = (PLib3MFSlice_AddPolygonPtr) dlsym(hLibrary, "lib3mf_slice_addpolygon"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Slice_AddPolygon == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Slice_GetPolygonCount = (PLib3MFSlice_GetPolygonCountPtr) GetProcAddress(hLibrary, "lib3mf_slice_getpolygoncount"); + #else // _WIN32 + pWrapperTable->m_Slice_GetPolygonCount = (PLib3MFSlice_GetPolygonCountPtr) dlsym(hLibrary, "lib3mf_slice_getpolygoncount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Slice_GetPolygonCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Slice_SetPolygonIndices = (PLib3MFSlice_SetPolygonIndicesPtr) GetProcAddress(hLibrary, "lib3mf_slice_setpolygonindices"); + #else // _WIN32 + pWrapperTable->m_Slice_SetPolygonIndices = (PLib3MFSlice_SetPolygonIndicesPtr) dlsym(hLibrary, "lib3mf_slice_setpolygonindices"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Slice_SetPolygonIndices == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Slice_GetPolygonIndices = (PLib3MFSlice_GetPolygonIndicesPtr) GetProcAddress(hLibrary, "lib3mf_slice_getpolygonindices"); + #else // _WIN32 + pWrapperTable->m_Slice_GetPolygonIndices = (PLib3MFSlice_GetPolygonIndicesPtr) dlsym(hLibrary, "lib3mf_slice_getpolygonindices"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Slice_GetPolygonIndices == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Slice_GetPolygonIndexCount = (PLib3MFSlice_GetPolygonIndexCountPtr) GetProcAddress(hLibrary, "lib3mf_slice_getpolygonindexcount"); + #else // _WIN32 + pWrapperTable->m_Slice_GetPolygonIndexCount = (PLib3MFSlice_GetPolygonIndexCountPtr) dlsym(hLibrary, "lib3mf_slice_getpolygonindexcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Slice_GetPolygonIndexCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Slice_GetZTop = (PLib3MFSlice_GetZTopPtr) GetProcAddress(hLibrary, "lib3mf_slice_getztop"); + #else // _WIN32 + pWrapperTable->m_Slice_GetZTop = (PLib3MFSlice_GetZTopPtr) dlsym(hLibrary, "lib3mf_slice_getztop"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Slice_GetZTop == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SliceStack_GetBottomZ = (PLib3MFSliceStack_GetBottomZPtr) GetProcAddress(hLibrary, "lib3mf_slicestack_getbottomz"); + #else // _WIN32 + pWrapperTable->m_SliceStack_GetBottomZ = (PLib3MFSliceStack_GetBottomZPtr) dlsym(hLibrary, "lib3mf_slicestack_getbottomz"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SliceStack_GetBottomZ == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SliceStack_GetSliceCount = (PLib3MFSliceStack_GetSliceCountPtr) GetProcAddress(hLibrary, "lib3mf_slicestack_getslicecount"); + #else // _WIN32 + pWrapperTable->m_SliceStack_GetSliceCount = (PLib3MFSliceStack_GetSliceCountPtr) dlsym(hLibrary, "lib3mf_slicestack_getslicecount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SliceStack_GetSliceCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SliceStack_GetSlice = (PLib3MFSliceStack_GetSlicePtr) GetProcAddress(hLibrary, "lib3mf_slicestack_getslice"); + #else // _WIN32 + pWrapperTable->m_SliceStack_GetSlice = (PLib3MFSliceStack_GetSlicePtr) dlsym(hLibrary, "lib3mf_slicestack_getslice"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SliceStack_GetSlice == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SliceStack_AddSlice = (PLib3MFSliceStack_AddSlicePtr) GetProcAddress(hLibrary, "lib3mf_slicestack_addslice"); + #else // _WIN32 + pWrapperTable->m_SliceStack_AddSlice = (PLib3MFSliceStack_AddSlicePtr) dlsym(hLibrary, "lib3mf_slicestack_addslice"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SliceStack_AddSlice == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SliceStack_GetSliceRefCount = (PLib3MFSliceStack_GetSliceRefCountPtr) GetProcAddress(hLibrary, "lib3mf_slicestack_getslicerefcount"); + #else // _WIN32 + pWrapperTable->m_SliceStack_GetSliceRefCount = (PLib3MFSliceStack_GetSliceRefCountPtr) dlsym(hLibrary, "lib3mf_slicestack_getslicerefcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SliceStack_GetSliceRefCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SliceStack_AddSliceStackReference = (PLib3MFSliceStack_AddSliceStackReferencePtr) GetProcAddress(hLibrary, "lib3mf_slicestack_addslicestackreference"); + #else // _WIN32 + pWrapperTable->m_SliceStack_AddSliceStackReference = (PLib3MFSliceStack_AddSliceStackReferencePtr) dlsym(hLibrary, "lib3mf_slicestack_addslicestackreference"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SliceStack_AddSliceStackReference == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SliceStack_GetSliceStackReference = (PLib3MFSliceStack_GetSliceStackReferencePtr) GetProcAddress(hLibrary, "lib3mf_slicestack_getslicestackreference"); + #else // _WIN32 + pWrapperTable->m_SliceStack_GetSliceStackReference = (PLib3MFSliceStack_GetSliceStackReferencePtr) dlsym(hLibrary, "lib3mf_slicestack_getslicestackreference"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SliceStack_GetSliceStackReference == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SliceStack_CollapseSliceReferences = (PLib3MFSliceStack_CollapseSliceReferencesPtr) GetProcAddress(hLibrary, "lib3mf_slicestack_collapseslicereferences"); + #else // _WIN32 + pWrapperTable->m_SliceStack_CollapseSliceReferences = (PLib3MFSliceStack_CollapseSliceReferencesPtr) dlsym(hLibrary, "lib3mf_slicestack_collapseslicereferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SliceStack_CollapseSliceReferences == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SliceStack_SetOwnPath = (PLib3MFSliceStack_SetOwnPathPtr) GetProcAddress(hLibrary, "lib3mf_slicestack_setownpath"); + #else // _WIN32 + pWrapperTable->m_SliceStack_SetOwnPath = (PLib3MFSliceStack_SetOwnPathPtr) dlsym(hLibrary, "lib3mf_slicestack_setownpath"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SliceStack_SetOwnPath == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SliceStack_GetOwnPath = (PLib3MFSliceStack_GetOwnPathPtr) GetProcAddress(hLibrary, "lib3mf_slicestack_getownpath"); + #else // _WIN32 + pWrapperTable->m_SliceStack_GetOwnPath = (PLib3MFSliceStack_GetOwnPathPtr) dlsym(hLibrary, "lib3mf_slicestack_getownpath"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SliceStack_GetOwnPath == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Consumer_GetConsumerID = (PLib3MFConsumer_GetConsumerIDPtr) GetProcAddress(hLibrary, "lib3mf_consumer_getconsumerid"); + #else // _WIN32 + pWrapperTable->m_Consumer_GetConsumerID = (PLib3MFConsumer_GetConsumerIDPtr) dlsym(hLibrary, "lib3mf_consumer_getconsumerid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Consumer_GetConsumerID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Consumer_GetKeyID = (PLib3MFConsumer_GetKeyIDPtr) GetProcAddress(hLibrary, "lib3mf_consumer_getkeyid"); + #else // _WIN32 + pWrapperTable->m_Consumer_GetKeyID = (PLib3MFConsumer_GetKeyIDPtr) dlsym(hLibrary, "lib3mf_consumer_getkeyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Consumer_GetKeyID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Consumer_GetKeyValue = (PLib3MFConsumer_GetKeyValuePtr) GetProcAddress(hLibrary, "lib3mf_consumer_getkeyvalue"); + #else // _WIN32 + pWrapperTable->m_Consumer_GetKeyValue = (PLib3MFConsumer_GetKeyValuePtr) dlsym(hLibrary, "lib3mf_consumer_getkeyvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Consumer_GetKeyValue == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_AccessRight_GetConsumer = (PLib3MFAccessRight_GetConsumerPtr) GetProcAddress(hLibrary, "lib3mf_accessright_getconsumer"); + #else // _WIN32 + pWrapperTable->m_AccessRight_GetConsumer = (PLib3MFAccessRight_GetConsumerPtr) dlsym(hLibrary, "lib3mf_accessright_getconsumer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_AccessRight_GetConsumer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_AccessRight_GetWrappingAlgorithm = (PLib3MFAccessRight_GetWrappingAlgorithmPtr) GetProcAddress(hLibrary, "lib3mf_accessright_getwrappingalgorithm"); + #else // _WIN32 + pWrapperTable->m_AccessRight_GetWrappingAlgorithm = (PLib3MFAccessRight_GetWrappingAlgorithmPtr) dlsym(hLibrary, "lib3mf_accessright_getwrappingalgorithm"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_AccessRight_GetWrappingAlgorithm == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_AccessRight_GetMgfAlgorithm = (PLib3MFAccessRight_GetMgfAlgorithmPtr) GetProcAddress(hLibrary, "lib3mf_accessright_getmgfalgorithm"); + #else // _WIN32 + pWrapperTable->m_AccessRight_GetMgfAlgorithm = (PLib3MFAccessRight_GetMgfAlgorithmPtr) dlsym(hLibrary, "lib3mf_accessright_getmgfalgorithm"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_AccessRight_GetMgfAlgorithm == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_AccessRight_GetDigestMethod = (PLib3MFAccessRight_GetDigestMethodPtr) GetProcAddress(hLibrary, "lib3mf_accessright_getdigestmethod"); + #else // _WIN32 + pWrapperTable->m_AccessRight_GetDigestMethod = (PLib3MFAccessRight_GetDigestMethodPtr) dlsym(hLibrary, "lib3mf_accessright_getdigestmethod"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_AccessRight_GetDigestMethod == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetEncryptionAlgorithm = (PLib3MFContentEncryptionParams_GetEncryptionAlgorithmPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getencryptionalgorithm"); + #else // _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetEncryptionAlgorithm = (PLib3MFContentEncryptionParams_GetEncryptionAlgorithmPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getencryptionalgorithm"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ContentEncryptionParams_GetEncryptionAlgorithm == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetKey = (PLib3MFContentEncryptionParams_GetKeyPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getkey"); + #else // _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetKey = (PLib3MFContentEncryptionParams_GetKeyPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getkey"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ContentEncryptionParams_GetKey == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetInitializationVector = (PLib3MFContentEncryptionParams_GetInitializationVectorPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getinitializationvector"); + #else // _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetInitializationVector = (PLib3MFContentEncryptionParams_GetInitializationVectorPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getinitializationvector"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ContentEncryptionParams_GetInitializationVector == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetAuthenticationTag = (PLib3MFContentEncryptionParams_GetAuthenticationTagPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getauthenticationtag"); + #else // _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetAuthenticationTag = (PLib3MFContentEncryptionParams_GetAuthenticationTagPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getauthenticationtag"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ContentEncryptionParams_GetAuthenticationTag == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ContentEncryptionParams_SetAuthenticationTag = (PLib3MFContentEncryptionParams_SetAuthenticationTagPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_setauthenticationtag"); + #else // _WIN32 + pWrapperTable->m_ContentEncryptionParams_SetAuthenticationTag = (PLib3MFContentEncryptionParams_SetAuthenticationTagPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_setauthenticationtag"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ContentEncryptionParams_SetAuthenticationTag == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetAdditionalAuthenticationData = (PLib3MFContentEncryptionParams_GetAdditionalAuthenticationDataPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getadditionalauthenticationdata"); + #else // _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetAdditionalAuthenticationData = (PLib3MFContentEncryptionParams_GetAdditionalAuthenticationDataPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getadditionalauthenticationdata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ContentEncryptionParams_GetAdditionalAuthenticationData == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetDescriptor = (PLib3MFContentEncryptionParams_GetDescriptorPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getdescriptor"); + #else // _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetDescriptor = (PLib3MFContentEncryptionParams_GetDescriptorPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getdescriptor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ContentEncryptionParams_GetDescriptor == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetKeyUUID = (PLib3MFContentEncryptionParams_GetKeyUUIDPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getkeyuuid"); + #else // _WIN32 + pWrapperTable->m_ContentEncryptionParams_GetKeyUUID = (PLib3MFContentEncryptionParams_GetKeyUUIDPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getkeyuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ContentEncryptionParams_GetKeyUUID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceData_GetPath = (PLib3MFResourceData_GetPathPtr) GetProcAddress(hLibrary, "lib3mf_resourcedata_getpath"); + #else // _WIN32 + pWrapperTable->m_ResourceData_GetPath = (PLib3MFResourceData_GetPathPtr) dlsym(hLibrary, "lib3mf_resourcedata_getpath"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceData_GetPath == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceData_GetEncryptionAlgorithm = (PLib3MFResourceData_GetEncryptionAlgorithmPtr) GetProcAddress(hLibrary, "lib3mf_resourcedata_getencryptionalgorithm"); + #else // _WIN32 + pWrapperTable->m_ResourceData_GetEncryptionAlgorithm = (PLib3MFResourceData_GetEncryptionAlgorithmPtr) dlsym(hLibrary, "lib3mf_resourcedata_getencryptionalgorithm"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceData_GetEncryptionAlgorithm == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceData_GetCompression = (PLib3MFResourceData_GetCompressionPtr) GetProcAddress(hLibrary, "lib3mf_resourcedata_getcompression"); + #else // _WIN32 + pWrapperTable->m_ResourceData_GetCompression = (PLib3MFResourceData_GetCompressionPtr) dlsym(hLibrary, "lib3mf_resourcedata_getcompression"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceData_GetCompression == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceData_GetAdditionalAuthenticationData = (PLib3MFResourceData_GetAdditionalAuthenticationDataPtr) GetProcAddress(hLibrary, "lib3mf_resourcedata_getadditionalauthenticationdata"); + #else // _WIN32 + pWrapperTable->m_ResourceData_GetAdditionalAuthenticationData = (PLib3MFResourceData_GetAdditionalAuthenticationDataPtr) dlsym(hLibrary, "lib3mf_resourcedata_getadditionalauthenticationdata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceData_GetAdditionalAuthenticationData == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceDataGroup_GetKeyUUID = (PLib3MFResourceDataGroup_GetKeyUUIDPtr) GetProcAddress(hLibrary, "lib3mf_resourcedatagroup_getkeyuuid"); + #else // _WIN32 + pWrapperTable->m_ResourceDataGroup_GetKeyUUID = (PLib3MFResourceDataGroup_GetKeyUUIDPtr) dlsym(hLibrary, "lib3mf_resourcedatagroup_getkeyuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceDataGroup_GetKeyUUID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceDataGroup_AddAccessRight = (PLib3MFResourceDataGroup_AddAccessRightPtr) GetProcAddress(hLibrary, "lib3mf_resourcedatagroup_addaccessright"); + #else // _WIN32 + pWrapperTable->m_ResourceDataGroup_AddAccessRight = (PLib3MFResourceDataGroup_AddAccessRightPtr) dlsym(hLibrary, "lib3mf_resourcedatagroup_addaccessright"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceDataGroup_AddAccessRight == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceDataGroup_FindAccessRightByConsumer = (PLib3MFResourceDataGroup_FindAccessRightByConsumerPtr) GetProcAddress(hLibrary, "lib3mf_resourcedatagroup_findaccessrightbyconsumer"); + #else // _WIN32 + pWrapperTable->m_ResourceDataGroup_FindAccessRightByConsumer = (PLib3MFResourceDataGroup_FindAccessRightByConsumerPtr) dlsym(hLibrary, "lib3mf_resourcedatagroup_findaccessrightbyconsumer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceDataGroup_FindAccessRightByConsumer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceDataGroup_RemoveAccessRight = (PLib3MFResourceDataGroup_RemoveAccessRightPtr) GetProcAddress(hLibrary, "lib3mf_resourcedatagroup_removeaccessright"); + #else // _WIN32 + pWrapperTable->m_ResourceDataGroup_RemoveAccessRight = (PLib3MFResourceDataGroup_RemoveAccessRightPtr) dlsym(hLibrary, "lib3mf_resourcedatagroup_removeaccessright"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceDataGroup_RemoveAccessRight == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_AddConsumer = (PLib3MFKeyStore_AddConsumerPtr) GetProcAddress(hLibrary, "lib3mf_keystore_addconsumer"); + #else // _WIN32 + pWrapperTable->m_KeyStore_AddConsumer = (PLib3MFKeyStore_AddConsumerPtr) dlsym(hLibrary, "lib3mf_keystore_addconsumer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_AddConsumer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_GetConsumerCount = (PLib3MFKeyStore_GetConsumerCountPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getconsumercount"); + #else // _WIN32 + pWrapperTable->m_KeyStore_GetConsumerCount = (PLib3MFKeyStore_GetConsumerCountPtr) dlsym(hLibrary, "lib3mf_keystore_getconsumercount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_GetConsumerCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_GetConsumer = (PLib3MFKeyStore_GetConsumerPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getconsumer"); + #else // _WIN32 + pWrapperTable->m_KeyStore_GetConsumer = (PLib3MFKeyStore_GetConsumerPtr) dlsym(hLibrary, "lib3mf_keystore_getconsumer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_GetConsumer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_RemoveConsumer = (PLib3MFKeyStore_RemoveConsumerPtr) GetProcAddress(hLibrary, "lib3mf_keystore_removeconsumer"); + #else // _WIN32 + pWrapperTable->m_KeyStore_RemoveConsumer = (PLib3MFKeyStore_RemoveConsumerPtr) dlsym(hLibrary, "lib3mf_keystore_removeconsumer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_RemoveConsumer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_FindConsumer = (PLib3MFKeyStore_FindConsumerPtr) GetProcAddress(hLibrary, "lib3mf_keystore_findconsumer"); + #else // _WIN32 + pWrapperTable->m_KeyStore_FindConsumer = (PLib3MFKeyStore_FindConsumerPtr) dlsym(hLibrary, "lib3mf_keystore_findconsumer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_FindConsumer == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_GetResourceDataGroupCount = (PLib3MFKeyStore_GetResourceDataGroupCountPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getresourcedatagroupcount"); + #else // _WIN32 + pWrapperTable->m_KeyStore_GetResourceDataGroupCount = (PLib3MFKeyStore_GetResourceDataGroupCountPtr) dlsym(hLibrary, "lib3mf_keystore_getresourcedatagroupcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_GetResourceDataGroupCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_AddResourceDataGroup = (PLib3MFKeyStore_AddResourceDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_keystore_addresourcedatagroup"); + #else // _WIN32 + pWrapperTable->m_KeyStore_AddResourceDataGroup = (PLib3MFKeyStore_AddResourceDataGroupPtr) dlsym(hLibrary, "lib3mf_keystore_addresourcedatagroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_AddResourceDataGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_GetResourceDataGroup = (PLib3MFKeyStore_GetResourceDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getresourcedatagroup"); + #else // _WIN32 + pWrapperTable->m_KeyStore_GetResourceDataGroup = (PLib3MFKeyStore_GetResourceDataGroupPtr) dlsym(hLibrary, "lib3mf_keystore_getresourcedatagroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_GetResourceDataGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_RemoveResourceDataGroup = (PLib3MFKeyStore_RemoveResourceDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_keystore_removeresourcedatagroup"); + #else // _WIN32 + pWrapperTable->m_KeyStore_RemoveResourceDataGroup = (PLib3MFKeyStore_RemoveResourceDataGroupPtr) dlsym(hLibrary, "lib3mf_keystore_removeresourcedatagroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_RemoveResourceDataGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_FindResourceDataGroup = (PLib3MFKeyStore_FindResourceDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_keystore_findresourcedatagroup"); + #else // _WIN32 + pWrapperTable->m_KeyStore_FindResourceDataGroup = (PLib3MFKeyStore_FindResourceDataGroupPtr) dlsym(hLibrary, "lib3mf_keystore_findresourcedatagroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_FindResourceDataGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_AddResourceData = (PLib3MFKeyStore_AddResourceDataPtr) GetProcAddress(hLibrary, "lib3mf_keystore_addresourcedata"); + #else // _WIN32 + pWrapperTable->m_KeyStore_AddResourceData = (PLib3MFKeyStore_AddResourceDataPtr) dlsym(hLibrary, "lib3mf_keystore_addresourcedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_AddResourceData == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_RemoveResourceData = (PLib3MFKeyStore_RemoveResourceDataPtr) GetProcAddress(hLibrary, "lib3mf_keystore_removeresourcedata"); + #else // _WIN32 + pWrapperTable->m_KeyStore_RemoveResourceData = (PLib3MFKeyStore_RemoveResourceDataPtr) dlsym(hLibrary, "lib3mf_keystore_removeresourcedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_RemoveResourceData == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_FindResourceData = (PLib3MFKeyStore_FindResourceDataPtr) GetProcAddress(hLibrary, "lib3mf_keystore_findresourcedata"); + #else // _WIN32 + pWrapperTable->m_KeyStore_FindResourceData = (PLib3MFKeyStore_FindResourceDataPtr) dlsym(hLibrary, "lib3mf_keystore_findresourcedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_FindResourceData == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_GetResourceDataCount = (PLib3MFKeyStore_GetResourceDataCountPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getresourcedatacount"); + #else // _WIN32 + pWrapperTable->m_KeyStore_GetResourceDataCount = (PLib3MFKeyStore_GetResourceDataCountPtr) dlsym(hLibrary, "lib3mf_keystore_getresourcedatacount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_GetResourceDataCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_GetResourceData = (PLib3MFKeyStore_GetResourceDataPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getresourcedata"); + #else // _WIN32 + pWrapperTable->m_KeyStore_GetResourceData = (PLib3MFKeyStore_GetResourceDataPtr) dlsym(hLibrary, "lib3mf_keystore_getresourcedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_GetResourceData == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_GetUUID = (PLib3MFKeyStore_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getuuid"); + #else // _WIN32 + pWrapperTable->m_KeyStore_GetUUID = (PLib3MFKeyStore_GetUUIDPtr) dlsym(hLibrary, "lib3mf_keystore_getuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_GetUUID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_KeyStore_SetUUID = (PLib3MFKeyStore_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_keystore_setuuid"); + #else // _WIN32 + pWrapperTable->m_KeyStore_SetUUID = (PLib3MFKeyStore_SetUUIDPtr) dlsym(hLibrary, "lib3mf_keystore_setuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_KeyStore_SetUUID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_RootModelPart = (PLib3MFModel_RootModelPartPtr) GetProcAddress(hLibrary, "lib3mf_model_rootmodelpart"); + #else // _WIN32 + pWrapperTable->m_Model_RootModelPart = (PLib3MFModel_RootModelPartPtr) dlsym(hLibrary, "lib3mf_model_rootmodelpart"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_RootModelPart == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_FindOrCreatePackagePart = (PLib3MFModel_FindOrCreatePackagePartPtr) GetProcAddress(hLibrary, "lib3mf_model_findorcreatepackagepart"); + #else // _WIN32 + pWrapperTable->m_Model_FindOrCreatePackagePart = (PLib3MFModel_FindOrCreatePackagePartPtr) dlsym(hLibrary, "lib3mf_model_findorcreatepackagepart"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_FindOrCreatePackagePart == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_SetUnit = (PLib3MFModel_SetUnitPtr) GetProcAddress(hLibrary, "lib3mf_model_setunit"); + #else // _WIN32 + pWrapperTable->m_Model_SetUnit = (PLib3MFModel_SetUnitPtr) dlsym(hLibrary, "lib3mf_model_setunit"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_SetUnit == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetUnit = (PLib3MFModel_GetUnitPtr) GetProcAddress(hLibrary, "lib3mf_model_getunit"); + #else // _WIN32 + pWrapperTable->m_Model_GetUnit = (PLib3MFModel_GetUnitPtr) dlsym(hLibrary, "lib3mf_model_getunit"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetUnit == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetLanguage = (PLib3MFModel_GetLanguagePtr) GetProcAddress(hLibrary, "lib3mf_model_getlanguage"); + #else // _WIN32 + pWrapperTable->m_Model_GetLanguage = (PLib3MFModel_GetLanguagePtr) dlsym(hLibrary, "lib3mf_model_getlanguage"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetLanguage == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_SetLanguage = (PLib3MFModel_SetLanguagePtr) GetProcAddress(hLibrary, "lib3mf_model_setlanguage"); + #else // _WIN32 + pWrapperTable->m_Model_SetLanguage = (PLib3MFModel_SetLanguagePtr) dlsym(hLibrary, "lib3mf_model_setlanguage"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_SetLanguage == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_QueryWriter = (PLib3MFModel_QueryWriterPtr) GetProcAddress(hLibrary, "lib3mf_model_querywriter"); + #else // _WIN32 + pWrapperTable->m_Model_QueryWriter = (PLib3MFModel_QueryWriterPtr) dlsym(hLibrary, "lib3mf_model_querywriter"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_QueryWriter == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_QueryReader = (PLib3MFModel_QueryReaderPtr) GetProcAddress(hLibrary, "lib3mf_model_queryreader"); + #else // _WIN32 + pWrapperTable->m_Model_QueryReader = (PLib3MFModel_QueryReaderPtr) dlsym(hLibrary, "lib3mf_model_queryreader"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_QueryReader == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetResourceByID = (PLib3MFModel_GetResourceByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getresourcebyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetResourceByID = (PLib3MFModel_GetResourceByIDPtr) dlsym(hLibrary, "lib3mf_model_getresourcebyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetResourceByID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetTexture2DByID = (PLib3MFModel_GetTexture2DByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_gettexture2dbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetTexture2DByID = (PLib3MFModel_GetTexture2DByIDPtr) dlsym(hLibrary, "lib3mf_model_gettexture2dbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetTexture2DByID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetPropertyTypeByID = (PLib3MFModel_GetPropertyTypeByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getpropertytypebyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetPropertyTypeByID = (PLib3MFModel_GetPropertyTypeByIDPtr) dlsym(hLibrary, "lib3mf_model_getpropertytypebyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetPropertyTypeByID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetBaseMaterialGroupByID = (PLib3MFModel_GetBaseMaterialGroupByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getbasematerialgroupbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetBaseMaterialGroupByID = (PLib3MFModel_GetBaseMaterialGroupByIDPtr) dlsym(hLibrary, "lib3mf_model_getbasematerialgroupbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetBaseMaterialGroupByID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetTexture2DGroupByID = (PLib3MFModel_GetTexture2DGroupByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_gettexture2dgroupbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetTexture2DGroupByID = (PLib3MFModel_GetTexture2DGroupByIDPtr) dlsym(hLibrary, "lib3mf_model_gettexture2dgroupbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetTexture2DGroupByID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetCompositeMaterialsByID = (PLib3MFModel_GetCompositeMaterialsByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getcompositematerialsbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetCompositeMaterialsByID = (PLib3MFModel_GetCompositeMaterialsByIDPtr) dlsym(hLibrary, "lib3mf_model_getcompositematerialsbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetCompositeMaterialsByID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetMultiPropertyGroupByID = (PLib3MFModel_GetMultiPropertyGroupByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getmultipropertygroupbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetMultiPropertyGroupByID = (PLib3MFModel_GetMultiPropertyGroupByIDPtr) dlsym(hLibrary, "lib3mf_model_getmultipropertygroupbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetMultiPropertyGroupByID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetMeshObjectByID = (PLib3MFModel_GetMeshObjectByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getmeshobjectbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetMeshObjectByID = (PLib3MFModel_GetMeshObjectByIDPtr) dlsym(hLibrary, "lib3mf_model_getmeshobjectbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetMeshObjectByID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetComponentsObjectByID = (PLib3MFModel_GetComponentsObjectByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getcomponentsobjectbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetComponentsObjectByID = (PLib3MFModel_GetComponentsObjectByIDPtr) dlsym(hLibrary, "lib3mf_model_getcomponentsobjectbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetComponentsObjectByID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetColorGroupByID = (PLib3MFModel_GetColorGroupByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getcolorgroupbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetColorGroupByID = (PLib3MFModel_GetColorGroupByIDPtr) dlsym(hLibrary, "lib3mf_model_getcolorgroupbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetColorGroupByID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetSliceStackByID = (PLib3MFModel_GetSliceStackByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getslicestackbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetSliceStackByID = (PLib3MFModel_GetSliceStackByIDPtr) dlsym(hLibrary, "lib3mf_model_getslicestackbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetSliceStackByID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetLevelSetByID = (PLib3MFModel_GetLevelSetByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getlevelsetbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetLevelSetByID = (PLib3MFModel_GetLevelSetByIDPtr) dlsym(hLibrary, "lib3mf_model_getlevelsetbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetLevelSetByID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetBuildUUID = (PLib3MFModel_GetBuildUUIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getbuilduuid"); + #else // _WIN32 + pWrapperTable->m_Model_GetBuildUUID = (PLib3MFModel_GetBuildUUIDPtr) dlsym(hLibrary, "lib3mf_model_getbuilduuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetBuildUUID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_SetBuildUUID = (PLib3MFModel_SetBuildUUIDPtr) GetProcAddress(hLibrary, "lib3mf_model_setbuilduuid"); + #else // _WIN32 + pWrapperTable->m_Model_SetBuildUUID = (PLib3MFModel_SetBuildUUIDPtr) dlsym(hLibrary, "lib3mf_model_setbuilduuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_SetBuildUUID == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetBuildItems = (PLib3MFModel_GetBuildItemsPtr) GetProcAddress(hLibrary, "lib3mf_model_getbuilditems"); + #else // _WIN32 + pWrapperTable->m_Model_GetBuildItems = (PLib3MFModel_GetBuildItemsPtr) dlsym(hLibrary, "lib3mf_model_getbuilditems"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetBuildItems == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetOutbox = (PLib3MFModel_GetOutboxPtr) GetProcAddress(hLibrary, "lib3mf_model_getoutbox"); + #else // _WIN32 + pWrapperTable->m_Model_GetOutbox = (PLib3MFModel_GetOutboxPtr) dlsym(hLibrary, "lib3mf_model_getoutbox"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetOutbox == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetResources = (PLib3MFModel_GetResourcesPtr) GetProcAddress(hLibrary, "lib3mf_model_getresources"); + #else // _WIN32 + pWrapperTable->m_Model_GetResources = (PLib3MFModel_GetResourcesPtr) dlsym(hLibrary, "lib3mf_model_getresources"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetResources == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetObjects = (PLib3MFModel_GetObjectsPtr) GetProcAddress(hLibrary, "lib3mf_model_getobjects"); + #else // _WIN32 + pWrapperTable->m_Model_GetObjects = (PLib3MFModel_GetObjectsPtr) dlsym(hLibrary, "lib3mf_model_getobjects"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetObjects == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetMeshObjects = (PLib3MFModel_GetMeshObjectsPtr) GetProcAddress(hLibrary, "lib3mf_model_getmeshobjects"); + #else // _WIN32 + pWrapperTable->m_Model_GetMeshObjects = (PLib3MFModel_GetMeshObjectsPtr) dlsym(hLibrary, "lib3mf_model_getmeshobjects"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetMeshObjects == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetComponentsObjects = (PLib3MFModel_GetComponentsObjectsPtr) GetProcAddress(hLibrary, "lib3mf_model_getcomponentsobjects"); + #else // _WIN32 + pWrapperTable->m_Model_GetComponentsObjects = (PLib3MFModel_GetComponentsObjectsPtr) dlsym(hLibrary, "lib3mf_model_getcomponentsobjects"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetComponentsObjects == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetTexture2Ds = (PLib3MFModel_GetTexture2DsPtr) GetProcAddress(hLibrary, "lib3mf_model_gettexture2ds"); + #else // _WIN32 + pWrapperTable->m_Model_GetTexture2Ds = (PLib3MFModel_GetTexture2DsPtr) dlsym(hLibrary, "lib3mf_model_gettexture2ds"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetTexture2Ds == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetBaseMaterialGroups = (PLib3MFModel_GetBaseMaterialGroupsPtr) GetProcAddress(hLibrary, "lib3mf_model_getbasematerialgroups"); + #else // _WIN32 + pWrapperTable->m_Model_GetBaseMaterialGroups = (PLib3MFModel_GetBaseMaterialGroupsPtr) dlsym(hLibrary, "lib3mf_model_getbasematerialgroups"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetBaseMaterialGroups == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetColorGroups = (PLib3MFModel_GetColorGroupsPtr) GetProcAddress(hLibrary, "lib3mf_model_getcolorgroups"); + #else // _WIN32 + pWrapperTable->m_Model_GetColorGroups = (PLib3MFModel_GetColorGroupsPtr) dlsym(hLibrary, "lib3mf_model_getcolorgroups"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetColorGroups == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetTexture2DGroups = (PLib3MFModel_GetTexture2DGroupsPtr) GetProcAddress(hLibrary, "lib3mf_model_gettexture2dgroups"); + #else // _WIN32 + pWrapperTable->m_Model_GetTexture2DGroups = (PLib3MFModel_GetTexture2DGroupsPtr) dlsym(hLibrary, "lib3mf_model_gettexture2dgroups"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetTexture2DGroups == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetCompositeMaterials = (PLib3MFModel_GetCompositeMaterialsPtr) GetProcAddress(hLibrary, "lib3mf_model_getcompositematerials"); + #else // _WIN32 + pWrapperTable->m_Model_GetCompositeMaterials = (PLib3MFModel_GetCompositeMaterialsPtr) dlsym(hLibrary, "lib3mf_model_getcompositematerials"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetCompositeMaterials == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - if (pWrapperTable->m_LibraryHandle != nullptr) { #ifdef _WIN32 - HMODULE hModule = (HMODULE) pWrapperTable->m_LibraryHandle; - FreeLibrary(hModule); + pWrapperTable->m_Model_GetMultiPropertyGroups = (PLib3MFModel_GetMultiPropertyGroupsPtr) GetProcAddress(hLibrary, "lib3mf_model_getmultipropertygroups"); #else // _WIN32 - dlclose(pWrapperTable->m_LibraryHandle); + pWrapperTable->m_Model_GetMultiPropertyGroups = (PLib3MFModel_GetMultiPropertyGroupsPtr) dlsym(hLibrary, "lib3mf_model_getmultipropertygroups"); + dlerror(); #endif // _WIN32 - return initWrapperTable(pWrapperTable); - } + if (pWrapperTable->m_Model_GetMultiPropertyGroups == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - return LIB3MF_SUCCESS; - } - - inline Lib3MFResult CWrapper::loadWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, const char * pLibraryFileName) - { - if (pWrapperTable == nullptr) - return LIB3MF_ERROR_INVALIDPARAM; - if (pLibraryFileName == nullptr) - return LIB3MF_ERROR_INVALIDPARAM; + #ifdef _WIN32 + pWrapperTable->m_Model_GetSliceStacks = (PLib3MFModel_GetSliceStacksPtr) GetProcAddress(hLibrary, "lib3mf_model_getslicestacks"); + #else // _WIN32 + pWrapperTable->m_Model_GetSliceStacks = (PLib3MFModel_GetSliceStacksPtr) dlsym(hLibrary, "lib3mf_model_getslicestacks"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetSliceStacks == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - // Convert filename to UTF16-string - int nLength = 0; - while ((pLibraryFileName[nLength] != 0) && (nLength < MAX_PATH)) - nLength++; - int nBufferSize = nLength * 2 + 2; - std::vector wsLibraryFileName(nBufferSize); - int nResult = MultiByteToWideChar(CP_UTF8, 0, pLibraryFileName, nLength, &wsLibraryFileName[0], nBufferSize); - if (nResult == 0) - return LIB3MF_ERROR_COULDNOTLOADLIBRARY; + pWrapperTable->m_Model_GetImage3Ds = (PLib3MFModel_GetImage3DsPtr) GetProcAddress(hLibrary, "lib3mf_model_getimage3ds"); + #else // _WIN32 + pWrapperTable->m_Model_GetImage3Ds = (PLib3MFModel_GetImage3DsPtr) dlsym(hLibrary, "lib3mf_model_getimage3ds"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetImage3Ds == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - HMODULE hLibrary = LoadLibraryW(wsLibraryFileName.data()); - if (hLibrary == 0) - return LIB3MF_ERROR_COULDNOTLOADLIBRARY; + #ifdef _WIN32 + pWrapperTable->m_Model_MergeToModel = (PLib3MFModel_MergeToModelPtr) GetProcAddress(hLibrary, "lib3mf_model_mergetomodel"); #else // _WIN32 - void* hLibrary = dlopen(pLibraryFileName, RTLD_LAZY); - if (hLibrary == 0) - return LIB3MF_ERROR_COULDNOTLOADLIBRARY; + pWrapperTable->m_Model_MergeToModel = (PLib3MFModel_MergeToModelPtr) dlsym(hLibrary, "lib3mf_model_mergetomodel"); dlerror(); #endif // _WIN32 + if (pWrapperTable->m_Model_MergeToModel == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Base_ClassTypeId = (PLib3MFBase_ClassTypeIdPtr) GetProcAddress(hLibrary, "lib3mf_base_classtypeid"); + pWrapperTable->m_Model_MergeFromModel = (PLib3MFModel_MergeFromModelPtr) GetProcAddress(hLibrary, "lib3mf_model_mergefrommodel"); #else // _WIN32 - pWrapperTable->m_Base_ClassTypeId = (PLib3MFBase_ClassTypeIdPtr) dlsym(hLibrary, "lib3mf_base_classtypeid"); + pWrapperTable->m_Model_MergeFromModel = (PLib3MFModel_MergeFromModelPtr) dlsym(hLibrary, "lib3mf_model_mergefrommodel"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Base_ClassTypeId == nullptr) + if (pWrapperTable->m_Model_MergeFromModel == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Writer_WriteToFile = (PLib3MFWriter_WriteToFilePtr) GetProcAddress(hLibrary, "lib3mf_writer_writetofile"); + pWrapperTable->m_Model_AddMeshObject = (PLib3MFModel_AddMeshObjectPtr) GetProcAddress(hLibrary, "lib3mf_model_addmeshobject"); #else // _WIN32 - pWrapperTable->m_Writer_WriteToFile = (PLib3MFWriter_WriteToFilePtr) dlsym(hLibrary, "lib3mf_writer_writetofile"); + pWrapperTable->m_Model_AddMeshObject = (PLib3MFModel_AddMeshObjectPtr) dlsym(hLibrary, "lib3mf_model_addmeshobject"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Writer_WriteToFile == nullptr) + if (pWrapperTable->m_Model_AddMeshObject == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Writer_GetStreamSize = (PLib3MFWriter_GetStreamSizePtr) GetProcAddress(hLibrary, "lib3mf_writer_getstreamsize"); + pWrapperTable->m_Model_AddComponentsObject = (PLib3MFModel_AddComponentsObjectPtr) GetProcAddress(hLibrary, "lib3mf_model_addcomponentsobject"); #else // _WIN32 - pWrapperTable->m_Writer_GetStreamSize = (PLib3MFWriter_GetStreamSizePtr) dlsym(hLibrary, "lib3mf_writer_getstreamsize"); + pWrapperTable->m_Model_AddComponentsObject = (PLib3MFModel_AddComponentsObjectPtr) dlsym(hLibrary, "lib3mf_model_addcomponentsobject"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Writer_GetStreamSize == nullptr) + if (pWrapperTable->m_Model_AddComponentsObject == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Writer_WriteToBuffer = (PLib3MFWriter_WriteToBufferPtr) GetProcAddress(hLibrary, "lib3mf_writer_writetobuffer"); + pWrapperTable->m_Model_AddSliceStack = (PLib3MFModel_AddSliceStackPtr) GetProcAddress(hLibrary, "lib3mf_model_addslicestack"); #else // _WIN32 - pWrapperTable->m_Writer_WriteToBuffer = (PLib3MFWriter_WriteToBufferPtr) dlsym(hLibrary, "lib3mf_writer_writetobuffer"); + pWrapperTable->m_Model_AddSliceStack = (PLib3MFModel_AddSliceStackPtr) dlsym(hLibrary, "lib3mf_model_addslicestack"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Writer_WriteToBuffer == nullptr) + if (pWrapperTable->m_Model_AddSliceStack == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Writer_WriteToCallback = (PLib3MFWriter_WriteToCallbackPtr) GetProcAddress(hLibrary, "lib3mf_writer_writetocallback"); + pWrapperTable->m_Model_AddTexture2DFromAttachment = (PLib3MFModel_AddTexture2DFromAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_addtexture2dfromattachment"); #else // _WIN32 - pWrapperTable->m_Writer_WriteToCallback = (PLib3MFWriter_WriteToCallbackPtr) dlsym(hLibrary, "lib3mf_writer_writetocallback"); + pWrapperTable->m_Model_AddTexture2DFromAttachment = (PLib3MFModel_AddTexture2DFromAttachmentPtr) dlsym(hLibrary, "lib3mf_model_addtexture2dfromattachment"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Writer_WriteToCallback == nullptr) + if (pWrapperTable->m_Model_AddTexture2DFromAttachment == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Writer_SetProgressCallback = (PLib3MFWriter_SetProgressCallbackPtr) GetProcAddress(hLibrary, "lib3mf_writer_setprogresscallback"); + pWrapperTable->m_Model_AddBaseMaterialGroup = (PLib3MFModel_AddBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_model_addbasematerialgroup"); #else // _WIN32 - pWrapperTable->m_Writer_SetProgressCallback = (PLib3MFWriter_SetProgressCallbackPtr) dlsym(hLibrary, "lib3mf_writer_setprogresscallback"); + pWrapperTable->m_Model_AddBaseMaterialGroup = (PLib3MFModel_AddBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_model_addbasematerialgroup"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Writer_SetProgressCallback == nullptr) + if (pWrapperTable->m_Model_AddBaseMaterialGroup == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Writer_GetDecimalPrecision = (PLib3MFWriter_GetDecimalPrecisionPtr) GetProcAddress(hLibrary, "lib3mf_writer_getdecimalprecision"); + pWrapperTable->m_Model_AddColorGroup = (PLib3MFModel_AddColorGroupPtr) GetProcAddress(hLibrary, "lib3mf_model_addcolorgroup"); #else // _WIN32 - pWrapperTable->m_Writer_GetDecimalPrecision = (PLib3MFWriter_GetDecimalPrecisionPtr) dlsym(hLibrary, "lib3mf_writer_getdecimalprecision"); + pWrapperTable->m_Model_AddColorGroup = (PLib3MFModel_AddColorGroupPtr) dlsym(hLibrary, "lib3mf_model_addcolorgroup"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Writer_GetDecimalPrecision == nullptr) + if (pWrapperTable->m_Model_AddColorGroup == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Writer_SetDecimalPrecision = (PLib3MFWriter_SetDecimalPrecisionPtr) GetProcAddress(hLibrary, "lib3mf_writer_setdecimalprecision"); + pWrapperTable->m_Model_AddTexture2DGroup = (PLib3MFModel_AddTexture2DGroupPtr) GetProcAddress(hLibrary, "lib3mf_model_addtexture2dgroup"); #else // _WIN32 - pWrapperTable->m_Writer_SetDecimalPrecision = (PLib3MFWriter_SetDecimalPrecisionPtr) dlsym(hLibrary, "lib3mf_writer_setdecimalprecision"); + pWrapperTable->m_Model_AddTexture2DGroup = (PLib3MFModel_AddTexture2DGroupPtr) dlsym(hLibrary, "lib3mf_model_addtexture2dgroup"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Writer_SetDecimalPrecision == nullptr) + if (pWrapperTable->m_Model_AddTexture2DGroup == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Writer_SetStrictModeActive = (PLib3MFWriter_SetStrictModeActivePtr) GetProcAddress(hLibrary, "lib3mf_writer_setstrictmodeactive"); + pWrapperTable->m_Model_AddCompositeMaterials = (PLib3MFModel_AddCompositeMaterialsPtr) GetProcAddress(hLibrary, "lib3mf_model_addcompositematerials"); #else // _WIN32 - pWrapperTable->m_Writer_SetStrictModeActive = (PLib3MFWriter_SetStrictModeActivePtr) dlsym(hLibrary, "lib3mf_writer_setstrictmodeactive"); + pWrapperTable->m_Model_AddCompositeMaterials = (PLib3MFModel_AddCompositeMaterialsPtr) dlsym(hLibrary, "lib3mf_model_addcompositematerials"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Writer_SetStrictModeActive == nullptr) + if (pWrapperTable->m_Model_AddCompositeMaterials == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Writer_GetStrictModeActive = (PLib3MFWriter_GetStrictModeActivePtr) GetProcAddress(hLibrary, "lib3mf_writer_getstrictmodeactive"); + pWrapperTable->m_Model_AddMultiPropertyGroup = (PLib3MFModel_AddMultiPropertyGroupPtr) GetProcAddress(hLibrary, "lib3mf_model_addmultipropertygroup"); #else // _WIN32 - pWrapperTable->m_Writer_GetStrictModeActive = (PLib3MFWriter_GetStrictModeActivePtr) dlsym(hLibrary, "lib3mf_writer_getstrictmodeactive"); + pWrapperTable->m_Model_AddMultiPropertyGroup = (PLib3MFModel_AddMultiPropertyGroupPtr) dlsym(hLibrary, "lib3mf_model_addmultipropertygroup"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Writer_GetStrictModeActive == nullptr) + if (pWrapperTable->m_Model_AddMultiPropertyGroup == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Writer_GetWarning = (PLib3MFWriter_GetWarningPtr) GetProcAddress(hLibrary, "lib3mf_writer_getwarning"); + pWrapperTable->m_Model_AddImageStack = (PLib3MFModel_AddImageStackPtr) GetProcAddress(hLibrary, "lib3mf_model_addimagestack"); #else // _WIN32 - pWrapperTable->m_Writer_GetWarning = (PLib3MFWriter_GetWarningPtr) dlsym(hLibrary, "lib3mf_writer_getwarning"); + pWrapperTable->m_Model_AddImageStack = (PLib3MFModel_AddImageStackPtr) dlsym(hLibrary, "lib3mf_model_addimagestack"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Writer_GetWarning == nullptr) + if (pWrapperTable->m_Model_AddImageStack == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Writer_GetWarningCount = (PLib3MFWriter_GetWarningCountPtr) GetProcAddress(hLibrary, "lib3mf_writer_getwarningcount"); + pWrapperTable->m_Model_GetImageStackByID = (PLib3MFModel_GetImageStackByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getimagestackbyid"); #else // _WIN32 - pWrapperTable->m_Writer_GetWarningCount = (PLib3MFWriter_GetWarningCountPtr) dlsym(hLibrary, "lib3mf_writer_getwarningcount"); + pWrapperTable->m_Model_GetImageStackByID = (PLib3MFModel_GetImageStackByIDPtr) dlsym(hLibrary, "lib3mf_model_getimagestackbyid"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Writer_GetWarningCount == nullptr) + if (pWrapperTable->m_Model_GetImageStackByID == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Writer_AddKeyWrappingCallback = (PLib3MFWriter_AddKeyWrappingCallbackPtr) GetProcAddress(hLibrary, "lib3mf_writer_addkeywrappingcallback"); + pWrapperTable->m_Model_AddBuildItem = (PLib3MFModel_AddBuildItemPtr) GetProcAddress(hLibrary, "lib3mf_model_addbuilditem"); #else // _WIN32 - pWrapperTable->m_Writer_AddKeyWrappingCallback = (PLib3MFWriter_AddKeyWrappingCallbackPtr) dlsym(hLibrary, "lib3mf_writer_addkeywrappingcallback"); + pWrapperTable->m_Model_AddBuildItem = (PLib3MFModel_AddBuildItemPtr) dlsym(hLibrary, "lib3mf_model_addbuilditem"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Writer_AddKeyWrappingCallback == nullptr) + if (pWrapperTable->m_Model_AddBuildItem == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Writer_SetContentEncryptionCallback = (PLib3MFWriter_SetContentEncryptionCallbackPtr) GetProcAddress(hLibrary, "lib3mf_writer_setcontentencryptioncallback"); + pWrapperTable->m_Model_RemoveBuildItem = (PLib3MFModel_RemoveBuildItemPtr) GetProcAddress(hLibrary, "lib3mf_model_removebuilditem"); #else // _WIN32 - pWrapperTable->m_Writer_SetContentEncryptionCallback = (PLib3MFWriter_SetContentEncryptionCallbackPtr) dlsym(hLibrary, "lib3mf_writer_setcontentencryptioncallback"); + pWrapperTable->m_Model_RemoveBuildItem = (PLib3MFModel_RemoveBuildItemPtr) dlsym(hLibrary, "lib3mf_model_removebuilditem"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Writer_SetContentEncryptionCallback == nullptr) + if (pWrapperTable->m_Model_RemoveBuildItem == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetMetaDataGroup = (PLib3MFModel_GetMetaDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_model_getmetadatagroup"); + #else // _WIN32 + pWrapperTable->m_Model_GetMetaDataGroup = (PLib3MFModel_GetMetaDataGroupPtr) dlsym(hLibrary, "lib3mf_model_getmetadatagroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetMetaDataGroup == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddAttachment = (PLib3MFModel_AddAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_addattachment"); + #else // _WIN32 + pWrapperTable->m_Model_AddAttachment = (PLib3MFModel_AddAttachmentPtr) dlsym(hLibrary, "lib3mf_model_addattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddAttachment == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_RemoveAttachment = (PLib3MFModel_RemoveAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_removeattachment"); + #else // _WIN32 + pWrapperTable->m_Model_RemoveAttachment = (PLib3MFModel_RemoveAttachmentPtr) dlsym(hLibrary, "lib3mf_model_removeattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_RemoveAttachment == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetAttachment = (PLib3MFModel_GetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_getattachment"); + #else // _WIN32 + pWrapperTable->m_Model_GetAttachment = (PLib3MFModel_GetAttachmentPtr) dlsym(hLibrary, "lib3mf_model_getattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetAttachment == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_FindAttachment = (PLib3MFModel_FindAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_findattachment"); + #else // _WIN32 + pWrapperTable->m_Model_FindAttachment = (PLib3MFModel_FindAttachmentPtr) dlsym(hLibrary, "lib3mf_model_findattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_FindAttachment == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetAttachmentCount = (PLib3MFModel_GetAttachmentCountPtr) GetProcAddress(hLibrary, "lib3mf_model_getattachmentcount"); + #else // _WIN32 + pWrapperTable->m_Model_GetAttachmentCount = (PLib3MFModel_GetAttachmentCountPtr) dlsym(hLibrary, "lib3mf_model_getattachmentcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetAttachmentCount == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_HasPackageThumbnailAttachment = (PLib3MFModel_HasPackageThumbnailAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_haspackagethumbnailattachment"); + #else // _WIN32 + pWrapperTable->m_Model_HasPackageThumbnailAttachment = (PLib3MFModel_HasPackageThumbnailAttachmentPtr) dlsym(hLibrary, "lib3mf_model_haspackagethumbnailattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_HasPackageThumbnailAttachment == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_CreatePackageThumbnailAttachment = (PLib3MFModel_CreatePackageThumbnailAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_createpackagethumbnailattachment"); + #else // _WIN32 + pWrapperTable->m_Model_CreatePackageThumbnailAttachment = (PLib3MFModel_CreatePackageThumbnailAttachmentPtr) dlsym(hLibrary, "lib3mf_model_createpackagethumbnailattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_CreatePackageThumbnailAttachment == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetPackageThumbnailAttachment = (PLib3MFModel_GetPackageThumbnailAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_getpackagethumbnailattachment"); + #else // _WIN32 + pWrapperTable->m_Model_GetPackageThumbnailAttachment = (PLib3MFModel_GetPackageThumbnailAttachmentPtr) dlsym(hLibrary, "lib3mf_model_getpackagethumbnailattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetPackageThumbnailAttachment == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_RemovePackageThumbnailAttachment = (PLib3MFModel_RemovePackageThumbnailAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_removepackagethumbnailattachment"); + #else // _WIN32 + pWrapperTable->m_Model_RemovePackageThumbnailAttachment = (PLib3MFModel_RemovePackageThumbnailAttachmentPtr) dlsym(hLibrary, "lib3mf_model_removepackagethumbnailattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_RemovePackageThumbnailAttachment == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddCustomContentType = (PLib3MFModel_AddCustomContentTypePtr) GetProcAddress(hLibrary, "lib3mf_model_addcustomcontenttype"); + #else // _WIN32 + pWrapperTable->m_Model_AddCustomContentType = (PLib3MFModel_AddCustomContentTypePtr) dlsym(hLibrary, "lib3mf_model_addcustomcontenttype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddCustomContentType == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_RemoveCustomContentType = (PLib3MFModel_RemoveCustomContentTypePtr) GetProcAddress(hLibrary, "lib3mf_model_removecustomcontenttype"); + #else // _WIN32 + pWrapperTable->m_Model_RemoveCustomContentType = (PLib3MFModel_RemoveCustomContentTypePtr) dlsym(hLibrary, "lib3mf_model_removecustomcontenttype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_RemoveCustomContentType == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Reader_ReadFromFile = (PLib3MFReader_ReadFromFilePtr) GetProcAddress(hLibrary, "lib3mf_reader_readfromfile"); + pWrapperTable->m_Model_SetRandomNumberCallback = (PLib3MFModel_SetRandomNumberCallbackPtr) GetProcAddress(hLibrary, "lib3mf_model_setrandomnumbercallback"); #else // _WIN32 - pWrapperTable->m_Reader_ReadFromFile = (PLib3MFReader_ReadFromFilePtr) dlsym(hLibrary, "lib3mf_reader_readfromfile"); + pWrapperTable->m_Model_SetRandomNumberCallback = (PLib3MFModel_SetRandomNumberCallbackPtr) dlsym(hLibrary, "lib3mf_model_setrandomnumbercallback"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Reader_ReadFromFile == nullptr) + if (pWrapperTable->m_Model_SetRandomNumberCallback == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Reader_ReadFromBuffer = (PLib3MFReader_ReadFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_reader_readfrombuffer"); + pWrapperTable->m_Model_GetKeyStore = (PLib3MFModel_GetKeyStorePtr) GetProcAddress(hLibrary, "lib3mf_model_getkeystore"); #else // _WIN32 - pWrapperTable->m_Reader_ReadFromBuffer = (PLib3MFReader_ReadFromBufferPtr) dlsym(hLibrary, "lib3mf_reader_readfrombuffer"); + pWrapperTable->m_Model_GetKeyStore = (PLib3MFModel_GetKeyStorePtr) dlsym(hLibrary, "lib3mf_model_getkeystore"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Reader_ReadFromBuffer == nullptr) + if (pWrapperTable->m_Model_GetKeyStore == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Reader_ReadFromCallback = (PLib3MFReader_ReadFromCallbackPtr) GetProcAddress(hLibrary, "lib3mf_reader_readfromcallback"); + pWrapperTable->m_Model_GetFunctions = (PLib3MFModel_GetFunctionsPtr) GetProcAddress(hLibrary, "lib3mf_model_getfunctions"); #else // _WIN32 - pWrapperTable->m_Reader_ReadFromCallback = (PLib3MFReader_ReadFromCallbackPtr) dlsym(hLibrary, "lib3mf_reader_readfromcallback"); + pWrapperTable->m_Model_GetFunctions = (PLib3MFModel_GetFunctionsPtr) dlsym(hLibrary, "lib3mf_model_getfunctions"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Reader_ReadFromCallback == nullptr) + if (pWrapperTable->m_Model_GetFunctions == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Reader_SetProgressCallback = (PLib3MFReader_SetProgressCallbackPtr) GetProcAddress(hLibrary, "lib3mf_reader_setprogresscallback"); + pWrapperTable->m_Model_AddImplicitFunction = (PLib3MFModel_AddImplicitFunctionPtr) GetProcAddress(hLibrary, "lib3mf_model_addimplicitfunction"); #else // _WIN32 - pWrapperTable->m_Reader_SetProgressCallback = (PLib3MFReader_SetProgressCallbackPtr) dlsym(hLibrary, "lib3mf_reader_setprogresscallback"); + pWrapperTable->m_Model_AddImplicitFunction = (PLib3MFModel_AddImplicitFunctionPtr) dlsym(hLibrary, "lib3mf_model_addimplicitfunction"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Reader_SetProgressCallback == nullptr) + if (pWrapperTable->m_Model_AddImplicitFunction == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Reader_AddRelationToRead = (PLib3MFReader_AddRelationToReadPtr) GetProcAddress(hLibrary, "lib3mf_reader_addrelationtoread"); + pWrapperTable->m_Model_AddFunctionFromImage3D = (PLib3MFModel_AddFunctionFromImage3DPtr) GetProcAddress(hLibrary, "lib3mf_model_addfunctionfromimage3d"); #else // _WIN32 - pWrapperTable->m_Reader_AddRelationToRead = (PLib3MFReader_AddRelationToReadPtr) dlsym(hLibrary, "lib3mf_reader_addrelationtoread"); + pWrapperTable->m_Model_AddFunctionFromImage3D = (PLib3MFModel_AddFunctionFromImage3DPtr) dlsym(hLibrary, "lib3mf_model_addfunctionfromimage3d"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Reader_AddRelationToRead == nullptr) + if (pWrapperTable->m_Model_AddFunctionFromImage3D == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Reader_RemoveRelationToRead = (PLib3MFReader_RemoveRelationToReadPtr) GetProcAddress(hLibrary, "lib3mf_reader_removerelationtoread"); + pWrapperTable->m_Model_AddVolumeData = (PLib3MFModel_AddVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_model_addvolumedata"); #else // _WIN32 - pWrapperTable->m_Reader_RemoveRelationToRead = (PLib3MFReader_RemoveRelationToReadPtr) dlsym(hLibrary, "lib3mf_reader_removerelationtoread"); + pWrapperTable->m_Model_AddVolumeData = (PLib3MFModel_AddVolumeDataPtr) dlsym(hLibrary, "lib3mf_model_addvolumedata"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Reader_RemoveRelationToRead == nullptr) + if (pWrapperTable->m_Model_AddVolumeData == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Reader_SetStrictModeActive = (PLib3MFReader_SetStrictModeActivePtr) GetProcAddress(hLibrary, "lib3mf_reader_setstrictmodeactive"); + pWrapperTable->m_Model_AddLevelSet = (PLib3MFModel_AddLevelSetPtr) GetProcAddress(hLibrary, "lib3mf_model_addlevelset"); #else // _WIN32 - pWrapperTable->m_Reader_SetStrictModeActive = (PLib3MFReader_SetStrictModeActivePtr) dlsym(hLibrary, "lib3mf_reader_setstrictmodeactive"); + pWrapperTable->m_Model_AddLevelSet = (PLib3MFModel_AddLevelSetPtr) dlsym(hLibrary, "lib3mf_model_addlevelset"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Reader_SetStrictModeActive == nullptr) + if (pWrapperTable->m_Model_AddLevelSet == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Reader_GetStrictModeActive = (PLib3MFReader_GetStrictModeActivePtr) GetProcAddress(hLibrary, "lib3mf_reader_getstrictmodeactive"); + pWrapperTable->m_Model_GetLevelSets = (PLib3MFModel_GetLevelSetsPtr) GetProcAddress(hLibrary, "lib3mf_model_getlevelsets"); #else // _WIN32 - pWrapperTable->m_Reader_GetStrictModeActive = (PLib3MFReader_GetStrictModeActivePtr) dlsym(hLibrary, "lib3mf_reader_getstrictmodeactive"); + pWrapperTable->m_Model_GetLevelSets = (PLib3MFModel_GetLevelSetsPtr) dlsym(hLibrary, "lib3mf_model_getlevelsets"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Reader_GetStrictModeActive == nullptr) + if (pWrapperTable->m_Model_GetLevelSets == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Reader_GetWarning = (PLib3MFReader_GetWarningPtr) GetProcAddress(hLibrary, "lib3mf_reader_getwarning"); + pWrapperTable->m_Model_RemoveResource = (PLib3MFModel_RemoveResourcePtr) GetProcAddress(hLibrary, "lib3mf_model_removeresource"); #else // _WIN32 - pWrapperTable->m_Reader_GetWarning = (PLib3MFReader_GetWarningPtr) dlsym(hLibrary, "lib3mf_reader_getwarning"); + pWrapperTable->m_Model_RemoveResource = (PLib3MFModel_RemoveResourcePtr) dlsym(hLibrary, "lib3mf_model_removeresource"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Reader_GetWarning == nullptr) + if (pWrapperTable->m_Model_RemoveResource == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Reader_GetWarningCount = (PLib3MFReader_GetWarningCountPtr) GetProcAddress(hLibrary, "lib3mf_reader_getwarningcount"); + pWrapperTable->m_GetLibraryVersion = (PLib3MFGetLibraryVersionPtr) GetProcAddress(hLibrary, "lib3mf_getlibraryversion"); #else // _WIN32 - pWrapperTable->m_Reader_GetWarningCount = (PLib3MFReader_GetWarningCountPtr) dlsym(hLibrary, "lib3mf_reader_getwarningcount"); + pWrapperTable->m_GetLibraryVersion = (PLib3MFGetLibraryVersionPtr) dlsym(hLibrary, "lib3mf_getlibraryversion"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Reader_GetWarningCount == nullptr) + if (pWrapperTable->m_GetLibraryVersion == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Reader_AddKeyWrappingCallback = (PLib3MFReader_AddKeyWrappingCallbackPtr) GetProcAddress(hLibrary, "lib3mf_reader_addkeywrappingcallback"); + pWrapperTable->m_GetPrereleaseInformation = (PLib3MFGetPrereleaseInformationPtr) GetProcAddress(hLibrary, "lib3mf_getprereleaseinformation"); #else // _WIN32 - pWrapperTable->m_Reader_AddKeyWrappingCallback = (PLib3MFReader_AddKeyWrappingCallbackPtr) dlsym(hLibrary, "lib3mf_reader_addkeywrappingcallback"); + pWrapperTable->m_GetPrereleaseInformation = (PLib3MFGetPrereleaseInformationPtr) dlsym(hLibrary, "lib3mf_getprereleaseinformation"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Reader_AddKeyWrappingCallback == nullptr) + if (pWrapperTable->m_GetPrereleaseInformation == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Reader_SetContentEncryptionCallback = (PLib3MFReader_SetContentEncryptionCallbackPtr) GetProcAddress(hLibrary, "lib3mf_reader_setcontentencryptioncallback"); + pWrapperTable->m_GetBuildInformation = (PLib3MFGetBuildInformationPtr) GetProcAddress(hLibrary, "lib3mf_getbuildinformation"); #else // _WIN32 - pWrapperTable->m_Reader_SetContentEncryptionCallback = (PLib3MFReader_SetContentEncryptionCallbackPtr) dlsym(hLibrary, "lib3mf_reader_setcontentencryptioncallback"); + pWrapperTable->m_GetBuildInformation = (PLib3MFGetBuildInformationPtr) dlsym(hLibrary, "lib3mf_getbuildinformation"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Reader_SetContentEncryptionCallback == nullptr) + if (pWrapperTable->m_GetBuildInformation == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_PackagePart_GetPath = (PLib3MFPackagePart_GetPathPtr) GetProcAddress(hLibrary, "lib3mf_packagepart_getpath"); + pWrapperTable->m_GetSpecificationVersion = (PLib3MFGetSpecificationVersionPtr) GetProcAddress(hLibrary, "lib3mf_getspecificationversion"); #else // _WIN32 - pWrapperTable->m_PackagePart_GetPath = (PLib3MFPackagePart_GetPathPtr) dlsym(hLibrary, "lib3mf_packagepart_getpath"); + pWrapperTable->m_GetSpecificationVersion = (PLib3MFGetSpecificationVersionPtr) dlsym(hLibrary, "lib3mf_getspecificationversion"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_PackagePart_GetPath == nullptr) + if (pWrapperTable->m_GetSpecificationVersion == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_PackagePart_SetPath = (PLib3MFPackagePart_SetPathPtr) GetProcAddress(hLibrary, "lib3mf_packagepart_setpath"); + pWrapperTable->m_CreateModel = (PLib3MFCreateModelPtr) GetProcAddress(hLibrary, "lib3mf_createmodel"); #else // _WIN32 - pWrapperTable->m_PackagePart_SetPath = (PLib3MFPackagePart_SetPathPtr) dlsym(hLibrary, "lib3mf_packagepart_setpath"); + pWrapperTable->m_CreateModel = (PLib3MFCreateModelPtr) dlsym(hLibrary, "lib3mf_createmodel"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_PackagePart_SetPath == nullptr) + if (pWrapperTable->m_CreateModel == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Resource_GetResourceID = (PLib3MFResource_GetResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_resource_getresourceid"); + pWrapperTable->m_Release = (PLib3MFReleasePtr) GetProcAddress(hLibrary, "lib3mf_release"); #else // _WIN32 - pWrapperTable->m_Resource_GetResourceID = (PLib3MFResource_GetResourceIDPtr) dlsym(hLibrary, "lib3mf_resource_getresourceid"); + pWrapperTable->m_Release = (PLib3MFReleasePtr) dlsym(hLibrary, "lib3mf_release"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Resource_GetResourceID == nullptr) + if (pWrapperTable->m_Release == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Resource_GetUniqueResourceID = (PLib3MFResource_GetUniqueResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_resource_getuniqueresourceid"); + pWrapperTable->m_Acquire = (PLib3MFAcquirePtr) GetProcAddress(hLibrary, "lib3mf_acquire"); #else // _WIN32 - pWrapperTable->m_Resource_GetUniqueResourceID = (PLib3MFResource_GetUniqueResourceIDPtr) dlsym(hLibrary, "lib3mf_resource_getuniqueresourceid"); + pWrapperTable->m_Acquire = (PLib3MFAcquirePtr) dlsym(hLibrary, "lib3mf_acquire"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Resource_GetUniqueResourceID == nullptr) + if (pWrapperTable->m_Acquire == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Resource_PackagePart = (PLib3MFResource_PackagePartPtr) GetProcAddress(hLibrary, "lib3mf_resource_packagepart"); + pWrapperTable->m_SetJournal = (PLib3MFSetJournalPtr) GetProcAddress(hLibrary, "lib3mf_setjournal"); #else // _WIN32 - pWrapperTable->m_Resource_PackagePart = (PLib3MFResource_PackagePartPtr) dlsym(hLibrary, "lib3mf_resource_packagepart"); + pWrapperTable->m_SetJournal = (PLib3MFSetJournalPtr) dlsym(hLibrary, "lib3mf_setjournal"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Resource_PackagePart == nullptr) + if (pWrapperTable->m_SetJournal == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Resource_SetPackagePart = (PLib3MFResource_SetPackagePartPtr) GetProcAddress(hLibrary, "lib3mf_resource_setpackagepart"); + pWrapperTable->m_GetLastError = (PLib3MFGetLastErrorPtr) GetProcAddress(hLibrary, "lib3mf_getlasterror"); #else // _WIN32 - pWrapperTable->m_Resource_SetPackagePart = (PLib3MFResource_SetPackagePartPtr) dlsym(hLibrary, "lib3mf_resource_setpackagepart"); + pWrapperTable->m_GetLastError = (PLib3MFGetLastErrorPtr) dlsym(hLibrary, "lib3mf_getlasterror"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Resource_SetPackagePart == nullptr) + if (pWrapperTable->m_GetLastError == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Resource_GetModelResourceID = (PLib3MFResource_GetModelResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_resource_getmodelresourceid"); + pWrapperTable->m_GetSymbolLookupMethod = (PLib3MFGetSymbolLookupMethodPtr) GetProcAddress(hLibrary, "lib3mf_getsymbollookupmethod"); #else // _WIN32 - pWrapperTable->m_Resource_GetModelResourceID = (PLib3MFResource_GetModelResourceIDPtr) dlsym(hLibrary, "lib3mf_resource_getmodelresourceid"); + pWrapperTable->m_GetSymbolLookupMethod = (PLib3MFGetSymbolLookupMethodPtr) dlsym(hLibrary, "lib3mf_getsymbollookupmethod"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Resource_GetModelResourceID == nullptr) + if (pWrapperTable->m_GetSymbolLookupMethod == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ResourceIterator_MoveNext = (PLib3MFResourceIterator_MoveNextPtr) GetProcAddress(hLibrary, "lib3mf_resourceiterator_movenext"); + pWrapperTable->m_RetrieveProgressMessage = (PLib3MFRetrieveProgressMessagePtr) GetProcAddress(hLibrary, "lib3mf_retrieveprogressmessage"); #else // _WIN32 - pWrapperTable->m_ResourceIterator_MoveNext = (PLib3MFResourceIterator_MoveNextPtr) dlsym(hLibrary, "lib3mf_resourceiterator_movenext"); + pWrapperTable->m_RetrieveProgressMessage = (PLib3MFRetrieveProgressMessagePtr) dlsym(hLibrary, "lib3mf_retrieveprogressmessage"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ResourceIterator_MoveNext == nullptr) + if (pWrapperTable->m_RetrieveProgressMessage == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ResourceIterator_MovePrevious = (PLib3MFResourceIterator_MovePreviousPtr) GetProcAddress(hLibrary, "lib3mf_resourceiterator_moveprevious"); + pWrapperTable->m_RGBAToColor = (PLib3MFRGBAToColorPtr) GetProcAddress(hLibrary, "lib3mf_rgbatocolor"); #else // _WIN32 - pWrapperTable->m_ResourceIterator_MovePrevious = (PLib3MFResourceIterator_MovePreviousPtr) dlsym(hLibrary, "lib3mf_resourceiterator_moveprevious"); + pWrapperTable->m_RGBAToColor = (PLib3MFRGBAToColorPtr) dlsym(hLibrary, "lib3mf_rgbatocolor"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ResourceIterator_MovePrevious == nullptr) + if (pWrapperTable->m_RGBAToColor == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ResourceIterator_GetCurrent = (PLib3MFResourceIterator_GetCurrentPtr) GetProcAddress(hLibrary, "lib3mf_resourceiterator_getcurrent"); + pWrapperTable->m_FloatRGBAToColor = (PLib3MFFloatRGBAToColorPtr) GetProcAddress(hLibrary, "lib3mf_floatrgbatocolor"); #else // _WIN32 - pWrapperTable->m_ResourceIterator_GetCurrent = (PLib3MFResourceIterator_GetCurrentPtr) dlsym(hLibrary, "lib3mf_resourceiterator_getcurrent"); + pWrapperTable->m_FloatRGBAToColor = (PLib3MFFloatRGBAToColorPtr) dlsym(hLibrary, "lib3mf_floatrgbatocolor"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ResourceIterator_GetCurrent == nullptr) + if (pWrapperTable->m_FloatRGBAToColor == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ResourceIterator_Clone = (PLib3MFResourceIterator_ClonePtr) GetProcAddress(hLibrary, "lib3mf_resourceiterator_clone"); + pWrapperTable->m_ColorToRGBA = (PLib3MFColorToRGBAPtr) GetProcAddress(hLibrary, "lib3mf_colortorgba"); #else // _WIN32 - pWrapperTable->m_ResourceIterator_Clone = (PLib3MFResourceIterator_ClonePtr) dlsym(hLibrary, "lib3mf_resourceiterator_clone"); + pWrapperTable->m_ColorToRGBA = (PLib3MFColorToRGBAPtr) dlsym(hLibrary, "lib3mf_colortorgba"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ResourceIterator_Clone == nullptr) + if (pWrapperTable->m_ColorToRGBA == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ResourceIterator_Count = (PLib3MFResourceIterator_CountPtr) GetProcAddress(hLibrary, "lib3mf_resourceiterator_count"); + pWrapperTable->m_ColorToFloatRGBA = (PLib3MFColorToFloatRGBAPtr) GetProcAddress(hLibrary, "lib3mf_colortofloatrgba"); #else // _WIN32 - pWrapperTable->m_ResourceIterator_Count = (PLib3MFResourceIterator_CountPtr) dlsym(hLibrary, "lib3mf_resourceiterator_count"); + pWrapperTable->m_ColorToFloatRGBA = (PLib3MFColorToFloatRGBAPtr) dlsym(hLibrary, "lib3mf_colortofloatrgba"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ResourceIterator_Count == nullptr) + if (pWrapperTable->m_ColorToFloatRGBA == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_SliceStackIterator_GetCurrentSliceStack = (PLib3MFSliceStackIterator_GetCurrentSliceStackPtr) GetProcAddress(hLibrary, "lib3mf_slicestackiterator_getcurrentslicestack"); + pWrapperTable->m_GetIdentityTransform = (PLib3MFGetIdentityTransformPtr) GetProcAddress(hLibrary, "lib3mf_getidentitytransform"); #else // _WIN32 - pWrapperTable->m_SliceStackIterator_GetCurrentSliceStack = (PLib3MFSliceStackIterator_GetCurrentSliceStackPtr) dlsym(hLibrary, "lib3mf_slicestackiterator_getcurrentslicestack"); + pWrapperTable->m_GetIdentityTransform = (PLib3MFGetIdentityTransformPtr) dlsym(hLibrary, "lib3mf_getidentitytransform"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_SliceStackIterator_GetCurrentSliceStack == nullptr) + if (pWrapperTable->m_GetIdentityTransform == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ObjectIterator_GetCurrentObject = (PLib3MFObjectIterator_GetCurrentObjectPtr) GetProcAddress(hLibrary, "lib3mf_objectiterator_getcurrentobject"); + pWrapperTable->m_GetUniformScaleTransform = (PLib3MFGetUniformScaleTransformPtr) GetProcAddress(hLibrary, "lib3mf_getuniformscaletransform"); #else // _WIN32 - pWrapperTable->m_ObjectIterator_GetCurrentObject = (PLib3MFObjectIterator_GetCurrentObjectPtr) dlsym(hLibrary, "lib3mf_objectiterator_getcurrentobject"); + pWrapperTable->m_GetUniformScaleTransform = (PLib3MFGetUniformScaleTransformPtr) dlsym(hLibrary, "lib3mf_getuniformscaletransform"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ObjectIterator_GetCurrentObject == nullptr) + if (pWrapperTable->m_GetUniformScaleTransform == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MeshObjectIterator_GetCurrentMeshObject = (PLib3MFMeshObjectIterator_GetCurrentMeshObjectPtr) GetProcAddress(hLibrary, "lib3mf_meshobjectiterator_getcurrentmeshobject"); + pWrapperTable->m_GetScaleTransform = (PLib3MFGetScaleTransformPtr) GetProcAddress(hLibrary, "lib3mf_getscaletransform"); #else // _WIN32 - pWrapperTable->m_MeshObjectIterator_GetCurrentMeshObject = (PLib3MFMeshObjectIterator_GetCurrentMeshObjectPtr) dlsym(hLibrary, "lib3mf_meshobjectiterator_getcurrentmeshobject"); + pWrapperTable->m_GetScaleTransform = (PLib3MFGetScaleTransformPtr) dlsym(hLibrary, "lib3mf_getscaletransform"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MeshObjectIterator_GetCurrentMeshObject == nullptr) + if (pWrapperTable->m_GetScaleTransform == nullptr) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ComponentsObjectIterator_GetCurrentComponentsObject = (PLib3MFComponentsObjectIterator_GetCurrentComponentsObjectPtr) GetProcAddress(hLibrary, "lib3mf_componentsobjectiterator_getcurrentcomponentsobject"); + pWrapperTable->m_GetTranslationTransform = (PLib3MFGetTranslationTransformPtr) GetProcAddress(hLibrary, "lib3mf_gettranslationtransform"); #else // _WIN32 - pWrapperTable->m_ComponentsObjectIterator_GetCurrentComponentsObject = (PLib3MFComponentsObjectIterator_GetCurrentComponentsObjectPtr) dlsym(hLibrary, "lib3mf_componentsobjectiterator_getcurrentcomponentsobject"); + pWrapperTable->m_GetTranslationTransform = (PLib3MFGetTranslationTransformPtr) dlsym(hLibrary, "lib3mf_gettranslationtransform"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ComponentsObjectIterator_GetCurrentComponentsObject == nullptr) + if (pWrapperTable->m_GetTranslationTransform == nullptr) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + pWrapperTable->m_LibraryHandle = hLibrary; + return LIB3MF_SUCCESS; + } + + inline Lib3MFResult CWrapper::loadWrapperTableFromSymbolLookupMethod(sLib3MFDynamicWrapperTable * pWrapperTable, void* pSymbolLookupMethod) +{ + if (pWrapperTable == nullptr) + return LIB3MF_ERROR_INVALIDPARAM; + if (pSymbolLookupMethod == nullptr) + return LIB3MF_ERROR_INVALIDPARAM; + + typedef Lib3MFResult(*SymbolLookupType)(const char*, void**); + + SymbolLookupType pLookup = (SymbolLookupType)pSymbolLookupMethod; + + Lib3MFResult eLookupError = LIB3MF_SUCCESS; + eLookupError = (*pLookup)("lib3mf_base_classtypeid", (void**)&(pWrapperTable->m_Base_ClassTypeId)); + if ( (eLookupError != 0) || (pWrapperTable->m_Base_ClassTypeId == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_writer_writetofile", (void**)&(pWrapperTable->m_Writer_WriteToFile)); + if ( (eLookupError != 0) || (pWrapperTable->m_Writer_WriteToFile == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_writer_getstreamsize", (void**)&(pWrapperTable->m_Writer_GetStreamSize)); + if ( (eLookupError != 0) || (pWrapperTable->m_Writer_GetStreamSize == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_writer_writetobuffer", (void**)&(pWrapperTable->m_Writer_WriteToBuffer)); + if ( (eLookupError != 0) || (pWrapperTable->m_Writer_WriteToBuffer == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_writer_writetocallback", (void**)&(pWrapperTable->m_Writer_WriteToCallback)); + if ( (eLookupError != 0) || (pWrapperTable->m_Writer_WriteToCallback == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_writer_setprogresscallback", (void**)&(pWrapperTable->m_Writer_SetProgressCallback)); + if ( (eLookupError != 0) || (pWrapperTable->m_Writer_SetProgressCallback == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_writer_getdecimalprecision", (void**)&(pWrapperTable->m_Writer_GetDecimalPrecision)); + if ( (eLookupError != 0) || (pWrapperTable->m_Writer_GetDecimalPrecision == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_writer_setdecimalprecision", (void**)&(pWrapperTable->m_Writer_SetDecimalPrecision)); + if ( (eLookupError != 0) || (pWrapperTable->m_Writer_SetDecimalPrecision == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_writer_setstrictmodeactive", (void**)&(pWrapperTable->m_Writer_SetStrictModeActive)); + if ( (eLookupError != 0) || (pWrapperTable->m_Writer_SetStrictModeActive == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_writer_getstrictmodeactive", (void**)&(pWrapperTable->m_Writer_GetStrictModeActive)); + if ( (eLookupError != 0) || (pWrapperTable->m_Writer_GetStrictModeActive == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_writer_getwarning", (void**)&(pWrapperTable->m_Writer_GetWarning)); + if ( (eLookupError != 0) || (pWrapperTable->m_Writer_GetWarning == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_writer_getwarningcount", (void**)&(pWrapperTable->m_Writer_GetWarningCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_Writer_GetWarningCount == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_writer_addkeywrappingcallback", (void**)&(pWrapperTable->m_Writer_AddKeyWrappingCallback)); + if ( (eLookupError != 0) || (pWrapperTable->m_Writer_AddKeyWrappingCallback == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_writer_setcontentencryptioncallback", (void**)&(pWrapperTable->m_Writer_SetContentEncryptionCallback)); + if ( (eLookupError != 0) || (pWrapperTable->m_Writer_SetContentEncryptionCallback == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_reader_readfromfile", (void**)&(pWrapperTable->m_Reader_ReadFromFile)); + if ( (eLookupError != 0) || (pWrapperTable->m_Reader_ReadFromFile == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_reader_readfrombuffer", (void**)&(pWrapperTable->m_Reader_ReadFromBuffer)); + if ( (eLookupError != 0) || (pWrapperTable->m_Reader_ReadFromBuffer == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_reader_readfromcallback", (void**)&(pWrapperTable->m_Reader_ReadFromCallback)); + if ( (eLookupError != 0) || (pWrapperTable->m_Reader_ReadFromCallback == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_reader_setprogresscallback", (void**)&(pWrapperTable->m_Reader_SetProgressCallback)); + if ( (eLookupError != 0) || (pWrapperTable->m_Reader_SetProgressCallback == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_reader_addrelationtoread", (void**)&(pWrapperTable->m_Reader_AddRelationToRead)); + if ( (eLookupError != 0) || (pWrapperTable->m_Reader_AddRelationToRead == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_reader_removerelationtoread", (void**)&(pWrapperTable->m_Reader_RemoveRelationToRead)); + if ( (eLookupError != 0) || (pWrapperTable->m_Reader_RemoveRelationToRead == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_reader_setstrictmodeactive", (void**)&(pWrapperTable->m_Reader_SetStrictModeActive)); + if ( (eLookupError != 0) || (pWrapperTable->m_Reader_SetStrictModeActive == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_reader_getstrictmodeactive", (void**)&(pWrapperTable->m_Reader_GetStrictModeActive)); + if ( (eLookupError != 0) || (pWrapperTable->m_Reader_GetStrictModeActive == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_reader_getwarning", (void**)&(pWrapperTable->m_Reader_GetWarning)); + if ( (eLookupError != 0) || (pWrapperTable->m_Reader_GetWarning == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2DIterator_GetCurrentTexture2D = (PLib3MFTexture2DIterator_GetCurrentTexture2DPtr) GetProcAddress(hLibrary, "lib3mf_texture2diterator_getcurrenttexture2d"); - #else // _WIN32 - pWrapperTable->m_Texture2DIterator_GetCurrentTexture2D = (PLib3MFTexture2DIterator_GetCurrentTexture2DPtr) dlsym(hLibrary, "lib3mf_texture2diterator_getcurrenttexture2d"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2DIterator_GetCurrentTexture2D == nullptr) + eLookupError = (*pLookup)("lib3mf_reader_getwarningcount", (void**)&(pWrapperTable->m_Reader_GetWarningCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_Reader_GetWarningCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup = (PLib3MFBaseMaterialGroupIterator_GetCurrentBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup"); - #else // _WIN32 - pWrapperTable->m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup = (PLib3MFBaseMaterialGroupIterator_GetCurrentBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_reader_addkeywrappingcallback", (void**)&(pWrapperTable->m_Reader_AddKeyWrappingCallback)); + if ( (eLookupError != 0) || (pWrapperTable->m_Reader_AddKeyWrappingCallback == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ColorGroupIterator_GetCurrentColorGroup = (PLib3MFColorGroupIterator_GetCurrentColorGroupPtr) GetProcAddress(hLibrary, "lib3mf_colorgroupiterator_getcurrentcolorgroup"); - #else // _WIN32 - pWrapperTable->m_ColorGroupIterator_GetCurrentColorGroup = (PLib3MFColorGroupIterator_GetCurrentColorGroupPtr) dlsym(hLibrary, "lib3mf_colorgroupiterator_getcurrentcolorgroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ColorGroupIterator_GetCurrentColorGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_reader_setcontentencryptioncallback", (void**)&(pWrapperTable->m_Reader_SetContentEncryptionCallback)); + if ( (eLookupError != 0) || (pWrapperTable->m_Reader_SetContentEncryptionCallback == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup = (PLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup"); - #else // _WIN32 - pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup = (PLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupPtr) dlsym(hLibrary, "lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_packagepart_getpath", (void**)&(pWrapperTable->m_PackagePart_GetPath)); + if ( (eLookupError != 0) || (pWrapperTable->m_PackagePart_GetPath == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials = (PLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsPtr) GetProcAddress(hLibrary, "lib3mf_compositematerialsiterator_getcurrentcompositematerials"); - #else // _WIN32 - pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials = (PLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsPtr) dlsym(hLibrary, "lib3mf_compositematerialsiterator_getcurrentcompositematerials"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials == nullptr) + eLookupError = (*pLookup)("lib3mf_packagepart_setpath", (void**)&(pWrapperTable->m_PackagePart_SetPath)); + if ( (eLookupError != 0) || (pWrapperTable->m_PackagePart_SetPath == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup = (PLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup"); - #else // _WIN32 - pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup = (PLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupPtr) dlsym(hLibrary, "lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_resource_getresourceid", (void**)&(pWrapperTable->m_Resource_GetResourceID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Resource_GetResourceID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaData_GetNameSpace = (PLib3MFMetaData_GetNameSpacePtr) GetProcAddress(hLibrary, "lib3mf_metadata_getnamespace"); - #else // _WIN32 - pWrapperTable->m_MetaData_GetNameSpace = (PLib3MFMetaData_GetNameSpacePtr) dlsym(hLibrary, "lib3mf_metadata_getnamespace"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaData_GetNameSpace == nullptr) + eLookupError = (*pLookup)("lib3mf_resource_getuniqueresourceid", (void**)&(pWrapperTable->m_Resource_GetUniqueResourceID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Resource_GetUniqueResourceID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaData_SetNameSpace = (PLib3MFMetaData_SetNameSpacePtr) GetProcAddress(hLibrary, "lib3mf_metadata_setnamespace"); - #else // _WIN32 - pWrapperTable->m_MetaData_SetNameSpace = (PLib3MFMetaData_SetNameSpacePtr) dlsym(hLibrary, "lib3mf_metadata_setnamespace"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaData_SetNameSpace == nullptr) + eLookupError = (*pLookup)("lib3mf_resource_packagepart", (void**)&(pWrapperTable->m_Resource_PackagePart)); + if ( (eLookupError != 0) || (pWrapperTable->m_Resource_PackagePart == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaData_GetName = (PLib3MFMetaData_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_metadata_getname"); - #else // _WIN32 - pWrapperTable->m_MetaData_GetName = (PLib3MFMetaData_GetNamePtr) dlsym(hLibrary, "lib3mf_metadata_getname"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaData_GetName == nullptr) + eLookupError = (*pLookup)("lib3mf_resource_setpackagepart", (void**)&(pWrapperTable->m_Resource_SetPackagePart)); + if ( (eLookupError != 0) || (pWrapperTable->m_Resource_SetPackagePart == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaData_SetName = (PLib3MFMetaData_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_metadata_setname"); - #else // _WIN32 - pWrapperTable->m_MetaData_SetName = (PLib3MFMetaData_SetNamePtr) dlsym(hLibrary, "lib3mf_metadata_setname"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaData_SetName == nullptr) + eLookupError = (*pLookup)("lib3mf_resource_getmodelresourceid", (void**)&(pWrapperTable->m_Resource_GetModelResourceID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Resource_GetModelResourceID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaData_GetKey = (PLib3MFMetaData_GetKeyPtr) GetProcAddress(hLibrary, "lib3mf_metadata_getkey"); - #else // _WIN32 - pWrapperTable->m_MetaData_GetKey = (PLib3MFMetaData_GetKeyPtr) dlsym(hLibrary, "lib3mf_metadata_getkey"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaData_GetKey == nullptr) + eLookupError = (*pLookup)("lib3mf_resourceiterator_movenext", (void**)&(pWrapperTable->m_ResourceIterator_MoveNext)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceIterator_MoveNext == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaData_GetMustPreserve = (PLib3MFMetaData_GetMustPreservePtr) GetProcAddress(hLibrary, "lib3mf_metadata_getmustpreserve"); - #else // _WIN32 - pWrapperTable->m_MetaData_GetMustPreserve = (PLib3MFMetaData_GetMustPreservePtr) dlsym(hLibrary, "lib3mf_metadata_getmustpreserve"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaData_GetMustPreserve == nullptr) + eLookupError = (*pLookup)("lib3mf_resourceiterator_moveprevious", (void**)&(pWrapperTable->m_ResourceIterator_MovePrevious)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceIterator_MovePrevious == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaData_SetMustPreserve = (PLib3MFMetaData_SetMustPreservePtr) GetProcAddress(hLibrary, "lib3mf_metadata_setmustpreserve"); - #else // _WIN32 - pWrapperTable->m_MetaData_SetMustPreserve = (PLib3MFMetaData_SetMustPreservePtr) dlsym(hLibrary, "lib3mf_metadata_setmustpreserve"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaData_SetMustPreserve == nullptr) + eLookupError = (*pLookup)("lib3mf_resourceiterator_getcurrent", (void**)&(pWrapperTable->m_ResourceIterator_GetCurrent)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceIterator_GetCurrent == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaData_GetType = (PLib3MFMetaData_GetTypePtr) GetProcAddress(hLibrary, "lib3mf_metadata_gettype"); - #else // _WIN32 - pWrapperTable->m_MetaData_GetType = (PLib3MFMetaData_GetTypePtr) dlsym(hLibrary, "lib3mf_metadata_gettype"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaData_GetType == nullptr) + eLookupError = (*pLookup)("lib3mf_resourceiterator_clone", (void**)&(pWrapperTable->m_ResourceIterator_Clone)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceIterator_Clone == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaData_SetType = (PLib3MFMetaData_SetTypePtr) GetProcAddress(hLibrary, "lib3mf_metadata_settype"); - #else // _WIN32 - pWrapperTable->m_MetaData_SetType = (PLib3MFMetaData_SetTypePtr) dlsym(hLibrary, "lib3mf_metadata_settype"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaData_SetType == nullptr) + eLookupError = (*pLookup)("lib3mf_resourceiterator_count", (void**)&(pWrapperTable->m_ResourceIterator_Count)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceIterator_Count == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaData_GetValue = (PLib3MFMetaData_GetValuePtr) GetProcAddress(hLibrary, "lib3mf_metadata_getvalue"); - #else // _WIN32 - pWrapperTable->m_MetaData_GetValue = (PLib3MFMetaData_GetValuePtr) dlsym(hLibrary, "lib3mf_metadata_getvalue"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaData_GetValue == nullptr) + eLookupError = (*pLookup)("lib3mf_slicestackiterator_getcurrentslicestack", (void**)&(pWrapperTable->m_SliceStackIterator_GetCurrentSliceStack)); + if ( (eLookupError != 0) || (pWrapperTable->m_SliceStackIterator_GetCurrentSliceStack == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaData_SetValue = (PLib3MFMetaData_SetValuePtr) GetProcAddress(hLibrary, "lib3mf_metadata_setvalue"); - #else // _WIN32 - pWrapperTable->m_MetaData_SetValue = (PLib3MFMetaData_SetValuePtr) dlsym(hLibrary, "lib3mf_metadata_setvalue"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaData_SetValue == nullptr) + eLookupError = (*pLookup)("lib3mf_objectiterator_getcurrentobject", (void**)&(pWrapperTable->m_ObjectIterator_GetCurrentObject)); + if ( (eLookupError != 0) || (pWrapperTable->m_ObjectIterator_GetCurrentObject == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaDataGroup_GetMetaDataCount = (PLib3MFMetaDataGroup_GetMetaDataCountPtr) GetProcAddress(hLibrary, "lib3mf_metadatagroup_getmetadatacount"); - #else // _WIN32 - pWrapperTable->m_MetaDataGroup_GetMetaDataCount = (PLib3MFMetaDataGroup_GetMetaDataCountPtr) dlsym(hLibrary, "lib3mf_metadatagroup_getmetadatacount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaDataGroup_GetMetaDataCount == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobjectiterator_getcurrentmeshobject", (void**)&(pWrapperTable->m_MeshObjectIterator_GetCurrentMeshObject)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObjectIterator_GetCurrentMeshObject == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaDataGroup_GetMetaData = (PLib3MFMetaDataGroup_GetMetaDataPtr) GetProcAddress(hLibrary, "lib3mf_metadatagroup_getmetadata"); - #else // _WIN32 - pWrapperTable->m_MetaDataGroup_GetMetaData = (PLib3MFMetaDataGroup_GetMetaDataPtr) dlsym(hLibrary, "lib3mf_metadatagroup_getmetadata"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaDataGroup_GetMetaData == nullptr) + eLookupError = (*pLookup)("lib3mf_componentsobjectiterator_getcurrentcomponentsobject", (void**)&(pWrapperTable->m_ComponentsObjectIterator_GetCurrentComponentsObject)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComponentsObjectIterator_GetCurrentComponentsObject == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaDataGroup_GetMetaDataByKey = (PLib3MFMetaDataGroup_GetMetaDataByKeyPtr) GetProcAddress(hLibrary, "lib3mf_metadatagroup_getmetadatabykey"); - #else // _WIN32 - pWrapperTable->m_MetaDataGroup_GetMetaDataByKey = (PLib3MFMetaDataGroup_GetMetaDataByKeyPtr) dlsym(hLibrary, "lib3mf_metadatagroup_getmetadatabykey"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaDataGroup_GetMetaDataByKey == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2diterator_getcurrenttexture2d", (void**)&(pWrapperTable->m_Texture2DIterator_GetCurrentTexture2D)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DIterator_GetCurrentTexture2D == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaDataGroup_RemoveMetaDataByIndex = (PLib3MFMetaDataGroup_RemoveMetaDataByIndexPtr) GetProcAddress(hLibrary, "lib3mf_metadatagroup_removemetadatabyindex"); - #else // _WIN32 - pWrapperTable->m_MetaDataGroup_RemoveMetaDataByIndex = (PLib3MFMetaDataGroup_RemoveMetaDataByIndexPtr) dlsym(hLibrary, "lib3mf_metadatagroup_removemetadatabyindex"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaDataGroup_RemoveMetaDataByIndex == nullptr) + eLookupError = (*pLookup)("lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup", (void**)&(pWrapperTable->m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaDataGroup_RemoveMetaData = (PLib3MFMetaDataGroup_RemoveMetaDataPtr) GetProcAddress(hLibrary, "lib3mf_metadatagroup_removemetadata"); - #else // _WIN32 - pWrapperTable->m_MetaDataGroup_RemoveMetaData = (PLib3MFMetaDataGroup_RemoveMetaDataPtr) dlsym(hLibrary, "lib3mf_metadatagroup_removemetadata"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaDataGroup_RemoveMetaData == nullptr) + eLookupError = (*pLookup)("lib3mf_colorgroupiterator_getcurrentcolorgroup", (void**)&(pWrapperTable->m_ColorGroupIterator_GetCurrentColorGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroupIterator_GetCurrentColorGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MetaDataGroup_AddMetaData = (PLib3MFMetaDataGroup_AddMetaDataPtr) GetProcAddress(hLibrary, "lib3mf_metadatagroup_addmetadata"); - #else // _WIN32 - pWrapperTable->m_MetaDataGroup_AddMetaData = (PLib3MFMetaDataGroup_AddMetaDataPtr) dlsym(hLibrary, "lib3mf_metadatagroup_addmetadata"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MetaDataGroup_AddMetaData == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup", (void**)&(pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_GetType = (PLib3MFObject_GetTypePtr) GetProcAddress(hLibrary, "lib3mf_object_gettype"); - #else // _WIN32 - pWrapperTable->m_Object_GetType = (PLib3MFObject_GetTypePtr) dlsym(hLibrary, "lib3mf_object_gettype"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_GetType == nullptr) + eLookupError = (*pLookup)("lib3mf_compositematerialsiterator_getcurrentcompositematerials", (void**)&(pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials)); + if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_SetType = (PLib3MFObject_SetTypePtr) GetProcAddress(hLibrary, "lib3mf_object_settype"); - #else // _WIN32 - pWrapperTable->m_Object_SetType = (PLib3MFObject_SetTypePtr) dlsym(hLibrary, "lib3mf_object_settype"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_SetType == nullptr) + eLookupError = (*pLookup)("lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup", (void**)&(pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_GetName = (PLib3MFObject_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_object_getname"); - #else // _WIN32 - pWrapperTable->m_Object_GetName = (PLib3MFObject_GetNamePtr) dlsym(hLibrary, "lib3mf_object_getname"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_GetName == nullptr) + eLookupError = (*pLookup)("lib3mf_image3diterator_getcurrentimage3d", (void**)&(pWrapperTable->m_Image3DIterator_GetCurrentImage3D)); + if ( (eLookupError != 0) || (pWrapperTable->m_Image3DIterator_GetCurrentImage3D == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_SetName = (PLib3MFObject_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_object_setname"); - #else // _WIN32 - pWrapperTable->m_Object_SetName = (PLib3MFObject_SetNamePtr) dlsym(hLibrary, "lib3mf_object_setname"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_SetName == nullptr) + eLookupError = (*pLookup)("lib3mf_functioniterator_getcurrentfunction", (void**)&(pWrapperTable->m_FunctionIterator_GetCurrentFunction)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionIterator_GetCurrentFunction == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_GetPartNumber = (PLib3MFObject_GetPartNumberPtr) GetProcAddress(hLibrary, "lib3mf_object_getpartnumber"); - #else // _WIN32 - pWrapperTable->m_Object_GetPartNumber = (PLib3MFObject_GetPartNumberPtr) dlsym(hLibrary, "lib3mf_object_getpartnumber"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_GetPartNumber == nullptr) + eLookupError = (*pLookup)("lib3mf_levelsetiterator_getcurrentlevelset", (void**)&(pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_SetPartNumber = (PLib3MFObject_SetPartNumberPtr) GetProcAddress(hLibrary, "lib3mf_object_setpartnumber"); - #else // _WIN32 - pWrapperTable->m_Object_SetPartNumber = (PLib3MFObject_SetPartNumberPtr) dlsym(hLibrary, "lib3mf_object_setpartnumber"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_SetPartNumber == nullptr) + eLookupError = (*pLookup)("lib3mf_metadata_getnamespace", (void**)&(pWrapperTable->m_MetaData_GetNameSpace)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_GetNameSpace == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_metadata_setnamespace", (void**)&(pWrapperTable->m_MetaData_SetNameSpace)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_SetNameSpace == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_IsMeshObject = (PLib3MFObject_IsMeshObjectPtr) GetProcAddress(hLibrary, "lib3mf_object_ismeshobject"); - #else // _WIN32 - pWrapperTable->m_Object_IsMeshObject = (PLib3MFObject_IsMeshObjectPtr) dlsym(hLibrary, "lib3mf_object_ismeshobject"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_IsMeshObject == nullptr) + eLookupError = (*pLookup)("lib3mf_metadata_getname", (void**)&(pWrapperTable->m_MetaData_GetName)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_GetName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_IsComponentsObject = (PLib3MFObject_IsComponentsObjectPtr) GetProcAddress(hLibrary, "lib3mf_object_iscomponentsobject"); - #else // _WIN32 - pWrapperTable->m_Object_IsComponentsObject = (PLib3MFObject_IsComponentsObjectPtr) dlsym(hLibrary, "lib3mf_object_iscomponentsobject"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_IsComponentsObject == nullptr) + eLookupError = (*pLookup)("lib3mf_metadata_setname", (void**)&(pWrapperTable->m_MetaData_SetName)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_SetName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_IsValid = (PLib3MFObject_IsValidPtr) GetProcAddress(hLibrary, "lib3mf_object_isvalid"); - #else // _WIN32 - pWrapperTable->m_Object_IsValid = (PLib3MFObject_IsValidPtr) dlsym(hLibrary, "lib3mf_object_isvalid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_IsValid == nullptr) + eLookupError = (*pLookup)("lib3mf_metadata_getkey", (void**)&(pWrapperTable->m_MetaData_GetKey)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_GetKey == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_SetAttachmentAsThumbnail = (PLib3MFObject_SetAttachmentAsThumbnailPtr) GetProcAddress(hLibrary, "lib3mf_object_setattachmentasthumbnail"); - #else // _WIN32 - pWrapperTable->m_Object_SetAttachmentAsThumbnail = (PLib3MFObject_SetAttachmentAsThumbnailPtr) dlsym(hLibrary, "lib3mf_object_setattachmentasthumbnail"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_SetAttachmentAsThumbnail == nullptr) + eLookupError = (*pLookup)("lib3mf_metadata_getmustpreserve", (void**)&(pWrapperTable->m_MetaData_GetMustPreserve)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_GetMustPreserve == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_GetThumbnailAttachment = (PLib3MFObject_GetThumbnailAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_object_getthumbnailattachment"); - #else // _WIN32 - pWrapperTable->m_Object_GetThumbnailAttachment = (PLib3MFObject_GetThumbnailAttachmentPtr) dlsym(hLibrary, "lib3mf_object_getthumbnailattachment"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_GetThumbnailAttachment == nullptr) + eLookupError = (*pLookup)("lib3mf_metadata_setmustpreserve", (void**)&(pWrapperTable->m_MetaData_SetMustPreserve)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_SetMustPreserve == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_ClearThumbnailAttachment = (PLib3MFObject_ClearThumbnailAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_object_clearthumbnailattachment"); - #else // _WIN32 - pWrapperTable->m_Object_ClearThumbnailAttachment = (PLib3MFObject_ClearThumbnailAttachmentPtr) dlsym(hLibrary, "lib3mf_object_clearthumbnailattachment"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_ClearThumbnailAttachment == nullptr) + eLookupError = (*pLookup)("lib3mf_metadata_gettype", (void**)&(pWrapperTable->m_MetaData_GetType)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_GetType == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_GetOutbox = (PLib3MFObject_GetOutboxPtr) GetProcAddress(hLibrary, "lib3mf_object_getoutbox"); - #else // _WIN32 - pWrapperTable->m_Object_GetOutbox = (PLib3MFObject_GetOutboxPtr) dlsym(hLibrary, "lib3mf_object_getoutbox"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_GetOutbox == nullptr) + eLookupError = (*pLookup)("lib3mf_metadata_settype", (void**)&(pWrapperTable->m_MetaData_SetType)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_SetType == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_GetUUID = (PLib3MFObject_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_object_getuuid"); - #else // _WIN32 - pWrapperTable->m_Object_GetUUID = (PLib3MFObject_GetUUIDPtr) dlsym(hLibrary, "lib3mf_object_getuuid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_GetUUID == nullptr) + eLookupError = (*pLookup)("lib3mf_metadata_getvalue", (void**)&(pWrapperTable->m_MetaData_GetValue)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_GetValue == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_SetUUID = (PLib3MFObject_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_object_setuuid"); - #else // _WIN32 - pWrapperTable->m_Object_SetUUID = (PLib3MFObject_SetUUIDPtr) dlsym(hLibrary, "lib3mf_object_setuuid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_SetUUID == nullptr) + eLookupError = (*pLookup)("lib3mf_metadata_setvalue", (void**)&(pWrapperTable->m_MetaData_SetValue)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_SetValue == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_GetMetaDataGroup = (PLib3MFObject_GetMetaDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_object_getmetadatagroup"); - #else // _WIN32 - pWrapperTable->m_Object_GetMetaDataGroup = (PLib3MFObject_GetMetaDataGroupPtr) dlsym(hLibrary, "lib3mf_object_getmetadatagroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_GetMetaDataGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_metadatagroup_getmetadatacount", (void**)&(pWrapperTable->m_MetaDataGroup_GetMetaDataCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaDataGroup_GetMetaDataCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_SetSlicesMeshResolution = (PLib3MFObject_SetSlicesMeshResolutionPtr) GetProcAddress(hLibrary, "lib3mf_object_setslicesmeshresolution"); - #else // _WIN32 - pWrapperTable->m_Object_SetSlicesMeshResolution = (PLib3MFObject_SetSlicesMeshResolutionPtr) dlsym(hLibrary, "lib3mf_object_setslicesmeshresolution"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_SetSlicesMeshResolution == nullptr) + eLookupError = (*pLookup)("lib3mf_metadatagroup_getmetadata", (void**)&(pWrapperTable->m_MetaDataGroup_GetMetaData)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaDataGroup_GetMetaData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_GetSlicesMeshResolution = (PLib3MFObject_GetSlicesMeshResolutionPtr) GetProcAddress(hLibrary, "lib3mf_object_getslicesmeshresolution"); - #else // _WIN32 - pWrapperTable->m_Object_GetSlicesMeshResolution = (PLib3MFObject_GetSlicesMeshResolutionPtr) dlsym(hLibrary, "lib3mf_object_getslicesmeshresolution"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_GetSlicesMeshResolution == nullptr) + eLookupError = (*pLookup)("lib3mf_metadatagroup_getmetadatabykey", (void**)&(pWrapperTable->m_MetaDataGroup_GetMetaDataByKey)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaDataGroup_GetMetaDataByKey == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_HasSlices = (PLib3MFObject_HasSlicesPtr) GetProcAddress(hLibrary, "lib3mf_object_hasslices"); - #else // _WIN32 - pWrapperTable->m_Object_HasSlices = (PLib3MFObject_HasSlicesPtr) dlsym(hLibrary, "lib3mf_object_hasslices"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_HasSlices == nullptr) + eLookupError = (*pLookup)("lib3mf_metadatagroup_removemetadatabyindex", (void**)&(pWrapperTable->m_MetaDataGroup_RemoveMetaDataByIndex)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaDataGroup_RemoveMetaDataByIndex == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_ClearSliceStack = (PLib3MFObject_ClearSliceStackPtr) GetProcAddress(hLibrary, "lib3mf_object_clearslicestack"); - #else // _WIN32 - pWrapperTable->m_Object_ClearSliceStack = (PLib3MFObject_ClearSliceStackPtr) dlsym(hLibrary, "lib3mf_object_clearslicestack"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_ClearSliceStack == nullptr) + eLookupError = (*pLookup)("lib3mf_metadatagroup_removemetadata", (void**)&(pWrapperTable->m_MetaDataGroup_RemoveMetaData)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaDataGroup_RemoveMetaData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_GetSliceStack = (PLib3MFObject_GetSliceStackPtr) GetProcAddress(hLibrary, "lib3mf_object_getslicestack"); - #else // _WIN32 - pWrapperTable->m_Object_GetSliceStack = (PLib3MFObject_GetSliceStackPtr) dlsym(hLibrary, "lib3mf_object_getslicestack"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_GetSliceStack == nullptr) + eLookupError = (*pLookup)("lib3mf_metadatagroup_addmetadata", (void**)&(pWrapperTable->m_MetaDataGroup_AddMetaData)); + if ( (eLookupError != 0) || (pWrapperTable->m_MetaDataGroup_AddMetaData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Object_AssignSliceStack = (PLib3MFObject_AssignSliceStackPtr) GetProcAddress(hLibrary, "lib3mf_object_assignslicestack"); - #else // _WIN32 - pWrapperTable->m_Object_AssignSliceStack = (PLib3MFObject_AssignSliceStackPtr) dlsym(hLibrary, "lib3mf_object_assignslicestack"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Object_AssignSliceStack == nullptr) + eLookupError = (*pLookup)("lib3mf_object_gettype", (void**)&(pWrapperTable->m_Object_GetType)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetType == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_GetVertexCount = (PLib3MFMeshObject_GetVertexCountPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getvertexcount"); - #else // _WIN32 - pWrapperTable->m_MeshObject_GetVertexCount = (PLib3MFMeshObject_GetVertexCountPtr) dlsym(hLibrary, "lib3mf_meshobject_getvertexcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_GetVertexCount == nullptr) + eLookupError = (*pLookup)("lib3mf_object_settype", (void**)&(pWrapperTable->m_Object_SetType)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_SetType == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_GetTriangleCount = (PLib3MFMeshObject_GetTriangleCountPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_gettrianglecount"); - #else // _WIN32 - pWrapperTable->m_MeshObject_GetTriangleCount = (PLib3MFMeshObject_GetTriangleCountPtr) dlsym(hLibrary, "lib3mf_meshobject_gettrianglecount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_GetTriangleCount == nullptr) + eLookupError = (*pLookup)("lib3mf_object_getname", (void**)&(pWrapperTable->m_Object_GetName)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_GetVertex = (PLib3MFMeshObject_GetVertexPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getvertex"); - #else // _WIN32 - pWrapperTable->m_MeshObject_GetVertex = (PLib3MFMeshObject_GetVertexPtr) dlsym(hLibrary, "lib3mf_meshobject_getvertex"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_GetVertex == nullptr) + eLookupError = (*pLookup)("lib3mf_object_setname", (void**)&(pWrapperTable->m_Object_SetName)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_SetName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_SetVertex = (PLib3MFMeshObject_SetVertexPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_setvertex"); - #else // _WIN32 - pWrapperTable->m_MeshObject_SetVertex = (PLib3MFMeshObject_SetVertexPtr) dlsym(hLibrary, "lib3mf_meshobject_setvertex"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_SetVertex == nullptr) + eLookupError = (*pLookup)("lib3mf_object_getpartnumber", (void**)&(pWrapperTable->m_Object_GetPartNumber)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetPartNumber == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_AddVertex = (PLib3MFMeshObject_AddVertexPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_addvertex"); - #else // _WIN32 - pWrapperTable->m_MeshObject_AddVertex = (PLib3MFMeshObject_AddVertexPtr) dlsym(hLibrary, "lib3mf_meshobject_addvertex"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_AddVertex == nullptr) + eLookupError = (*pLookup)("lib3mf_object_setpartnumber", (void**)&(pWrapperTable->m_Object_SetPartNumber)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_SetPartNumber == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_GetVertices = (PLib3MFMeshObject_GetVerticesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getvertices"); - #else // _WIN32 - pWrapperTable->m_MeshObject_GetVertices = (PLib3MFMeshObject_GetVerticesPtr) dlsym(hLibrary, "lib3mf_meshobject_getvertices"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_GetVertices == nullptr) + eLookupError = (*pLookup)("lib3mf_object_ismeshobject", (void**)&(pWrapperTable->m_Object_IsMeshObject)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_IsMeshObject == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_GetTriangle = (PLib3MFMeshObject_GetTrianglePtr) GetProcAddress(hLibrary, "lib3mf_meshobject_gettriangle"); - #else // _WIN32 - pWrapperTable->m_MeshObject_GetTriangle = (PLib3MFMeshObject_GetTrianglePtr) dlsym(hLibrary, "lib3mf_meshobject_gettriangle"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_GetTriangle == nullptr) + eLookupError = (*pLookup)("lib3mf_object_iscomponentsobject", (void**)&(pWrapperTable->m_Object_IsComponentsObject)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_IsComponentsObject == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_SetTriangle = (PLib3MFMeshObject_SetTrianglePtr) GetProcAddress(hLibrary, "lib3mf_meshobject_settriangle"); - #else // _WIN32 - pWrapperTable->m_MeshObject_SetTriangle = (PLib3MFMeshObject_SetTrianglePtr) dlsym(hLibrary, "lib3mf_meshobject_settriangle"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_SetTriangle == nullptr) + eLookupError = (*pLookup)("lib3mf_object_islevelsetobject", (void**)&(pWrapperTable->m_Object_IsLevelSetObject)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_IsLevelSetObject == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_AddTriangle = (PLib3MFMeshObject_AddTrianglePtr) GetProcAddress(hLibrary, "lib3mf_meshobject_addtriangle"); - #else // _WIN32 - pWrapperTable->m_MeshObject_AddTriangle = (PLib3MFMeshObject_AddTrianglePtr) dlsym(hLibrary, "lib3mf_meshobject_addtriangle"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_AddTriangle == nullptr) + eLookupError = (*pLookup)("lib3mf_object_isvalid", (void**)&(pWrapperTable->m_Object_IsValid)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_IsValid == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_GetTriangleIndices = (PLib3MFMeshObject_GetTriangleIndicesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_gettriangleindices"); - #else // _WIN32 - pWrapperTable->m_MeshObject_GetTriangleIndices = (PLib3MFMeshObject_GetTriangleIndicesPtr) dlsym(hLibrary, "lib3mf_meshobject_gettriangleindices"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_GetTriangleIndices == nullptr) + eLookupError = (*pLookup)("lib3mf_object_setattachmentasthumbnail", (void**)&(pWrapperTable->m_Object_SetAttachmentAsThumbnail)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_SetAttachmentAsThumbnail == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_SetObjectLevelProperty = (PLib3MFMeshObject_SetObjectLevelPropertyPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_setobjectlevelproperty"); - #else // _WIN32 - pWrapperTable->m_MeshObject_SetObjectLevelProperty = (PLib3MFMeshObject_SetObjectLevelPropertyPtr) dlsym(hLibrary, "lib3mf_meshobject_setobjectlevelproperty"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_SetObjectLevelProperty == nullptr) + eLookupError = (*pLookup)("lib3mf_object_getthumbnailattachment", (void**)&(pWrapperTable->m_Object_GetThumbnailAttachment)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetThumbnailAttachment == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_GetObjectLevelProperty = (PLib3MFMeshObject_GetObjectLevelPropertyPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getobjectlevelproperty"); - #else // _WIN32 - pWrapperTable->m_MeshObject_GetObjectLevelProperty = (PLib3MFMeshObject_GetObjectLevelPropertyPtr) dlsym(hLibrary, "lib3mf_meshobject_getobjectlevelproperty"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_GetObjectLevelProperty == nullptr) + eLookupError = (*pLookup)("lib3mf_object_clearthumbnailattachment", (void**)&(pWrapperTable->m_Object_ClearThumbnailAttachment)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_ClearThumbnailAttachment == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_object_getoutbox", (void**)&(pWrapperTable->m_Object_GetOutbox)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetOutbox == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_SetTriangleProperties = (PLib3MFMeshObject_SetTrianglePropertiesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_settriangleproperties"); - #else // _WIN32 - pWrapperTable->m_MeshObject_SetTriangleProperties = (PLib3MFMeshObject_SetTrianglePropertiesPtr) dlsym(hLibrary, "lib3mf_meshobject_settriangleproperties"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_SetTriangleProperties == nullptr) + eLookupError = (*pLookup)("lib3mf_object_getuuid", (void**)&(pWrapperTable->m_Object_GetUUID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetUUID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_GetTriangleProperties = (PLib3MFMeshObject_GetTrianglePropertiesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_gettriangleproperties"); - #else // _WIN32 - pWrapperTable->m_MeshObject_GetTriangleProperties = (PLib3MFMeshObject_GetTrianglePropertiesPtr) dlsym(hLibrary, "lib3mf_meshobject_gettriangleproperties"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_GetTriangleProperties == nullptr) + eLookupError = (*pLookup)("lib3mf_object_setuuid", (void**)&(pWrapperTable->m_Object_SetUUID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_SetUUID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_SetAllTriangleProperties = (PLib3MFMeshObject_SetAllTrianglePropertiesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_setalltriangleproperties"); - #else // _WIN32 - pWrapperTable->m_MeshObject_SetAllTriangleProperties = (PLib3MFMeshObject_SetAllTrianglePropertiesPtr) dlsym(hLibrary, "lib3mf_meshobject_setalltriangleproperties"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_SetAllTriangleProperties == nullptr) + eLookupError = (*pLookup)("lib3mf_object_getmetadatagroup", (void**)&(pWrapperTable->m_Object_GetMetaDataGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetMetaDataGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_GetAllTriangleProperties = (PLib3MFMeshObject_GetAllTrianglePropertiesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getalltriangleproperties"); - #else // _WIN32 - pWrapperTable->m_MeshObject_GetAllTriangleProperties = (PLib3MFMeshObject_GetAllTrianglePropertiesPtr) dlsym(hLibrary, "lib3mf_meshobject_getalltriangleproperties"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_GetAllTriangleProperties == nullptr) + eLookupError = (*pLookup)("lib3mf_object_setslicesmeshresolution", (void**)&(pWrapperTable->m_Object_SetSlicesMeshResolution)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_SetSlicesMeshResolution == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_ClearAllProperties = (PLib3MFMeshObject_ClearAllPropertiesPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_clearallproperties"); - #else // _WIN32 - pWrapperTable->m_MeshObject_ClearAllProperties = (PLib3MFMeshObject_ClearAllPropertiesPtr) dlsym(hLibrary, "lib3mf_meshobject_clearallproperties"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_ClearAllProperties == nullptr) + eLookupError = (*pLookup)("lib3mf_object_getslicesmeshresolution", (void**)&(pWrapperTable->m_Object_GetSlicesMeshResolution)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetSlicesMeshResolution == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_SetGeometry = (PLib3MFMeshObject_SetGeometryPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_setgeometry"); - #else // _WIN32 - pWrapperTable->m_MeshObject_SetGeometry = (PLib3MFMeshObject_SetGeometryPtr) dlsym(hLibrary, "lib3mf_meshobject_setgeometry"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_SetGeometry == nullptr) + eLookupError = (*pLookup)("lib3mf_object_hasslices", (void**)&(pWrapperTable->m_Object_HasSlices)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_HasSlices == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_IsManifoldAndOriented = (PLib3MFMeshObject_IsManifoldAndOrientedPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_ismanifoldandoriented"); - #else // _WIN32 - pWrapperTable->m_MeshObject_IsManifoldAndOriented = (PLib3MFMeshObject_IsManifoldAndOrientedPtr) dlsym(hLibrary, "lib3mf_meshobject_ismanifoldandoriented"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_IsManifoldAndOriented == nullptr) + eLookupError = (*pLookup)("lib3mf_object_clearslicestack", (void**)&(pWrapperTable->m_Object_ClearSliceStack)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_ClearSliceStack == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MeshObject_BeamLattice = (PLib3MFMeshObject_BeamLatticePtr) GetProcAddress(hLibrary, "lib3mf_meshobject_beamlattice"); - #else // _WIN32 - pWrapperTable->m_MeshObject_BeamLattice = (PLib3MFMeshObject_BeamLatticePtr) dlsym(hLibrary, "lib3mf_meshobject_beamlattice"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MeshObject_BeamLattice == nullptr) + eLookupError = (*pLookup)("lib3mf_object_getslicestack", (void**)&(pWrapperTable->m_Object_GetSliceStack)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetSliceStack == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_GetMinLength = (PLib3MFBeamLattice_GetMinLengthPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getminlength"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_GetMinLength = (PLib3MFBeamLattice_GetMinLengthPtr) dlsym(hLibrary, "lib3mf_beamlattice_getminlength"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_GetMinLength == nullptr) + eLookupError = (*pLookup)("lib3mf_object_assignslicestack", (void**)&(pWrapperTable->m_Object_AssignSliceStack)); + if ( (eLookupError != 0) || (pWrapperTable->m_Object_AssignSliceStack == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_SetMinLength = (PLib3MFBeamLattice_SetMinLengthPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setminlength"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_SetMinLength = (PLib3MFBeamLattice_SetMinLengthPtr) dlsym(hLibrary, "lib3mf_beamlattice_setminlength"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_SetMinLength == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_getvertexcount", (void**)&(pWrapperTable->m_MeshObject_GetVertexCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetVertexCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_GetClipping = (PLib3MFBeamLattice_GetClippingPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getclipping"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_GetClipping = (PLib3MFBeamLattice_GetClippingPtr) dlsym(hLibrary, "lib3mf_beamlattice_getclipping"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_GetClipping == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_gettrianglecount", (void**)&(pWrapperTable->m_MeshObject_GetTriangleCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetTriangleCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_SetClipping = (PLib3MFBeamLattice_SetClippingPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setclipping"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_SetClipping = (PLib3MFBeamLattice_SetClippingPtr) dlsym(hLibrary, "lib3mf_beamlattice_setclipping"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_SetClipping == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_getvertex", (void**)&(pWrapperTable->m_MeshObject_GetVertex)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetVertex == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_GetRepresentation = (PLib3MFBeamLattice_GetRepresentationPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getrepresentation"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_GetRepresentation = (PLib3MFBeamLattice_GetRepresentationPtr) dlsym(hLibrary, "lib3mf_beamlattice_getrepresentation"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_GetRepresentation == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_setvertex", (void**)&(pWrapperTable->m_MeshObject_SetVertex)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_SetVertex == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_SetRepresentation = (PLib3MFBeamLattice_SetRepresentationPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setrepresentation"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_SetRepresentation = (PLib3MFBeamLattice_SetRepresentationPtr) dlsym(hLibrary, "lib3mf_beamlattice_setrepresentation"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_SetRepresentation == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_addvertex", (void**)&(pWrapperTable->m_MeshObject_AddVertex)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_AddVertex == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_GetBallOptions = (PLib3MFBeamLattice_GetBallOptionsPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getballoptions"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_GetBallOptions = (PLib3MFBeamLattice_GetBallOptionsPtr) dlsym(hLibrary, "lib3mf_beamlattice_getballoptions"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_GetBallOptions == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_getvertices", (void**)&(pWrapperTable->m_MeshObject_GetVertices)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetVertices == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_SetBallOptions = (PLib3MFBeamLattice_SetBallOptionsPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setballoptions"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_SetBallOptions = (PLib3MFBeamLattice_SetBallOptionsPtr) dlsym(hLibrary, "lib3mf_beamlattice_setballoptions"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_SetBallOptions == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_gettriangle", (void**)&(pWrapperTable->m_MeshObject_GetTriangle)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetTriangle == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_GetBeamCount = (PLib3MFBeamLattice_GetBeamCountPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getbeamcount"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_GetBeamCount = (PLib3MFBeamLattice_GetBeamCountPtr) dlsym(hLibrary, "lib3mf_beamlattice_getbeamcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_GetBeamCount == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_settriangle", (void**)&(pWrapperTable->m_MeshObject_SetTriangle)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_SetTriangle == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_GetBeam = (PLib3MFBeamLattice_GetBeamPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getbeam"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_GetBeam = (PLib3MFBeamLattice_GetBeamPtr) dlsym(hLibrary, "lib3mf_beamlattice_getbeam"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_GetBeam == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_addtriangle", (void**)&(pWrapperTable->m_MeshObject_AddTriangle)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_AddTriangle == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_AddBeam = (PLib3MFBeamLattice_AddBeamPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_addbeam"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_AddBeam = (PLib3MFBeamLattice_AddBeamPtr) dlsym(hLibrary, "lib3mf_beamlattice_addbeam"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_AddBeam == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_gettriangleindices", (void**)&(pWrapperTable->m_MeshObject_GetTriangleIndices)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetTriangleIndices == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_SetBeam = (PLib3MFBeamLattice_SetBeamPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setbeam"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_SetBeam = (PLib3MFBeamLattice_SetBeamPtr) dlsym(hLibrary, "lib3mf_beamlattice_setbeam"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_SetBeam == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_setobjectlevelproperty", (void**)&(pWrapperTable->m_MeshObject_SetObjectLevelProperty)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_SetObjectLevelProperty == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_SetBeams = (PLib3MFBeamLattice_SetBeamsPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setbeams"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_SetBeams = (PLib3MFBeamLattice_SetBeamsPtr) dlsym(hLibrary, "lib3mf_beamlattice_setbeams"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_SetBeams == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_getobjectlevelproperty", (void**)&(pWrapperTable->m_MeshObject_GetObjectLevelProperty)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetObjectLevelProperty == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_GetBeams = (PLib3MFBeamLattice_GetBeamsPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getbeams"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_GetBeams = (PLib3MFBeamLattice_GetBeamsPtr) dlsym(hLibrary, "lib3mf_beamlattice_getbeams"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_GetBeams == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_settriangleproperties", (void**)&(pWrapperTable->m_MeshObject_SetTriangleProperties)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_SetTriangleProperties == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_GetBallCount = (PLib3MFBeamLattice_GetBallCountPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getballcount"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_GetBallCount = (PLib3MFBeamLattice_GetBallCountPtr) dlsym(hLibrary, "lib3mf_beamlattice_getballcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_GetBallCount == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_gettriangleproperties", (void**)&(pWrapperTable->m_MeshObject_GetTriangleProperties)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetTriangleProperties == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_GetBall = (PLib3MFBeamLattice_GetBallPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getball"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_GetBall = (PLib3MFBeamLattice_GetBallPtr) dlsym(hLibrary, "lib3mf_beamlattice_getball"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_GetBall == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_setalltriangleproperties", (void**)&(pWrapperTable->m_MeshObject_SetAllTriangleProperties)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_SetAllTriangleProperties == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_AddBall = (PLib3MFBeamLattice_AddBallPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_addball"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_AddBall = (PLib3MFBeamLattice_AddBallPtr) dlsym(hLibrary, "lib3mf_beamlattice_addball"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_AddBall == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_getalltriangleproperties", (void**)&(pWrapperTable->m_MeshObject_GetAllTriangleProperties)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetAllTriangleProperties == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_SetBall = (PLib3MFBeamLattice_SetBallPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setball"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_SetBall = (PLib3MFBeamLattice_SetBallPtr) dlsym(hLibrary, "lib3mf_beamlattice_setball"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_SetBall == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_clearallproperties", (void**)&(pWrapperTable->m_MeshObject_ClearAllProperties)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_ClearAllProperties == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_SetBalls = (PLib3MFBeamLattice_SetBallsPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_setballs"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_SetBalls = (PLib3MFBeamLattice_SetBallsPtr) dlsym(hLibrary, "lib3mf_beamlattice_setballs"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_SetBalls == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_setgeometry", (void**)&(pWrapperTable->m_MeshObject_SetGeometry)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_SetGeometry == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_GetBalls = (PLib3MFBeamLattice_GetBallsPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getballs"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_GetBalls = (PLib3MFBeamLattice_GetBallsPtr) dlsym(hLibrary, "lib3mf_beamlattice_getballs"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_GetBalls == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_ismanifoldandoriented", (void**)&(pWrapperTable->m_MeshObject_IsManifoldAndOriented)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_IsManifoldAndOriented == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_meshobject_beamlattice", (void**)&(pWrapperTable->m_MeshObject_BeamLattice)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_BeamLattice == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_GetBeamSetCount = (PLib3MFBeamLattice_GetBeamSetCountPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getbeamsetcount"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_GetBeamSetCount = (PLib3MFBeamLattice_GetBeamSetCountPtr) dlsym(hLibrary, "lib3mf_beamlattice_getbeamsetcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_GetBeamSetCount == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_getvolumedata", (void**)&(pWrapperTable->m_MeshObject_GetVolumeData)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetVolumeData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_AddBeamSet = (PLib3MFBeamLattice_AddBeamSetPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_addbeamset"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_AddBeamSet = (PLib3MFBeamLattice_AddBeamSetPtr) dlsym(hLibrary, "lib3mf_beamlattice_addbeamset"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_AddBeamSet == nullptr) + eLookupError = (*pLookup)("lib3mf_meshobject_setvolumedata", (void**)&(pWrapperTable->m_MeshObject_SetVolumeData)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_SetVolumeData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamLattice_GetBeamSet = (PLib3MFBeamLattice_GetBeamSetPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getbeamset"); - #else // _WIN32 - pWrapperTable->m_BeamLattice_GetBeamSet = (PLib3MFBeamLattice_GetBeamSetPtr) dlsym(hLibrary, "lib3mf_beamlattice_getbeamset"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamLattice_GetBeamSet == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_getfunction", (void**)&(pWrapperTable->m_LevelSet_GetFunction)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_GetFunction == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresource"); - #else // _WIN32 - pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) dlsym(hLibrary, "lib3mf_component_getobjectresource"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Component_GetObjectResource == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_setfunction", (void**)&(pWrapperTable->m_LevelSet_SetFunction)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_SetFunction == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresourceid"); - #else // _WIN32 - pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) dlsym(hLibrary, "lib3mf_component_getobjectresourceid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Component_GetObjectResourceID == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_gettransform", (void**)&(pWrapperTable->m_LevelSet_GetTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_GetTransform == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getuuid"); - #else // _WIN32 - pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) dlsym(hLibrary, "lib3mf_component_getuuid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Component_GetUUID == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_settransform", (void**)&(pWrapperTable->m_LevelSet_SetTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_SetTransform == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_setuuid"); - #else // _WIN32 - pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) dlsym(hLibrary, "lib3mf_component_setuuid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Component_SetUUID == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_getchannelname", (void**)&(pWrapperTable->m_LevelSet_GetChannelName)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_GetChannelName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_hastransform"); - #else // _WIN32 - pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) dlsym(hLibrary, "lib3mf_component_hastransform"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Component_HasTransform == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_setchannelname", (void**)&(pWrapperTable->m_LevelSet_SetChannelName)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_SetChannelName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_gettransform"); - #else // _WIN32 - pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) dlsym(hLibrary, "lib3mf_component_gettransform"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Component_GetTransform == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_setminfeaturesize", (void**)&(pWrapperTable->m_LevelSet_SetMinFeatureSize)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_SetMinFeatureSize == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_settransform"); - #else // _WIN32 - pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) dlsym(hLibrary, "lib3mf_component_settransform"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Component_SetTransform == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_getminfeaturesize", (void**)&(pWrapperTable->m_LevelSet_GetMinFeatureSize)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_GetMinFeatureSize == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_addcomponent"); - #else // _WIN32 - pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_addcomponent"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ComponentsObject_AddComponent == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_setfallbackvalue", (void**)&(pWrapperTable->m_LevelSet_SetFallBackValue)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_SetFallBackValue == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponent"); - #else // _WIN32 - pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponent"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ComponentsObject_GetComponent == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_getfallbackvalue", (void**)&(pWrapperTable->m_LevelSet_GetFallBackValue)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_GetFallBackValue == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponentcount"); - #else // _WIN32 - pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponentcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ComponentsObject_GetComponentCount == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_setmeshbboxonly", (void**)&(pWrapperTable->m_LevelSet_SetMeshBBoxOnly)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_SetMeshBBoxOnly == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_setname"); - #else // _WIN32 - pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) dlsym(hLibrary, "lib3mf_beamset_setname"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetName == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_getmeshbboxonly", (void**)&(pWrapperTable->m_LevelSet_GetMeshBBoxOnly)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_GetMeshBBoxOnly == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_getname"); - #else // _WIN32 - pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) dlsym(hLibrary, "lib3mf_beamset_getname"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetName == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_setmesh", (void**)&(pWrapperTable->m_LevelSet_SetMesh)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_SetMesh == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setidentifier"); - #else // _WIN32 - pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_setidentifier"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetIdentifier == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_getmesh", (void**)&(pWrapperTable->m_LevelSet_GetMesh)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_GetMesh == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getidentifier"); - #else // _WIN32 - pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_getidentifier"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetIdentifier == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_getvolumedata", (void**)&(pWrapperTable->m_LevelSet_GetVolumeData)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_GetVolumeData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferencecount"); - #else // _WIN32 - pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getreferencecount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetReferenceCount == nullptr) + eLookupError = (*pLookup)("lib3mf_levelset_setvolumedata", (void**)&(pWrapperTable->m_LevelSet_SetVolumeData)); + if ( (eLookupError != 0) || (pWrapperTable->m_LevelSet_SetVolumeData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setreferences"); - #else // _WIN32 - pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setreferences"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetReferences == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_getminlength", (void**)&(pWrapperTable->m_BeamLattice_GetMinLength)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetMinLength == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferences"); - #else // _WIN32 - pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getreferences"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetReferences == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_setminlength", (void**)&(pWrapperTable->m_BeamLattice_SetMinLength)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetMinLength == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferencecount"); - #else // _WIN32 - pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferencecount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetBallReferenceCount == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_getclipping", (void**)&(pWrapperTable->m_BeamLattice_GetClipping)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetClipping == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setballreferences"); - #else // _WIN32 - pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setballreferences"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetBallReferences == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_setclipping", (void**)&(pWrapperTable->m_BeamLattice_SetClipping)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetClipping == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferences"); - #else // _WIN32 - pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferences"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetBallReferences == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_getrepresentation", (void**)&(pWrapperTable->m_BeamLattice_GetRepresentation)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetRepresentation == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getcount"); - #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetCount == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_setrepresentation", (void**)&(pWrapperTable->m_BeamLattice_SetRepresentation)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetRepresentation == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); - #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_getballoptions", (void**)&(pWrapperTable->m_BeamLattice_GetBallOptions)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBallOptions == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_addmaterial"); - #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_addmaterial"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_AddMaterial == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_setballoptions", (void**)&(pWrapperTable->m_BeamLattice_SetBallOptions)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetBallOptions == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_removematerial"); - #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_removematerial"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_RemoveMaterial == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_getbeamcount", (void**)&(pWrapperTable->m_BeamLattice_GetBeamCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBeamCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getname"); - #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getname"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetName == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_getbeam", (void**)&(pWrapperTable->m_BeamLattice_GetBeam)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBeam == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setname"); - #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setname"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_SetName == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_addbeam", (void**)&(pWrapperTable->m_BeamLattice_AddBeam)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_AddBeam == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); - #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_SetDisplayColor == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_setbeam", (void**)&(pWrapperTable->m_BeamLattice_SetBeam)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetBeam == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); - #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetDisplayColor == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_setbeams", (void**)&(pWrapperTable->m_BeamLattice_SetBeams)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetBeams == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcount"); - #else // _WIN32 - pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_GetCount == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_getbeams", (void**)&(pWrapperTable->m_BeamLattice_GetBeams)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBeams == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_beamlattice_getballcount", (void**)&(pWrapperTable->m_BeamLattice_GetBallCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBallCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getallpropertyids"); - #else // _WIN32 - pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_colorgroup_getallpropertyids"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_GetAllPropertyIDs == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_getball", (void**)&(pWrapperTable->m_BeamLattice_GetBall)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBall == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_addcolor"); - #else // _WIN32 - pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_addcolor"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_AddColor == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_addball", (void**)&(pWrapperTable->m_BeamLattice_AddBall)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_AddBall == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_removecolor"); - #else // _WIN32 - pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_removecolor"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_RemoveColor == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_setball", (void**)&(pWrapperTable->m_BeamLattice_SetBall)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetBall == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_setcolor"); - #else // _WIN32 - pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_setcolor"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_SetColor == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_setballs", (void**)&(pWrapperTable->m_BeamLattice_SetBalls)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetBalls == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcolor"); - #else // _WIN32 - pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcolor"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_GetColor == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_getballs", (void**)&(pWrapperTable->m_BeamLattice_GetBalls)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBalls == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getcount"); - #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetCount == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_getbeamsetcount", (void**)&(pWrapperTable->m_BeamLattice_GetBeamSetCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBeamSetCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); - #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_addbeamset", (void**)&(pWrapperTable->m_BeamLattice_AddBeamSet)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_AddBeamSet == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); - #else // _WIN32 - pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_AddTex2Coord == nullptr) + eLookupError = (*pLookup)("lib3mf_beamlattice_getbeamset", (void**)&(pWrapperTable->m_BeamLattice_GetBeamSet)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBeamSet == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); - #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetTex2Coord == nullptr) + eLookupError = (*pLookup)("lib3mf_functionreference_getfunctionresourceid", (void**)&(pWrapperTable->m_FunctionReference_GetFunctionResourceID)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionReference_GetFunctionResourceID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); - #else // _WIN32 - pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_RemoveTex2Coord == nullptr) + eLookupError = (*pLookup)("lib3mf_functionreference_setfunctionresourceid", (void**)&(pWrapperTable->m_FunctionReference_SetFunctionResourceID)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionReference_SetFunctionResourceID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); - #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetTexture2D == nullptr) + eLookupError = (*pLookup)("lib3mf_functionreference_gettransform", (void**)&(pWrapperTable->m_FunctionReference_GetTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionReference_GetTransform == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcount"); - #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) dlsym(hLibrary, "lib3mf_compositematerials_getcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetCount == nullptr) + eLookupError = (*pLookup)("lib3mf_functionreference_settransform", (void**)&(pWrapperTable->m_FunctionReference_SetTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionReference_SetTransform == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getallpropertyids"); - #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_compositematerials_getallpropertyids"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs == nullptr) + eLookupError = (*pLookup)("lib3mf_functionreference_getchannelname", (void**)&(pWrapperTable->m_FunctionReference_GetChannelName)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionReference_GetChannelName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); - #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_functionreference_setchannelname", (void**)&(pWrapperTable->m_FunctionReference_SetChannelName)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionReference_SetChannelName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_addcomposite"); - #else // _WIN32 - pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_addcomposite"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_AddComposite == nullptr) + eLookupError = (*pLookup)("lib3mf_functionreference_setminfeaturesize", (void**)&(pWrapperTable->m_FunctionReference_SetMinFeatureSize)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionReference_SetMinFeatureSize == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_removecomposite"); - #else // _WIN32 - pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_removecomposite"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_RemoveComposite == nullptr) + eLookupError = (*pLookup)("lib3mf_functionreference_getminfeaturesize", (void**)&(pWrapperTable->m_FunctionReference_GetMinFeatureSize)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionReference_GetMinFeatureSize == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcomposite"); - #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_getcomposite"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetComposite == nullptr) + eLookupError = (*pLookup)("lib3mf_functionreference_setfallbackvalue", (void**)&(pWrapperTable->m_FunctionReference_SetFallBackValue)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionReference_SetFallBackValue == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getcount"); - #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetCount == nullptr) + eLookupError = (*pLookup)("lib3mf_functionreference_getfallbackvalue", (void**)&(pWrapperTable->m_FunctionReference_GetFallBackValue)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionReference_GetFallBackValue == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); - #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedatacomposite_getbasematerialgroup", (void**)&(pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); - #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_AddMultiProperty == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedatacomposite_setbasematerialgroup", (void**)&(pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); - #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_SetMultiProperty == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedatacomposite_getmaterialmappingcount", (void**)&(pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); - #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetMultiProperty == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedatacomposite_getmaterialmapping", (void**)&(pWrapperTable->m_VolumeDataComposite_GetMaterialMapping)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeDataComposite_GetMaterialMapping == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); - #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedatacomposite_addmaterialmapping", (void**)&(pWrapperTable->m_VolumeDataComposite_AddMaterialMapping)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeDataComposite_AddMaterialMapping == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayercount"); - #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayercount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetLayerCount == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedatacomposite_removematerialmapping", (void**)&(pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addlayer"); - #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addlayer"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_AddLayer == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedataproperty_getname", (void**)&(pWrapperTable->m_VolumeDataProperty_GetName)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeDataProperty_GetName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayer"); - #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayer"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetLayer == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedataproperty_setisrequired", (void**)&(pWrapperTable->m_VolumeDataProperty_SetIsRequired)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeDataProperty_SetIsRequired == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removelayer"); - #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removelayer"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_RemoveLayer == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedataproperty_isrequired", (void**)&(pWrapperTable->m_VolumeDataProperty_IsRequired)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeDataProperty_IsRequired == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_getpath"); - #else // _WIN32 - pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) dlsym(hLibrary, "lib3mf_attachment_getpath"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Attachment_GetPath == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedata_getcomposite", (void**)&(pWrapperTable->m_VolumeData_GetComposite)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeData_GetComposite == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_setpath"); - #else // _WIN32 - pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) dlsym(hLibrary, "lib3mf_attachment_setpath"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Attachment_SetPath == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedata_createnewcomposite", (void**)&(pWrapperTable->m_VolumeData_CreateNewComposite)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeData_CreateNewComposite == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) GetProcAddress(hLibrary, "lib3mf_attachment_packagepart"); - #else // _WIN32 - pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) dlsym(hLibrary, "lib3mf_attachment_packagepart"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Attachment_PackagePart == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedata_removecomposite", (void**)&(pWrapperTable->m_VolumeData_RemoveComposite)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeData_RemoveComposite == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getrelationshiptype"); - #else // _WIN32 - pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_getrelationshiptype"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Attachment_GetRelationShipType == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedata_getcolor", (void**)&(pWrapperTable->m_VolumeData_GetColor)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeData_GetColor == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_setrelationshiptype"); - #else // _WIN32 - pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_setrelationshiptype"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Attachment_SetRelationShipType == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedata_createnewcolor", (void**)&(pWrapperTable->m_VolumeData_CreateNewColor)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeData_CreateNewColor == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetofile"); - #else // _WIN32 - pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) dlsym(hLibrary, "lib3mf_attachment_writetofile"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Attachment_WriteToFile == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedata_removecolor", (void**)&(pWrapperTable->m_VolumeData_RemoveColor)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeData_RemoveColor == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromfile"); - #else // _WIN32 - pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) dlsym(hLibrary, "lib3mf_attachment_readfromfile"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Attachment_ReadFromFile == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedata_getpropertycount", (void**)&(pWrapperTable->m_VolumeData_GetPropertyCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeData_GetPropertyCount == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_volumedata_getproperty", (void**)&(pWrapperTable->m_VolumeData_GetProperty)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeData_GetProperty == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromcallback"); - #else // _WIN32 - pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) dlsym(hLibrary, "lib3mf_attachment_readfromcallback"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Attachment_ReadFromCallback == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedata_addpropertyfromfunction", (void**)&(pWrapperTable->m_VolumeData_AddPropertyFromFunction)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeData_AddPropertyFromFunction == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getstreamsize"); - #else // _WIN32 - pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) dlsym(hLibrary, "lib3mf_attachment_getstreamsize"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Attachment_GetStreamSize == nullptr) + eLookupError = (*pLookup)("lib3mf_volumedata_removeproperty", (void**)&(pWrapperTable->m_VolumeData_RemoveProperty)); + if ( (eLookupError != 0) || (pWrapperTable->m_VolumeData_RemoveProperty == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetobuffer"); - #else // _WIN32 - pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) dlsym(hLibrary, "lib3mf_attachment_writetobuffer"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Attachment_WriteToBuffer == nullptr) + eLookupError = (*pLookup)("lib3mf_component_getobjectresource", (void**)&(pWrapperTable->m_Component_GetObjectResource)); + if ( (eLookupError != 0) || (pWrapperTable->m_Component_GetObjectResource == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfrombuffer"); - #else // _WIN32 - pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) dlsym(hLibrary, "lib3mf_attachment_readfrombuffer"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Attachment_ReadFromBuffer == nullptr) + eLookupError = (*pLookup)("lib3mf_component_getobjectresourceid", (void**)&(pWrapperTable->m_Component_GetObjectResourceID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Component_GetObjectResourceID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getattachment"); - #else // _WIN32 - pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_getattachment"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetAttachment == nullptr) + eLookupError = (*pLookup)("lib3mf_component_getuuid", (void**)&(pWrapperTable->m_Component_GetUUID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Component_GetUUID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setattachment"); - #else // _WIN32 - pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_setattachment"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetAttachment == nullptr) + eLookupError = (*pLookup)("lib3mf_component_setuuid", (void**)&(pWrapperTable->m_Component_SetUUID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Component_SetUUID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getcontenttype"); - #else // _WIN32 - pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_getcontenttype"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetContentType == nullptr) + eLookupError = (*pLookup)("lib3mf_component_hastransform", (void**)&(pWrapperTable->m_Component_HasTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_Component_HasTransform == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setcontenttype"); - #else // _WIN32 - pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_setcontenttype"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetContentType == nullptr) + eLookupError = (*pLookup)("lib3mf_component_gettransform", (void**)&(pWrapperTable->m_Component_GetTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_Component_GetTransform == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_gettilestyleuv"); - #else // _WIN32 - pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_gettilestyleuv"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetTileStyleUV == nullptr) + eLookupError = (*pLookup)("lib3mf_component_settransform", (void**)&(pWrapperTable->m_Component_SetTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_Component_SetTransform == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_settilestyleuv"); - #else // _WIN32 - pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_settilestyleuv"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetTileStyleUV == nullptr) + eLookupError = (*pLookup)("lib3mf_componentsobject_addcomponent", (void**)&(pWrapperTable->m_ComponentsObject_AddComponent)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComponentsObject_AddComponent == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getfilter"); - #else // _WIN32 - pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_getfilter"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetFilter == nullptr) + eLookupError = (*pLookup)("lib3mf_componentsobject_getcomponent", (void**)&(pWrapperTable->m_ComponentsObject_GetComponent)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComponentsObject_GetComponent == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setfilter"); - #else // _WIN32 - pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_setfilter"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetFilter == nullptr) + eLookupError = (*pLookup)("lib3mf_componentsobject_getcomponentcount", (void**)&(pWrapperTable->m_ComponentsObject_GetComponentCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComponentsObject_GetComponentCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItem_GetObjectResource = (PLib3MFBuildItem_GetObjectResourcePtr) GetProcAddress(hLibrary, "lib3mf_builditem_getobjectresource"); - #else // _WIN32 - pWrapperTable->m_BuildItem_GetObjectResource = (PLib3MFBuildItem_GetObjectResourcePtr) dlsym(hLibrary, "lib3mf_builditem_getobjectresource"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItem_GetObjectResource == nullptr) + eLookupError = (*pLookup)("lib3mf_beamset_setname", (void**)&(pWrapperTable->m_BeamSet_SetName)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_SetName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItem_GetUUID = (PLib3MFBuildItem_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_builditem_getuuid"); - #else // _WIN32 - pWrapperTable->m_BuildItem_GetUUID = (PLib3MFBuildItem_GetUUIDPtr) dlsym(hLibrary, "lib3mf_builditem_getuuid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItem_GetUUID == nullptr) + eLookupError = (*pLookup)("lib3mf_beamset_getname", (void**)&(pWrapperTable->m_BeamSet_GetName)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_GetName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItem_SetUUID = (PLib3MFBuildItem_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_builditem_setuuid"); - #else // _WIN32 - pWrapperTable->m_BuildItem_SetUUID = (PLib3MFBuildItem_SetUUIDPtr) dlsym(hLibrary, "lib3mf_builditem_setuuid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItem_SetUUID == nullptr) + eLookupError = (*pLookup)("lib3mf_beamset_setidentifier", (void**)&(pWrapperTable->m_BeamSet_SetIdentifier)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_SetIdentifier == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItem_GetObjectResourceID = (PLib3MFBuildItem_GetObjectResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_builditem_getobjectresourceid"); - #else // _WIN32 - pWrapperTable->m_BuildItem_GetObjectResourceID = (PLib3MFBuildItem_GetObjectResourceIDPtr) dlsym(hLibrary, "lib3mf_builditem_getobjectresourceid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItem_GetObjectResourceID == nullptr) + eLookupError = (*pLookup)("lib3mf_beamset_getidentifier", (void**)&(pWrapperTable->m_BeamSet_GetIdentifier)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_GetIdentifier == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItem_HasObjectTransform = (PLib3MFBuildItem_HasObjectTransformPtr) GetProcAddress(hLibrary, "lib3mf_builditem_hasobjecttransform"); - #else // _WIN32 - pWrapperTable->m_BuildItem_HasObjectTransform = (PLib3MFBuildItem_HasObjectTransformPtr) dlsym(hLibrary, "lib3mf_builditem_hasobjecttransform"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItem_HasObjectTransform == nullptr) + eLookupError = (*pLookup)("lib3mf_beamset_getreferencecount", (void**)&(pWrapperTable->m_BeamSet_GetReferenceCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_GetReferenceCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItem_GetObjectTransform = (PLib3MFBuildItem_GetObjectTransformPtr) GetProcAddress(hLibrary, "lib3mf_builditem_getobjecttransform"); - #else // _WIN32 - pWrapperTable->m_BuildItem_GetObjectTransform = (PLib3MFBuildItem_GetObjectTransformPtr) dlsym(hLibrary, "lib3mf_builditem_getobjecttransform"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItem_GetObjectTransform == nullptr) + eLookupError = (*pLookup)("lib3mf_beamset_setreferences", (void**)&(pWrapperTable->m_BeamSet_SetReferences)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_SetReferences == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItem_SetObjectTransform = (PLib3MFBuildItem_SetObjectTransformPtr) GetProcAddress(hLibrary, "lib3mf_builditem_setobjecttransform"); - #else // _WIN32 - pWrapperTable->m_BuildItem_SetObjectTransform = (PLib3MFBuildItem_SetObjectTransformPtr) dlsym(hLibrary, "lib3mf_builditem_setobjecttransform"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItem_SetObjectTransform == nullptr) + eLookupError = (*pLookup)("lib3mf_beamset_getreferences", (void**)&(pWrapperTable->m_BeamSet_GetReferences)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_GetReferences == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItem_GetPartNumber = (PLib3MFBuildItem_GetPartNumberPtr) GetProcAddress(hLibrary, "lib3mf_builditem_getpartnumber"); - #else // _WIN32 - pWrapperTable->m_BuildItem_GetPartNumber = (PLib3MFBuildItem_GetPartNumberPtr) dlsym(hLibrary, "lib3mf_builditem_getpartnumber"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItem_GetPartNumber == nullptr) + eLookupError = (*pLookup)("lib3mf_beamset_getballreferencecount", (void**)&(pWrapperTable->m_BeamSet_GetBallReferenceCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_GetBallReferenceCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItem_SetPartNumber = (PLib3MFBuildItem_SetPartNumberPtr) GetProcAddress(hLibrary, "lib3mf_builditem_setpartnumber"); - #else // _WIN32 - pWrapperTable->m_BuildItem_SetPartNumber = (PLib3MFBuildItem_SetPartNumberPtr) dlsym(hLibrary, "lib3mf_builditem_setpartnumber"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItem_SetPartNumber == nullptr) + eLookupError = (*pLookup)("lib3mf_beamset_setballreferences", (void**)&(pWrapperTable->m_BeamSet_SetBallReferences)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_SetBallReferences == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItem_GetMetaDataGroup = (PLib3MFBuildItem_GetMetaDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_builditem_getmetadatagroup"); - #else // _WIN32 - pWrapperTable->m_BuildItem_GetMetaDataGroup = (PLib3MFBuildItem_GetMetaDataGroupPtr) dlsym(hLibrary, "lib3mf_builditem_getmetadatagroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItem_GetMetaDataGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_beamset_getballreferences", (void**)&(pWrapperTable->m_BeamSet_GetBallReferences)); + if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_GetBallReferences == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItem_GetOutbox = (PLib3MFBuildItem_GetOutboxPtr) GetProcAddress(hLibrary, "lib3mf_builditem_getoutbox"); - #else // _WIN32 - pWrapperTable->m_BuildItem_GetOutbox = (PLib3MFBuildItem_GetOutboxPtr) dlsym(hLibrary, "lib3mf_builditem_getoutbox"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItem_GetOutbox == nullptr) + eLookupError = (*pLookup)("lib3mf_basematerialgroup_getcount", (void**)&(pWrapperTable->m_BaseMaterialGroup_GetCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_GetCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItemIterator_MoveNext = (PLib3MFBuildItemIterator_MoveNextPtr) GetProcAddress(hLibrary, "lib3mf_builditemiterator_movenext"); - #else // _WIN32 - pWrapperTable->m_BuildItemIterator_MoveNext = (PLib3MFBuildItemIterator_MoveNextPtr) dlsym(hLibrary, "lib3mf_builditemiterator_movenext"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItemIterator_MoveNext == nullptr) + eLookupError = (*pLookup)("lib3mf_basematerialgroup_getallpropertyids", (void**)&(pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs)); + if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItemIterator_MovePrevious = (PLib3MFBuildItemIterator_MovePreviousPtr) GetProcAddress(hLibrary, "lib3mf_builditemiterator_moveprevious"); - #else // _WIN32 - pWrapperTable->m_BuildItemIterator_MovePrevious = (PLib3MFBuildItemIterator_MovePreviousPtr) dlsym(hLibrary, "lib3mf_builditemiterator_moveprevious"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItemIterator_MovePrevious == nullptr) + eLookupError = (*pLookup)("lib3mf_basematerialgroup_addmaterial", (void**)&(pWrapperTable->m_BaseMaterialGroup_AddMaterial)); + if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_AddMaterial == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItemIterator_GetCurrent = (PLib3MFBuildItemIterator_GetCurrentPtr) GetProcAddress(hLibrary, "lib3mf_builditemiterator_getcurrent"); - #else // _WIN32 - pWrapperTable->m_BuildItemIterator_GetCurrent = (PLib3MFBuildItemIterator_GetCurrentPtr) dlsym(hLibrary, "lib3mf_builditemiterator_getcurrent"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItemIterator_GetCurrent == nullptr) + eLookupError = (*pLookup)("lib3mf_basematerialgroup_removematerial", (void**)&(pWrapperTable->m_BaseMaterialGroup_RemoveMaterial)); + if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_RemoveMaterial == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItemIterator_Clone = (PLib3MFBuildItemIterator_ClonePtr) GetProcAddress(hLibrary, "lib3mf_builditemiterator_clone"); - #else // _WIN32 - pWrapperTable->m_BuildItemIterator_Clone = (PLib3MFBuildItemIterator_ClonePtr) dlsym(hLibrary, "lib3mf_builditemiterator_clone"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItemIterator_Clone == nullptr) + eLookupError = (*pLookup)("lib3mf_basematerialgroup_getname", (void**)&(pWrapperTable->m_BaseMaterialGroup_GetName)); + if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_GetName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_BuildItemIterator_Count = (PLib3MFBuildItemIterator_CountPtr) GetProcAddress(hLibrary, "lib3mf_builditemiterator_count"); - #else // _WIN32 - pWrapperTable->m_BuildItemIterator_Count = (PLib3MFBuildItemIterator_CountPtr) dlsym(hLibrary, "lib3mf_builditemiterator_count"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_BuildItemIterator_Count == nullptr) + eLookupError = (*pLookup)("lib3mf_basematerialgroup_setname", (void**)&(pWrapperTable->m_BaseMaterialGroup_SetName)); + if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_SetName == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_basematerialgroup_setdisplaycolor", (void**)&(pWrapperTable->m_BaseMaterialGroup_SetDisplayColor)); + if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_SetDisplayColor == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_basematerialgroup_getdisplaycolor", (void**)&(pWrapperTable->m_BaseMaterialGroup_GetDisplayColor)); + if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_GetDisplayColor == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Slice_SetVertices = (PLib3MFSlice_SetVerticesPtr) GetProcAddress(hLibrary, "lib3mf_slice_setvertices"); - #else // _WIN32 - pWrapperTable->m_Slice_SetVertices = (PLib3MFSlice_SetVerticesPtr) dlsym(hLibrary, "lib3mf_slice_setvertices"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Slice_SetVertices == nullptr) + eLookupError = (*pLookup)("lib3mf_colorgroup_getcount", (void**)&(pWrapperTable->m_ColorGroup_GetCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroup_GetCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Slice_GetVertices = (PLib3MFSlice_GetVerticesPtr) GetProcAddress(hLibrary, "lib3mf_slice_getvertices"); - #else // _WIN32 - pWrapperTable->m_Slice_GetVertices = (PLib3MFSlice_GetVerticesPtr) dlsym(hLibrary, "lib3mf_slice_getvertices"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Slice_GetVertices == nullptr) + eLookupError = (*pLookup)("lib3mf_colorgroup_getallpropertyids", (void**)&(pWrapperTable->m_ColorGroup_GetAllPropertyIDs)); + if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroup_GetAllPropertyIDs == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Slice_GetVertexCount = (PLib3MFSlice_GetVertexCountPtr) GetProcAddress(hLibrary, "lib3mf_slice_getvertexcount"); - #else // _WIN32 - pWrapperTable->m_Slice_GetVertexCount = (PLib3MFSlice_GetVertexCountPtr) dlsym(hLibrary, "lib3mf_slice_getvertexcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Slice_GetVertexCount == nullptr) + eLookupError = (*pLookup)("lib3mf_colorgroup_addcolor", (void**)&(pWrapperTable->m_ColorGroup_AddColor)); + if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroup_AddColor == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Slice_AddPolygon = (PLib3MFSlice_AddPolygonPtr) GetProcAddress(hLibrary, "lib3mf_slice_addpolygon"); - #else // _WIN32 - pWrapperTable->m_Slice_AddPolygon = (PLib3MFSlice_AddPolygonPtr) dlsym(hLibrary, "lib3mf_slice_addpolygon"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Slice_AddPolygon == nullptr) + eLookupError = (*pLookup)("lib3mf_colorgroup_removecolor", (void**)&(pWrapperTable->m_ColorGroup_RemoveColor)); + if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroup_RemoveColor == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Slice_GetPolygonCount = (PLib3MFSlice_GetPolygonCountPtr) GetProcAddress(hLibrary, "lib3mf_slice_getpolygoncount"); - #else // _WIN32 - pWrapperTable->m_Slice_GetPolygonCount = (PLib3MFSlice_GetPolygonCountPtr) dlsym(hLibrary, "lib3mf_slice_getpolygoncount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Slice_GetPolygonCount == nullptr) + eLookupError = (*pLookup)("lib3mf_colorgroup_setcolor", (void**)&(pWrapperTable->m_ColorGroup_SetColor)); + if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroup_SetColor == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Slice_SetPolygonIndices = (PLib3MFSlice_SetPolygonIndicesPtr) GetProcAddress(hLibrary, "lib3mf_slice_setpolygonindices"); - #else // _WIN32 - pWrapperTable->m_Slice_SetPolygonIndices = (PLib3MFSlice_SetPolygonIndicesPtr) dlsym(hLibrary, "lib3mf_slice_setpolygonindices"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Slice_SetPolygonIndices == nullptr) + eLookupError = (*pLookup)("lib3mf_colorgroup_getcolor", (void**)&(pWrapperTable->m_ColorGroup_GetColor)); + if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroup_GetColor == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Slice_GetPolygonIndices = (PLib3MFSlice_GetPolygonIndicesPtr) GetProcAddress(hLibrary, "lib3mf_slice_getpolygonindices"); - #else // _WIN32 - pWrapperTable->m_Slice_GetPolygonIndices = (PLib3MFSlice_GetPolygonIndicesPtr) dlsym(hLibrary, "lib3mf_slice_getpolygonindices"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Slice_GetPolygonIndices == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2dgroup_getcount", (void**)&(pWrapperTable->m_Texture2DGroup_GetCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroup_GetCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Slice_GetPolygonIndexCount = (PLib3MFSlice_GetPolygonIndexCountPtr) GetProcAddress(hLibrary, "lib3mf_slice_getpolygonindexcount"); - #else // _WIN32 - pWrapperTable->m_Slice_GetPolygonIndexCount = (PLib3MFSlice_GetPolygonIndexCountPtr) dlsym(hLibrary, "lib3mf_slice_getpolygonindexcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Slice_GetPolygonIndexCount == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2dgroup_getallpropertyids", (void**)&(pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Slice_GetZTop = (PLib3MFSlice_GetZTopPtr) GetProcAddress(hLibrary, "lib3mf_slice_getztop"); - #else // _WIN32 - pWrapperTable->m_Slice_GetZTop = (PLib3MFSlice_GetZTopPtr) dlsym(hLibrary, "lib3mf_slice_getztop"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Slice_GetZTop == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2dgroup_addtex2coord", (void**)&(pWrapperTable->m_Texture2DGroup_AddTex2Coord)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroup_AddTex2Coord == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_SliceStack_GetBottomZ = (PLib3MFSliceStack_GetBottomZPtr) GetProcAddress(hLibrary, "lib3mf_slicestack_getbottomz"); - #else // _WIN32 - pWrapperTable->m_SliceStack_GetBottomZ = (PLib3MFSliceStack_GetBottomZPtr) dlsym(hLibrary, "lib3mf_slicestack_getbottomz"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_SliceStack_GetBottomZ == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2dgroup_gettex2coord", (void**)&(pWrapperTable->m_Texture2DGroup_GetTex2Coord)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroup_GetTex2Coord == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_SliceStack_GetSliceCount = (PLib3MFSliceStack_GetSliceCountPtr) GetProcAddress(hLibrary, "lib3mf_slicestack_getslicecount"); - #else // _WIN32 - pWrapperTable->m_SliceStack_GetSliceCount = (PLib3MFSliceStack_GetSliceCountPtr) dlsym(hLibrary, "lib3mf_slicestack_getslicecount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_SliceStack_GetSliceCount == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2dgroup_removetex2coord", (void**)&(pWrapperTable->m_Texture2DGroup_RemoveTex2Coord)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroup_RemoveTex2Coord == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_SliceStack_GetSlice = (PLib3MFSliceStack_GetSlicePtr) GetProcAddress(hLibrary, "lib3mf_slicestack_getslice"); - #else // _WIN32 - pWrapperTable->m_SliceStack_GetSlice = (PLib3MFSliceStack_GetSlicePtr) dlsym(hLibrary, "lib3mf_slicestack_getslice"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_SliceStack_GetSlice == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2dgroup_gettexture2d", (void**)&(pWrapperTable->m_Texture2DGroup_GetTexture2D)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroup_GetTexture2D == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_SliceStack_AddSlice = (PLib3MFSliceStack_AddSlicePtr) GetProcAddress(hLibrary, "lib3mf_slicestack_addslice"); - #else // _WIN32 - pWrapperTable->m_SliceStack_AddSlice = (PLib3MFSliceStack_AddSlicePtr) dlsym(hLibrary, "lib3mf_slicestack_addslice"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_SliceStack_AddSlice == nullptr) + eLookupError = (*pLookup)("lib3mf_compositematerials_getcount", (void**)&(pWrapperTable->m_CompositeMaterials_GetCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterials_GetCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_SliceStack_GetSliceRefCount = (PLib3MFSliceStack_GetSliceRefCountPtr) GetProcAddress(hLibrary, "lib3mf_slicestack_getslicerefcount"); - #else // _WIN32 - pWrapperTable->m_SliceStack_GetSliceRefCount = (PLib3MFSliceStack_GetSliceRefCountPtr) dlsym(hLibrary, "lib3mf_slicestack_getslicerefcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_SliceStack_GetSliceRefCount == nullptr) + eLookupError = (*pLookup)("lib3mf_compositematerials_getallpropertyids", (void**)&(pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs)); + if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_SliceStack_AddSliceStackReference = (PLib3MFSliceStack_AddSliceStackReferencePtr) GetProcAddress(hLibrary, "lib3mf_slicestack_addslicestackreference"); - #else // _WIN32 - pWrapperTable->m_SliceStack_AddSliceStackReference = (PLib3MFSliceStack_AddSliceStackReferencePtr) dlsym(hLibrary, "lib3mf_slicestack_addslicestackreference"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_SliceStack_AddSliceStackReference == nullptr) + eLookupError = (*pLookup)("lib3mf_compositematerials_getbasematerialgroup", (void**)&(pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_SliceStack_GetSliceStackReference = (PLib3MFSliceStack_GetSliceStackReferencePtr) GetProcAddress(hLibrary, "lib3mf_slicestack_getslicestackreference"); - #else // _WIN32 - pWrapperTable->m_SliceStack_GetSliceStackReference = (PLib3MFSliceStack_GetSliceStackReferencePtr) dlsym(hLibrary, "lib3mf_slicestack_getslicestackreference"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_SliceStack_GetSliceStackReference == nullptr) + eLookupError = (*pLookup)("lib3mf_compositematerials_addcomposite", (void**)&(pWrapperTable->m_CompositeMaterials_AddComposite)); + if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterials_AddComposite == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_SliceStack_CollapseSliceReferences = (PLib3MFSliceStack_CollapseSliceReferencesPtr) GetProcAddress(hLibrary, "lib3mf_slicestack_collapseslicereferences"); - #else // _WIN32 - pWrapperTable->m_SliceStack_CollapseSliceReferences = (PLib3MFSliceStack_CollapseSliceReferencesPtr) dlsym(hLibrary, "lib3mf_slicestack_collapseslicereferences"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_SliceStack_CollapseSliceReferences == nullptr) + eLookupError = (*pLookup)("lib3mf_compositematerials_removecomposite", (void**)&(pWrapperTable->m_CompositeMaterials_RemoveComposite)); + if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterials_RemoveComposite == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_SliceStack_SetOwnPath = (PLib3MFSliceStack_SetOwnPathPtr) GetProcAddress(hLibrary, "lib3mf_slicestack_setownpath"); - #else // _WIN32 - pWrapperTable->m_SliceStack_SetOwnPath = (PLib3MFSliceStack_SetOwnPathPtr) dlsym(hLibrary, "lib3mf_slicestack_setownpath"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_SliceStack_SetOwnPath == nullptr) + eLookupError = (*pLookup)("lib3mf_compositematerials_getcomposite", (void**)&(pWrapperTable->m_CompositeMaterials_GetComposite)); + if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterials_GetComposite == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_SliceStack_GetOwnPath = (PLib3MFSliceStack_GetOwnPathPtr) GetProcAddress(hLibrary, "lib3mf_slicestack_getownpath"); - #else // _WIN32 - pWrapperTable->m_SliceStack_GetOwnPath = (PLib3MFSliceStack_GetOwnPathPtr) dlsym(hLibrary, "lib3mf_slicestack_getownpath"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_SliceStack_GetOwnPath == nullptr) + eLookupError = (*pLookup)("lib3mf_multipropertygroup_getcount", (void**)&(pWrapperTable->m_MultiPropertyGroup_GetCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_GetCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Consumer_GetConsumerID = (PLib3MFConsumer_GetConsumerIDPtr) GetProcAddress(hLibrary, "lib3mf_consumer_getconsumerid"); - #else // _WIN32 - pWrapperTable->m_Consumer_GetConsumerID = (PLib3MFConsumer_GetConsumerIDPtr) dlsym(hLibrary, "lib3mf_consumer_getconsumerid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Consumer_GetConsumerID == nullptr) + eLookupError = (*pLookup)("lib3mf_multipropertygroup_getallpropertyids", (void**)&(pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs)); + if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Consumer_GetKeyID = (PLib3MFConsumer_GetKeyIDPtr) GetProcAddress(hLibrary, "lib3mf_consumer_getkeyid"); - #else // _WIN32 - pWrapperTable->m_Consumer_GetKeyID = (PLib3MFConsumer_GetKeyIDPtr) dlsym(hLibrary, "lib3mf_consumer_getkeyid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Consumer_GetKeyID == nullptr) + eLookupError = (*pLookup)("lib3mf_multipropertygroup_addmultiproperty", (void**)&(pWrapperTable->m_MultiPropertyGroup_AddMultiProperty)); + if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_AddMultiProperty == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Consumer_GetKeyValue = (PLib3MFConsumer_GetKeyValuePtr) GetProcAddress(hLibrary, "lib3mf_consumer_getkeyvalue"); - #else // _WIN32 - pWrapperTable->m_Consumer_GetKeyValue = (PLib3MFConsumer_GetKeyValuePtr) dlsym(hLibrary, "lib3mf_consumer_getkeyvalue"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Consumer_GetKeyValue == nullptr) + eLookupError = (*pLookup)("lib3mf_multipropertygroup_setmultiproperty", (void**)&(pWrapperTable->m_MultiPropertyGroup_SetMultiProperty)); + if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_SetMultiProperty == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_AccessRight_GetConsumer = (PLib3MFAccessRight_GetConsumerPtr) GetProcAddress(hLibrary, "lib3mf_accessright_getconsumer"); - #else // _WIN32 - pWrapperTable->m_AccessRight_GetConsumer = (PLib3MFAccessRight_GetConsumerPtr) dlsym(hLibrary, "lib3mf_accessright_getconsumer"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_AccessRight_GetConsumer == nullptr) + eLookupError = (*pLookup)("lib3mf_multipropertygroup_getmultiproperty", (void**)&(pWrapperTable->m_MultiPropertyGroup_GetMultiProperty)); + if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_GetMultiProperty == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_AccessRight_GetWrappingAlgorithm = (PLib3MFAccessRight_GetWrappingAlgorithmPtr) GetProcAddress(hLibrary, "lib3mf_accessright_getwrappingalgorithm"); - #else // _WIN32 - pWrapperTable->m_AccessRight_GetWrappingAlgorithm = (PLib3MFAccessRight_GetWrappingAlgorithmPtr) dlsym(hLibrary, "lib3mf_accessright_getwrappingalgorithm"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_AccessRight_GetWrappingAlgorithm == nullptr) + eLookupError = (*pLookup)("lib3mf_multipropertygroup_removemultiproperty", (void**)&(pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty)); + if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_AccessRight_GetMgfAlgorithm = (PLib3MFAccessRight_GetMgfAlgorithmPtr) GetProcAddress(hLibrary, "lib3mf_accessright_getmgfalgorithm"); - #else // _WIN32 - pWrapperTable->m_AccessRight_GetMgfAlgorithm = (PLib3MFAccessRight_GetMgfAlgorithmPtr) dlsym(hLibrary, "lib3mf_accessright_getmgfalgorithm"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_AccessRight_GetMgfAlgorithm == nullptr) + eLookupError = (*pLookup)("lib3mf_multipropertygroup_getlayercount", (void**)&(pWrapperTable->m_MultiPropertyGroup_GetLayerCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_GetLayerCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_AccessRight_GetDigestMethod = (PLib3MFAccessRight_GetDigestMethodPtr) GetProcAddress(hLibrary, "lib3mf_accessright_getdigestmethod"); - #else // _WIN32 - pWrapperTable->m_AccessRight_GetDigestMethod = (PLib3MFAccessRight_GetDigestMethodPtr) dlsym(hLibrary, "lib3mf_accessright_getdigestmethod"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_AccessRight_GetDigestMethod == nullptr) + eLookupError = (*pLookup)("lib3mf_multipropertygroup_addlayer", (void**)&(pWrapperTable->m_MultiPropertyGroup_AddLayer)); + if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_AddLayer == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetEncryptionAlgorithm = (PLib3MFContentEncryptionParams_GetEncryptionAlgorithmPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getencryptionalgorithm"); - #else // _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetEncryptionAlgorithm = (PLib3MFContentEncryptionParams_GetEncryptionAlgorithmPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getencryptionalgorithm"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ContentEncryptionParams_GetEncryptionAlgorithm == nullptr) + eLookupError = (*pLookup)("lib3mf_multipropertygroup_getlayer", (void**)&(pWrapperTable->m_MultiPropertyGroup_GetLayer)); + if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_GetLayer == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetKey = (PLib3MFContentEncryptionParams_GetKeyPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getkey"); - #else // _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetKey = (PLib3MFContentEncryptionParams_GetKeyPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getkey"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ContentEncryptionParams_GetKey == nullptr) + eLookupError = (*pLookup)("lib3mf_multipropertygroup_removelayer", (void**)&(pWrapperTable->m_MultiPropertyGroup_RemoveLayer)); + if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_RemoveLayer == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_image3d_getname", (void**)&(pWrapperTable->m_Image3D_GetName)); + if ( (eLookupError != 0) || (pWrapperTable->m_Image3D_GetName == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_image3d_setname", (void**)&(pWrapperTable->m_Image3D_SetName)); + if ( (eLookupError != 0) || (pWrapperTable->m_Image3D_SetName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetInitializationVector = (PLib3MFContentEncryptionParams_GetInitializationVectorPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getinitializationvector"); - #else // _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetInitializationVector = (PLib3MFContentEncryptionParams_GetInitializationVectorPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getinitializationvector"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ContentEncryptionParams_GetInitializationVector == nullptr) + eLookupError = (*pLookup)("lib3mf_image3d_isimagestack", (void**)&(pWrapperTable->m_Image3D_IsImageStack)); + if ( (eLookupError != 0) || (pWrapperTable->m_Image3D_IsImageStack == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetAuthenticationTag = (PLib3MFContentEncryptionParams_GetAuthenticationTagPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getauthenticationtag"); - #else // _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetAuthenticationTag = (PLib3MFContentEncryptionParams_GetAuthenticationTagPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getauthenticationtag"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ContentEncryptionParams_GetAuthenticationTag == nullptr) + eLookupError = (*pLookup)("lib3mf_imagestack_getrowcount", (void**)&(pWrapperTable->m_ImageStack_GetRowCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImageStack_GetRowCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ContentEncryptionParams_SetAuthenticationTag = (PLib3MFContentEncryptionParams_SetAuthenticationTagPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_setauthenticationtag"); - #else // _WIN32 - pWrapperTable->m_ContentEncryptionParams_SetAuthenticationTag = (PLib3MFContentEncryptionParams_SetAuthenticationTagPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_setauthenticationtag"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ContentEncryptionParams_SetAuthenticationTag == nullptr) + eLookupError = (*pLookup)("lib3mf_imagestack_setrowcount", (void**)&(pWrapperTable->m_ImageStack_SetRowCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImageStack_SetRowCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetAdditionalAuthenticationData = (PLib3MFContentEncryptionParams_GetAdditionalAuthenticationDataPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getadditionalauthenticationdata"); - #else // _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetAdditionalAuthenticationData = (PLib3MFContentEncryptionParams_GetAdditionalAuthenticationDataPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getadditionalauthenticationdata"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ContentEncryptionParams_GetAdditionalAuthenticationData == nullptr) + eLookupError = (*pLookup)("lib3mf_imagestack_getcolumncount", (void**)&(pWrapperTable->m_ImageStack_GetColumnCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImageStack_GetColumnCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetDescriptor = (PLib3MFContentEncryptionParams_GetDescriptorPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getdescriptor"); - #else // _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetDescriptor = (PLib3MFContentEncryptionParams_GetDescriptorPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getdescriptor"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ContentEncryptionParams_GetDescriptor == nullptr) + eLookupError = (*pLookup)("lib3mf_imagestack_setcolumncount", (void**)&(pWrapperTable->m_ImageStack_SetColumnCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImageStack_SetColumnCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetKeyUUID = (PLib3MFContentEncryptionParams_GetKeyUUIDPtr) GetProcAddress(hLibrary, "lib3mf_contentencryptionparams_getkeyuuid"); - #else // _WIN32 - pWrapperTable->m_ContentEncryptionParams_GetKeyUUID = (PLib3MFContentEncryptionParams_GetKeyUUIDPtr) dlsym(hLibrary, "lib3mf_contentencryptionparams_getkeyuuid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ContentEncryptionParams_GetKeyUUID == nullptr) + eLookupError = (*pLookup)("lib3mf_imagestack_getsheetcount", (void**)&(pWrapperTable->m_ImageStack_GetSheetCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImageStack_GetSheetCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ResourceData_GetPath = (PLib3MFResourceData_GetPathPtr) GetProcAddress(hLibrary, "lib3mf_resourcedata_getpath"); - #else // _WIN32 - pWrapperTable->m_ResourceData_GetPath = (PLib3MFResourceData_GetPathPtr) dlsym(hLibrary, "lib3mf_resourcedata_getpath"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ResourceData_GetPath == nullptr) + eLookupError = (*pLookup)("lib3mf_imagestack_getsheet", (void**)&(pWrapperTable->m_ImageStack_GetSheet)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImageStack_GetSheet == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ResourceData_GetEncryptionAlgorithm = (PLib3MFResourceData_GetEncryptionAlgorithmPtr) GetProcAddress(hLibrary, "lib3mf_resourcedata_getencryptionalgorithm"); - #else // _WIN32 - pWrapperTable->m_ResourceData_GetEncryptionAlgorithm = (PLib3MFResourceData_GetEncryptionAlgorithmPtr) dlsym(hLibrary, "lib3mf_resourcedata_getencryptionalgorithm"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ResourceData_GetEncryptionAlgorithm == nullptr) + eLookupError = (*pLookup)("lib3mf_imagestack_setsheet", (void**)&(pWrapperTable->m_ImageStack_SetSheet)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImageStack_SetSheet == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ResourceData_GetCompression = (PLib3MFResourceData_GetCompressionPtr) GetProcAddress(hLibrary, "lib3mf_resourcedata_getcompression"); - #else // _WIN32 - pWrapperTable->m_ResourceData_GetCompression = (PLib3MFResourceData_GetCompressionPtr) dlsym(hLibrary, "lib3mf_resourcedata_getcompression"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ResourceData_GetCompression == nullptr) + eLookupError = (*pLookup)("lib3mf_imagestack_createemptysheet", (void**)&(pWrapperTable->m_ImageStack_CreateEmptySheet)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImageStack_CreateEmptySheet == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ResourceData_GetAdditionalAuthenticationData = (PLib3MFResourceData_GetAdditionalAuthenticationDataPtr) GetProcAddress(hLibrary, "lib3mf_resourcedata_getadditionalauthenticationdata"); - #else // _WIN32 - pWrapperTable->m_ResourceData_GetAdditionalAuthenticationData = (PLib3MFResourceData_GetAdditionalAuthenticationDataPtr) dlsym(hLibrary, "lib3mf_resourcedata_getadditionalauthenticationdata"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ResourceData_GetAdditionalAuthenticationData == nullptr) + eLookupError = (*pLookup)("lib3mf_imagestack_createsheetfrombuffer", (void**)&(pWrapperTable->m_ImageStack_CreateSheetFromBuffer)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImageStack_CreateSheetFromBuffer == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ResourceDataGroup_GetKeyUUID = (PLib3MFResourceDataGroup_GetKeyUUIDPtr) GetProcAddress(hLibrary, "lib3mf_resourcedatagroup_getkeyuuid"); - #else // _WIN32 - pWrapperTable->m_ResourceDataGroup_GetKeyUUID = (PLib3MFResourceDataGroup_GetKeyUUIDPtr) dlsym(hLibrary, "lib3mf_resourcedatagroup_getkeyuuid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ResourceDataGroup_GetKeyUUID == nullptr) + eLookupError = (*pLookup)("lib3mf_imagestack_createsheetfromfile", (void**)&(pWrapperTable->m_ImageStack_CreateSheetFromFile)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImageStack_CreateSheetFromFile == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ResourceDataGroup_AddAccessRight = (PLib3MFResourceDataGroup_AddAccessRightPtr) GetProcAddress(hLibrary, "lib3mf_resourcedatagroup_addaccessright"); - #else // _WIN32 - pWrapperTable->m_ResourceDataGroup_AddAccessRight = (PLib3MFResourceDataGroup_AddAccessRightPtr) dlsym(hLibrary, "lib3mf_resourcedatagroup_addaccessright"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ResourceDataGroup_AddAccessRight == nullptr) + eLookupError = (*pLookup)("lib3mf_attachment_getpath", (void**)&(pWrapperTable->m_Attachment_GetPath)); + if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_GetPath == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ResourceDataGroup_FindAccessRightByConsumer = (PLib3MFResourceDataGroup_FindAccessRightByConsumerPtr) GetProcAddress(hLibrary, "lib3mf_resourcedatagroup_findaccessrightbyconsumer"); - #else // _WIN32 - pWrapperTable->m_ResourceDataGroup_FindAccessRightByConsumer = (PLib3MFResourceDataGroup_FindAccessRightByConsumerPtr) dlsym(hLibrary, "lib3mf_resourcedatagroup_findaccessrightbyconsumer"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ResourceDataGroup_FindAccessRightByConsumer == nullptr) + eLookupError = (*pLookup)("lib3mf_attachment_setpath", (void**)&(pWrapperTable->m_Attachment_SetPath)); + if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_SetPath == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ResourceDataGroup_RemoveAccessRight = (PLib3MFResourceDataGroup_RemoveAccessRightPtr) GetProcAddress(hLibrary, "lib3mf_resourcedatagroup_removeaccessright"); - #else // _WIN32 - pWrapperTable->m_ResourceDataGroup_RemoveAccessRight = (PLib3MFResourceDataGroup_RemoveAccessRightPtr) dlsym(hLibrary, "lib3mf_resourcedatagroup_removeaccessright"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ResourceDataGroup_RemoveAccessRight == nullptr) + eLookupError = (*pLookup)("lib3mf_attachment_packagepart", (void**)&(pWrapperTable->m_Attachment_PackagePart)); + if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_PackagePart == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_AddConsumer = (PLib3MFKeyStore_AddConsumerPtr) GetProcAddress(hLibrary, "lib3mf_keystore_addconsumer"); - #else // _WIN32 - pWrapperTable->m_KeyStore_AddConsumer = (PLib3MFKeyStore_AddConsumerPtr) dlsym(hLibrary, "lib3mf_keystore_addconsumer"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_AddConsumer == nullptr) + eLookupError = (*pLookup)("lib3mf_attachment_getrelationshiptype", (void**)&(pWrapperTable->m_Attachment_GetRelationShipType)); + if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_GetRelationShipType == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_GetConsumerCount = (PLib3MFKeyStore_GetConsumerCountPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getconsumercount"); - #else // _WIN32 - pWrapperTable->m_KeyStore_GetConsumerCount = (PLib3MFKeyStore_GetConsumerCountPtr) dlsym(hLibrary, "lib3mf_keystore_getconsumercount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_GetConsumerCount == nullptr) + eLookupError = (*pLookup)("lib3mf_attachment_setrelationshiptype", (void**)&(pWrapperTable->m_Attachment_SetRelationShipType)); + if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_SetRelationShipType == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_GetConsumer = (PLib3MFKeyStore_GetConsumerPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getconsumer"); - #else // _WIN32 - pWrapperTable->m_KeyStore_GetConsumer = (PLib3MFKeyStore_GetConsumerPtr) dlsym(hLibrary, "lib3mf_keystore_getconsumer"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_GetConsumer == nullptr) + eLookupError = (*pLookup)("lib3mf_attachment_writetofile", (void**)&(pWrapperTable->m_Attachment_WriteToFile)); + if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_WriteToFile == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_RemoveConsumer = (PLib3MFKeyStore_RemoveConsumerPtr) GetProcAddress(hLibrary, "lib3mf_keystore_removeconsumer"); - #else // _WIN32 - pWrapperTable->m_KeyStore_RemoveConsumer = (PLib3MFKeyStore_RemoveConsumerPtr) dlsym(hLibrary, "lib3mf_keystore_removeconsumer"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_RemoveConsumer == nullptr) + eLookupError = (*pLookup)("lib3mf_attachment_readfromfile", (void**)&(pWrapperTable->m_Attachment_ReadFromFile)); + if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_ReadFromFile == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_FindConsumer = (PLib3MFKeyStore_FindConsumerPtr) GetProcAddress(hLibrary, "lib3mf_keystore_findconsumer"); - #else // _WIN32 - pWrapperTable->m_KeyStore_FindConsumer = (PLib3MFKeyStore_FindConsumerPtr) dlsym(hLibrary, "lib3mf_keystore_findconsumer"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_FindConsumer == nullptr) + eLookupError = (*pLookup)("lib3mf_attachment_readfromcallback", (void**)&(pWrapperTable->m_Attachment_ReadFromCallback)); + if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_ReadFromCallback == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_GetResourceDataGroupCount = (PLib3MFKeyStore_GetResourceDataGroupCountPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getresourcedatagroupcount"); - #else // _WIN32 - pWrapperTable->m_KeyStore_GetResourceDataGroupCount = (PLib3MFKeyStore_GetResourceDataGroupCountPtr) dlsym(hLibrary, "lib3mf_keystore_getresourcedatagroupcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_GetResourceDataGroupCount == nullptr) + eLookupError = (*pLookup)("lib3mf_attachment_getstreamsize", (void**)&(pWrapperTable->m_Attachment_GetStreamSize)); + if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_GetStreamSize == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_AddResourceDataGroup = (PLib3MFKeyStore_AddResourceDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_keystore_addresourcedatagroup"); - #else // _WIN32 - pWrapperTable->m_KeyStore_AddResourceDataGroup = (PLib3MFKeyStore_AddResourceDataGroupPtr) dlsym(hLibrary, "lib3mf_keystore_addresourcedatagroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_AddResourceDataGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_attachment_writetobuffer", (void**)&(pWrapperTable->m_Attachment_WriteToBuffer)); + if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_WriteToBuffer == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_GetResourceDataGroup = (PLib3MFKeyStore_GetResourceDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getresourcedatagroup"); - #else // _WIN32 - pWrapperTable->m_KeyStore_GetResourceDataGroup = (PLib3MFKeyStore_GetResourceDataGroupPtr) dlsym(hLibrary, "lib3mf_keystore_getresourcedatagroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_GetResourceDataGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_attachment_readfrombuffer", (void**)&(pWrapperTable->m_Attachment_ReadFromBuffer)); + if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_ReadFromBuffer == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_RemoveResourceDataGroup = (PLib3MFKeyStore_RemoveResourceDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_keystore_removeresourcedatagroup"); - #else // _WIN32 - pWrapperTable->m_KeyStore_RemoveResourceDataGroup = (PLib3MFKeyStore_RemoveResourceDataGroupPtr) dlsym(hLibrary, "lib3mf_keystore_removeresourcedatagroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_RemoveResourceDataGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2d_getattachment", (void**)&(pWrapperTable->m_Texture2D_GetAttachment)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_GetAttachment == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_FindResourceDataGroup = (PLib3MFKeyStore_FindResourceDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_keystore_findresourcedatagroup"); - #else // _WIN32 - pWrapperTable->m_KeyStore_FindResourceDataGroup = (PLib3MFKeyStore_FindResourceDataGroupPtr) dlsym(hLibrary, "lib3mf_keystore_findresourcedatagroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_FindResourceDataGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2d_setattachment", (void**)&(pWrapperTable->m_Texture2D_SetAttachment)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_SetAttachment == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_AddResourceData = (PLib3MFKeyStore_AddResourceDataPtr) GetProcAddress(hLibrary, "lib3mf_keystore_addresourcedata"); - #else // _WIN32 - pWrapperTable->m_KeyStore_AddResourceData = (PLib3MFKeyStore_AddResourceDataPtr) dlsym(hLibrary, "lib3mf_keystore_addresourcedata"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_AddResourceData == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2d_getcontenttype", (void**)&(pWrapperTable->m_Texture2D_GetContentType)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_GetContentType == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_RemoveResourceData = (PLib3MFKeyStore_RemoveResourceDataPtr) GetProcAddress(hLibrary, "lib3mf_keystore_removeresourcedata"); - #else // _WIN32 - pWrapperTable->m_KeyStore_RemoveResourceData = (PLib3MFKeyStore_RemoveResourceDataPtr) dlsym(hLibrary, "lib3mf_keystore_removeresourcedata"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_RemoveResourceData == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2d_setcontenttype", (void**)&(pWrapperTable->m_Texture2D_SetContentType)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_SetContentType == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_FindResourceData = (PLib3MFKeyStore_FindResourceDataPtr) GetProcAddress(hLibrary, "lib3mf_keystore_findresourcedata"); - #else // _WIN32 - pWrapperTable->m_KeyStore_FindResourceData = (PLib3MFKeyStore_FindResourceDataPtr) dlsym(hLibrary, "lib3mf_keystore_findresourcedata"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_FindResourceData == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2d_gettilestyleuv", (void**)&(pWrapperTable->m_Texture2D_GetTileStyleUV)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_GetTileStyleUV == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_GetResourceDataCount = (PLib3MFKeyStore_GetResourceDataCountPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getresourcedatacount"); - #else // _WIN32 - pWrapperTable->m_KeyStore_GetResourceDataCount = (PLib3MFKeyStore_GetResourceDataCountPtr) dlsym(hLibrary, "lib3mf_keystore_getresourcedatacount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_GetResourceDataCount == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2d_settilestyleuv", (void**)&(pWrapperTable->m_Texture2D_SetTileStyleUV)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_SetTileStyleUV == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_GetResourceData = (PLib3MFKeyStore_GetResourceDataPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getresourcedata"); - #else // _WIN32 - pWrapperTable->m_KeyStore_GetResourceData = (PLib3MFKeyStore_GetResourceDataPtr) dlsym(hLibrary, "lib3mf_keystore_getresourcedata"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_GetResourceData == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2d_getfilter", (void**)&(pWrapperTable->m_Texture2D_GetFilter)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_GetFilter == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_GetUUID = (PLib3MFKeyStore_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_keystore_getuuid"); - #else // _WIN32 - pWrapperTable->m_KeyStore_GetUUID = (PLib3MFKeyStore_GetUUIDPtr) dlsym(hLibrary, "lib3mf_keystore_getuuid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_GetUUID == nullptr) + eLookupError = (*pLookup)("lib3mf_texture2d_setfilter", (void**)&(pWrapperTable->m_Texture2D_SetFilter)); + if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_SetFilter == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_KeyStore_SetUUID = (PLib3MFKeyStore_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_keystore_setuuid"); - #else // _WIN32 - pWrapperTable->m_KeyStore_SetUUID = (PLib3MFKeyStore_SetUUIDPtr) dlsym(hLibrary, "lib3mf_keystore_setuuid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_KeyStore_SetUUID == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitport_getidentifier", (void**)&(pWrapperTable->m_ImplicitPort_GetIdentifier)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitPort_GetIdentifier == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_RootModelPart = (PLib3MFModel_RootModelPartPtr) GetProcAddress(hLibrary, "lib3mf_model_rootmodelpart"); - #else // _WIN32 - pWrapperTable->m_Model_RootModelPart = (PLib3MFModel_RootModelPartPtr) dlsym(hLibrary, "lib3mf_model_rootmodelpart"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_RootModelPart == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitport_setidentifier", (void**)&(pWrapperTable->m_ImplicitPort_SetIdentifier)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitPort_SetIdentifier == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_FindOrCreatePackagePart = (PLib3MFModel_FindOrCreatePackagePartPtr) GetProcAddress(hLibrary, "lib3mf_model_findorcreatepackagepart"); - #else // _WIN32 - pWrapperTable->m_Model_FindOrCreatePackagePart = (PLib3MFModel_FindOrCreatePackagePartPtr) dlsym(hLibrary, "lib3mf_model_findorcreatepackagepart"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_FindOrCreatePackagePart == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitport_getdisplayname", (void**)&(pWrapperTable->m_ImplicitPort_GetDisplayName)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitPort_GetDisplayName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_SetUnit = (PLib3MFModel_SetUnitPtr) GetProcAddress(hLibrary, "lib3mf_model_setunit"); - #else // _WIN32 - pWrapperTable->m_Model_SetUnit = (PLib3MFModel_SetUnitPtr) dlsym(hLibrary, "lib3mf_model_setunit"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_SetUnit == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitport_setdisplayname", (void**)&(pWrapperTable->m_ImplicitPort_SetDisplayName)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitPort_SetDisplayName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetUnit = (PLib3MFModel_GetUnitPtr) GetProcAddress(hLibrary, "lib3mf_model_getunit"); - #else // _WIN32 - pWrapperTable->m_Model_GetUnit = (PLib3MFModel_GetUnitPtr) dlsym(hLibrary, "lib3mf_model_getunit"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetUnit == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitport_settype", (void**)&(pWrapperTable->m_ImplicitPort_SetType)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitPort_SetType == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetLanguage = (PLib3MFModel_GetLanguagePtr) GetProcAddress(hLibrary, "lib3mf_model_getlanguage"); - #else // _WIN32 - pWrapperTable->m_Model_GetLanguage = (PLib3MFModel_GetLanguagePtr) dlsym(hLibrary, "lib3mf_model_getlanguage"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetLanguage == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitport_gettype", (void**)&(pWrapperTable->m_ImplicitPort_GetType)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitPort_GetType == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_SetLanguage = (PLib3MFModel_SetLanguagePtr) GetProcAddress(hLibrary, "lib3mf_model_setlanguage"); - #else // _WIN32 - pWrapperTable->m_Model_SetLanguage = (PLib3MFModel_SetLanguagePtr) dlsym(hLibrary, "lib3mf_model_setlanguage"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_SetLanguage == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitport_getreference", (void**)&(pWrapperTable->m_ImplicitPort_GetReference)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitPort_GetReference == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_QueryWriter = (PLib3MFModel_QueryWriterPtr) GetProcAddress(hLibrary, "lib3mf_model_querywriter"); - #else // _WIN32 - pWrapperTable->m_Model_QueryWriter = (PLib3MFModel_QueryWriterPtr) dlsym(hLibrary, "lib3mf_model_querywriter"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_QueryWriter == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitport_setreference", (void**)&(pWrapperTable->m_ImplicitPort_SetReference)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitPort_SetReference == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_QueryReader = (PLib3MFModel_QueryReaderPtr) GetProcAddress(hLibrary, "lib3mf_model_queryreader"); - #else // _WIN32 - pWrapperTable->m_Model_QueryReader = (PLib3MFModel_QueryReaderPtr) dlsym(hLibrary, "lib3mf_model_queryreader"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_QueryReader == nullptr) + eLookupError = (*pLookup)("lib3mf_iterator_movenext", (void**)&(pWrapperTable->m_Iterator_MoveNext)); + if ( (eLookupError != 0) || (pWrapperTable->m_Iterator_MoveNext == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetResourceByID = (PLib3MFModel_GetResourceByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getresourcebyid"); - #else // _WIN32 - pWrapperTable->m_Model_GetResourceByID = (PLib3MFModel_GetResourceByIDPtr) dlsym(hLibrary, "lib3mf_model_getresourcebyid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetResourceByID == nullptr) + eLookupError = (*pLookup)("lib3mf_iterator_moveprevious", (void**)&(pWrapperTable->m_Iterator_MovePrevious)); + if ( (eLookupError != 0) || (pWrapperTable->m_Iterator_MovePrevious == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetTexture2DByID = (PLib3MFModel_GetTexture2DByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_gettexture2dbyid"); - #else // _WIN32 - pWrapperTable->m_Model_GetTexture2DByID = (PLib3MFModel_GetTexture2DByIDPtr) dlsym(hLibrary, "lib3mf_model_gettexture2dbyid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetTexture2DByID == nullptr) + eLookupError = (*pLookup)("lib3mf_iterator_count", (void**)&(pWrapperTable->m_Iterator_Count)); + if ( (eLookupError != 0) || (pWrapperTable->m_Iterator_Count == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetPropertyTypeByID = (PLib3MFModel_GetPropertyTypeByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getpropertytypebyid"); - #else // _WIN32 - pWrapperTable->m_Model_GetPropertyTypeByID = (PLib3MFModel_GetPropertyTypeByIDPtr) dlsym(hLibrary, "lib3mf_model_getpropertytypebyid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetPropertyTypeByID == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitportiterator_getcurrent", (void**)&(pWrapperTable->m_ImplicitPortIterator_GetCurrent)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitPortIterator_GetCurrent == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetBaseMaterialGroupByID = (PLib3MFModel_GetBaseMaterialGroupByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getbasematerialgroupbyid"); - #else // _WIN32 - pWrapperTable->m_Model_GetBaseMaterialGroupByID = (PLib3MFModel_GetBaseMaterialGroupByIDPtr) dlsym(hLibrary, "lib3mf_model_getbasematerialgroupbyid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetBaseMaterialGroupByID == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_getidentifier", (void**)&(pWrapperTable->m_ImplicitNode_GetIdentifier)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_GetIdentifier == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetTexture2DGroupByID = (PLib3MFModel_GetTexture2DGroupByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_gettexture2dgroupbyid"); - #else // _WIN32 - pWrapperTable->m_Model_GetTexture2DGroupByID = (PLib3MFModel_GetTexture2DGroupByIDPtr) dlsym(hLibrary, "lib3mf_model_gettexture2dgroupbyid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetTexture2DGroupByID == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_setidentifier", (void**)&(pWrapperTable->m_ImplicitNode_SetIdentifier)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_SetIdentifier == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetCompositeMaterialsByID = (PLib3MFModel_GetCompositeMaterialsByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getcompositematerialsbyid"); - #else // _WIN32 - pWrapperTable->m_Model_GetCompositeMaterialsByID = (PLib3MFModel_GetCompositeMaterialsByIDPtr) dlsym(hLibrary, "lib3mf_model_getcompositematerialsbyid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetCompositeMaterialsByID == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_getdisplayname", (void**)&(pWrapperTable->m_ImplicitNode_GetDisplayName)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_GetDisplayName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetMultiPropertyGroupByID = (PLib3MFModel_GetMultiPropertyGroupByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getmultipropertygroupbyid"); - #else // _WIN32 - pWrapperTable->m_Model_GetMultiPropertyGroupByID = (PLib3MFModel_GetMultiPropertyGroupByIDPtr) dlsym(hLibrary, "lib3mf_model_getmultipropertygroupbyid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetMultiPropertyGroupByID == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_setdisplayname", (void**)&(pWrapperTable->m_ImplicitNode_SetDisplayName)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_SetDisplayName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetMeshObjectByID = (PLib3MFModel_GetMeshObjectByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getmeshobjectbyid"); - #else // _WIN32 - pWrapperTable->m_Model_GetMeshObjectByID = (PLib3MFModel_GetMeshObjectByIDPtr) dlsym(hLibrary, "lib3mf_model_getmeshobjectbyid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetMeshObjectByID == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_gettag", (void**)&(pWrapperTable->m_ImplicitNode_GetTag)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_GetTag == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetComponentsObjectByID = (PLib3MFModel_GetComponentsObjectByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getcomponentsobjectbyid"); - #else // _WIN32 - pWrapperTable->m_Model_GetComponentsObjectByID = (PLib3MFModel_GetComponentsObjectByIDPtr) dlsym(hLibrary, "lib3mf_model_getcomponentsobjectbyid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetComponentsObjectByID == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_settag", (void**)&(pWrapperTable->m_ImplicitNode_SetTag)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_SetTag == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetColorGroupByID = (PLib3MFModel_GetColorGroupByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getcolorgroupbyid"); - #else // _WIN32 - pWrapperTable->m_Model_GetColorGroupByID = (PLib3MFModel_GetColorGroupByIDPtr) dlsym(hLibrary, "lib3mf_model_getcolorgroupbyid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetColorGroupByID == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_getnodetype", (void**)&(pWrapperTable->m_ImplicitNode_GetNodeType)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_GetNodeType == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetSliceStackByID = (PLib3MFModel_GetSliceStackByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getslicestackbyid"); - #else // _WIN32 - pWrapperTable->m_Model_GetSliceStackByID = (PLib3MFModel_GetSliceStackByIDPtr) dlsym(hLibrary, "lib3mf_model_getslicestackbyid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetSliceStackByID == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_addinput", (void**)&(pWrapperTable->m_ImplicitNode_AddInput)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_AddInput == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetBuildUUID = (PLib3MFModel_GetBuildUUIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getbuilduuid"); - #else // _WIN32 - pWrapperTable->m_Model_GetBuildUUID = (PLib3MFModel_GetBuildUUIDPtr) dlsym(hLibrary, "lib3mf_model_getbuilduuid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetBuildUUID == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_getinputs", (void**)&(pWrapperTable->m_ImplicitNode_GetInputs)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_GetInputs == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_SetBuildUUID = (PLib3MFModel_SetBuildUUIDPtr) GetProcAddress(hLibrary, "lib3mf_model_setbuilduuid"); - #else // _WIN32 - pWrapperTable->m_Model_SetBuildUUID = (PLib3MFModel_SetBuildUUIDPtr) dlsym(hLibrary, "lib3mf_model_setbuilduuid"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_SetBuildUUID == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_addoutput", (void**)&(pWrapperTable->m_ImplicitNode_AddOutput)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_AddOutput == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetBuildItems = (PLib3MFModel_GetBuildItemsPtr) GetProcAddress(hLibrary, "lib3mf_model_getbuilditems"); - #else // _WIN32 - pWrapperTable->m_Model_GetBuildItems = (PLib3MFModel_GetBuildItemsPtr) dlsym(hLibrary, "lib3mf_model_getbuilditems"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetBuildItems == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_getoutputs", (void**)&(pWrapperTable->m_ImplicitNode_GetOutputs)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_GetOutputs == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetOutbox = (PLib3MFModel_GetOutboxPtr) GetProcAddress(hLibrary, "lib3mf_model_getoutbox"); - #else // _WIN32 - pWrapperTable->m_Model_GetOutbox = (PLib3MFModel_GetOutboxPtr) dlsym(hLibrary, "lib3mf_model_getoutbox"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetOutbox == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_findinput", (void**)&(pWrapperTable->m_ImplicitNode_FindInput)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_FindInput == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetResources = (PLib3MFModel_GetResourcesPtr) GetProcAddress(hLibrary, "lib3mf_model_getresources"); - #else // _WIN32 - pWrapperTable->m_Model_GetResources = (PLib3MFModel_GetResourcesPtr) dlsym(hLibrary, "lib3mf_model_getresources"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetResources == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_findoutput", (void**)&(pWrapperTable->m_ImplicitNode_FindOutput)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_FindOutput == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetObjects = (PLib3MFModel_GetObjectsPtr) GetProcAddress(hLibrary, "lib3mf_model_getobjects"); - #else // _WIN32 - pWrapperTable->m_Model_GetObjects = (PLib3MFModel_GetObjectsPtr) dlsym(hLibrary, "lib3mf_model_getobjects"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetObjects == nullptr) + eLookupError = (*pLookup)("lib3mf_implicitnode_aretypesvalid", (void**)&(pWrapperTable->m_ImplicitNode_AreTypesValid)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitNode_AreTypesValid == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetMeshObjects = (PLib3MFModel_GetMeshObjectsPtr) GetProcAddress(hLibrary, "lib3mf_model_getmeshobjects"); - #else // _WIN32 - pWrapperTable->m_Model_GetMeshObjects = (PLib3MFModel_GetMeshObjectsPtr) dlsym(hLibrary, "lib3mf_model_getmeshobjects"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetMeshObjects == nullptr) + eLookupError = (*pLookup)("lib3mf_oneinputnode_getinputa", (void**)&(pWrapperTable->m_OneInputNode_GetInputA)); + if ( (eLookupError != 0) || (pWrapperTable->m_OneInputNode_GetInputA == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetComponentsObjects = (PLib3MFModel_GetComponentsObjectsPtr) GetProcAddress(hLibrary, "lib3mf_model_getcomponentsobjects"); - #else // _WIN32 - pWrapperTable->m_Model_GetComponentsObjects = (PLib3MFModel_GetComponentsObjectsPtr) dlsym(hLibrary, "lib3mf_model_getcomponentsobjects"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetComponentsObjects == nullptr) + eLookupError = (*pLookup)("lib3mf_oneinputnode_getoutputresult", (void**)&(pWrapperTable->m_OneInputNode_GetOutputResult)); + if ( (eLookupError != 0) || (pWrapperTable->m_OneInputNode_GetOutputResult == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetTexture2Ds = (PLib3MFModel_GetTexture2DsPtr) GetProcAddress(hLibrary, "lib3mf_model_gettexture2ds"); - #else // _WIN32 - pWrapperTable->m_Model_GetTexture2Ds = (PLib3MFModel_GetTexture2DsPtr) dlsym(hLibrary, "lib3mf_model_gettexture2ds"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetTexture2Ds == nullptr) + eLookupError = (*pLookup)("lib3mf_resourceidnode_setresource", (void**)&(pWrapperTable->m_ResourceIdNode_SetResource)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceIdNode_SetResource == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetBaseMaterialGroups = (PLib3MFModel_GetBaseMaterialGroupsPtr) GetProcAddress(hLibrary, "lib3mf_model_getbasematerialgroups"); - #else // _WIN32 - pWrapperTable->m_Model_GetBaseMaterialGroups = (PLib3MFModel_GetBaseMaterialGroupsPtr) dlsym(hLibrary, "lib3mf_model_getbasematerialgroups"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetBaseMaterialGroups == nullptr) + eLookupError = (*pLookup)("lib3mf_resourceidnode_getresource", (void**)&(pWrapperTable->m_ResourceIdNode_GetResource)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceIdNode_GetResource == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetColorGroups = (PLib3MFModel_GetColorGroupsPtr) GetProcAddress(hLibrary, "lib3mf_model_getcolorgroups"); - #else // _WIN32 - pWrapperTable->m_Model_GetColorGroups = (PLib3MFModel_GetColorGroupsPtr) dlsym(hLibrary, "lib3mf_model_getcolorgroups"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetColorGroups == nullptr) + eLookupError = (*pLookup)("lib3mf_resourceidnode_getoutputvalue", (void**)&(pWrapperTable->m_ResourceIdNode_GetOutputValue)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceIdNode_GetOutputValue == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetTexture2DGroups = (PLib3MFModel_GetTexture2DGroupsPtr) GetProcAddress(hLibrary, "lib3mf_model_gettexture2dgroups"); - #else // _WIN32 - pWrapperTable->m_Model_GetTexture2DGroups = (PLib3MFModel_GetTexture2DGroupsPtr) dlsym(hLibrary, "lib3mf_model_gettexture2dgroups"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetTexture2DGroups == nullptr) + eLookupError = (*pLookup)("lib3mf_twoinputnode_getinputb", (void**)&(pWrapperTable->m_TwoInputNode_GetInputB)); + if ( (eLookupError != 0) || (pWrapperTable->m_TwoInputNode_GetInputB == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetCompositeMaterials = (PLib3MFModel_GetCompositeMaterialsPtr) GetProcAddress(hLibrary, "lib3mf_model_getcompositematerials"); - #else // _WIN32 - pWrapperTable->m_Model_GetCompositeMaterials = (PLib3MFModel_GetCompositeMaterialsPtr) dlsym(hLibrary, "lib3mf_model_getcompositematerials"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetCompositeMaterials == nullptr) + eLookupError = (*pLookup)("lib3mf_selectnode_getinputb", (void**)&(pWrapperTable->m_SelectNode_GetInputB)); + if ( (eLookupError != 0) || (pWrapperTable->m_SelectNode_GetInputB == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetMultiPropertyGroups = (PLib3MFModel_GetMultiPropertyGroupsPtr) GetProcAddress(hLibrary, "lib3mf_model_getmultipropertygroups"); - #else // _WIN32 - pWrapperTable->m_Model_GetMultiPropertyGroups = (PLib3MFModel_GetMultiPropertyGroupsPtr) dlsym(hLibrary, "lib3mf_model_getmultipropertygroups"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetMultiPropertyGroups == nullptr) + eLookupError = (*pLookup)("lib3mf_selectnode_getinputc", (void**)&(pWrapperTable->m_SelectNode_GetInputC)); + if ( (eLookupError != 0) || (pWrapperTable->m_SelectNode_GetInputC == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetSliceStacks = (PLib3MFModel_GetSliceStacksPtr) GetProcAddress(hLibrary, "lib3mf_model_getslicestacks"); - #else // _WIN32 - pWrapperTable->m_Model_GetSliceStacks = (PLib3MFModel_GetSliceStacksPtr) dlsym(hLibrary, "lib3mf_model_getslicestacks"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetSliceStacks == nullptr) + eLookupError = (*pLookup)("lib3mf_selectnode_getinputd", (void**)&(pWrapperTable->m_SelectNode_GetInputD)); + if ( (eLookupError != 0) || (pWrapperTable->m_SelectNode_GetInputD == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_MergeToModel = (PLib3MFModel_MergeToModelPtr) GetProcAddress(hLibrary, "lib3mf_model_mergetomodel"); - #else // _WIN32 - pWrapperTable->m_Model_MergeToModel = (PLib3MFModel_MergeToModelPtr) dlsym(hLibrary, "lib3mf_model_mergetomodel"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_MergeToModel == nullptr) + eLookupError = (*pLookup)("lib3mf_clampnode_getinputmin", (void**)&(pWrapperTable->m_ClampNode_GetInputMin)); + if ( (eLookupError != 0) || (pWrapperTable->m_ClampNode_GetInputMin == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_AddMeshObject = (PLib3MFModel_AddMeshObjectPtr) GetProcAddress(hLibrary, "lib3mf_model_addmeshobject"); - #else // _WIN32 - pWrapperTable->m_Model_AddMeshObject = (PLib3MFModel_AddMeshObjectPtr) dlsym(hLibrary, "lib3mf_model_addmeshobject"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_AddMeshObject == nullptr) + eLookupError = (*pLookup)("lib3mf_clampnode_getinputmax", (void**)&(pWrapperTable->m_ClampNode_GetInputMax)); + if ( (eLookupError != 0) || (pWrapperTable->m_ClampNode_GetInputMax == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_composevectornode_getinputx", (void**)&(pWrapperTable->m_ComposeVectorNode_GetInputX)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeVectorNode_GetInputX == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_composevectornode_getinputy", (void**)&(pWrapperTable->m_ComposeVectorNode_GetInputY)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeVectorNode_GetInputY == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_AddComponentsObject = (PLib3MFModel_AddComponentsObjectPtr) GetProcAddress(hLibrary, "lib3mf_model_addcomponentsobject"); - #else // _WIN32 - pWrapperTable->m_Model_AddComponentsObject = (PLib3MFModel_AddComponentsObjectPtr) dlsym(hLibrary, "lib3mf_model_addcomponentsobject"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_AddComponentsObject == nullptr) + eLookupError = (*pLookup)("lib3mf_composevectornode_getinputz", (void**)&(pWrapperTable->m_ComposeVectorNode_GetInputZ)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeVectorNode_GetInputZ == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_AddSliceStack = (PLib3MFModel_AddSliceStackPtr) GetProcAddress(hLibrary, "lib3mf_model_addslicestack"); - #else // _WIN32 - pWrapperTable->m_Model_AddSliceStack = (PLib3MFModel_AddSliceStackPtr) dlsym(hLibrary, "lib3mf_model_addslicestack"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_AddSliceStack == nullptr) + eLookupError = (*pLookup)("lib3mf_composevectornode_getoutputresult", (void**)&(pWrapperTable->m_ComposeVectorNode_GetOutputResult)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeVectorNode_GetOutputResult == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_AddTexture2DFromAttachment = (PLib3MFModel_AddTexture2DFromAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_addtexture2dfromattachment"); - #else // _WIN32 - pWrapperTable->m_Model_AddTexture2DFromAttachment = (PLib3MFModel_AddTexture2DFromAttachmentPtr) dlsym(hLibrary, "lib3mf_model_addtexture2dfromattachment"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_AddTexture2DFromAttachment == nullptr) + eLookupError = (*pLookup)("lib3mf_decomposevectornode_getinputa", (void**)&(pWrapperTable->m_DecomposeVectorNode_GetInputA)); + if ( (eLookupError != 0) || (pWrapperTable->m_DecomposeVectorNode_GetInputA == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_AddBaseMaterialGroup = (PLib3MFModel_AddBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_model_addbasematerialgroup"); - #else // _WIN32 - pWrapperTable->m_Model_AddBaseMaterialGroup = (PLib3MFModel_AddBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_model_addbasematerialgroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_AddBaseMaterialGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_decomposevectornode_getoutputx", (void**)&(pWrapperTable->m_DecomposeVectorNode_GetOutputX)); + if ( (eLookupError != 0) || (pWrapperTable->m_DecomposeVectorNode_GetOutputX == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_AddColorGroup = (PLib3MFModel_AddColorGroupPtr) GetProcAddress(hLibrary, "lib3mf_model_addcolorgroup"); - #else // _WIN32 - pWrapperTable->m_Model_AddColorGroup = (PLib3MFModel_AddColorGroupPtr) dlsym(hLibrary, "lib3mf_model_addcolorgroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_AddColorGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_decomposevectornode_getoutputy", (void**)&(pWrapperTable->m_DecomposeVectorNode_GetOutputY)); + if ( (eLookupError != 0) || (pWrapperTable->m_DecomposeVectorNode_GetOutputY == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_AddTexture2DGroup = (PLib3MFModel_AddTexture2DGroupPtr) GetProcAddress(hLibrary, "lib3mf_model_addtexture2dgroup"); - #else // _WIN32 - pWrapperTable->m_Model_AddTexture2DGroup = (PLib3MFModel_AddTexture2DGroupPtr) dlsym(hLibrary, "lib3mf_model_addtexture2dgroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_AddTexture2DGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_decomposevectornode_getoutputz", (void**)&(pWrapperTable->m_DecomposeVectorNode_GetOutputZ)); + if ( (eLookupError != 0) || (pWrapperTable->m_DecomposeVectorNode_GetOutputZ == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_AddCompositeMaterials = (PLib3MFModel_AddCompositeMaterialsPtr) GetProcAddress(hLibrary, "lib3mf_model_addcompositematerials"); - #else // _WIN32 - pWrapperTable->m_Model_AddCompositeMaterials = (PLib3MFModel_AddCompositeMaterialsPtr) dlsym(hLibrary, "lib3mf_model_addcompositematerials"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_AddCompositeMaterials == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm00", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM00)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM00 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_AddMultiPropertyGroup = (PLib3MFModel_AddMultiPropertyGroupPtr) GetProcAddress(hLibrary, "lib3mf_model_addmultipropertygroup"); - #else // _WIN32 - pWrapperTable->m_Model_AddMultiPropertyGroup = (PLib3MFModel_AddMultiPropertyGroupPtr) dlsym(hLibrary, "lib3mf_model_addmultipropertygroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_AddMultiPropertyGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm01", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM01)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM01 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_AddBuildItem = (PLib3MFModel_AddBuildItemPtr) GetProcAddress(hLibrary, "lib3mf_model_addbuilditem"); - #else // _WIN32 - pWrapperTable->m_Model_AddBuildItem = (PLib3MFModel_AddBuildItemPtr) dlsym(hLibrary, "lib3mf_model_addbuilditem"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_AddBuildItem == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm02", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM02)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM02 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_RemoveBuildItem = (PLib3MFModel_RemoveBuildItemPtr) GetProcAddress(hLibrary, "lib3mf_model_removebuilditem"); - #else // _WIN32 - pWrapperTable->m_Model_RemoveBuildItem = (PLib3MFModel_RemoveBuildItemPtr) dlsym(hLibrary, "lib3mf_model_removebuilditem"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_RemoveBuildItem == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm03", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM03)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM03 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetMetaDataGroup = (PLib3MFModel_GetMetaDataGroupPtr) GetProcAddress(hLibrary, "lib3mf_model_getmetadatagroup"); - #else // _WIN32 - pWrapperTable->m_Model_GetMetaDataGroup = (PLib3MFModel_GetMetaDataGroupPtr) dlsym(hLibrary, "lib3mf_model_getmetadatagroup"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetMetaDataGroup == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm10", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM10)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM10 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_AddAttachment = (PLib3MFModel_AddAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_addattachment"); - #else // _WIN32 - pWrapperTable->m_Model_AddAttachment = (PLib3MFModel_AddAttachmentPtr) dlsym(hLibrary, "lib3mf_model_addattachment"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_AddAttachment == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm11", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM11)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM11 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_RemoveAttachment = (PLib3MFModel_RemoveAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_removeattachment"); - #else // _WIN32 - pWrapperTable->m_Model_RemoveAttachment = (PLib3MFModel_RemoveAttachmentPtr) dlsym(hLibrary, "lib3mf_model_removeattachment"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_RemoveAttachment == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm12", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM12)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM12 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetAttachment = (PLib3MFModel_GetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_getattachment"); - #else // _WIN32 - pWrapperTable->m_Model_GetAttachment = (PLib3MFModel_GetAttachmentPtr) dlsym(hLibrary, "lib3mf_model_getattachment"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetAttachment == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm13", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM13)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM13 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_FindAttachment = (PLib3MFModel_FindAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_findattachment"); - #else // _WIN32 - pWrapperTable->m_Model_FindAttachment = (PLib3MFModel_FindAttachmentPtr) dlsym(hLibrary, "lib3mf_model_findattachment"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_FindAttachment == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm20", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM20)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM20 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetAttachmentCount = (PLib3MFModel_GetAttachmentCountPtr) GetProcAddress(hLibrary, "lib3mf_model_getattachmentcount"); - #else // _WIN32 - pWrapperTable->m_Model_GetAttachmentCount = (PLib3MFModel_GetAttachmentCountPtr) dlsym(hLibrary, "lib3mf_model_getattachmentcount"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetAttachmentCount == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm21", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM21)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM21 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_HasPackageThumbnailAttachment = (PLib3MFModel_HasPackageThumbnailAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_haspackagethumbnailattachment"); - #else // _WIN32 - pWrapperTable->m_Model_HasPackageThumbnailAttachment = (PLib3MFModel_HasPackageThumbnailAttachmentPtr) dlsym(hLibrary, "lib3mf_model_haspackagethumbnailattachment"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_HasPackageThumbnailAttachment == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm22", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM22)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM22 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_CreatePackageThumbnailAttachment = (PLib3MFModel_CreatePackageThumbnailAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_createpackagethumbnailattachment"); - #else // _WIN32 - pWrapperTable->m_Model_CreatePackageThumbnailAttachment = (PLib3MFModel_CreatePackageThumbnailAttachmentPtr) dlsym(hLibrary, "lib3mf_model_createpackagethumbnailattachment"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_CreatePackageThumbnailAttachment == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm23", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM23)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM23 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetPackageThumbnailAttachment = (PLib3MFModel_GetPackageThumbnailAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_getpackagethumbnailattachment"); - #else // _WIN32 - pWrapperTable->m_Model_GetPackageThumbnailAttachment = (PLib3MFModel_GetPackageThumbnailAttachmentPtr) dlsym(hLibrary, "lib3mf_model_getpackagethumbnailattachment"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetPackageThumbnailAttachment == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm30", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM30)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM30 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_RemovePackageThumbnailAttachment = (PLib3MFModel_RemovePackageThumbnailAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_model_removepackagethumbnailattachment"); - #else // _WIN32 - pWrapperTable->m_Model_RemovePackageThumbnailAttachment = (PLib3MFModel_RemovePackageThumbnailAttachmentPtr) dlsym(hLibrary, "lib3mf_model_removepackagethumbnailattachment"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_RemovePackageThumbnailAttachment == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm31", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM31)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM31 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_AddCustomContentType = (PLib3MFModel_AddCustomContentTypePtr) GetProcAddress(hLibrary, "lib3mf_model_addcustomcontenttype"); - #else // _WIN32 - pWrapperTable->m_Model_AddCustomContentType = (PLib3MFModel_AddCustomContentTypePtr) dlsym(hLibrary, "lib3mf_model_addcustomcontenttype"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_AddCustomContentType == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm32", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM32)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM32 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_RemoveCustomContentType = (PLib3MFModel_RemoveCustomContentTypePtr) GetProcAddress(hLibrary, "lib3mf_model_removecustomcontenttype"); - #else // _WIN32 - pWrapperTable->m_Model_RemoveCustomContentType = (PLib3MFModel_RemoveCustomContentTypePtr) dlsym(hLibrary, "lib3mf_model_removecustomcontenttype"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_RemoveCustomContentType == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getinputm33", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetInputM33)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetInputM33 == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_SetRandomNumberCallback = (PLib3MFModel_SetRandomNumberCallbackPtr) GetProcAddress(hLibrary, "lib3mf_model_setrandomnumbercallback"); - #else // _WIN32 - pWrapperTable->m_Model_SetRandomNumberCallback = (PLib3MFModel_SetRandomNumberCallbackPtr) dlsym(hLibrary, "lib3mf_model_setrandomnumbercallback"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_SetRandomNumberCallback == nullptr) + eLookupError = (*pLookup)("lib3mf_composematrixnode_getoutputresult", (void**)&(pWrapperTable->m_ComposeMatrixNode_GetOutputResult)); + if ( (eLookupError != 0) || (pWrapperTable->m_ComposeMatrixNode_GetOutputResult == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Model_GetKeyStore = (PLib3MFModel_GetKeyStorePtr) GetProcAddress(hLibrary, "lib3mf_model_getkeystore"); - #else // _WIN32 - pWrapperTable->m_Model_GetKeyStore = (PLib3MFModel_GetKeyStorePtr) dlsym(hLibrary, "lib3mf_model_getkeystore"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Model_GetKeyStore == nullptr) + eLookupError = (*pLookup)("lib3mf_matrixfromrowsnode_getinputa", (void**)&(pWrapperTable->m_MatrixFromRowsNode_GetInputA)); + if ( (eLookupError != 0) || (pWrapperTable->m_MatrixFromRowsNode_GetInputA == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_GetLibraryVersion = (PLib3MFGetLibraryVersionPtr) GetProcAddress(hLibrary, "lib3mf_getlibraryversion"); - #else // _WIN32 - pWrapperTable->m_GetLibraryVersion = (PLib3MFGetLibraryVersionPtr) dlsym(hLibrary, "lib3mf_getlibraryversion"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_GetLibraryVersion == nullptr) + eLookupError = (*pLookup)("lib3mf_matrixfromrowsnode_getinputb", (void**)&(pWrapperTable->m_MatrixFromRowsNode_GetInputB)); + if ( (eLookupError != 0) || (pWrapperTable->m_MatrixFromRowsNode_GetInputB == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_GetPrereleaseInformation = (PLib3MFGetPrereleaseInformationPtr) GetProcAddress(hLibrary, "lib3mf_getprereleaseinformation"); - #else // _WIN32 - pWrapperTable->m_GetPrereleaseInformation = (PLib3MFGetPrereleaseInformationPtr) dlsym(hLibrary, "lib3mf_getprereleaseinformation"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_GetPrereleaseInformation == nullptr) + eLookupError = (*pLookup)("lib3mf_matrixfromrowsnode_getinputc", (void**)&(pWrapperTable->m_MatrixFromRowsNode_GetInputC)); + if ( (eLookupError != 0) || (pWrapperTable->m_MatrixFromRowsNode_GetInputC == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_GetBuildInformation = (PLib3MFGetBuildInformationPtr) GetProcAddress(hLibrary, "lib3mf_getbuildinformation"); - #else // _WIN32 - pWrapperTable->m_GetBuildInformation = (PLib3MFGetBuildInformationPtr) dlsym(hLibrary, "lib3mf_getbuildinformation"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_GetBuildInformation == nullptr) + eLookupError = (*pLookup)("lib3mf_matrixfromrowsnode_getinputd", (void**)&(pWrapperTable->m_MatrixFromRowsNode_GetInputD)); + if ( (eLookupError != 0) || (pWrapperTable->m_MatrixFromRowsNode_GetInputD == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_GetSpecificationVersion = (PLib3MFGetSpecificationVersionPtr) GetProcAddress(hLibrary, "lib3mf_getspecificationversion"); - #else // _WIN32 - pWrapperTable->m_GetSpecificationVersion = (PLib3MFGetSpecificationVersionPtr) dlsym(hLibrary, "lib3mf_getspecificationversion"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_GetSpecificationVersion == nullptr) + eLookupError = (*pLookup)("lib3mf_matrixfromrowsnode_getoutputresult", (void**)&(pWrapperTable->m_MatrixFromRowsNode_GetOutputResult)); + if ( (eLookupError != 0) || (pWrapperTable->m_MatrixFromRowsNode_GetOutputResult == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_CreateModel = (PLib3MFCreateModelPtr) GetProcAddress(hLibrary, "lib3mf_createmodel"); - #else // _WIN32 - pWrapperTable->m_CreateModel = (PLib3MFCreateModelPtr) dlsym(hLibrary, "lib3mf_createmodel"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_CreateModel == nullptr) + eLookupError = (*pLookup)("lib3mf_matrixfromcolumnsnode_getinputa", (void**)&(pWrapperTable->m_MatrixFromColumnsNode_GetInputA)); + if ( (eLookupError != 0) || (pWrapperTable->m_MatrixFromColumnsNode_GetInputA == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Release = (PLib3MFReleasePtr) GetProcAddress(hLibrary, "lib3mf_release"); - #else // _WIN32 - pWrapperTable->m_Release = (PLib3MFReleasePtr) dlsym(hLibrary, "lib3mf_release"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Release == nullptr) + eLookupError = (*pLookup)("lib3mf_matrixfromcolumnsnode_getinputb", (void**)&(pWrapperTable->m_MatrixFromColumnsNode_GetInputB)); + if ( (eLookupError != 0) || (pWrapperTable->m_MatrixFromColumnsNode_GetInputB == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_Acquire = (PLib3MFAcquirePtr) GetProcAddress(hLibrary, "lib3mf_acquire"); - #else // _WIN32 - pWrapperTable->m_Acquire = (PLib3MFAcquirePtr) dlsym(hLibrary, "lib3mf_acquire"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_Acquire == nullptr) + eLookupError = (*pLookup)("lib3mf_matrixfromcolumnsnode_getinputc", (void**)&(pWrapperTable->m_MatrixFromColumnsNode_GetInputC)); + if ( (eLookupError != 0) || (pWrapperTable->m_MatrixFromColumnsNode_GetInputC == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_SetJournal = (PLib3MFSetJournalPtr) GetProcAddress(hLibrary, "lib3mf_setjournal"); - #else // _WIN32 - pWrapperTable->m_SetJournal = (PLib3MFSetJournalPtr) dlsym(hLibrary, "lib3mf_setjournal"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_SetJournal == nullptr) + eLookupError = (*pLookup)("lib3mf_matrixfromcolumnsnode_getinputd", (void**)&(pWrapperTable->m_MatrixFromColumnsNode_GetInputD)); + if ( (eLookupError != 0) || (pWrapperTable->m_MatrixFromColumnsNode_GetInputD == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_GetLastError = (PLib3MFGetLastErrorPtr) GetProcAddress(hLibrary, "lib3mf_getlasterror"); - #else // _WIN32 - pWrapperTable->m_GetLastError = (PLib3MFGetLastErrorPtr) dlsym(hLibrary, "lib3mf_getlasterror"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_GetLastError == nullptr) + eLookupError = (*pLookup)("lib3mf_matrixfromcolumnsnode_getoutputresult", (void**)&(pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult)); + if ( (eLookupError != 0) || (pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_GetSymbolLookupMethod = (PLib3MFGetSymbolLookupMethodPtr) GetProcAddress(hLibrary, "lib3mf_getsymbollookupmethod"); - #else // _WIN32 - pWrapperTable->m_GetSymbolLookupMethod = (PLib3MFGetSymbolLookupMethodPtr) dlsym(hLibrary, "lib3mf_getsymbollookupmethod"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_GetSymbolLookupMethod == nullptr) + eLookupError = (*pLookup)("lib3mf_constantnode_setconstant", (void**)&(pWrapperTable->m_ConstantNode_SetConstant)); + if ( (eLookupError != 0) || (pWrapperTable->m_ConstantNode_SetConstant == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_RetrieveProgressMessage = (PLib3MFRetrieveProgressMessagePtr) GetProcAddress(hLibrary, "lib3mf_retrieveprogressmessage"); - #else // _WIN32 - pWrapperTable->m_RetrieveProgressMessage = (PLib3MFRetrieveProgressMessagePtr) dlsym(hLibrary, "lib3mf_retrieveprogressmessage"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_RetrieveProgressMessage == nullptr) + eLookupError = (*pLookup)("lib3mf_constantnode_getconstant", (void**)&(pWrapperTable->m_ConstantNode_GetConstant)); + if ( (eLookupError != 0) || (pWrapperTable->m_ConstantNode_GetConstant == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_RGBAToColor = (PLib3MFRGBAToColorPtr) GetProcAddress(hLibrary, "lib3mf_rgbatocolor"); - #else // _WIN32 - pWrapperTable->m_RGBAToColor = (PLib3MFRGBAToColorPtr) dlsym(hLibrary, "lib3mf_rgbatocolor"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_RGBAToColor == nullptr) + eLookupError = (*pLookup)("lib3mf_constantnode_getoutputvalue", (void**)&(pWrapperTable->m_ConstantNode_GetOutputValue)); + if ( (eLookupError != 0) || (pWrapperTable->m_ConstantNode_GetOutputValue == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_constvecnode_setvector", (void**)&(pWrapperTable->m_ConstVecNode_SetVector)); + if ( (eLookupError != 0) || (pWrapperTable->m_ConstVecNode_SetVector == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_constvecnode_getvector", (void**)&(pWrapperTable->m_ConstVecNode_GetVector)); + if ( (eLookupError != 0) || (pWrapperTable->m_ConstVecNode_GetVector == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_FloatRGBAToColor = (PLib3MFFloatRGBAToColorPtr) GetProcAddress(hLibrary, "lib3mf_floatrgbatocolor"); - #else // _WIN32 - pWrapperTable->m_FloatRGBAToColor = (PLib3MFFloatRGBAToColorPtr) dlsym(hLibrary, "lib3mf_floatrgbatocolor"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_FloatRGBAToColor == nullptr) + eLookupError = (*pLookup)("lib3mf_constvecnode_getoutputvector", (void**)&(pWrapperTable->m_ConstVecNode_GetOutputVector)); + if ( (eLookupError != 0) || (pWrapperTable->m_ConstVecNode_GetOutputVector == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ColorToRGBA = (PLib3MFColorToRGBAPtr) GetProcAddress(hLibrary, "lib3mf_colortorgba"); - #else // _WIN32 - pWrapperTable->m_ColorToRGBA = (PLib3MFColorToRGBAPtr) dlsym(hLibrary, "lib3mf_colortorgba"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ColorToRGBA == nullptr) + eLookupError = (*pLookup)("lib3mf_constmatnode_setmatrix", (void**)&(pWrapperTable->m_ConstMatNode_SetMatrix)); + if ( (eLookupError != 0) || (pWrapperTable->m_ConstMatNode_SetMatrix == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_ColorToFloatRGBA = (PLib3MFColorToFloatRGBAPtr) GetProcAddress(hLibrary, "lib3mf_colortofloatrgba"); - #else // _WIN32 - pWrapperTable->m_ColorToFloatRGBA = (PLib3MFColorToFloatRGBAPtr) dlsym(hLibrary, "lib3mf_colortofloatrgba"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_ColorToFloatRGBA == nullptr) + eLookupError = (*pLookup)("lib3mf_constmatnode_getmatrix", (void**)&(pWrapperTable->m_ConstMatNode_GetMatrix)); + if ( (eLookupError != 0) || (pWrapperTable->m_ConstMatNode_GetMatrix == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_GetIdentityTransform = (PLib3MFGetIdentityTransformPtr) GetProcAddress(hLibrary, "lib3mf_getidentitytransform"); - #else // _WIN32 - pWrapperTable->m_GetIdentityTransform = (PLib3MFGetIdentityTransformPtr) dlsym(hLibrary, "lib3mf_getidentitytransform"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_GetIdentityTransform == nullptr) + eLookupError = (*pLookup)("lib3mf_constmatnode_getoutputmatrix", (void**)&(pWrapperTable->m_ConstMatNode_GetOutputMatrix)); + if ( (eLookupError != 0) || (pWrapperTable->m_ConstMatNode_GetOutputMatrix == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_GetUniformScaleTransform = (PLib3MFGetUniformScaleTransformPtr) GetProcAddress(hLibrary, "lib3mf_getuniformscaletransform"); - #else // _WIN32 - pWrapperTable->m_GetUniformScaleTransform = (PLib3MFGetUniformScaleTransformPtr) dlsym(hLibrary, "lib3mf_getuniformscaletransform"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_GetUniformScaleTransform == nullptr) + eLookupError = (*pLookup)("lib3mf_meshnode_getinputmesh", (void**)&(pWrapperTable->m_MeshNode_GetInputMesh)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshNode_GetInputMesh == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_GetScaleTransform = (PLib3MFGetScaleTransformPtr) GetProcAddress(hLibrary, "lib3mf_getscaletransform"); - #else // _WIN32 - pWrapperTable->m_GetScaleTransform = (PLib3MFGetScaleTransformPtr) dlsym(hLibrary, "lib3mf_getscaletransform"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_GetScaleTransform == nullptr) + eLookupError = (*pLookup)("lib3mf_meshnode_getinputpos", (void**)&(pWrapperTable->m_MeshNode_GetInputPos)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshNode_GetInputPos == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - #ifdef _WIN32 - pWrapperTable->m_GetTranslationTransform = (PLib3MFGetTranslationTransformPtr) GetProcAddress(hLibrary, "lib3mf_gettranslationtransform"); - #else // _WIN32 - pWrapperTable->m_GetTranslationTransform = (PLib3MFGetTranslationTransformPtr) dlsym(hLibrary, "lib3mf_gettranslationtransform"); - dlerror(); - #endif // _WIN32 - if (pWrapperTable->m_GetTranslationTransform == nullptr) + eLookupError = (*pLookup)("lib3mf_meshnode_getoutputdistance", (void**)&(pWrapperTable->m_MeshNode_GetOutputDistance)); + if ( (eLookupError != 0) || (pWrapperTable->m_MeshNode_GetOutputDistance == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - pWrapperTable->m_LibraryHandle = hLibrary; - return LIB3MF_SUCCESS; - } - - inline Lib3MFResult CWrapper::loadWrapperTableFromSymbolLookupMethod(sLib3MFDynamicWrapperTable * pWrapperTable, void* pSymbolLookupMethod) -{ - if (pWrapperTable == nullptr) - return LIB3MF_ERROR_INVALIDPARAM; - if (pSymbolLookupMethod == nullptr) - return LIB3MF_ERROR_INVALIDPARAM; + eLookupError = (*pLookup)("lib3mf_unsignedmeshnode_getinputmesh", (void**)&(pWrapperTable->m_UnsignedMeshNode_GetInputMesh)); + if ( (eLookupError != 0) || (pWrapperTable->m_UnsignedMeshNode_GetInputMesh == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - typedef Lib3MFResult(*SymbolLookupType)(const char*, void**); + eLookupError = (*pLookup)("lib3mf_unsignedmeshnode_getinputpos", (void**)&(pWrapperTable->m_UnsignedMeshNode_GetInputPos)); + if ( (eLookupError != 0) || (pWrapperTable->m_UnsignedMeshNode_GetInputPos == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - SymbolLookupType pLookup = (SymbolLookupType)pSymbolLookupMethod; + eLookupError = (*pLookup)("lib3mf_unsignedmeshnode_getoutputdistance", (void**)&(pWrapperTable->m_UnsignedMeshNode_GetOutputDistance)); + if ( (eLookupError != 0) || (pWrapperTable->m_UnsignedMeshNode_GetOutputDistance == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - Lib3MFResult eLookupError = LIB3MF_SUCCESS; - eLookupError = (*pLookup)("lib3mf_base_classtypeid", (void**)&(pWrapperTable->m_Base_ClassTypeId)); - if ( (eLookupError != 0) || (pWrapperTable->m_Base_ClassTypeId == nullptr) ) + eLookupError = (*pLookup)("lib3mf_functioncallnode_getinputfunctionid", (void**)&(pWrapperTable->m_FunctionCallNode_GetInputFunctionID)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionCallNode_GetInputFunctionID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_writer_writetofile", (void**)&(pWrapperTable->m_Writer_WriteToFile)); - if ( (eLookupError != 0) || (pWrapperTable->m_Writer_WriteToFile == nullptr) ) + eLookupError = (*pLookup)("lib3mf_nodeiterator_getcurrent", (void**)&(pWrapperTable->m_NodeIterator_GetCurrent)); + if ( (eLookupError != 0) || (pWrapperTable->m_NodeIterator_GetCurrent == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_writer_getstreamsize", (void**)&(pWrapperTable->m_Writer_GetStreamSize)); - if ( (eLookupError != 0) || (pWrapperTable->m_Writer_GetStreamSize == nullptr) ) + eLookupError = (*pLookup)("lib3mf_function_getdisplayname", (void**)&(pWrapperTable->m_Function_GetDisplayName)); + if ( (eLookupError != 0) || (pWrapperTable->m_Function_GetDisplayName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_writer_writetobuffer", (void**)&(pWrapperTable->m_Writer_WriteToBuffer)); - if ( (eLookupError != 0) || (pWrapperTable->m_Writer_WriteToBuffer == nullptr) ) + eLookupError = (*pLookup)("lib3mf_function_setdisplayname", (void**)&(pWrapperTable->m_Function_SetDisplayName)); + if ( (eLookupError != 0) || (pWrapperTable->m_Function_SetDisplayName == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_writer_writetocallback", (void**)&(pWrapperTable->m_Writer_WriteToCallback)); - if ( (eLookupError != 0) || (pWrapperTable->m_Writer_WriteToCallback == nullptr) ) + eLookupError = (*pLookup)("lib3mf_function_addinput", (void**)&(pWrapperTable->m_Function_AddInput)); + if ( (eLookupError != 0) || (pWrapperTable->m_Function_AddInput == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_writer_setprogresscallback", (void**)&(pWrapperTable->m_Writer_SetProgressCallback)); - if ( (eLookupError != 0) || (pWrapperTable->m_Writer_SetProgressCallback == nullptr) ) + eLookupError = (*pLookup)("lib3mf_function_getinputs", (void**)&(pWrapperTable->m_Function_GetInputs)); + if ( (eLookupError != 0) || (pWrapperTable->m_Function_GetInputs == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_writer_getdecimalprecision", (void**)&(pWrapperTable->m_Writer_GetDecimalPrecision)); - if ( (eLookupError != 0) || (pWrapperTable->m_Writer_GetDecimalPrecision == nullptr) ) + eLookupError = (*pLookup)("lib3mf_function_removeinput", (void**)&(pWrapperTable->m_Function_RemoveInput)); + if ( (eLookupError != 0) || (pWrapperTable->m_Function_RemoveInput == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_writer_setdecimalprecision", (void**)&(pWrapperTable->m_Writer_SetDecimalPrecision)); - if ( (eLookupError != 0) || (pWrapperTable->m_Writer_SetDecimalPrecision == nullptr) ) + eLookupError = (*pLookup)("lib3mf_function_addoutput", (void**)&(pWrapperTable->m_Function_AddOutput)); + if ( (eLookupError != 0) || (pWrapperTable->m_Function_AddOutput == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_writer_setstrictmodeactive", (void**)&(pWrapperTable->m_Writer_SetStrictModeActive)); - if ( (eLookupError != 0) || (pWrapperTable->m_Writer_SetStrictModeActive == nullptr) ) + eLookupError = (*pLookup)("lib3mf_function_getoutputs", (void**)&(pWrapperTable->m_Function_GetOutputs)); + if ( (eLookupError != 0) || (pWrapperTable->m_Function_GetOutputs == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_writer_getstrictmodeactive", (void**)&(pWrapperTable->m_Writer_GetStrictModeActive)); - if ( (eLookupError != 0) || (pWrapperTable->m_Writer_GetStrictModeActive == nullptr) ) + eLookupError = (*pLookup)("lib3mf_function_removeoutput", (void**)&(pWrapperTable->m_Function_RemoveOutput)); + if ( (eLookupError != 0) || (pWrapperTable->m_Function_RemoveOutput == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_writer_getwarning", (void**)&(pWrapperTable->m_Writer_GetWarning)); - if ( (eLookupError != 0) || (pWrapperTable->m_Writer_GetWarning == nullptr) ) + eLookupError = (*pLookup)("lib3mf_function_findinput", (void**)&(pWrapperTable->m_Function_FindInput)); + if ( (eLookupError != 0) || (pWrapperTable->m_Function_FindInput == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_writer_getwarningcount", (void**)&(pWrapperTable->m_Writer_GetWarningCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_Writer_GetWarningCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_function_findoutput", (void**)&(pWrapperTable->m_Function_FindOutput)); + if ( (eLookupError != 0) || (pWrapperTable->m_Function_FindOutput == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_writer_addkeywrappingcallback", (void**)&(pWrapperTable->m_Writer_AddKeyWrappingCallback)); - if ( (eLookupError != 0) || (pWrapperTable->m_Writer_AddKeyWrappingCallback == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_getidentifier", (void**)&(pWrapperTable->m_ImplicitFunction_GetIdentifier)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_GetIdentifier == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_writer_setcontentencryptioncallback", (void**)&(pWrapperTable->m_Writer_SetContentEncryptionCallback)); - if ( (eLookupError != 0) || (pWrapperTable->m_Writer_SetContentEncryptionCallback == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_setidentifier", (void**)&(pWrapperTable->m_ImplicitFunction_SetIdentifier)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_SetIdentifier == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_reader_readfromfile", (void**)&(pWrapperTable->m_Reader_ReadFromFile)); - if ( (eLookupError != 0) || (pWrapperTable->m_Reader_ReadFromFile == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_reader_readfrombuffer", (void**)&(pWrapperTable->m_Reader_ReadFromBuffer)); - if ( (eLookupError != 0) || (pWrapperTable->m_Reader_ReadFromBuffer == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addsinnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddSinNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddSinNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_reader_readfromcallback", (void**)&(pWrapperTable->m_Reader_ReadFromCallback)); - if ( (eLookupError != 0) || (pWrapperTable->m_Reader_ReadFromCallback == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addcosnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddCosNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddCosNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_reader_setprogresscallback", (void**)&(pWrapperTable->m_Reader_SetProgressCallback)); - if ( (eLookupError != 0) || (pWrapperTable->m_Reader_SetProgressCallback == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addtannode", (void**)&(pWrapperTable->m_ImplicitFunction_AddTanNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddTanNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_reader_addrelationtoread", (void**)&(pWrapperTable->m_Reader_AddRelationToRead)); - if ( (eLookupError != 0) || (pWrapperTable->m_Reader_AddRelationToRead == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addarcsinnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddArcSinNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddArcSinNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_reader_removerelationtoread", (void**)&(pWrapperTable->m_Reader_RemoveRelationToRead)); - if ( (eLookupError != 0) || (pWrapperTable->m_Reader_RemoveRelationToRead == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addarccosnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddArcCosNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddArcCosNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_reader_setstrictmodeactive", (void**)&(pWrapperTable->m_Reader_SetStrictModeActive)); - if ( (eLookupError != 0) || (pWrapperTable->m_Reader_SetStrictModeActive == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addarctan2node", (void**)&(pWrapperTable->m_ImplicitFunction_AddArcTan2Node)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddArcTan2Node == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_reader_getstrictmodeactive", (void**)&(pWrapperTable->m_Reader_GetStrictModeActive)); - if ( (eLookupError != 0) || (pWrapperTable->m_Reader_GetStrictModeActive == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addsinhnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddSinhNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddSinhNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_reader_getwarning", (void**)&(pWrapperTable->m_Reader_GetWarning)); - if ( (eLookupError != 0) || (pWrapperTable->m_Reader_GetWarning == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addcoshnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddCoshNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddCoshNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_reader_getwarningcount", (void**)&(pWrapperTable->m_Reader_GetWarningCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_Reader_GetWarningCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addtanhnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddTanhNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddTanhNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_reader_addkeywrappingcallback", (void**)&(pWrapperTable->m_Reader_AddKeyWrappingCallback)); - if ( (eLookupError != 0) || (pWrapperTable->m_Reader_AddKeyWrappingCallback == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addroundnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddRoundNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddRoundNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_reader_setcontentencryptioncallback", (void**)&(pWrapperTable->m_Reader_SetContentEncryptionCallback)); - if ( (eLookupError != 0) || (pWrapperTable->m_Reader_SetContentEncryptionCallback == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addceilnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddCeilNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddCeilNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_packagepart_getpath", (void**)&(pWrapperTable->m_PackagePart_GetPath)); - if ( (eLookupError != 0) || (pWrapperTable->m_PackagePart_GetPath == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addfloornode", (void**)&(pWrapperTable->m_ImplicitFunction_AddFloorNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddFloorNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_packagepart_setpath", (void**)&(pWrapperTable->m_PackagePart_SetPath)); - if ( (eLookupError != 0) || (pWrapperTable->m_PackagePart_SetPath == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addsignnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddSignNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddSignNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_resource_getresourceid", (void**)&(pWrapperTable->m_Resource_GetResourceID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Resource_GetResourceID == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addfractnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddFractNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddFractNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_resource_getuniqueresourceid", (void**)&(pWrapperTable->m_Resource_GetUniqueResourceID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Resource_GetUniqueResourceID == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addabsnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddAbsNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddAbsNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_resource_packagepart", (void**)&(pWrapperTable->m_Resource_PackagePart)); - if ( (eLookupError != 0) || (pWrapperTable->m_Resource_PackagePart == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addexpnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddExpNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddExpNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_resource_setpackagepart", (void**)&(pWrapperTable->m_Resource_SetPackagePart)); - if ( (eLookupError != 0) || (pWrapperTable->m_Resource_SetPackagePart == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addlognode", (void**)&(pWrapperTable->m_ImplicitFunction_AddLogNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddLogNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_resource_getmodelresourceid", (void**)&(pWrapperTable->m_Resource_GetModelResourceID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Resource_GetModelResourceID == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addlog2node", (void**)&(pWrapperTable->m_ImplicitFunction_AddLog2Node)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddLog2Node == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_resourceiterator_movenext", (void**)&(pWrapperTable->m_ResourceIterator_MoveNext)); - if ( (eLookupError != 0) || (pWrapperTable->m_ResourceIterator_MoveNext == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addlog10node", (void**)&(pWrapperTable->m_ImplicitFunction_AddLog10Node)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddLog10Node == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_resourceiterator_moveprevious", (void**)&(pWrapperTable->m_ResourceIterator_MovePrevious)); - if ( (eLookupError != 0) || (pWrapperTable->m_ResourceIterator_MovePrevious == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addlengthnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddLengthNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddLengthNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_resourceiterator_getcurrent", (void**)&(pWrapperTable->m_ResourceIterator_GetCurrent)); - if ( (eLookupError != 0) || (pWrapperTable->m_ResourceIterator_GetCurrent == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addtransposenode", (void**)&(pWrapperTable->m_ImplicitFunction_AddTransposeNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddTransposeNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_resourceiterator_clone", (void**)&(pWrapperTable->m_ResourceIterator_Clone)); - if ( (eLookupError != 0) || (pWrapperTable->m_ResourceIterator_Clone == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_inversenode", (void**)&(pWrapperTable->m_ImplicitFunction_InverseNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_InverseNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_resourceiterator_count", (void**)&(pWrapperTable->m_ResourceIterator_Count)); - if ( (eLookupError != 0) || (pWrapperTable->m_ResourceIterator_Count == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addsqrtnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddSqrtNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddSqrtNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slicestackiterator_getcurrentslicestack", (void**)&(pWrapperTable->m_SliceStackIterator_GetCurrentSliceStack)); - if ( (eLookupError != 0) || (pWrapperTable->m_SliceStackIterator_GetCurrentSliceStack == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addresourceidnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddResourceIdNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddResourceIdNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_objectiterator_getcurrentobject", (void**)&(pWrapperTable->m_ObjectIterator_GetCurrentObject)); - if ( (eLookupError != 0) || (pWrapperTable->m_ObjectIterator_GetCurrentObject == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addadditionnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddAdditionNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddAdditionNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobjectiterator_getcurrentmeshobject", (void**)&(pWrapperTable->m_MeshObjectIterator_GetCurrentMeshObject)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObjectIterator_GetCurrentMeshObject == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addsubtractionnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddSubtractionNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddSubtractionNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_componentsobjectiterator_getcurrentcomponentsobject", (void**)&(pWrapperTable->m_ComponentsObjectIterator_GetCurrentComponentsObject)); - if ( (eLookupError != 0) || (pWrapperTable->m_ComponentsObjectIterator_GetCurrentComponentsObject == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addmultiplicationnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddMultiplicationNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddMultiplicationNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2diterator_getcurrenttexture2d", (void**)&(pWrapperTable->m_Texture2DIterator_GetCurrentTexture2D)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DIterator_GetCurrentTexture2D == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_adddivisionnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddDivisionNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddDivisionNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup", (void**)&(pWrapperTable->m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_adddotnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddDotNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddDotNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_colorgroupiterator_getcurrentcolorgroup", (void**)&(pWrapperTable->m_ColorGroupIterator_GetCurrentColorGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroupIterator_GetCurrentColorGroup == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addcrossnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddCrossNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddCrossNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup", (void**)&(pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addmatvecmultiplicationnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_compositematerialsiterator_getcurrentcompositematerials", (void**)&(pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials)); - if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addminnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddMinNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddMinNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup", (void**)&(pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addmaxnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddMaxNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddMaxNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadata_getnamespace", (void**)&(pWrapperTable->m_MetaData_GetNameSpace)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_GetNameSpace == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addfmodnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddFmodNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddFmodNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadata_setnamespace", (void**)&(pWrapperTable->m_MetaData_SetNameSpace)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_SetNameSpace == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addpownode", (void**)&(pWrapperTable->m_ImplicitFunction_AddPowNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddPowNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadata_getname", (void**)&(pWrapperTable->m_MetaData_GetName)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_GetName == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addselectnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddSelectNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddSelectNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadata_setname", (void**)&(pWrapperTable->m_MetaData_SetName)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_SetName == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addclampnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddClampNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddClampNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadata_getkey", (void**)&(pWrapperTable->m_MetaData_GetKey)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_GetKey == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addcomposevectornode", (void**)&(pWrapperTable->m_ImplicitFunction_AddComposeVectorNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddComposeVectorNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadata_getmustpreserve", (void**)&(pWrapperTable->m_MetaData_GetMustPreserve)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_GetMustPreserve == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addvectorfromscalarnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadata_setmustpreserve", (void**)&(pWrapperTable->m_MetaData_SetMustPreserve)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_SetMustPreserve == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_adddecomposevectornode", (void**)&(pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadata_gettype", (void**)&(pWrapperTable->m_MetaData_GetType)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_GetType == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addcomposematrixnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadata_settype", (void**)&(pWrapperTable->m_MetaData_SetType)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_SetType == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addmatrixfromrowsnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadata_getvalue", (void**)&(pWrapperTable->m_MetaData_GetValue)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_GetValue == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addmatrixfromcolumnsnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadata_setvalue", (void**)&(pWrapperTable->m_MetaData_SetValue)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaData_SetValue == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addconstantnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddConstantNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddConstantNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadatagroup_getmetadatacount", (void**)&(pWrapperTable->m_MetaDataGroup_GetMetaDataCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaDataGroup_GetMetaDataCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addconstvecnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddConstVecNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddConstVecNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadatagroup_getmetadata", (void**)&(pWrapperTable->m_MetaDataGroup_GetMetaData)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaDataGroup_GetMetaData == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addconstmatnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddConstMatNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddConstMatNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadatagroup_getmetadatabykey", (void**)&(pWrapperTable->m_MetaDataGroup_GetMetaDataByKey)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaDataGroup_GetMetaDataByKey == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addmeshnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddMeshNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddMeshNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadatagroup_removemetadatabyindex", (void**)&(pWrapperTable->m_MetaDataGroup_RemoveMetaDataByIndex)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaDataGroup_RemoveMetaDataByIndex == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addunsignedmeshnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadatagroup_removemetadata", (void**)&(pWrapperTable->m_MetaDataGroup_RemoveMetaData)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaDataGroup_RemoveMetaData == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addfunctioncallnode", (void**)&(pWrapperTable->m_ImplicitFunction_AddFunctionCallNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddFunctionCallNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_metadatagroup_addmetadata", (void**)&(pWrapperTable->m_MetaDataGroup_AddMetaData)); - if ( (eLookupError != 0) || (pWrapperTable->m_MetaDataGroup_AddMetaData == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_getnodes", (void**)&(pWrapperTable->m_ImplicitFunction_GetNodes)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_GetNodes == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_gettype", (void**)&(pWrapperTable->m_Object_GetType)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetType == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_removenode", (void**)&(pWrapperTable->m_ImplicitFunction_RemoveNode)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_RemoveNode == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_settype", (void**)&(pWrapperTable->m_Object_SetType)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_SetType == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addlink", (void**)&(pWrapperTable->m_ImplicitFunction_AddLink)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddLink == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_getname", (void**)&(pWrapperTable->m_Object_GetName)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetName == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_addlinkbynames", (void**)&(pWrapperTable->m_ImplicitFunction_AddLinkByNames)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_AddLinkByNames == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_setname", (void**)&(pWrapperTable->m_Object_SetName)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_SetName == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_clear", (void**)&(pWrapperTable->m_ImplicitFunction_Clear)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_Clear == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_getpartnumber", (void**)&(pWrapperTable->m_Object_GetPartNumber)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetPartNumber == nullptr) ) + eLookupError = (*pLookup)("lib3mf_implicitfunction_sortnodestopologically", (void**)&(pWrapperTable->m_ImplicitFunction_SortNodesTopologically)); + if ( (eLookupError != 0) || (pWrapperTable->m_ImplicitFunction_SortNodesTopologically == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_setpartnumber", (void**)&(pWrapperTable->m_Object_SetPartNumber)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_SetPartNumber == nullptr) ) + eLookupError = (*pLookup)("lib3mf_functionfromimage3d_getimage3d", (void**)&(pWrapperTable->m_FunctionFromImage3D_GetImage3D)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionFromImage3D_GetImage3D == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_ismeshobject", (void**)&(pWrapperTable->m_Object_IsMeshObject)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_IsMeshObject == nullptr) ) + eLookupError = (*pLookup)("lib3mf_functionfromimage3d_setimage3d", (void**)&(pWrapperTable->m_FunctionFromImage3D_SetImage3D)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionFromImage3D_SetImage3D == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_iscomponentsobject", (void**)&(pWrapperTable->m_Object_IsComponentsObject)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_IsComponentsObject == nullptr) ) + eLookupError = (*pLookup)("lib3mf_functionfromimage3d_setfilter", (void**)&(pWrapperTable->m_FunctionFromImage3D_SetFilter)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionFromImage3D_SetFilter == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_isvalid", (void**)&(pWrapperTable->m_Object_IsValid)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_IsValid == nullptr) ) + eLookupError = (*pLookup)("lib3mf_functionfromimage3d_getfilter", (void**)&(pWrapperTable->m_FunctionFromImage3D_GetFilter)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionFromImage3D_GetFilter == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_setattachmentasthumbnail", (void**)&(pWrapperTable->m_Object_SetAttachmentAsThumbnail)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_SetAttachmentAsThumbnail == nullptr) ) + eLookupError = (*pLookup)("lib3mf_functionfromimage3d_settilestyles", (void**)&(pWrapperTable->m_FunctionFromImage3D_SetTileStyles)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionFromImage3D_SetTileStyles == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_getthumbnailattachment", (void**)&(pWrapperTable->m_Object_GetThumbnailAttachment)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetThumbnailAttachment == nullptr) ) + eLookupError = (*pLookup)("lib3mf_functionfromimage3d_gettilestyles", (void**)&(pWrapperTable->m_FunctionFromImage3D_GetTileStyles)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionFromImage3D_GetTileStyles == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_clearthumbnailattachment", (void**)&(pWrapperTable->m_Object_ClearThumbnailAttachment)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_ClearThumbnailAttachment == nullptr) ) + eLookupError = (*pLookup)("lib3mf_functionfromimage3d_getoffset", (void**)&(pWrapperTable->m_FunctionFromImage3D_GetOffset)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionFromImage3D_GetOffset == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_getoutbox", (void**)&(pWrapperTable->m_Object_GetOutbox)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetOutbox == nullptr) ) + eLookupError = (*pLookup)("lib3mf_functionfromimage3d_setoffset", (void**)&(pWrapperTable->m_FunctionFromImage3D_SetOffset)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionFromImage3D_SetOffset == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_getuuid", (void**)&(pWrapperTable->m_Object_GetUUID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetUUID == nullptr) ) + eLookupError = (*pLookup)("lib3mf_functionfromimage3d_getscale", (void**)&(pWrapperTable->m_FunctionFromImage3D_GetScale)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionFromImage3D_GetScale == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_setuuid", (void**)&(pWrapperTable->m_Object_SetUUID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_SetUUID == nullptr) ) + eLookupError = (*pLookup)("lib3mf_functionfromimage3d_setscale", (void**)&(pWrapperTable->m_FunctionFromImage3D_SetScale)); + if ( (eLookupError != 0) || (pWrapperTable->m_FunctionFromImage3D_SetScale == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_getmetadatagroup", (void**)&(pWrapperTable->m_Object_GetMetaDataGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetMetaDataGroup == nullptr) ) + eLookupError = (*pLookup)("lib3mf_builditem_getobjectresource", (void**)&(pWrapperTable->m_BuildItem_GetObjectResource)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetObjectResource == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_setslicesmeshresolution", (void**)&(pWrapperTable->m_Object_SetSlicesMeshResolution)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_SetSlicesMeshResolution == nullptr) ) + eLookupError = (*pLookup)("lib3mf_builditem_getuuid", (void**)&(pWrapperTable->m_BuildItem_GetUUID)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetUUID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_getslicesmeshresolution", (void**)&(pWrapperTable->m_Object_GetSlicesMeshResolution)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetSlicesMeshResolution == nullptr) ) + eLookupError = (*pLookup)("lib3mf_builditem_setuuid", (void**)&(pWrapperTable->m_BuildItem_SetUUID)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_SetUUID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_hasslices", (void**)&(pWrapperTable->m_Object_HasSlices)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_HasSlices == nullptr) ) + eLookupError = (*pLookup)("lib3mf_builditem_getobjectresourceid", (void**)&(pWrapperTable->m_BuildItem_GetObjectResourceID)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetObjectResourceID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_clearslicestack", (void**)&(pWrapperTable->m_Object_ClearSliceStack)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_ClearSliceStack == nullptr) ) + eLookupError = (*pLookup)("lib3mf_builditem_hasobjecttransform", (void**)&(pWrapperTable->m_BuildItem_HasObjectTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_HasObjectTransform == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_builditem_getobjecttransform", (void**)&(pWrapperTable->m_BuildItem_GetObjectTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetObjectTransform == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_builditem_setobjecttransform", (void**)&(pWrapperTable->m_BuildItem_SetObjectTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_SetObjectTransform == nullptr) ) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("lib3mf_builditem_getpartnumber", (void**)&(pWrapperTable->m_BuildItem_GetPartNumber)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetPartNumber == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_getslicestack", (void**)&(pWrapperTable->m_Object_GetSliceStack)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_GetSliceStack == nullptr) ) + eLookupError = (*pLookup)("lib3mf_builditem_setpartnumber", (void**)&(pWrapperTable->m_BuildItem_SetPartNumber)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_SetPartNumber == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_object_assignslicestack", (void**)&(pWrapperTable->m_Object_AssignSliceStack)); - if ( (eLookupError != 0) || (pWrapperTable->m_Object_AssignSliceStack == nullptr) ) + eLookupError = (*pLookup)("lib3mf_builditem_getmetadatagroup", (void**)&(pWrapperTable->m_BuildItem_GetMetaDataGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetMetaDataGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_getvertexcount", (void**)&(pWrapperTable->m_MeshObject_GetVertexCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetVertexCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_builditem_getoutbox", (void**)&(pWrapperTable->m_BuildItem_GetOutbox)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetOutbox == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_gettrianglecount", (void**)&(pWrapperTable->m_MeshObject_GetTriangleCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetTriangleCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_builditemiterator_movenext", (void**)&(pWrapperTable->m_BuildItemIterator_MoveNext)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItemIterator_MoveNext == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_getvertex", (void**)&(pWrapperTable->m_MeshObject_GetVertex)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetVertex == nullptr) ) + eLookupError = (*pLookup)("lib3mf_builditemiterator_moveprevious", (void**)&(pWrapperTable->m_BuildItemIterator_MovePrevious)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItemIterator_MovePrevious == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_setvertex", (void**)&(pWrapperTable->m_MeshObject_SetVertex)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_SetVertex == nullptr) ) + eLookupError = (*pLookup)("lib3mf_builditemiterator_getcurrent", (void**)&(pWrapperTable->m_BuildItemIterator_GetCurrent)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItemIterator_GetCurrent == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_addvertex", (void**)&(pWrapperTable->m_MeshObject_AddVertex)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_AddVertex == nullptr) ) + eLookupError = (*pLookup)("lib3mf_builditemiterator_clone", (void**)&(pWrapperTable->m_BuildItemIterator_Clone)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItemIterator_Clone == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_getvertices", (void**)&(pWrapperTable->m_MeshObject_GetVertices)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetVertices == nullptr) ) + eLookupError = (*pLookup)("lib3mf_builditemiterator_count", (void**)&(pWrapperTable->m_BuildItemIterator_Count)); + if ( (eLookupError != 0) || (pWrapperTable->m_BuildItemIterator_Count == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_gettriangle", (void**)&(pWrapperTable->m_MeshObject_GetTriangle)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetTriangle == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slice_setvertices", (void**)&(pWrapperTable->m_Slice_SetVertices)); + if ( (eLookupError != 0) || (pWrapperTable->m_Slice_SetVertices == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_settriangle", (void**)&(pWrapperTable->m_MeshObject_SetTriangle)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_SetTriangle == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slice_getvertices", (void**)&(pWrapperTable->m_Slice_GetVertices)); + if ( (eLookupError != 0) || (pWrapperTable->m_Slice_GetVertices == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_addtriangle", (void**)&(pWrapperTable->m_MeshObject_AddTriangle)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_AddTriangle == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slice_getvertexcount", (void**)&(pWrapperTable->m_Slice_GetVertexCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_Slice_GetVertexCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_gettriangleindices", (void**)&(pWrapperTable->m_MeshObject_GetTriangleIndices)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetTriangleIndices == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slice_addpolygon", (void**)&(pWrapperTable->m_Slice_AddPolygon)); + if ( (eLookupError != 0) || (pWrapperTable->m_Slice_AddPolygon == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_setobjectlevelproperty", (void**)&(pWrapperTable->m_MeshObject_SetObjectLevelProperty)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_SetObjectLevelProperty == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slice_getpolygoncount", (void**)&(pWrapperTable->m_Slice_GetPolygonCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_Slice_GetPolygonCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_getobjectlevelproperty", (void**)&(pWrapperTable->m_MeshObject_GetObjectLevelProperty)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetObjectLevelProperty == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slice_setpolygonindices", (void**)&(pWrapperTable->m_Slice_SetPolygonIndices)); + if ( (eLookupError != 0) || (pWrapperTable->m_Slice_SetPolygonIndices == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_settriangleproperties", (void**)&(pWrapperTable->m_MeshObject_SetTriangleProperties)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_SetTriangleProperties == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slice_getpolygonindices", (void**)&(pWrapperTable->m_Slice_GetPolygonIndices)); + if ( (eLookupError != 0) || (pWrapperTable->m_Slice_GetPolygonIndices == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_gettriangleproperties", (void**)&(pWrapperTable->m_MeshObject_GetTriangleProperties)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetTriangleProperties == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slice_getpolygonindexcount", (void**)&(pWrapperTable->m_Slice_GetPolygonIndexCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_Slice_GetPolygonIndexCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_setalltriangleproperties", (void**)&(pWrapperTable->m_MeshObject_SetAllTriangleProperties)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_SetAllTriangleProperties == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slice_getztop", (void**)&(pWrapperTable->m_Slice_GetZTop)); + if ( (eLookupError != 0) || (pWrapperTable->m_Slice_GetZTop == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_getalltriangleproperties", (void**)&(pWrapperTable->m_MeshObject_GetAllTriangleProperties)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_GetAllTriangleProperties == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slicestack_getbottomz", (void**)&(pWrapperTable->m_SliceStack_GetBottomZ)); + if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_GetBottomZ == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_clearallproperties", (void**)&(pWrapperTable->m_MeshObject_ClearAllProperties)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_ClearAllProperties == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slicestack_getslicecount", (void**)&(pWrapperTable->m_SliceStack_GetSliceCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_GetSliceCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_setgeometry", (void**)&(pWrapperTable->m_MeshObject_SetGeometry)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_SetGeometry == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slicestack_getslice", (void**)&(pWrapperTable->m_SliceStack_GetSlice)); + if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_GetSlice == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_ismanifoldandoriented", (void**)&(pWrapperTable->m_MeshObject_IsManifoldAndOriented)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_IsManifoldAndOriented == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slicestack_addslice", (void**)&(pWrapperTable->m_SliceStack_AddSlice)); + if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_AddSlice == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_meshobject_beamlattice", (void**)&(pWrapperTable->m_MeshObject_BeamLattice)); - if ( (eLookupError != 0) || (pWrapperTable->m_MeshObject_BeamLattice == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slicestack_getslicerefcount", (void**)&(pWrapperTable->m_SliceStack_GetSliceRefCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_GetSliceRefCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_getminlength", (void**)&(pWrapperTable->m_BeamLattice_GetMinLength)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetMinLength == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slicestack_addslicestackreference", (void**)&(pWrapperTable->m_SliceStack_AddSliceStackReference)); + if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_AddSliceStackReference == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_setminlength", (void**)&(pWrapperTable->m_BeamLattice_SetMinLength)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetMinLength == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slicestack_getslicestackreference", (void**)&(pWrapperTable->m_SliceStack_GetSliceStackReference)); + if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_GetSliceStackReference == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_getclipping", (void**)&(pWrapperTable->m_BeamLattice_GetClipping)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetClipping == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slicestack_collapseslicereferences", (void**)&(pWrapperTable->m_SliceStack_CollapseSliceReferences)); + if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_CollapseSliceReferences == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_setclipping", (void**)&(pWrapperTable->m_BeamLattice_SetClipping)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetClipping == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slicestack_setownpath", (void**)&(pWrapperTable->m_SliceStack_SetOwnPath)); + if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_SetOwnPath == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_getrepresentation", (void**)&(pWrapperTable->m_BeamLattice_GetRepresentation)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetRepresentation == nullptr) ) + eLookupError = (*pLookup)("lib3mf_slicestack_getownpath", (void**)&(pWrapperTable->m_SliceStack_GetOwnPath)); + if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_GetOwnPath == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_setrepresentation", (void**)&(pWrapperTable->m_BeamLattice_SetRepresentation)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetRepresentation == nullptr) ) + eLookupError = (*pLookup)("lib3mf_consumer_getconsumerid", (void**)&(pWrapperTable->m_Consumer_GetConsumerID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Consumer_GetConsumerID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_getballoptions", (void**)&(pWrapperTable->m_BeamLattice_GetBallOptions)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBallOptions == nullptr) ) + eLookupError = (*pLookup)("lib3mf_consumer_getkeyid", (void**)&(pWrapperTable->m_Consumer_GetKeyID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Consumer_GetKeyID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_setballoptions", (void**)&(pWrapperTable->m_BeamLattice_SetBallOptions)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetBallOptions == nullptr) ) + eLookupError = (*pLookup)("lib3mf_consumer_getkeyvalue", (void**)&(pWrapperTable->m_Consumer_GetKeyValue)); + if ( (eLookupError != 0) || (pWrapperTable->m_Consumer_GetKeyValue == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_getbeamcount", (void**)&(pWrapperTable->m_BeamLattice_GetBeamCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBeamCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_accessright_getconsumer", (void**)&(pWrapperTable->m_AccessRight_GetConsumer)); + if ( (eLookupError != 0) || (pWrapperTable->m_AccessRight_GetConsumer == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_getbeam", (void**)&(pWrapperTable->m_BeamLattice_GetBeam)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBeam == nullptr) ) + eLookupError = (*pLookup)("lib3mf_accessright_getwrappingalgorithm", (void**)&(pWrapperTable->m_AccessRight_GetWrappingAlgorithm)); + if ( (eLookupError != 0) || (pWrapperTable->m_AccessRight_GetWrappingAlgorithm == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_addbeam", (void**)&(pWrapperTable->m_BeamLattice_AddBeam)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_AddBeam == nullptr) ) + eLookupError = (*pLookup)("lib3mf_accessright_getmgfalgorithm", (void**)&(pWrapperTable->m_AccessRight_GetMgfAlgorithm)); + if ( (eLookupError != 0) || (pWrapperTable->m_AccessRight_GetMgfAlgorithm == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_setbeam", (void**)&(pWrapperTable->m_BeamLattice_SetBeam)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetBeam == nullptr) ) + eLookupError = (*pLookup)("lib3mf_accessright_getdigestmethod", (void**)&(pWrapperTable->m_AccessRight_GetDigestMethod)); + if ( (eLookupError != 0) || (pWrapperTable->m_AccessRight_GetDigestMethod == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_setbeams", (void**)&(pWrapperTable->m_BeamLattice_SetBeams)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetBeams == nullptr) ) + eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getencryptionalgorithm", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetEncryptionAlgorithm)); + if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetEncryptionAlgorithm == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_getbeams", (void**)&(pWrapperTable->m_BeamLattice_GetBeams)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBeams == nullptr) ) + eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getkey", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetKey)); + if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetKey == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_getballcount", (void**)&(pWrapperTable->m_BeamLattice_GetBallCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBallCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getinitializationvector", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetInitializationVector)); + if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetInitializationVector == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_getball", (void**)&(pWrapperTable->m_BeamLattice_GetBall)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBall == nullptr) ) + eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getauthenticationtag", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetAuthenticationTag)); + if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetAuthenticationTag == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_addball", (void**)&(pWrapperTable->m_BeamLattice_AddBall)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_AddBall == nullptr) ) + eLookupError = (*pLookup)("lib3mf_contentencryptionparams_setauthenticationtag", (void**)&(pWrapperTable->m_ContentEncryptionParams_SetAuthenticationTag)); + if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_SetAuthenticationTag == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_setball", (void**)&(pWrapperTable->m_BeamLattice_SetBall)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetBall == nullptr) ) + eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getadditionalauthenticationdata", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetAdditionalAuthenticationData)); + if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetAdditionalAuthenticationData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_setballs", (void**)&(pWrapperTable->m_BeamLattice_SetBalls)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_SetBalls == nullptr) ) + eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getdescriptor", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetDescriptor)); + if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetDescriptor == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_getballs", (void**)&(pWrapperTable->m_BeamLattice_GetBalls)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBalls == nullptr) ) + eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getkeyuuid", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetKeyUUID)); + if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetKeyUUID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_getbeamsetcount", (void**)&(pWrapperTable->m_BeamLattice_GetBeamSetCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBeamSetCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_resourcedata_getpath", (void**)&(pWrapperTable->m_ResourceData_GetPath)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceData_GetPath == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_addbeamset", (void**)&(pWrapperTable->m_BeamLattice_AddBeamSet)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_AddBeamSet == nullptr) ) + eLookupError = (*pLookup)("lib3mf_resourcedata_getencryptionalgorithm", (void**)&(pWrapperTable->m_ResourceData_GetEncryptionAlgorithm)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceData_GetEncryptionAlgorithm == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamlattice_getbeamset", (void**)&(pWrapperTable->m_BeamLattice_GetBeamSet)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamLattice_GetBeamSet == nullptr) ) + eLookupError = (*pLookup)("lib3mf_resourcedata_getcompression", (void**)&(pWrapperTable->m_ResourceData_GetCompression)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceData_GetCompression == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_component_getobjectresource", (void**)&(pWrapperTable->m_Component_GetObjectResource)); - if ( (eLookupError != 0) || (pWrapperTable->m_Component_GetObjectResource == nullptr) ) + eLookupError = (*pLookup)("lib3mf_resourcedata_getadditionalauthenticationdata", (void**)&(pWrapperTable->m_ResourceData_GetAdditionalAuthenticationData)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceData_GetAdditionalAuthenticationData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_component_getobjectresourceid", (void**)&(pWrapperTable->m_Component_GetObjectResourceID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Component_GetObjectResourceID == nullptr) ) + eLookupError = (*pLookup)("lib3mf_resourcedatagroup_getkeyuuid", (void**)&(pWrapperTable->m_ResourceDataGroup_GetKeyUUID)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceDataGroup_GetKeyUUID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_component_getuuid", (void**)&(pWrapperTable->m_Component_GetUUID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Component_GetUUID == nullptr) ) + eLookupError = (*pLookup)("lib3mf_resourcedatagroup_addaccessright", (void**)&(pWrapperTable->m_ResourceDataGroup_AddAccessRight)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceDataGroup_AddAccessRight == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_component_setuuid", (void**)&(pWrapperTable->m_Component_SetUUID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Component_SetUUID == nullptr) ) + eLookupError = (*pLookup)("lib3mf_resourcedatagroup_findaccessrightbyconsumer", (void**)&(pWrapperTable->m_ResourceDataGroup_FindAccessRightByConsumer)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceDataGroup_FindAccessRightByConsumer == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_component_hastransform", (void**)&(pWrapperTable->m_Component_HasTransform)); - if ( (eLookupError != 0) || (pWrapperTable->m_Component_HasTransform == nullptr) ) + eLookupError = (*pLookup)("lib3mf_resourcedatagroup_removeaccessright", (void**)&(pWrapperTable->m_ResourceDataGroup_RemoveAccessRight)); + if ( (eLookupError != 0) || (pWrapperTable->m_ResourceDataGroup_RemoveAccessRight == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_component_gettransform", (void**)&(pWrapperTable->m_Component_GetTransform)); - if ( (eLookupError != 0) || (pWrapperTable->m_Component_GetTransform == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_addconsumer", (void**)&(pWrapperTable->m_KeyStore_AddConsumer)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_AddConsumer == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_component_settransform", (void**)&(pWrapperTable->m_Component_SetTransform)); - if ( (eLookupError != 0) || (pWrapperTable->m_Component_SetTransform == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_getconsumercount", (void**)&(pWrapperTable->m_KeyStore_GetConsumerCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetConsumerCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_componentsobject_addcomponent", (void**)&(pWrapperTable->m_ComponentsObject_AddComponent)); - if ( (eLookupError != 0) || (pWrapperTable->m_ComponentsObject_AddComponent == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_getconsumer", (void**)&(pWrapperTable->m_KeyStore_GetConsumer)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetConsumer == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_componentsobject_getcomponent", (void**)&(pWrapperTable->m_ComponentsObject_GetComponent)); - if ( (eLookupError != 0) || (pWrapperTable->m_ComponentsObject_GetComponent == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_removeconsumer", (void**)&(pWrapperTable->m_KeyStore_RemoveConsumer)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_RemoveConsumer == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_componentsobject_getcomponentcount", (void**)&(pWrapperTable->m_ComponentsObject_GetComponentCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_ComponentsObject_GetComponentCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_findconsumer", (void**)&(pWrapperTable->m_KeyStore_FindConsumer)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_FindConsumer == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamset_setname", (void**)&(pWrapperTable->m_BeamSet_SetName)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_SetName == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_getresourcedatagroupcount", (void**)&(pWrapperTable->m_KeyStore_GetResourceDataGroupCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetResourceDataGroupCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamset_getname", (void**)&(pWrapperTable->m_BeamSet_GetName)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_GetName == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_addresourcedatagroup", (void**)&(pWrapperTable->m_KeyStore_AddResourceDataGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_AddResourceDataGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamset_setidentifier", (void**)&(pWrapperTable->m_BeamSet_SetIdentifier)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_SetIdentifier == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_getresourcedatagroup", (void**)&(pWrapperTable->m_KeyStore_GetResourceDataGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetResourceDataGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamset_getidentifier", (void**)&(pWrapperTable->m_BeamSet_GetIdentifier)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_GetIdentifier == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_removeresourcedatagroup", (void**)&(pWrapperTable->m_KeyStore_RemoveResourceDataGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_RemoveResourceDataGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamset_getreferencecount", (void**)&(pWrapperTable->m_BeamSet_GetReferenceCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_GetReferenceCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_findresourcedatagroup", (void**)&(pWrapperTable->m_KeyStore_FindResourceDataGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_FindResourceDataGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamset_setreferences", (void**)&(pWrapperTable->m_BeamSet_SetReferences)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_SetReferences == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_addresourcedata", (void**)&(pWrapperTable->m_KeyStore_AddResourceData)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_AddResourceData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamset_getreferences", (void**)&(pWrapperTable->m_BeamSet_GetReferences)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_GetReferences == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_removeresourcedata", (void**)&(pWrapperTable->m_KeyStore_RemoveResourceData)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_RemoveResourceData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamset_getballreferencecount", (void**)&(pWrapperTable->m_BeamSet_GetBallReferenceCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_GetBallReferenceCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_findresourcedata", (void**)&(pWrapperTable->m_KeyStore_FindResourceData)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_FindResourceData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - - eLookupError = (*pLookup)("lib3mf_beamset_setballreferences", (void**)&(pWrapperTable->m_BeamSet_SetBallReferences)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_SetBallReferences == nullptr) ) + + eLookupError = (*pLookup)("lib3mf_keystore_getresourcedatacount", (void**)&(pWrapperTable->m_KeyStore_GetResourceDataCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetResourceDataCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_beamset_getballreferences", (void**)&(pWrapperTable->m_BeamSet_GetBallReferences)); - if ( (eLookupError != 0) || (pWrapperTable->m_BeamSet_GetBallReferences == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_getresourcedata", (void**)&(pWrapperTable->m_KeyStore_GetResourceData)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetResourceData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_basematerialgroup_getcount", (void**)&(pWrapperTable->m_BaseMaterialGroup_GetCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_GetCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_getuuid", (void**)&(pWrapperTable->m_KeyStore_GetUUID)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetUUID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_basematerialgroup_getallpropertyids", (void**)&(pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs)); - if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs == nullptr) ) + eLookupError = (*pLookup)("lib3mf_keystore_setuuid", (void**)&(pWrapperTable->m_KeyStore_SetUUID)); + if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_SetUUID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_basematerialgroup_addmaterial", (void**)&(pWrapperTable->m_BaseMaterialGroup_AddMaterial)); - if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_AddMaterial == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_rootmodelpart", (void**)&(pWrapperTable->m_Model_RootModelPart)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_RootModelPart == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_basematerialgroup_removematerial", (void**)&(pWrapperTable->m_BaseMaterialGroup_RemoveMaterial)); - if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_RemoveMaterial == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_findorcreatepackagepart", (void**)&(pWrapperTable->m_Model_FindOrCreatePackagePart)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_FindOrCreatePackagePart == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_basematerialgroup_getname", (void**)&(pWrapperTable->m_BaseMaterialGroup_GetName)); - if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_GetName == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_setunit", (void**)&(pWrapperTable->m_Model_SetUnit)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_SetUnit == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_basematerialgroup_setname", (void**)&(pWrapperTable->m_BaseMaterialGroup_SetName)); - if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_SetName == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getunit", (void**)&(pWrapperTable->m_Model_GetUnit)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetUnit == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_basematerialgroup_setdisplaycolor", (void**)&(pWrapperTable->m_BaseMaterialGroup_SetDisplayColor)); - if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_SetDisplayColor == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getlanguage", (void**)&(pWrapperTable->m_Model_GetLanguage)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetLanguage == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_basematerialgroup_getdisplaycolor", (void**)&(pWrapperTable->m_BaseMaterialGroup_GetDisplayColor)); - if ( (eLookupError != 0) || (pWrapperTable->m_BaseMaterialGroup_GetDisplayColor == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_setlanguage", (void**)&(pWrapperTable->m_Model_SetLanguage)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_SetLanguage == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_colorgroup_getcount", (void**)&(pWrapperTable->m_ColorGroup_GetCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroup_GetCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_querywriter", (void**)&(pWrapperTable->m_Model_QueryWriter)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_QueryWriter == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_colorgroup_getallpropertyids", (void**)&(pWrapperTable->m_ColorGroup_GetAllPropertyIDs)); - if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroup_GetAllPropertyIDs == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_queryreader", (void**)&(pWrapperTable->m_Model_QueryReader)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_QueryReader == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_colorgroup_addcolor", (void**)&(pWrapperTable->m_ColorGroup_AddColor)); - if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroup_AddColor == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getresourcebyid", (void**)&(pWrapperTable->m_Model_GetResourceByID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetResourceByID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_colorgroup_removecolor", (void**)&(pWrapperTable->m_ColorGroup_RemoveColor)); - if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroup_RemoveColor == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_gettexture2dbyid", (void**)&(pWrapperTable->m_Model_GetTexture2DByID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetTexture2DByID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_colorgroup_setcolor", (void**)&(pWrapperTable->m_ColorGroup_SetColor)); - if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroup_SetColor == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getpropertytypebyid", (void**)&(pWrapperTable->m_Model_GetPropertyTypeByID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetPropertyTypeByID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_colorgroup_getcolor", (void**)&(pWrapperTable->m_ColorGroup_GetColor)); - if ( (eLookupError != 0) || (pWrapperTable->m_ColorGroup_GetColor == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getbasematerialgroupbyid", (void**)&(pWrapperTable->m_Model_GetBaseMaterialGroupByID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetBaseMaterialGroupByID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2dgroup_getcount", (void**)&(pWrapperTable->m_Texture2DGroup_GetCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroup_GetCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_gettexture2dgroupbyid", (void**)&(pWrapperTable->m_Model_GetTexture2DGroupByID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetTexture2DGroupByID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2dgroup_getallpropertyids", (void**)&(pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getcompositematerialsbyid", (void**)&(pWrapperTable->m_Model_GetCompositeMaterialsByID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetCompositeMaterialsByID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2dgroup_addtex2coord", (void**)&(pWrapperTable->m_Texture2DGroup_AddTex2Coord)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroup_AddTex2Coord == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getmultipropertygroupbyid", (void**)&(pWrapperTable->m_Model_GetMultiPropertyGroupByID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetMultiPropertyGroupByID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2dgroup_gettex2coord", (void**)&(pWrapperTable->m_Texture2DGroup_GetTex2Coord)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroup_GetTex2Coord == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getmeshobjectbyid", (void**)&(pWrapperTable->m_Model_GetMeshObjectByID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetMeshObjectByID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2dgroup_removetex2coord", (void**)&(pWrapperTable->m_Texture2DGroup_RemoveTex2Coord)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroup_RemoveTex2Coord == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getcomponentsobjectbyid", (void**)&(pWrapperTable->m_Model_GetComponentsObjectByID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetComponentsObjectByID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2dgroup_gettexture2d", (void**)&(pWrapperTable->m_Texture2DGroup_GetTexture2D)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2DGroup_GetTexture2D == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getcolorgroupbyid", (void**)&(pWrapperTable->m_Model_GetColorGroupByID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetColorGroupByID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_compositematerials_getcount", (void**)&(pWrapperTable->m_CompositeMaterials_GetCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterials_GetCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getslicestackbyid", (void**)&(pWrapperTable->m_Model_GetSliceStackByID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetSliceStackByID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_compositematerials_getallpropertyids", (void**)&(pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs)); - if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getlevelsetbyid", (void**)&(pWrapperTable->m_Model_GetLevelSetByID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetLevelSetByID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_compositematerials_getbasematerialgroup", (void**)&(pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getbuilduuid", (void**)&(pWrapperTable->m_Model_GetBuildUUID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetBuildUUID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_compositematerials_addcomposite", (void**)&(pWrapperTable->m_CompositeMaterials_AddComposite)); - if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterials_AddComposite == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_setbuilduuid", (void**)&(pWrapperTable->m_Model_SetBuildUUID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_SetBuildUUID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_compositematerials_removecomposite", (void**)&(pWrapperTable->m_CompositeMaterials_RemoveComposite)); - if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterials_RemoveComposite == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getbuilditems", (void**)&(pWrapperTable->m_Model_GetBuildItems)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetBuildItems == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_compositematerials_getcomposite", (void**)&(pWrapperTable->m_CompositeMaterials_GetComposite)); - if ( (eLookupError != 0) || (pWrapperTable->m_CompositeMaterials_GetComposite == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getoutbox", (void**)&(pWrapperTable->m_Model_GetOutbox)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetOutbox == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_multipropertygroup_getcount", (void**)&(pWrapperTable->m_MultiPropertyGroup_GetCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_GetCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getresources", (void**)&(pWrapperTable->m_Model_GetResources)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetResources == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_multipropertygroup_getallpropertyids", (void**)&(pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs)); - if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getobjects", (void**)&(pWrapperTable->m_Model_GetObjects)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetObjects == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_multipropertygroup_addmultiproperty", (void**)&(pWrapperTable->m_MultiPropertyGroup_AddMultiProperty)); - if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_AddMultiProperty == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getmeshobjects", (void**)&(pWrapperTable->m_Model_GetMeshObjects)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetMeshObjects == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_multipropertygroup_setmultiproperty", (void**)&(pWrapperTable->m_MultiPropertyGroup_SetMultiProperty)); - if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_SetMultiProperty == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getcomponentsobjects", (void**)&(pWrapperTable->m_Model_GetComponentsObjects)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetComponentsObjects == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_multipropertygroup_getmultiproperty", (void**)&(pWrapperTable->m_MultiPropertyGroup_GetMultiProperty)); - if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_GetMultiProperty == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_gettexture2ds", (void**)&(pWrapperTable->m_Model_GetTexture2Ds)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetTexture2Ds == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_multipropertygroup_removemultiproperty", (void**)&(pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty)); - if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getbasematerialgroups", (void**)&(pWrapperTable->m_Model_GetBaseMaterialGroups)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetBaseMaterialGroups == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_multipropertygroup_getlayercount", (void**)&(pWrapperTable->m_MultiPropertyGroup_GetLayerCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_GetLayerCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getcolorgroups", (void**)&(pWrapperTable->m_Model_GetColorGroups)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetColorGroups == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_multipropertygroup_addlayer", (void**)&(pWrapperTable->m_MultiPropertyGroup_AddLayer)); - if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_AddLayer == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_gettexture2dgroups", (void**)&(pWrapperTable->m_Model_GetTexture2DGroups)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetTexture2DGroups == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_multipropertygroup_getlayer", (void**)&(pWrapperTable->m_MultiPropertyGroup_GetLayer)); - if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_GetLayer == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getcompositematerials", (void**)&(pWrapperTable->m_Model_GetCompositeMaterials)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetCompositeMaterials == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_multipropertygroup_removelayer", (void**)&(pWrapperTable->m_MultiPropertyGroup_RemoveLayer)); - if ( (eLookupError != 0) || (pWrapperTable->m_MultiPropertyGroup_RemoveLayer == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getmultipropertygroups", (void**)&(pWrapperTable->m_Model_GetMultiPropertyGroups)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetMultiPropertyGroups == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_attachment_getpath", (void**)&(pWrapperTable->m_Attachment_GetPath)); - if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_GetPath == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getslicestacks", (void**)&(pWrapperTable->m_Model_GetSliceStacks)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetSliceStacks == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_attachment_setpath", (void**)&(pWrapperTable->m_Attachment_SetPath)); - if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_SetPath == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getimage3ds", (void**)&(pWrapperTable->m_Model_GetImage3Ds)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetImage3Ds == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_attachment_packagepart", (void**)&(pWrapperTable->m_Attachment_PackagePart)); - if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_PackagePart == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_mergetomodel", (void**)&(pWrapperTable->m_Model_MergeToModel)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_MergeToModel == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_attachment_getrelationshiptype", (void**)&(pWrapperTable->m_Attachment_GetRelationShipType)); - if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_GetRelationShipType == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_mergefrommodel", (void**)&(pWrapperTable->m_Model_MergeFromModel)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_MergeFromModel == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_attachment_setrelationshiptype", (void**)&(pWrapperTable->m_Attachment_SetRelationShipType)); - if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_SetRelationShipType == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addmeshobject", (void**)&(pWrapperTable->m_Model_AddMeshObject)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddMeshObject == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_attachment_writetofile", (void**)&(pWrapperTable->m_Attachment_WriteToFile)); - if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_WriteToFile == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addcomponentsobject", (void**)&(pWrapperTable->m_Model_AddComponentsObject)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddComponentsObject == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_attachment_readfromfile", (void**)&(pWrapperTable->m_Attachment_ReadFromFile)); - if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_ReadFromFile == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addslicestack", (void**)&(pWrapperTable->m_Model_AddSliceStack)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddSliceStack == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_attachment_readfromcallback", (void**)&(pWrapperTable->m_Attachment_ReadFromCallback)); - if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_ReadFromCallback == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addtexture2dfromattachment", (void**)&(pWrapperTable->m_Model_AddTexture2DFromAttachment)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddTexture2DFromAttachment == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_attachment_getstreamsize", (void**)&(pWrapperTable->m_Attachment_GetStreamSize)); - if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_GetStreamSize == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addbasematerialgroup", (void**)&(pWrapperTable->m_Model_AddBaseMaterialGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddBaseMaterialGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_attachment_writetobuffer", (void**)&(pWrapperTable->m_Attachment_WriteToBuffer)); - if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_WriteToBuffer == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addcolorgroup", (void**)&(pWrapperTable->m_Model_AddColorGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddColorGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_attachment_readfrombuffer", (void**)&(pWrapperTable->m_Attachment_ReadFromBuffer)); - if ( (eLookupError != 0) || (pWrapperTable->m_Attachment_ReadFromBuffer == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addtexture2dgroup", (void**)&(pWrapperTable->m_Model_AddTexture2DGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddTexture2DGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2d_getattachment", (void**)&(pWrapperTable->m_Texture2D_GetAttachment)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_GetAttachment == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addcompositematerials", (void**)&(pWrapperTable->m_Model_AddCompositeMaterials)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddCompositeMaterials == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2d_setattachment", (void**)&(pWrapperTable->m_Texture2D_SetAttachment)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_SetAttachment == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addmultipropertygroup", (void**)&(pWrapperTable->m_Model_AddMultiPropertyGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddMultiPropertyGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2d_getcontenttype", (void**)&(pWrapperTable->m_Texture2D_GetContentType)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_GetContentType == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addimagestack", (void**)&(pWrapperTable->m_Model_AddImageStack)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddImageStack == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2d_setcontenttype", (void**)&(pWrapperTable->m_Texture2D_SetContentType)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_SetContentType == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getimagestackbyid", (void**)&(pWrapperTable->m_Model_GetImageStackByID)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetImageStackByID == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2d_gettilestyleuv", (void**)&(pWrapperTable->m_Texture2D_GetTileStyleUV)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_GetTileStyleUV == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addbuilditem", (void**)&(pWrapperTable->m_Model_AddBuildItem)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddBuildItem == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2d_settilestyleuv", (void**)&(pWrapperTable->m_Texture2D_SetTileStyleUV)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_SetTileStyleUV == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_removebuilditem", (void**)&(pWrapperTable->m_Model_RemoveBuildItem)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_RemoveBuildItem == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2d_getfilter", (void**)&(pWrapperTable->m_Texture2D_GetFilter)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_GetFilter == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getmetadatagroup", (void**)&(pWrapperTable->m_Model_GetMetaDataGroup)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetMetaDataGroup == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_texture2d_setfilter", (void**)&(pWrapperTable->m_Texture2D_SetFilter)); - if ( (eLookupError != 0) || (pWrapperTable->m_Texture2D_SetFilter == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addattachment", (void**)&(pWrapperTable->m_Model_AddAttachment)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddAttachment == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditem_getobjectresource", (void**)&(pWrapperTable->m_BuildItem_GetObjectResource)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetObjectResource == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_removeattachment", (void**)&(pWrapperTable->m_Model_RemoveAttachment)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_RemoveAttachment == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditem_getuuid", (void**)&(pWrapperTable->m_BuildItem_GetUUID)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetUUID == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getattachment", (void**)&(pWrapperTable->m_Model_GetAttachment)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetAttachment == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditem_setuuid", (void**)&(pWrapperTable->m_BuildItem_SetUUID)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_SetUUID == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_findattachment", (void**)&(pWrapperTable->m_Model_FindAttachment)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_FindAttachment == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditem_getobjectresourceid", (void**)&(pWrapperTable->m_BuildItem_GetObjectResourceID)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetObjectResourceID == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getattachmentcount", (void**)&(pWrapperTable->m_Model_GetAttachmentCount)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetAttachmentCount == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditem_hasobjecttransform", (void**)&(pWrapperTable->m_BuildItem_HasObjectTransform)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_HasObjectTransform == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_haspackagethumbnailattachment", (void**)&(pWrapperTable->m_Model_HasPackageThumbnailAttachment)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_HasPackageThumbnailAttachment == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditem_getobjecttransform", (void**)&(pWrapperTable->m_BuildItem_GetObjectTransform)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetObjectTransform == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_createpackagethumbnailattachment", (void**)&(pWrapperTable->m_Model_CreatePackageThumbnailAttachment)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_CreatePackageThumbnailAttachment == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditem_setobjecttransform", (void**)&(pWrapperTable->m_BuildItem_SetObjectTransform)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_SetObjectTransform == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getpackagethumbnailattachment", (void**)&(pWrapperTable->m_Model_GetPackageThumbnailAttachment)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetPackageThumbnailAttachment == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditem_getpartnumber", (void**)&(pWrapperTable->m_BuildItem_GetPartNumber)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetPartNumber == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_removepackagethumbnailattachment", (void**)&(pWrapperTable->m_Model_RemovePackageThumbnailAttachment)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_RemovePackageThumbnailAttachment == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditem_setpartnumber", (void**)&(pWrapperTable->m_BuildItem_SetPartNumber)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_SetPartNumber == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addcustomcontenttype", (void**)&(pWrapperTable->m_Model_AddCustomContentType)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddCustomContentType == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditem_getmetadatagroup", (void**)&(pWrapperTable->m_BuildItem_GetMetaDataGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetMetaDataGroup == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_removecustomcontenttype", (void**)&(pWrapperTable->m_Model_RemoveCustomContentType)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_RemoveCustomContentType == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditem_getoutbox", (void**)&(pWrapperTable->m_BuildItem_GetOutbox)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItem_GetOutbox == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_setrandomnumbercallback", (void**)&(pWrapperTable->m_Model_SetRandomNumberCallback)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_SetRandomNumberCallback == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditemiterator_movenext", (void**)&(pWrapperTable->m_BuildItemIterator_MoveNext)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItemIterator_MoveNext == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getkeystore", (void**)&(pWrapperTable->m_Model_GetKeyStore)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetKeyStore == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditemiterator_moveprevious", (void**)&(pWrapperTable->m_BuildItemIterator_MovePrevious)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItemIterator_MovePrevious == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getfunctions", (void**)&(pWrapperTable->m_Model_GetFunctions)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetFunctions == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditemiterator_getcurrent", (void**)&(pWrapperTable->m_BuildItemIterator_GetCurrent)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItemIterator_GetCurrent == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addimplicitfunction", (void**)&(pWrapperTable->m_Model_AddImplicitFunction)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddImplicitFunction == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditemiterator_clone", (void**)&(pWrapperTable->m_BuildItemIterator_Clone)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItemIterator_Clone == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addfunctionfromimage3d", (void**)&(pWrapperTable->m_Model_AddFunctionFromImage3D)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddFunctionFromImage3D == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_builditemiterator_count", (void**)&(pWrapperTable->m_BuildItemIterator_Count)); - if ( (eLookupError != 0) || (pWrapperTable->m_BuildItemIterator_Count == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addvolumedata", (void**)&(pWrapperTable->m_Model_AddVolumeData)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddVolumeData == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slice_setvertices", (void**)&(pWrapperTable->m_Slice_SetVertices)); - if ( (eLookupError != 0) || (pWrapperTable->m_Slice_SetVertices == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_addlevelset", (void**)&(pWrapperTable->m_Model_AddLevelSet)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddLevelSet == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slice_getvertices", (void**)&(pWrapperTable->m_Slice_GetVertices)); - if ( (eLookupError != 0) || (pWrapperTable->m_Slice_GetVertices == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_getlevelsets", (void**)&(pWrapperTable->m_Model_GetLevelSets)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetLevelSets == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slice_getvertexcount", (void**)&(pWrapperTable->m_Slice_GetVertexCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_Slice_GetVertexCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_model_removeresource", (void**)&(pWrapperTable->m_Model_RemoveResource)); + if ( (eLookupError != 0) || (pWrapperTable->m_Model_RemoveResource == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slice_addpolygon", (void**)&(pWrapperTable->m_Slice_AddPolygon)); - if ( (eLookupError != 0) || (pWrapperTable->m_Slice_AddPolygon == nullptr) ) + eLookupError = (*pLookup)("lib3mf_getlibraryversion", (void**)&(pWrapperTable->m_GetLibraryVersion)); + if ( (eLookupError != 0) || (pWrapperTable->m_GetLibraryVersion == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slice_getpolygoncount", (void**)&(pWrapperTable->m_Slice_GetPolygonCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_Slice_GetPolygonCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_getprereleaseinformation", (void**)&(pWrapperTable->m_GetPrereleaseInformation)); + if ( (eLookupError != 0) || (pWrapperTable->m_GetPrereleaseInformation == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slice_setpolygonindices", (void**)&(pWrapperTable->m_Slice_SetPolygonIndices)); - if ( (eLookupError != 0) || (pWrapperTable->m_Slice_SetPolygonIndices == nullptr) ) + eLookupError = (*pLookup)("lib3mf_getbuildinformation", (void**)&(pWrapperTable->m_GetBuildInformation)); + if ( (eLookupError != 0) || (pWrapperTable->m_GetBuildInformation == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slice_getpolygonindices", (void**)&(pWrapperTable->m_Slice_GetPolygonIndices)); - if ( (eLookupError != 0) || (pWrapperTable->m_Slice_GetPolygonIndices == nullptr) ) + eLookupError = (*pLookup)("lib3mf_getspecificationversion", (void**)&(pWrapperTable->m_GetSpecificationVersion)); + if ( (eLookupError != 0) || (pWrapperTable->m_GetSpecificationVersion == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slice_getpolygonindexcount", (void**)&(pWrapperTable->m_Slice_GetPolygonIndexCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_Slice_GetPolygonIndexCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_createmodel", (void**)&(pWrapperTable->m_CreateModel)); + if ( (eLookupError != 0) || (pWrapperTable->m_CreateModel == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slice_getztop", (void**)&(pWrapperTable->m_Slice_GetZTop)); - if ( (eLookupError != 0) || (pWrapperTable->m_Slice_GetZTop == nullptr) ) + eLookupError = (*pLookup)("lib3mf_release", (void**)&(pWrapperTable->m_Release)); + if ( (eLookupError != 0) || (pWrapperTable->m_Release == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slicestack_getbottomz", (void**)&(pWrapperTable->m_SliceStack_GetBottomZ)); - if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_GetBottomZ == nullptr) ) + eLookupError = (*pLookup)("lib3mf_acquire", (void**)&(pWrapperTable->m_Acquire)); + if ( (eLookupError != 0) || (pWrapperTable->m_Acquire == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slicestack_getslicecount", (void**)&(pWrapperTable->m_SliceStack_GetSliceCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_GetSliceCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_setjournal", (void**)&(pWrapperTable->m_SetJournal)); + if ( (eLookupError != 0) || (pWrapperTable->m_SetJournal == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slicestack_getslice", (void**)&(pWrapperTable->m_SliceStack_GetSlice)); - if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_GetSlice == nullptr) ) + eLookupError = (*pLookup)("lib3mf_getlasterror", (void**)&(pWrapperTable->m_GetLastError)); + if ( (eLookupError != 0) || (pWrapperTable->m_GetLastError == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slicestack_addslice", (void**)&(pWrapperTable->m_SliceStack_AddSlice)); - if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_AddSlice == nullptr) ) + eLookupError = (*pLookup)("lib3mf_getsymbollookupmethod", (void**)&(pWrapperTable->m_GetSymbolLookupMethod)); + if ( (eLookupError != 0) || (pWrapperTable->m_GetSymbolLookupMethod == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slicestack_getslicerefcount", (void**)&(pWrapperTable->m_SliceStack_GetSliceRefCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_GetSliceRefCount == nullptr) ) + eLookupError = (*pLookup)("lib3mf_retrieveprogressmessage", (void**)&(pWrapperTable->m_RetrieveProgressMessage)); + if ( (eLookupError != 0) || (pWrapperTable->m_RetrieveProgressMessage == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slicestack_addslicestackreference", (void**)&(pWrapperTable->m_SliceStack_AddSliceStackReference)); - if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_AddSliceStackReference == nullptr) ) + eLookupError = (*pLookup)("lib3mf_rgbatocolor", (void**)&(pWrapperTable->m_RGBAToColor)); + if ( (eLookupError != 0) || (pWrapperTable->m_RGBAToColor == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slicestack_getslicestackreference", (void**)&(pWrapperTable->m_SliceStack_GetSliceStackReference)); - if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_GetSliceStackReference == nullptr) ) + eLookupError = (*pLookup)("lib3mf_floatrgbatocolor", (void**)&(pWrapperTable->m_FloatRGBAToColor)); + if ( (eLookupError != 0) || (pWrapperTable->m_FloatRGBAToColor == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slicestack_collapseslicereferences", (void**)&(pWrapperTable->m_SliceStack_CollapseSliceReferences)); - if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_CollapseSliceReferences == nullptr) ) + eLookupError = (*pLookup)("lib3mf_colortorgba", (void**)&(pWrapperTable->m_ColorToRGBA)); + if ( (eLookupError != 0) || (pWrapperTable->m_ColorToRGBA == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slicestack_setownpath", (void**)&(pWrapperTable->m_SliceStack_SetOwnPath)); - if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_SetOwnPath == nullptr) ) + eLookupError = (*pLookup)("lib3mf_colortofloatrgba", (void**)&(pWrapperTable->m_ColorToFloatRGBA)); + if ( (eLookupError != 0) || (pWrapperTable->m_ColorToFloatRGBA == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_slicestack_getownpath", (void**)&(pWrapperTable->m_SliceStack_GetOwnPath)); - if ( (eLookupError != 0) || (pWrapperTable->m_SliceStack_GetOwnPath == nullptr) ) + eLookupError = (*pLookup)("lib3mf_getidentitytransform", (void**)&(pWrapperTable->m_GetIdentityTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_GetIdentityTransform == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_consumer_getconsumerid", (void**)&(pWrapperTable->m_Consumer_GetConsumerID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Consumer_GetConsumerID == nullptr) ) + eLookupError = (*pLookup)("lib3mf_getuniformscaletransform", (void**)&(pWrapperTable->m_GetUniformScaleTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_GetUniformScaleTransform == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_consumer_getkeyid", (void**)&(pWrapperTable->m_Consumer_GetKeyID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Consumer_GetKeyID == nullptr) ) + eLookupError = (*pLookup)("lib3mf_getscaletransform", (void**)&(pWrapperTable->m_GetScaleTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_GetScaleTransform == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_consumer_getkeyvalue", (void**)&(pWrapperTable->m_Consumer_GetKeyValue)); - if ( (eLookupError != 0) || (pWrapperTable->m_Consumer_GetKeyValue == nullptr) ) + eLookupError = (*pLookup)("lib3mf_gettranslationtransform", (void**)&(pWrapperTable->m_GetTranslationTransform)); + if ( (eLookupError != 0) || (pWrapperTable->m_GetTranslationTransform == nullptr) ) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; - eLookupError = (*pLookup)("lib3mf_accessright_getconsumer", (void**)&(pWrapperTable->m_AccessRight_GetConsumer)); - if ( (eLookupError != 0) || (pWrapperTable->m_AccessRight_GetConsumer == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return LIB3MF_SUCCESS; +} + + + + /** + * Method definitions for class CBase + */ + + /** + * CBase::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 CBase::ClassTypeId() + { + Lib3MF_uint64 resultClassTypeId = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Base_ClassTypeId(m_pHandle, &resultClassTypeId)); + + return resultClassTypeId; + } + + /** + * Method definitions for class CWriter + */ + + /** + * CWriter::WriteToFile - Writes out the model as file. The file type is specified by the Model Writer class. + * @param[in] sFilename - Filename to write into + */ + void CWriter::WriteToFile(const std::string & sFilename) + { + CheckError(m_pWrapper->m_WrapperTable.m_Writer_WriteToFile(m_pHandle, sFilename.c_str())); + } + + /** + * CWriter::GetStreamSize - Retrieves the size of the full 3MF file stream. + * @return the stream size + */ + Lib3MF_uint64 CWriter::GetStreamSize() + { + Lib3MF_uint64 resultStreamSize = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Writer_GetStreamSize(m_pHandle, &resultStreamSize)); + + return resultStreamSize; + } + + /** + * CWriter::WriteToBuffer - Writes out the 3MF file into a memory buffer + * @param[out] BufferBuffer - buffer to write into + */ + void CWriter::WriteToBuffer(std::vector & BufferBuffer) + { + Lib3MF_uint64 elementsNeededBuffer = 0; + Lib3MF_uint64 elementsWrittenBuffer = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Writer_WriteToBuffer(m_pHandle, 0, &elementsNeededBuffer, nullptr)); + BufferBuffer.resize((size_t) elementsNeededBuffer); + CheckError(m_pWrapper->m_WrapperTable.m_Writer_WriteToBuffer(m_pHandle, elementsNeededBuffer, &elementsWrittenBuffer, BufferBuffer.data())); + } + + /** + * CWriter::WriteToCallback - Writes out the model and passes the data to a provided callback function. The file type is specified by the Model Writer class. + * @param[in] pTheWriteCallback - Callback to call for writing a data chunk + * @param[in] pTheSeekCallback - Callback to call for seeking in the stream + * @param[in] pUserData - Userdata that is passed to the callback function + */ + void CWriter::WriteToCallback(const WriteCallback pTheWriteCallback, const SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) + { + CheckError(m_pWrapper->m_WrapperTable.m_Writer_WriteToCallback(m_pHandle, pTheWriteCallback, pTheSeekCallback, pUserData)); + } + + /** + * CWriter::SetProgressCallback - Set the progress callback for calls to this writer + * @param[in] pProgressCallback - pointer to the callback function. + * @param[in] pUserData - pointer to arbitrary user data that is passed without modification to the callback. + */ + void CWriter::SetProgressCallback(const ProgressCallback pProgressCallback, const Lib3MF_pvoid pUserData) + { + CheckError(m_pWrapper->m_WrapperTable.m_Writer_SetProgressCallback(m_pHandle, pProgressCallback, pUserData)); + } + + /** + * CWriter::GetDecimalPrecision - Returns the number of digits after the decimal point to be written in each vertex coordinate-value. + * @return The number of digits to be written in each vertex coordinate-value after the decimal point. + */ + Lib3MF_uint32 CWriter::GetDecimalPrecision() + { + Lib3MF_uint32 resultDecimalPrecision = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Writer_GetDecimalPrecision(m_pHandle, &resultDecimalPrecision)); + + return resultDecimalPrecision; + } + + /** + * CWriter::SetDecimalPrecision - Sets the number of digits after the decimal point to be written in each vertex coordinate-value. + * @param[in] nDecimalPrecision - The number of digits to be written in each vertex coordinate-value after the decimal point. + */ + void CWriter::SetDecimalPrecision(const Lib3MF_uint32 nDecimalPrecision) + { + CheckError(m_pWrapper->m_WrapperTable.m_Writer_SetDecimalPrecision(m_pHandle, nDecimalPrecision)); + } + + /** + * CWriter::SetStrictModeActive - Activates (deactivates) the strict mode of the reader. + * @param[in] bStrictModeActive - flag whether strict mode is active or not. + */ + void CWriter::SetStrictModeActive(const bool bStrictModeActive) + { + CheckError(m_pWrapper->m_WrapperTable.m_Writer_SetStrictModeActive(m_pHandle, bStrictModeActive)); + } + + /** + * CWriter::GetStrictModeActive - Queries whether the strict mode of the reader is active or not + * @return returns flag whether strict mode is active or not. + */ + bool CWriter::GetStrictModeActive() + { + bool resultStrictModeActive = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Writer_GetStrictModeActive(m_pHandle, &resultStrictModeActive)); + + return resultStrictModeActive; + } + + /** + * CWriter::GetWarning - Returns Warning and Error Information of the read process + * @param[in] nIndex - Index of the Warning. Valid values are 0 to WarningCount - 1 + * @param[out] nErrorCode - filled with the error code of the warning + * @return the message of the warning + */ + std::string CWriter::GetWarning(const Lib3MF_uint32 nIndex, Lib3MF_uint32 & nErrorCode) + { + Lib3MF_uint32 bytesNeededWarning = 0; + Lib3MF_uint32 bytesWrittenWarning = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Writer_GetWarning(m_pHandle, nIndex, &nErrorCode, 0, &bytesNeededWarning, nullptr)); + std::vector bufferWarning(bytesNeededWarning); + CheckError(m_pWrapper->m_WrapperTable.m_Writer_GetWarning(m_pHandle, nIndex, &nErrorCode, bytesNeededWarning, &bytesWrittenWarning, &bufferWarning[0])); + + return std::string(&bufferWarning[0]); + } + + /** + * CWriter::GetWarningCount - Returns Warning and Error Count of the read process + * @return filled with the count of the occurred warnings. + */ + Lib3MF_uint32 CWriter::GetWarningCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Writer_GetWarningCount(m_pHandle, &resultCount)); + + return resultCount; + } + + /** + * CWriter::AddKeyWrappingCallback - Registers a callback to deal with data key encryption/decryption from keystore + * @param[in] sConsumerID - The ConsumerID to register for + * @param[in] pTheCallback - The callback to be callede for wrapping and encryption key + * @param[in] pUserData - Userdata that is passed to the callback function + */ + void CWriter::AddKeyWrappingCallback(const std::string & sConsumerID, const KeyWrappingCallback pTheCallback, const Lib3MF_pvoid pUserData) + { + CheckError(m_pWrapper->m_WrapperTable.m_Writer_AddKeyWrappingCallback(m_pHandle, sConsumerID.c_str(), pTheCallback, pUserData)); + } + + /** + * CWriter::SetContentEncryptionCallback - Registers a callback to deal with encryption of content + * @param[in] pTheCallback - The callback used to encrypt content + * @param[in] pUserData - Userdata that is passed to the callback function + */ + void CWriter::SetContentEncryptionCallback(const ContentEncryptionCallback pTheCallback, const Lib3MF_pvoid pUserData) + { + CheckError(m_pWrapper->m_WrapperTable.m_Writer_SetContentEncryptionCallback(m_pHandle, pTheCallback, pUserData)); + } + + /** + * Method definitions for class CReader + */ + + /** + * CReader::ReadFromFile - Reads a model from a file. The file type is specified by the Model Reader class + * @param[in] sFilename - Filename to read from + */ + void CReader::ReadFromFile(const std::string & sFilename) + { + CheckError(m_pWrapper->m_WrapperTable.m_Reader_ReadFromFile(m_pHandle, sFilename.c_str())); + } + + /** + * CReader::ReadFromBuffer - Reads a model from a memory buffer. + * @param[in] BufferBuffer - Buffer to read from + */ + void CReader::ReadFromBuffer(const CInputVector & BufferBuffer) + { + CheckError(m_pWrapper->m_WrapperTable.m_Reader_ReadFromBuffer(m_pHandle, (Lib3MF_uint64)BufferBuffer.size(), BufferBuffer.data())); + } + + /** + * CReader::ReadFromCallback - Reads a model and from the data provided by a callback function + * @param[in] pTheReadCallback - Callback to call for reading a data chunk + * @param[in] nStreamSize - number of bytes the callback returns + * @param[in] pTheSeekCallback - Callback to call for seeking in the stream. + * @param[in] pUserData - Userdata that is passed to the callback function + */ + void CReader::ReadFromCallback(const ReadCallback pTheReadCallback, const Lib3MF_uint64 nStreamSize, const SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) + { + CheckError(m_pWrapper->m_WrapperTable.m_Reader_ReadFromCallback(m_pHandle, pTheReadCallback, nStreamSize, pTheSeekCallback, pUserData)); + } + + /** + * CReader::SetProgressCallback - Set the progress callback for calls to this writer + * @param[in] pProgressCallback - pointer to the callback function. + * @param[in] pUserData - pointer to arbitrary user data that is passed without modification to the callback. + */ + void CReader::SetProgressCallback(const ProgressCallback pProgressCallback, const Lib3MF_pvoid pUserData) + { + CheckError(m_pWrapper->m_WrapperTable.m_Reader_SetProgressCallback(m_pHandle, pProgressCallback, pUserData)); + } + + /** + * CReader::AddRelationToRead - Adds a relationship type which shall be read as attachment in memory while loading + * @param[in] sRelationShipType - String of the relationship type + */ + void CReader::AddRelationToRead(const std::string & sRelationShipType) + { + CheckError(m_pWrapper->m_WrapperTable.m_Reader_AddRelationToRead(m_pHandle, sRelationShipType.c_str())); + } + + /** + * CReader::RemoveRelationToRead - Removes a relationship type which shall be read as attachment in memory while loading + * @param[in] sRelationShipType - String of the relationship type + */ + void CReader::RemoveRelationToRead(const std::string & sRelationShipType) + { + CheckError(m_pWrapper->m_WrapperTable.m_Reader_RemoveRelationToRead(m_pHandle, sRelationShipType.c_str())); + } + + /** + * CReader::SetStrictModeActive - Activates (deactivates) the strict mode of the reader. + * @param[in] bStrictModeActive - flag whether strict mode is active or not. + */ + void CReader::SetStrictModeActive(const bool bStrictModeActive) + { + CheckError(m_pWrapper->m_WrapperTable.m_Reader_SetStrictModeActive(m_pHandle, bStrictModeActive)); + } + + /** + * CReader::GetStrictModeActive - Queries whether the strict mode of the reader is active or not + * @return returns flag whether strict mode is active or not. + */ + bool CReader::GetStrictModeActive() + { + bool resultStrictModeActive = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Reader_GetStrictModeActive(m_pHandle, &resultStrictModeActive)); + + return resultStrictModeActive; + } + + /** + * CReader::GetWarning - Returns Warning and Error Information of the read process + * @param[in] nIndex - Index of the Warning. Valid values are 0 to WarningCount - 1 + * @param[out] nErrorCode - filled with the error code of the warning + * @return the message of the warning + */ + std::string CReader::GetWarning(const Lib3MF_uint32 nIndex, Lib3MF_uint32 & nErrorCode) + { + Lib3MF_uint32 bytesNeededWarning = 0; + Lib3MF_uint32 bytesWrittenWarning = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Reader_GetWarning(m_pHandle, nIndex, &nErrorCode, 0, &bytesNeededWarning, nullptr)); + std::vector bufferWarning(bytesNeededWarning); + CheckError(m_pWrapper->m_WrapperTable.m_Reader_GetWarning(m_pHandle, nIndex, &nErrorCode, bytesNeededWarning, &bytesWrittenWarning, &bufferWarning[0])); - eLookupError = (*pLookup)("lib3mf_accessright_getwrappingalgorithm", (void**)&(pWrapperTable->m_AccessRight_GetWrappingAlgorithm)); - if ( (eLookupError != 0) || (pWrapperTable->m_AccessRight_GetWrappingAlgorithm == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferWarning[0]); + } + + /** + * CReader::GetWarningCount - Returns Warning and Error Count of the read process + * @return filled with the count of the occurred warnings. + */ + Lib3MF_uint32 CReader::GetWarningCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Reader_GetWarningCount(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_accessright_getmgfalgorithm", (void**)&(pWrapperTable->m_AccessRight_GetMgfAlgorithm)); - if ( (eLookupError != 0) || (pWrapperTable->m_AccessRight_GetMgfAlgorithm == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * CReader::AddKeyWrappingCallback - Registers a callback to deal with key wrapping mechanism from keystore + * @param[in] sConsumerID - The ConsumerID to register for + * @param[in] pTheCallback - The callback used to decrypt data key + * @param[in] pUserData - Userdata that is passed to the callback function + */ + void CReader::AddKeyWrappingCallback(const std::string & sConsumerID, const KeyWrappingCallback pTheCallback, const Lib3MF_pvoid pUserData) + { + CheckError(m_pWrapper->m_WrapperTable.m_Reader_AddKeyWrappingCallback(m_pHandle, sConsumerID.c_str(), pTheCallback, pUserData)); + } + + /** + * CReader::SetContentEncryptionCallback - Registers a callback to deal with encryption of content + * @param[in] pTheCallback - The callback used to encrypt content + * @param[in] pUserData - Userdata that is passed to the callback function + */ + void CReader::SetContentEncryptionCallback(const ContentEncryptionCallback pTheCallback, const Lib3MF_pvoid pUserData) + { + CheckError(m_pWrapper->m_WrapperTable.m_Reader_SetContentEncryptionCallback(m_pHandle, pTheCallback, pUserData)); + } + + /** + * Method definitions for class CPackagePart + */ + + /** + * CPackagePart::GetPath - Returns the absolute path of this PackagePart. + * @return Returns the absolute path of this PackagePart + */ + std::string CPackagePart::GetPath() + { + Lib3MF_uint32 bytesNeededPath = 0; + Lib3MF_uint32 bytesWrittenPath = 0; + CheckError(m_pWrapper->m_WrapperTable.m_PackagePart_GetPath(m_pHandle, 0, &bytesNeededPath, nullptr)); + std::vector bufferPath(bytesNeededPath); + CheckError(m_pWrapper->m_WrapperTable.m_PackagePart_GetPath(m_pHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0])); - eLookupError = (*pLookup)("lib3mf_accessright_getdigestmethod", (void**)&(pWrapperTable->m_AccessRight_GetDigestMethod)); - if ( (eLookupError != 0) || (pWrapperTable->m_AccessRight_GetDigestMethod == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferPath[0]); + } + + /** + * CPackagePart::SetPath - Sets the absolute path of this PackagePart. + * @param[in] sPath - Sets the absolute path of this PackagePart. + */ + void CPackagePart::SetPath(const std::string & sPath) + { + CheckError(m_pWrapper->m_WrapperTable.m_PackagePart_SetPath(m_pHandle, sPath.c_str())); + } + + /** + * Method definitions for class CResource + */ + + /** + * CResource::GetResourceID - Retrieves the unique id of this resource within a package. This function will be removed in a later release in favor of GetUniqueResourceID + * @return Retrieves the unique id of this resource within a package. + */ + Lib3MF_uint32 CResource::GetResourceID() + { + Lib3MF_uint32 resultUniqueResourceID = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Resource_GetResourceID(m_pHandle, &resultUniqueResourceID)); - eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getencryptionalgorithm", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetEncryptionAlgorithm)); - if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetEncryptionAlgorithm == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultUniqueResourceID; + } + + /** + * CResource::GetUniqueResourceID - Retrieves the unique id of this resource within a package. + * @return Retrieves the unique id of this resource within a package. + */ + Lib3MF_uint32 CResource::GetUniqueResourceID() + { + Lib3MF_uint32 resultUniqueResourceID = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Resource_GetUniqueResourceID(m_pHandle, &resultUniqueResourceID)); - eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getkey", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetKey)); - if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetKey == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultUniqueResourceID; + } + + /** + * CResource::PackagePart - Returns the PackagePart within which this resource resides + * @return the PackagePart within which this resource resides. + */ + PPackagePart CResource::PackagePart() + { + Lib3MFHandle hPackagePart = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Resource_PackagePart(m_pHandle, &hPackagePart)); - eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getinitializationvector", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetInitializationVector)); - if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetInitializationVector == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hPackagePart) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPackagePart))); + } + + /** + * CResource::SetPackagePart - Sets the new PackagePart within which this resource resides + * @param[in] pPackagePart - the new PackagePart within which this resource resides. + */ + void CResource::SetPackagePart(classParam pPackagePart) + { + Lib3MFHandle hPackagePart = pPackagePart.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_Resource_SetPackagePart(m_pHandle, hPackagePart)); + } + + /** + * CResource::GetModelResourceID - Retrieves the id of this resource within a model. + * @return Retrieves the id of this resource within a model. + */ + Lib3MF_uint32 CResource::GetModelResourceID() + { + Lib3MF_uint32 resultModelResourceId = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Resource_GetModelResourceID(m_pHandle, &resultModelResourceId)); - eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getauthenticationtag", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetAuthenticationTag)); - if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetAuthenticationTag == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultModelResourceId; + } + + /** + * Method definitions for class CResourceIterator + */ + + /** + * CResourceIterator::MoveNext - Iterates to the next resource in the list. + * @return Iterates to the next resource in the list. + */ + bool CResourceIterator::MoveNext() + { + bool resultHasNext = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ResourceIterator_MoveNext(m_pHandle, &resultHasNext)); - eLookupError = (*pLookup)("lib3mf_contentencryptionparams_setauthenticationtag", (void**)&(pWrapperTable->m_ContentEncryptionParams_SetAuthenticationTag)); - if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_SetAuthenticationTag == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultHasNext; + } + + /** + * CResourceIterator::MovePrevious - Iterates to the previous resource in the list. + * @return Iterates to the previous resource in the list. + */ + bool CResourceIterator::MovePrevious() + { + bool resultHasPrevious = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ResourceIterator_MovePrevious(m_pHandle, &resultHasPrevious)); - eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getadditionalauthenticationdata", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetAdditionalAuthenticationData)); - if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetAdditionalAuthenticationData == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultHasPrevious; + } + + /** + * CResourceIterator::GetCurrent - Returns the resource the iterator points at. + * @return returns the resource instance. + */ + PResource CResourceIterator::GetCurrent() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ResourceIterator_GetCurrent(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getdescriptor", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetDescriptor)); - if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetDescriptor == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * CResourceIterator::Clone - Creates a new resource iterator with the same resource list. + * @return returns the cloned Iterator instance + */ + PResourceIterator CResourceIterator::Clone() + { + Lib3MFHandle hOutResourceIterator = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ResourceIterator_Clone(m_pHandle, &hOutResourceIterator)); - eLookupError = (*pLookup)("lib3mf_contentencryptionparams_getkeyuuid", (void**)&(pWrapperTable->m_ContentEncryptionParams_GetKeyUUID)); - if ( (eLookupError != 0) || (pWrapperTable->m_ContentEncryptionParams_GetKeyUUID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hOutResourceIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hOutResourceIterator))); + } + + /** + * CResourceIterator::Count - Returns the number of resoucres the iterator captures. + * @return returns the number of resoucres the iterator captures. + */ + Lib3MF_uint64 CResourceIterator::Count() + { + Lib3MF_uint64 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ResourceIterator_Count(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_resourcedata_getpath", (void**)&(pWrapperTable->m_ResourceData_GetPath)); - if ( (eLookupError != 0) || (pWrapperTable->m_ResourceData_GetPath == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * Method definitions for class CSliceStackIterator + */ + + /** + * CSliceStackIterator::GetCurrentSliceStack - Returns the SliceStack the iterator points at. + * @return returns the SliceStack instance. + */ + PSliceStack CSliceStackIterator::GetCurrentSliceStack() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_SliceStackIterator_GetCurrentSliceStack(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_resourcedata_getencryptionalgorithm", (void**)&(pWrapperTable->m_ResourceData_GetEncryptionAlgorithm)); - if ( (eLookupError != 0) || (pWrapperTable->m_ResourceData_GetEncryptionAlgorithm == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CObjectIterator + */ + + /** + * CObjectIterator::GetCurrentObject - Returns the Object the iterator points at. + * @return returns the Object instance. + */ + PObject CObjectIterator::GetCurrentObject() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ObjectIterator_GetCurrentObject(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_resourcedata_getcompression", (void**)&(pWrapperTable->m_ResourceData_GetCompression)); - if ( (eLookupError != 0) || (pWrapperTable->m_ResourceData_GetCompression == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CMeshObjectIterator + */ + + /** + * CMeshObjectIterator::GetCurrentMeshObject - Returns the MeshObject the iterator points at. + * @return returns the MeshObject instance. + */ + PMeshObject CMeshObjectIterator::GetCurrentMeshObject() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObjectIterator_GetCurrentMeshObject(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_resourcedata_getadditionalauthenticationdata", (void**)&(pWrapperTable->m_ResourceData_GetAdditionalAuthenticationData)); - if ( (eLookupError != 0) || (pWrapperTable->m_ResourceData_GetAdditionalAuthenticationData == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CComponentsObjectIterator + */ + + /** + * CComponentsObjectIterator::GetCurrentComponentsObject - Returns the ComponentsObject the iterator points at. + * @return returns the ComponentsObject instance. + */ + PComponentsObject CComponentsObjectIterator::GetCurrentComponentsObject() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComponentsObjectIterator_GetCurrentComponentsObject(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_resourcedatagroup_getkeyuuid", (void**)&(pWrapperTable->m_ResourceDataGroup_GetKeyUUID)); - if ( (eLookupError != 0) || (pWrapperTable->m_ResourceDataGroup_GetKeyUUID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CTexture2DIterator + */ + + /** + * CTexture2DIterator::GetCurrentTexture2D - Returns the Texture2D the iterator points at. + * @return returns the Texture2D instance. + */ + PTexture2D CTexture2DIterator::GetCurrentTexture2D() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Texture2DIterator_GetCurrentTexture2D(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_resourcedatagroup_addaccessright", (void**)&(pWrapperTable->m_ResourceDataGroup_AddAccessRight)); - if ( (eLookupError != 0) || (pWrapperTable->m_ResourceDataGroup_AddAccessRight == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CBaseMaterialGroupIterator + */ + + /** + * CBaseMaterialGroupIterator::GetCurrentBaseMaterialGroup - Returns the MaterialGroup the iterator points at. + * @return returns the BaseMaterialGroup instance. + */ + PBaseMaterialGroup CBaseMaterialGroupIterator::GetCurrentBaseMaterialGroup() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_resourcedatagroup_findaccessrightbyconsumer", (void**)&(pWrapperTable->m_ResourceDataGroup_FindAccessRightByConsumer)); - if ( (eLookupError != 0) || (pWrapperTable->m_ResourceDataGroup_FindAccessRightByConsumer == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CColorGroupIterator + */ + + /** + * CColorGroupIterator::GetCurrentColorGroup - Returns the ColorGroup the iterator points at. + * @return returns the ColorGroup instance. + */ + PColorGroup CColorGroupIterator::GetCurrentColorGroup() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ColorGroupIterator_GetCurrentColorGroup(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_resourcedatagroup_removeaccessright", (void**)&(pWrapperTable->m_ResourceDataGroup_RemoveAccessRight)); - if ( (eLookupError != 0) || (pWrapperTable->m_ResourceDataGroup_RemoveAccessRight == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CTexture2DGroupIterator + */ + + /** + * CTexture2DGroupIterator::GetCurrentTexture2DGroup - Returns the Texture2DGroup the iterator points at. + * @return returns the Texture2DGroup instance. + */ + PTexture2DGroup CTexture2DGroupIterator::GetCurrentTexture2DGroup() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroupIterator_GetCurrentTexture2DGroup(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_keystore_addconsumer", (void**)&(pWrapperTable->m_KeyStore_AddConsumer)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_AddConsumer == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CCompositeMaterialsIterator + */ + + /** + * CCompositeMaterialsIterator::GetCurrentCompositeMaterials - Returns the CompositeMaterials the iterator points at. + * @return returns the CompositeMaterials instance. + */ + PCompositeMaterials CCompositeMaterialsIterator::GetCurrentCompositeMaterials() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterialsIterator_GetCurrentCompositeMaterials(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_keystore_getconsumercount", (void**)&(pWrapperTable->m_KeyStore_GetConsumerCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetConsumerCount == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CMultiPropertyGroupIterator + */ + + /** + * CMultiPropertyGroupIterator::GetCurrentMultiPropertyGroup - Returns the MultiPropertyGroup the iterator points at. + * @return returns the MultiPropertyGroup instance. + */ + PMultiPropertyGroup CMultiPropertyGroupIterator::GetCurrentMultiPropertyGroup() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_keystore_getconsumer", (void**)&(pWrapperTable->m_KeyStore_GetConsumer)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetConsumer == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CImage3DIterator + */ + + /** + * CImage3DIterator::GetCurrentImage3D - Returns the Image3D the iterator points at. + * @return returns the Image3D instance. + */ + PImage3D CImage3DIterator::GetCurrentImage3D() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Image3DIterator_GetCurrentImage3D(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_keystore_removeconsumer", (void**)&(pWrapperTable->m_KeyStore_RemoveConsumer)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_RemoveConsumer == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CFunctionIterator + */ + + /** + * CFunctionIterator::GetCurrentFunction - Returns the Function the iterator points at. + * @return returns the Function instance. + */ + PFunction CFunctionIterator::GetCurrentFunction() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_FunctionIterator_GetCurrentFunction(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_keystore_findconsumer", (void**)&(pWrapperTable->m_KeyStore_FindConsumer)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_FindConsumer == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CLevelSetIterator + */ + + /** + * CLevelSetIterator::GetCurrentLevelSet - Returns the LevelSet the iterator points at. + * @return returns the MeshObject instance. + */ + PLevelSet CLevelSetIterator::GetCurrentLevelSet() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_LevelSetIterator_GetCurrentLevelSet(m_pHandle, &hResource)); - eLookupError = (*pLookup)("lib3mf_keystore_getresourcedatagroupcount", (void**)&(pWrapperTable->m_KeyStore_GetResourceDataGroupCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetResourceDataGroupCount == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + } + + /** + * Method definitions for class CMetaData + */ + + /** + * CMetaData::GetNameSpace - returns the namespace URL of the metadata + * @return the namespace URL of the metadata + */ + std::string CMetaData::GetNameSpace() + { + Lib3MF_uint32 bytesNeededNameSpace = 0; + Lib3MF_uint32 bytesWrittenNameSpace = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetNameSpace(m_pHandle, 0, &bytesNeededNameSpace, nullptr)); + std::vector bufferNameSpace(bytesNeededNameSpace); + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetNameSpace(m_pHandle, bytesNeededNameSpace, &bytesWrittenNameSpace, &bufferNameSpace[0])); - eLookupError = (*pLookup)("lib3mf_keystore_addresourcedatagroup", (void**)&(pWrapperTable->m_KeyStore_AddResourceDataGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_AddResourceDataGroup == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferNameSpace[0]); + } + + /** + * CMetaData::SetNameSpace - sets a new namespace URL of the metadata + * @param[in] sNameSpace - the new namespace URL of the metadata + */ + void CMetaData::SetNameSpace(const std::string & sNameSpace) + { + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_SetNameSpace(m_pHandle, sNameSpace.c_str())); + } + + /** + * CMetaData::GetName - returns the name of a metadata + * @return the name of the metadata + */ + std::string CMetaData::GetName() + { + Lib3MF_uint32 bytesNeededName = 0; + Lib3MF_uint32 bytesWrittenName = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetName(m_pHandle, 0, &bytesNeededName, nullptr)); + std::vector bufferName(bytesNeededName); + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetName(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); - eLookupError = (*pLookup)("lib3mf_keystore_getresourcedatagroup", (void**)&(pWrapperTable->m_KeyStore_GetResourceDataGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetResourceDataGroup == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferName[0]); + } + + /** + * CMetaData::SetName - sets a new name of a metadata + * @param[in] sName - the new name of the metadata + */ + void CMetaData::SetName(const std::string & sName) + { + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_SetName(m_pHandle, sName.c_str())); + } + + /** + * CMetaData::GetKey - returns the (namespace+name) of a metadata + * @return the key (namespace+name) of the metadata + */ + std::string CMetaData::GetKey() + { + Lib3MF_uint32 bytesNeededKey = 0; + Lib3MF_uint32 bytesWrittenKey = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetKey(m_pHandle, 0, &bytesNeededKey, nullptr)); + std::vector bufferKey(bytesNeededKey); + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetKey(m_pHandle, bytesNeededKey, &bytesWrittenKey, &bufferKey[0])); - eLookupError = (*pLookup)("lib3mf_keystore_removeresourcedatagroup", (void**)&(pWrapperTable->m_KeyStore_RemoveResourceDataGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_RemoveResourceDataGroup == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferKey[0]); + } + + /** + * CMetaData::GetMustPreserve - returns, whether a metadata must be preserved + * @return returns, whether a metadata must be preserved + */ + bool CMetaData::GetMustPreserve() + { + bool resultMustPreserve = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetMustPreserve(m_pHandle, &resultMustPreserve)); - eLookupError = (*pLookup)("lib3mf_keystore_findresourcedatagroup", (void**)&(pWrapperTable->m_KeyStore_FindResourceDataGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_FindResourceDataGroup == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultMustPreserve; + } + + /** + * CMetaData::SetMustPreserve - sets whether a metadata must be preserved + * @param[in] bMustPreserve - a new value whether a metadata must be preserved + */ + void CMetaData::SetMustPreserve(const bool bMustPreserve) + { + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_SetMustPreserve(m_pHandle, bMustPreserve)); + } + + /** + * CMetaData::GetType - returns the type of a metadata + * @return the type of the metadata + */ + std::string CMetaData::GetType() + { + Lib3MF_uint32 bytesNeededType = 0; + Lib3MF_uint32 bytesWrittenType = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetType(m_pHandle, 0, &bytesNeededType, nullptr)); + std::vector bufferType(bytesNeededType); + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetType(m_pHandle, bytesNeededType, &bytesWrittenType, &bufferType[0])); - eLookupError = (*pLookup)("lib3mf_keystore_addresourcedata", (void**)&(pWrapperTable->m_KeyStore_AddResourceData)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_AddResourceData == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferType[0]); + } + + /** + * CMetaData::SetType - sets a new type of a metadata. This must be a simple XML type + * @param[in] sType - a new type of the metadata + */ + void CMetaData::SetType(const std::string & sType) + { + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_SetType(m_pHandle, sType.c_str())); + } + + /** + * CMetaData::GetValue - returns the value of the metadata + * @return the value of the metadata + */ + std::string CMetaData::GetValue() + { + Lib3MF_uint32 bytesNeededValue = 0; + Lib3MF_uint32 bytesWrittenValue = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetValue(m_pHandle, 0, &bytesNeededValue, nullptr)); + std::vector bufferValue(bytesNeededValue); + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetValue(m_pHandle, bytesNeededValue, &bytesWrittenValue, &bufferValue[0])); - eLookupError = (*pLookup)("lib3mf_keystore_removeresourcedata", (void**)&(pWrapperTable->m_KeyStore_RemoveResourceData)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_RemoveResourceData == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferValue[0]); + } + + /** + * CMetaData::SetValue - sets a new value of the metadata + * @param[in] sValue - a new value of the metadata + */ + void CMetaData::SetValue(const std::string & sValue) + { + CheckError(m_pWrapper->m_WrapperTable.m_MetaData_SetValue(m_pHandle, sValue.c_str())); + } + + /** + * Method definitions for class CMetaDataGroup + */ + + /** + * CMetaDataGroup::GetMetaDataCount - returns the number of metadata in this metadatagroup + * @return returns the number metadata + */ + Lib3MF_uint32 CMetaDataGroup::GetMetaDataCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MetaDataGroup_GetMetaDataCount(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_keystore_findresourcedata", (void**)&(pWrapperTable->m_KeyStore_FindResourceData)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_FindResourceData == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * CMetaDataGroup::GetMetaData - returns a metadata value within this metadatagroup + * @param[in] nIndex - Index of the Metadata. + * @return an instance of the metadata + */ + PMetaData CMetaDataGroup::GetMetaData(const Lib3MF_uint32 nIndex) + { + Lib3MFHandle hMetaData = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MetaDataGroup_GetMetaData(m_pHandle, nIndex, &hMetaData)); - eLookupError = (*pLookup)("lib3mf_keystore_getresourcedatacount", (void**)&(pWrapperTable->m_KeyStore_GetResourceDataCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetResourceDataCount == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hMetaData) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaData))); + } + + /** + * CMetaDataGroup::GetMetaDataByKey - returns a metadata value within this metadatagroup + * @param[in] sNameSpace - the namespace of the metadata + * @param[in] sName - the name of the Metadata + * @return an instance of the metadata + */ + PMetaData CMetaDataGroup::GetMetaDataByKey(const std::string & sNameSpace, const std::string & sName) + { + Lib3MFHandle hMetaData = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MetaDataGroup_GetMetaDataByKey(m_pHandle, sNameSpace.c_str(), sName.c_str(), &hMetaData)); - eLookupError = (*pLookup)("lib3mf_keystore_getresourcedata", (void**)&(pWrapperTable->m_KeyStore_GetResourceData)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetResourceData == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hMetaData) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaData))); + } + + /** + * CMetaDataGroup::RemoveMetaDataByIndex - removes metadata by index from the model. + * @param[in] nIndex - Index of the metadata to remove + */ + void CMetaDataGroup::RemoveMetaDataByIndex(const Lib3MF_uint32 nIndex) + { + CheckError(m_pWrapper->m_WrapperTable.m_MetaDataGroup_RemoveMetaDataByIndex(m_pHandle, nIndex)); + } + + /** + * CMetaDataGroup::RemoveMetaData - removes metadata from the model. + * @param[in] pTheMetaData - The metadata to remove + */ + void CMetaDataGroup::RemoveMetaData(classParam pTheMetaData) + { + Lib3MFHandle hTheMetaData = pTheMetaData.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_MetaDataGroup_RemoveMetaData(m_pHandle, hTheMetaData)); + } + + /** + * CMetaDataGroup::AddMetaData - adds a new metadata to this metadatagroup + * @param[in] sNameSpace - the namespace of the metadata + * @param[in] sName - the name of the metadata + * @param[in] sValue - the value of the metadata + * @param[in] sType - the type of the metadata + * @param[in] bMustPreserve - shuold the metadata be preserved + * @return a new instance of the metadata + */ + PMetaData CMetaDataGroup::AddMetaData(const std::string & sNameSpace, const std::string & sName, const std::string & sValue, const std::string & sType, const bool bMustPreserve) + { + Lib3MFHandle hMetaData = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MetaDataGroup_AddMetaData(m_pHandle, sNameSpace.c_str(), sName.c_str(), sValue.c_str(), sType.c_str(), bMustPreserve, &hMetaData)); - eLookupError = (*pLookup)("lib3mf_keystore_getuuid", (void**)&(pWrapperTable->m_KeyStore_GetUUID)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_GetUUID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hMetaData) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaData))); + } + + /** + * Method definitions for class CObject + */ + + /** + * CObject::GetType - Retrieves an object's type + * @return returns object type enum. + */ + eObjectType CObject::GetType() + { + eObjectType resultObjectType = (eObjectType) 0; + CheckError(m_pWrapper->m_WrapperTable.m_Object_GetType(m_pHandle, &resultObjectType)); - eLookupError = (*pLookup)("lib3mf_keystore_setuuid", (void**)&(pWrapperTable->m_KeyStore_SetUUID)); - if ( (eLookupError != 0) || (pWrapperTable->m_KeyStore_SetUUID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultObjectType; + } + + /** + * CObject::SetType - Sets an object's type + * @param[in] eObjectType - object type enum. + */ + void CObject::SetType(const eObjectType eObjectType) + { + CheckError(m_pWrapper->m_WrapperTable.m_Object_SetType(m_pHandle, eObjectType)); + } + + /** + * CObject::GetName - Retrieves an object's name + * @return returns object name. + */ + std::string CObject::GetName() + { + Lib3MF_uint32 bytesNeededName = 0; + Lib3MF_uint32 bytesWrittenName = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Object_GetName(m_pHandle, 0, &bytesNeededName, nullptr)); + std::vector bufferName(bytesNeededName); + CheckError(m_pWrapper->m_WrapperTable.m_Object_GetName(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); - eLookupError = (*pLookup)("lib3mf_model_rootmodelpart", (void**)&(pWrapperTable->m_Model_RootModelPart)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_RootModelPart == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferName[0]); + } + + /** + * CObject::SetName - Sets an object's name string + * @param[in] sName - new object name. + */ + void CObject::SetName(const std::string & sName) + { + CheckError(m_pWrapper->m_WrapperTable.m_Object_SetName(m_pHandle, sName.c_str())); + } + + /** + * CObject::GetPartNumber - Retrieves an object's part number + * @return returns object part number. + */ + std::string CObject::GetPartNumber() + { + Lib3MF_uint32 bytesNeededPartNumber = 0; + Lib3MF_uint32 bytesWrittenPartNumber = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Object_GetPartNumber(m_pHandle, 0, &bytesNeededPartNumber, nullptr)); + std::vector bufferPartNumber(bytesNeededPartNumber); + CheckError(m_pWrapper->m_WrapperTable.m_Object_GetPartNumber(m_pHandle, bytesNeededPartNumber, &bytesWrittenPartNumber, &bufferPartNumber[0])); - eLookupError = (*pLookup)("lib3mf_model_findorcreatepackagepart", (void**)&(pWrapperTable->m_Model_FindOrCreatePackagePart)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_FindOrCreatePackagePart == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferPartNumber[0]); + } + + /** + * CObject::SetPartNumber - Sets an objects partnumber string + * @param[in] sPartNumber - new object part number. + */ + void CObject::SetPartNumber(const std::string & sPartNumber) + { + CheckError(m_pWrapper->m_WrapperTable.m_Object_SetPartNumber(m_pHandle, sPartNumber.c_str())); + } + + /** + * CObject::IsMeshObject - Retrieves, if an object is a mesh object + * @return returns, whether the object is a mesh object + */ + bool CObject::IsMeshObject() + { + bool resultIsMeshObject = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Object_IsMeshObject(m_pHandle, &resultIsMeshObject)); - eLookupError = (*pLookup)("lib3mf_model_setunit", (void**)&(pWrapperTable->m_Model_SetUnit)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_SetUnit == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultIsMeshObject; + } + + /** + * CObject::IsComponentsObject - Retrieves, if an object is a components object + * @return returns, whether the object is a components object + */ + bool CObject::IsComponentsObject() + { + bool resultIsComponentsObject = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Object_IsComponentsObject(m_pHandle, &resultIsComponentsObject)); - eLookupError = (*pLookup)("lib3mf_model_getunit", (void**)&(pWrapperTable->m_Model_GetUnit)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetUnit == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultIsComponentsObject; + } + + /** + * CObject::IsLevelSetObject - Retrieves, if an object is a level set object + * @return returns, whether the object is a level set object + */ + bool CObject::IsLevelSetObject() + { + bool resultIsLevelSetObject = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Object_IsLevelSetObject(m_pHandle, &resultIsLevelSetObject)); - eLookupError = (*pLookup)("lib3mf_model_getlanguage", (void**)&(pWrapperTable->m_Model_GetLanguage)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetLanguage == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultIsLevelSetObject; + } + + /** + * CObject::IsValid - Retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. + * @return returns whether the object is a valid object description + */ + bool CObject::IsValid() + { + bool resultIsValid = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Object_IsValid(m_pHandle, &resultIsValid)); - eLookupError = (*pLookup)("lib3mf_model_setlanguage", (void**)&(pWrapperTable->m_Model_SetLanguage)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_SetLanguage == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultIsValid; + } + + /** + * CObject::SetAttachmentAsThumbnail - Use an existing attachment as thumbnail for this object + * @param[in] pAttachment - Instance of a new or the existing thumbnailattachment object. + */ + void CObject::SetAttachmentAsThumbnail(classParam pAttachment) + { + Lib3MFHandle hAttachment = pAttachment.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_Object_SetAttachmentAsThumbnail(m_pHandle, hAttachment)); + } + + /** + * CObject::GetThumbnailAttachment - Get the attachment containing the object thumbnail. + * @return Instance of the thumbnailattachment object or NULL. + */ + PAttachment CObject::GetThumbnailAttachment() + { + Lib3MFHandle hAttachment = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Object_GetThumbnailAttachment(m_pHandle, &hAttachment)); - eLookupError = (*pLookup)("lib3mf_model_querywriter", (void**)&(pWrapperTable->m_Model_QueryWriter)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_QueryWriter == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (hAttachment) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hAttachment))); + } else { + return nullptr; + } + } + + /** + * CObject::ClearThumbnailAttachment - Clears the attachment. The attachment instance is not removed from the package. + */ + void CObject::ClearThumbnailAttachment() + { + CheckError(m_pWrapper->m_WrapperTable.m_Object_ClearThumbnailAttachment(m_pHandle)); + } + + /** + * CObject::GetOutbox - Returns the outbox of a build item + * @return Outbox of this build item + */ + sBox CObject::GetOutbox() + { + sBox resultOutbox; + CheckError(m_pWrapper->m_WrapperTable.m_Object_GetOutbox(m_pHandle, &resultOutbox)); - eLookupError = (*pLookup)("lib3mf_model_queryreader", (void**)&(pWrapperTable->m_Model_QueryReader)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_QueryReader == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultOutbox; + } + + /** + * CObject::GetUUID - Retrieves an object's uuid string (see production extension specification) + * @param[out] bHasUUID - flag whether the build item has a UUID + * @return returns object uuid. + */ + std::string CObject::GetUUID(bool & bHasUUID) + { + Lib3MF_uint32 bytesNeededUUID = 0; + Lib3MF_uint32 bytesWrittenUUID = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Object_GetUUID(m_pHandle, &bHasUUID, 0, &bytesNeededUUID, nullptr)); + std::vector bufferUUID(bytesNeededUUID); + CheckError(m_pWrapper->m_WrapperTable.m_Object_GetUUID(m_pHandle, &bHasUUID, bytesNeededUUID, &bytesWrittenUUID, &bufferUUID[0])); - eLookupError = (*pLookup)("lib3mf_model_getresourcebyid", (void**)&(pWrapperTable->m_Model_GetResourceByID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetResourceByID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferUUID[0]); + } + + /** + * CObject::SetUUID - Sets a build object's uuid string (see production extension specification) + * @param[in] sUUID - new object uuid string. + */ + void CObject::SetUUID(const std::string & sUUID) + { + CheckError(m_pWrapper->m_WrapperTable.m_Object_SetUUID(m_pHandle, sUUID.c_str())); + } + + /** + * CObject::GetMetaDataGroup - Returns the metadatagroup of this object + * @return returns an Instance of the metadatagroup of this object + */ + PMetaDataGroup CObject::GetMetaDataGroup() + { + Lib3MFHandle hMetaDataGroup = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Object_GetMetaDataGroup(m_pHandle, &hMetaDataGroup)); - eLookupError = (*pLookup)("lib3mf_model_gettexture2dbyid", (void**)&(pWrapperTable->m_Model_GetTexture2DByID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetTexture2DByID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hMetaDataGroup) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaDataGroup))); + } + + /** + * CObject::SetSlicesMeshResolution - set the meshresolution of the mesh object + * @param[in] eMeshResolution - meshresolution of this object + */ + void CObject::SetSlicesMeshResolution(const eSlicesMeshResolution eMeshResolution) + { + CheckError(m_pWrapper->m_WrapperTable.m_Object_SetSlicesMeshResolution(m_pHandle, eMeshResolution)); + } + + /** + * CObject::GetSlicesMeshResolution - get the meshresolution of the mesh object + * @return meshresolution of this object + */ + eSlicesMeshResolution CObject::GetSlicesMeshResolution() + { + eSlicesMeshResolution resultMeshResolution = (eSlicesMeshResolution) 0; + CheckError(m_pWrapper->m_WrapperTable.m_Object_GetSlicesMeshResolution(m_pHandle, &resultMeshResolution)); - eLookupError = (*pLookup)("lib3mf_model_getpropertytypebyid", (void**)&(pWrapperTable->m_Model_GetPropertyTypeByID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetPropertyTypeByID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultMeshResolution; + } + + /** + * CObject::HasSlices - returns whether the Object has a slice stack. If Recursive is true, also checks whether any references object has a slice stack + * @param[in] bRecursive - check also all referenced objects? + * @return does the object have a slice stack? + */ + bool CObject::HasSlices(const bool bRecursive) + { + bool resultHasSlices = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Object_HasSlices(m_pHandle, bRecursive, &resultHasSlices)); - eLookupError = (*pLookup)("lib3mf_model_getbasematerialgroupbyid", (void**)&(pWrapperTable->m_Model_GetBaseMaterialGroupByID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetBaseMaterialGroupByID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultHasSlices; + } + + /** + * CObject::ClearSliceStack - unlinks the attached slicestack from this object. If no slice stack is attached, do noting. + */ + void CObject::ClearSliceStack() + { + CheckError(m_pWrapper->m_WrapperTable.m_Object_ClearSliceStack(m_pHandle)); + } + + /** + * CObject::GetSliceStack - get the Slicestack attached to the object + * @return returns the slicestack instance + */ + PSliceStack CObject::GetSliceStack() + { + Lib3MFHandle hSliceStackInstance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Object_GetSliceStack(m_pHandle, &hSliceStackInstance)); - eLookupError = (*pLookup)("lib3mf_model_gettexture2dgroupbyid", (void**)&(pWrapperTable->m_Model_GetTexture2DGroupByID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetTexture2DGroupByID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hSliceStackInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSliceStackInstance))); + } + + /** + * CObject::AssignSliceStack - assigns a slicestack to the object + * @param[in] pSliceStackInstance - the new slice stack of this Object + */ + void CObject::AssignSliceStack(classParam pSliceStackInstance) + { + Lib3MFHandle hSliceStackInstance = pSliceStackInstance.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_Object_AssignSliceStack(m_pHandle, hSliceStackInstance)); + } + + /** + * Method definitions for class CMeshObject + */ + + /** + * CMeshObject::GetVertexCount - Returns the vertex count of a mesh object. + * @return filled with the vertex count. + */ + Lib3MF_uint32 CMeshObject::GetVertexCount() + { + Lib3MF_uint32 resultVertexCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetVertexCount(m_pHandle, &resultVertexCount)); - eLookupError = (*pLookup)("lib3mf_model_getcompositematerialsbyid", (void**)&(pWrapperTable->m_Model_GetCompositeMaterialsByID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetCompositeMaterialsByID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultVertexCount; + } + + /** + * CMeshObject::GetTriangleCount - Returns the triangle count of a mesh object. + * @return filled with the triangle count. + */ + Lib3MF_uint32 CMeshObject::GetTriangleCount() + { + Lib3MF_uint32 resultVertexCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetTriangleCount(m_pHandle, &resultVertexCount)); - eLookupError = (*pLookup)("lib3mf_model_getmultipropertygroupbyid", (void**)&(pWrapperTable->m_Model_GetMultiPropertyGroupByID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetMultiPropertyGroupByID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultVertexCount; + } + + /** + * CMeshObject::GetVertex - Returns the vertex count of a mesh object. + * @param[in] nIndex - Index of the vertex (0 to vertexcount - 1) + * @return filled with the vertex coordinates. + */ + sPosition CMeshObject::GetVertex(const Lib3MF_uint32 nIndex) + { + sPosition resultCoordinates; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetVertex(m_pHandle, nIndex, &resultCoordinates)); - eLookupError = (*pLookup)("lib3mf_model_getmeshobjectbyid", (void**)&(pWrapperTable->m_Model_GetMeshObjectByID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetMeshObjectByID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCoordinates; + } + + /** + * CMeshObject::SetVertex - Sets the coordinates of a single vertex of a mesh object + * @param[in] nIndex - Index of the vertex (0 to vertexcount - 1) + * @param[in] Coordinates - contains the vertex coordinates. + */ + void CMeshObject::SetVertex(const Lib3MF_uint32 nIndex, const sPosition & Coordinates) + { + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_SetVertex(m_pHandle, nIndex, &Coordinates)); + } + + /** + * CMeshObject::AddVertex - Adds a single vertex to a mesh object + * @param[in] Coordinates - contains the vertex coordinates. + * @return Index of the new vertex + */ + Lib3MF_uint32 CMeshObject::AddVertex(const sPosition & Coordinates) + { + Lib3MF_uint32 resultNewIndex = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_AddVertex(m_pHandle, &Coordinates, &resultNewIndex)); - eLookupError = (*pLookup)("lib3mf_model_getcomponentsobjectbyid", (void**)&(pWrapperTable->m_Model_GetComponentsObjectByID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetComponentsObjectByID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultNewIndex; + } + + /** + * CMeshObject::GetVertices - Obtains all vertex positions of a mesh object + * @param[out] VerticesBuffer - contains the vertex coordinates. + */ + void CMeshObject::GetVertices(std::vector & VerticesBuffer) + { + Lib3MF_uint64 elementsNeededVertices = 0; + Lib3MF_uint64 elementsWrittenVertices = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetVertices(m_pHandle, 0, &elementsNeededVertices, nullptr)); + VerticesBuffer.resize((size_t) elementsNeededVertices); + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetVertices(m_pHandle, elementsNeededVertices, &elementsWrittenVertices, VerticesBuffer.data())); + } + + /** + * CMeshObject::GetTriangle - Returns indices of a single triangle of a mesh object. + * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) + * @return filled with the triangle indices. + */ + sTriangle CMeshObject::GetTriangle(const Lib3MF_uint32 nIndex) + { + sTriangle resultIndices; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetTriangle(m_pHandle, nIndex, &resultIndices)); - eLookupError = (*pLookup)("lib3mf_model_getcolorgroupbyid", (void**)&(pWrapperTable->m_Model_GetColorGroupByID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetColorGroupByID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultIndices; + } + + /** + * CMeshObject::SetTriangle - Sets the indices of a single triangle of a mesh object. + * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) + * @param[in] Indices - contains the triangle indices. + */ + void CMeshObject::SetTriangle(const Lib3MF_uint32 nIndex, const sTriangle & Indices) + { + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_SetTriangle(m_pHandle, nIndex, &Indices)); + } + + /** + * CMeshObject::AddTriangle - Adds a single triangle to a mesh object + * @param[in] Indices - contains the triangle indices. + * @return Index of the new triangle + */ + Lib3MF_uint32 CMeshObject::AddTriangle(const sTriangle & Indices) + { + Lib3MF_uint32 resultNewIndex = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_AddTriangle(m_pHandle, &Indices, &resultNewIndex)); - eLookupError = (*pLookup)("lib3mf_model_getslicestackbyid", (void**)&(pWrapperTable->m_Model_GetSliceStackByID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetSliceStackByID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultNewIndex; + } + + /** + * CMeshObject::GetTriangleIndices - Get all triangles of a mesh object + * @param[out] IndicesBuffer - contains the triangle indices. + */ + void CMeshObject::GetTriangleIndices(std::vector & IndicesBuffer) + { + Lib3MF_uint64 elementsNeededIndices = 0; + Lib3MF_uint64 elementsWrittenIndices = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetTriangleIndices(m_pHandle, 0, &elementsNeededIndices, nullptr)); + IndicesBuffer.resize((size_t) elementsNeededIndices); + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetTriangleIndices(m_pHandle, elementsNeededIndices, &elementsWrittenIndices, IndicesBuffer.data())); + } + + /** + * CMeshObject::SetObjectLevelProperty - Sets the property at the object-level of the mesh object. + * @param[in] nUniqueResourceID - the object-level Property UniqueResourceID. + * @param[in] nPropertyID - the object-level PropertyID. + */ + void CMeshObject::SetObjectLevelProperty(const Lib3MF_uint32 nUniqueResourceID, const Lib3MF_uint32 nPropertyID) + { + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_SetObjectLevelProperty(m_pHandle, nUniqueResourceID, nPropertyID)); + } + + /** + * CMeshObject::GetObjectLevelProperty - Gets the property at the object-level of the mesh object. + * @param[out] nUniqueResourceID - the object-level Property UniqueResourceID. + * @param[out] nPropertyID - the object-level PropertyID. + * @return Has an object-level property been specified? + */ + bool CMeshObject::GetObjectLevelProperty(Lib3MF_uint32 & nUniqueResourceID, Lib3MF_uint32 & nPropertyID) + { + bool resultHasObjectLevelProperty = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetObjectLevelProperty(m_pHandle, &nUniqueResourceID, &nPropertyID, &resultHasObjectLevelProperty)); - eLookupError = (*pLookup)("lib3mf_model_getbuilduuid", (void**)&(pWrapperTable->m_Model_GetBuildUUID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetBuildUUID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultHasObjectLevelProperty; + } + + /** + * CMeshObject::SetTriangleProperties - Sets the properties of a single triangle of a mesh object. + * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) + * @param[in] Properties - contains the triangle properties. + */ + void CMeshObject::SetTriangleProperties(const Lib3MF_uint32 nIndex, const sTriangleProperties & Properties) + { + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_SetTriangleProperties(m_pHandle, nIndex, &Properties)); + } + + /** + * CMeshObject::GetTriangleProperties - Gets the properties of a single triangle of a mesh object. + * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) + * @param[out] Property - returns the triangle properties. + */ + void CMeshObject::GetTriangleProperties(const Lib3MF_uint32 nIndex, sTriangleProperties & Property) + { + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetTriangleProperties(m_pHandle, nIndex, &Property)); + } + + /** + * CMeshObject::SetAllTriangleProperties - Sets the properties of all triangles of a mesh object. Sets the object level property to the first entry of the passed triangle properties, if not yet specified. + * @param[in] PropertiesArrayBuffer - contains the triangle properties array. Must have trianglecount elements. + */ + void CMeshObject::SetAllTriangleProperties(const CInputVector & PropertiesArrayBuffer) + { + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_SetAllTriangleProperties(m_pHandle, (Lib3MF_uint64)PropertiesArrayBuffer.size(), PropertiesArrayBuffer.data())); + } + + /** + * CMeshObject::GetAllTriangleProperties - Gets the properties of all triangles of a mesh object. + * @param[out] PropertiesArrayBuffer - returns the triangle properties array. Must have trianglecount elements. + */ + void CMeshObject::GetAllTriangleProperties(std::vector & PropertiesArrayBuffer) + { + Lib3MF_uint64 elementsNeededPropertiesArray = 0; + Lib3MF_uint64 elementsWrittenPropertiesArray = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetAllTriangleProperties(m_pHandle, 0, &elementsNeededPropertiesArray, nullptr)); + PropertiesArrayBuffer.resize((size_t) elementsNeededPropertiesArray); + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetAllTriangleProperties(m_pHandle, elementsNeededPropertiesArray, &elementsWrittenPropertiesArray, PropertiesArrayBuffer.data())); + } + + /** + * CMeshObject::ClearAllProperties - Clears all properties of this mesh object (triangle and object-level). + */ + void CMeshObject::ClearAllProperties() + { + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_ClearAllProperties(m_pHandle)); + } + + /** + * CMeshObject::SetGeometry - Set all triangles of a mesh object + * @param[in] VerticesBuffer - contains the positions. + * @param[in] IndicesBuffer - contains the triangle indices. + */ + void CMeshObject::SetGeometry(const CInputVector & VerticesBuffer, const CInputVector & IndicesBuffer) + { + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_SetGeometry(m_pHandle, (Lib3MF_uint64)VerticesBuffer.size(), VerticesBuffer.data(), (Lib3MF_uint64)IndicesBuffer.size(), IndicesBuffer.data())); + } + + /** + * CMeshObject::IsManifoldAndOriented - Retrieves, if an object describes a topologically oriented and manifold mesh, according to the core spec. + * @return returns, if the object is oriented and manifold. + */ + bool CMeshObject::IsManifoldAndOriented() + { + bool resultIsManifoldAndOriented = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_IsManifoldAndOriented(m_pHandle, &resultIsManifoldAndOriented)); - eLookupError = (*pLookup)("lib3mf_model_setbuilduuid", (void**)&(pWrapperTable->m_Model_SetBuildUUID)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_SetBuildUUID == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultIsManifoldAndOriented; + } + + /** + * CMeshObject::BeamLattice - Retrieves the BeamLattice within this MeshObject. + * @return the BeamLattice within this MeshObject + */ + PBeamLattice CMeshObject::BeamLattice() + { + Lib3MFHandle hTheBeamLattice = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_BeamLattice(m_pHandle, &hTheBeamLattice)); - eLookupError = (*pLookup)("lib3mf_model_getbuilditems", (void**)&(pWrapperTable->m_Model_GetBuildItems)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetBuildItems == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hTheBeamLattice) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheBeamLattice))); + } + + /** + * CMeshObject::GetVolumeData - Retrieves the VolumeData of this MeshObject. + * @return the VolumeData of this MeshObject + */ + PVolumeData CMeshObject::GetVolumeData() + { + Lib3MFHandle hTheVolumeData = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetVolumeData(m_pHandle, &hTheVolumeData)); - eLookupError = (*pLookup)("lib3mf_model_getoutbox", (void**)&(pWrapperTable->m_Model_GetOutbox)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetOutbox == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (hTheVolumeData) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheVolumeData))); + } else { + return nullptr; + } + } + + /** + * CMeshObject::SetVolumeData - Sets the VolumeData of this MeshObject. + * @param[in] pTheVolumeData - the VolumeData of this MeshObject + */ + void CMeshObject::SetVolumeData(classParam pTheVolumeData) + { + Lib3MFHandle hTheVolumeData = pTheVolumeData.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_SetVolumeData(m_pHandle, hTheVolumeData)); + } + + /** + * Method definitions for class CLevelSet + */ + + /** + * CLevelSet::GetFunction - Returns the function that is used as boundary shape. + * @return the function to use as boundary shape + */ + PFunction CLevelSet::GetFunction() + { + Lib3MFHandle hTheFunction = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_GetFunction(m_pHandle, &hTheFunction)); - eLookupError = (*pLookup)("lib3mf_model_getresources", (void**)&(pWrapperTable->m_Model_GetResources)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetResources == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (hTheFunction) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheFunction))); + } else { + return nullptr; + } + } + + /** + * CLevelSet::SetFunction - Sets the function to use as boundary shape. + * @param[in] pTheFunction - the function to use as boundary shape + */ + void CLevelSet::SetFunction(classParam pTheFunction) + { + Lib3MFHandle hTheFunction = pTheFunction.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_SetFunction(m_pHandle, hTheFunction)); + } + + /** + * CLevelSet::GetTransform - Returns the transformation matrix into the coordinate system of the referenced Function. + * @return the transformation matrix + */ + sTransform CLevelSet::GetTransform() + { + sTransform resultTransform; + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_GetTransform(m_pHandle, &resultTransform)); - eLookupError = (*pLookup)("lib3mf_model_getobjects", (void**)&(pWrapperTable->m_Model_GetObjects)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetObjects == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultTransform; + } + + /** + * CLevelSet::SetTransform - Sets the transformation matrix into the coordinate system of the referenced Function. + * @param[in] Transform - new transformation matrix + */ + void CLevelSet::SetTransform(const sTransform & Transform) + { + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_SetTransform(m_pHandle, &Transform)); + } + + /** + * CLevelSet::GetChannelName - Returns the name of the function output channel to use. + * @return the name of the function output channel + */ + std::string CLevelSet::GetChannelName() + { + Lib3MF_uint32 bytesNeededChannelName = 0; + Lib3MF_uint32 bytesWrittenChannelName = 0; + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_GetChannelName(m_pHandle, 0, &bytesNeededChannelName, nullptr)); + std::vector bufferChannelName(bytesNeededChannelName); + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_GetChannelName(m_pHandle, bytesNeededChannelName, &bytesWrittenChannelName, &bufferChannelName[0])); - eLookupError = (*pLookup)("lib3mf_model_getmeshobjects", (void**)&(pWrapperTable->m_Model_GetMeshObjects)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetMeshObjects == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferChannelName[0]); + } + + /** + * CLevelSet::SetChannelName - Sets the name of the function output channel to use. + * @param[in] sChannelName - new name of the function output channel + */ + void CLevelSet::SetChannelName(const std::string & sChannelName) + { + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_SetChannelName(m_pHandle, sChannelName.c_str())); + } + + /** + * CLevelSet::SetMinFeatureSize - Sets the minimal feature size as a hint for the function evaluator + * @param[in] dMinFeatureSize - minimal feature size + */ + void CLevelSet::SetMinFeatureSize(const Lib3MF_double dMinFeatureSize) + { + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_SetMinFeatureSize(m_pHandle, dMinFeatureSize)); + } + + /** + * CLevelSet::GetMinFeatureSize - Returns the minimal feature size as a hint for the function evaluator + * @return minimal feature size + */ + Lib3MF_double CLevelSet::GetMinFeatureSize() + { + Lib3MF_double resultMinFeatureSize = 0; + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_GetMinFeatureSize(m_pHandle, &resultMinFeatureSize)); - eLookupError = (*pLookup)("lib3mf_model_getcomponentsobjects", (void**)&(pWrapperTable->m_Model_GetComponentsObjects)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetComponentsObjects == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultMinFeatureSize; + } + + /** + * CLevelSet::SetFallBackValue - Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @param[in] dFallBackValue - fallback value + */ + void CLevelSet::SetFallBackValue(const Lib3MF_double dFallBackValue) + { + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_SetFallBackValue(m_pHandle, dFallBackValue)); + } + + /** + * CLevelSet::GetFallBackValue - Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @return fallback value + */ + Lib3MF_double CLevelSet::GetFallBackValue() + { + Lib3MF_double resultFallBackValue = 0; + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_GetFallBackValue(m_pHandle, &resultFallBackValue)); - eLookupError = (*pLookup)("lib3mf_model_gettexture2ds", (void**)&(pWrapperTable->m_Model_GetTexture2Ds)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetTexture2Ds == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultFallBackValue; + } + + /** + * CLevelSet::SetMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + * @param[in] bMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + */ + void CLevelSet::SetMeshBBoxOnly(const bool bMeshBBoxOnly) + { + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_SetMeshBBoxOnly(m_pHandle, bMeshBBoxOnly)); + } + + /** + * CLevelSet::GetMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + * @return If set only the bounding box of the mesh is intersected with the boundary + */ + bool CLevelSet::GetMeshBBoxOnly() + { + bool resultMeshBBoxOnly = 0; + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_GetMeshBBoxOnly(m_pHandle, &resultMeshBBoxOnly)); - eLookupError = (*pLookup)("lib3mf_model_getbasematerialgroups", (void**)&(pWrapperTable->m_Model_GetBaseMaterialGroups)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetBaseMaterialGroups == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultMeshBBoxOnly; + } + + /** + * CLevelSet::SetMesh - Sets the mesh to use as evaluation domain + * @param[in] pTheMesh - The mesh + */ + void CLevelSet::SetMesh(classParam pTheMesh) + { + Lib3MFHandle hTheMesh = pTheMesh.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_SetMesh(m_pHandle, hTheMesh)); + } + + /** + * CLevelSet::GetMesh - Returns the mesh that is used as evaluation domain + * @return The mesh + */ + PMeshObject CLevelSet::GetMesh() + { + Lib3MFHandle hTheMesh = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_GetMesh(m_pHandle, &hTheMesh)); - eLookupError = (*pLookup)("lib3mf_model_getcolorgroups", (void**)&(pWrapperTable->m_Model_GetColorGroups)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetColorGroups == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (hTheMesh) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheMesh))); + } else { + return nullptr; + } + } + + /** + * CLevelSet::GetVolumeData - Retrieves the VolumeData this Object. + * @return the VolumeData of this Object + */ + PVolumeData CLevelSet::GetVolumeData() + { + Lib3MFHandle hTheVolumeData = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_GetVolumeData(m_pHandle, &hTheVolumeData)); - eLookupError = (*pLookup)("lib3mf_model_gettexture2dgroups", (void**)&(pWrapperTable->m_Model_GetTexture2DGroups)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetTexture2DGroups == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (hTheVolumeData) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheVolumeData))); + } else { + return nullptr; + } + } + + /** + * CLevelSet::SetVolumeData - Sets the VolumeData of this LevelSet. + * @param[in] pTheVolumeData - the VolumeData of this MeshObject + */ + void CLevelSet::SetVolumeData(classParam pTheVolumeData) + { + Lib3MFHandle hTheVolumeData = pTheVolumeData.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_LevelSet_SetVolumeData(m_pHandle, hTheVolumeData)); + } + + /** + * Method definitions for class CBeamLattice + */ + + /** + * CBeamLattice::GetMinLength - Returns the minimal length of beams for the beamlattice. + * @return minimal length of beams for the beamlattice + */ + Lib3MF_double CBeamLattice::GetMinLength() + { + Lib3MF_double resultMinLength = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetMinLength(m_pHandle, &resultMinLength)); - eLookupError = (*pLookup)("lib3mf_model_getcompositematerials", (void**)&(pWrapperTable->m_Model_GetCompositeMaterials)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetCompositeMaterials == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultMinLength; + } + + /** + * CBeamLattice::SetMinLength - Sets the minimal length of beams for the beamlattice. + * @param[in] dMinLength - minimal length of beams for the beamlattice + */ + void CBeamLattice::SetMinLength(const Lib3MF_double dMinLength) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetMinLength(m_pHandle, dMinLength)); + } + + /** + * CBeamLattice::GetClipping - Returns the clipping mode and the clipping-mesh for the beamlattice of this mesh. + * @param[out] eClipMode - contains the clip mode of this mesh + * @param[out] nUniqueResourceID - filled with the UniqueResourceID of the clipping mesh-object or an undefined value if pClipMode is MODELBEAMLATTICECLIPMODE_NONE + */ + void CBeamLattice::GetClipping(eBeamLatticeClipMode & eClipMode, Lib3MF_uint32 & nUniqueResourceID) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetClipping(m_pHandle, &eClipMode, &nUniqueResourceID)); + } + + /** + * CBeamLattice::SetClipping - Sets the clipping mode and the clipping-mesh for the beamlattice of this mesh. + * @param[in] eClipMode - contains the clip mode of this mesh + * @param[in] nUniqueResourceID - the UniqueResourceID of the clipping mesh-object. This mesh-object has to be defined before setting the Clipping. + */ + void CBeamLattice::SetClipping(const eBeamLatticeClipMode eClipMode, const Lib3MF_uint32 nUniqueResourceID) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetClipping(m_pHandle, eClipMode, nUniqueResourceID)); + } + + /** + * CBeamLattice::GetRepresentation - Returns the representation-mesh for the beamlattice of this mesh. + * @return flag whether the beamlattice has a representation mesh. + * @param[out] nUniqueResourceID - filled with the UniqueResourceID of the clipping mesh-object. + */ + bool CBeamLattice::GetRepresentation(Lib3MF_uint32 & nUniqueResourceID) + { + bool resultHasRepresentation = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetRepresentation(m_pHandle, &resultHasRepresentation, &nUniqueResourceID)); - eLookupError = (*pLookup)("lib3mf_model_getmultipropertygroups", (void**)&(pWrapperTable->m_Model_GetMultiPropertyGroups)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetMultiPropertyGroups == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultHasRepresentation; + } + + /** + * CBeamLattice::SetRepresentation - Sets the representation-mesh for the beamlattice of this mesh. + * @param[in] nUniqueResourceID - the UniqueResourceID of the representation mesh-object. This mesh-object has to be defined before setting the representation. + */ + void CBeamLattice::SetRepresentation(const Lib3MF_uint32 nUniqueResourceID) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetRepresentation(m_pHandle, nUniqueResourceID)); + } + + /** + * CBeamLattice::GetBallOptions - Returns the ball mode and the default ball radius for the beamlattice of this mesh. + * @param[out] eBallMode - contains the ball mode of this mesh + * @param[out] dBallRadius - default ball radius of balls for the beamlattice + */ + void CBeamLattice::GetBallOptions(eBeamLatticeBallMode & eBallMode, Lib3MF_double & dBallRadius) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBallOptions(m_pHandle, &eBallMode, &dBallRadius)); + } + + /** + * CBeamLattice::SetBallOptions - Sets the ball mode and thedefault ball radius for the beamlattice. + * @param[in] eBallMode - contains the ball mode of this mesh + * @param[in] dBallRadius - default ball radius of balls for the beamlattice + */ + void CBeamLattice::SetBallOptions(const eBeamLatticeBallMode eBallMode, const Lib3MF_double dBallRadius) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetBallOptions(m_pHandle, eBallMode, dBallRadius)); + } + + /** + * CBeamLattice::GetBeamCount - Returns the beam count of a mesh object. + * @return filled with the beam count. + */ + Lib3MF_uint32 CBeamLattice::GetBeamCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBeamCount(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_model_getslicestacks", (void**)&(pWrapperTable->m_Model_GetSliceStacks)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetSliceStacks == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * CBeamLattice::GetBeam - Returns indices, radii and capmodes of a single beam of a mesh object. + * @param[in] nIndex - Index of the beam (0 to beamcount - 1). + * @return filled with the beam indices, radii and capmodes. + */ + sBeam CBeamLattice::GetBeam(const Lib3MF_uint32 nIndex) + { + sBeam resultBeamInfo; + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBeam(m_pHandle, nIndex, &resultBeamInfo)); - eLookupError = (*pLookup)("lib3mf_model_mergetomodel", (void**)&(pWrapperTable->m_Model_MergeToModel)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_MergeToModel == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultBeamInfo; + } + + /** + * CBeamLattice::AddBeam - Adds a single beam to a mesh object. + * @param[in] BeamInfo - contains the node indices, radii and capmodes. + * @return filled with the new Index of the beam. + */ + Lib3MF_uint32 CBeamLattice::AddBeam(const sBeam & BeamInfo) + { + Lib3MF_uint32 resultIndex = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_AddBeam(m_pHandle, &BeamInfo, &resultIndex)); - eLookupError = (*pLookup)("lib3mf_model_addmeshobject", (void**)&(pWrapperTable->m_Model_AddMeshObject)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddMeshObject == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultIndex; + } + + /** + * CBeamLattice::SetBeam - Sets the indices, radii and capmodes of a single beam of a mesh object. + * @param[in] nIndex - Index of the beam (0 to beamcount - 1). + * @param[in] BeamInfo - filled with the beam indices, radii and capmodes. + */ + void CBeamLattice::SetBeam(const Lib3MF_uint32 nIndex, const sBeam & BeamInfo) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetBeam(m_pHandle, nIndex, &BeamInfo)); + } + + /** + * CBeamLattice::SetBeams - Sets all beam indices, radii and capmodes of a mesh object. + * @param[in] BeamInfoBuffer - contains information of a number of beams + */ + void CBeamLattice::SetBeams(const CInputVector & BeamInfoBuffer) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetBeams(m_pHandle, (Lib3MF_uint64)BeamInfoBuffer.size(), BeamInfoBuffer.data())); + } + + /** + * CBeamLattice::GetBeams - obtains all beam indices, radii and capmodes of a mesh object. + * @param[out] BeamInfoBuffer - contains information of all beams + */ + void CBeamLattice::GetBeams(std::vector & BeamInfoBuffer) + { + Lib3MF_uint64 elementsNeededBeamInfo = 0; + Lib3MF_uint64 elementsWrittenBeamInfo = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBeams(m_pHandle, 0, &elementsNeededBeamInfo, nullptr)); + BeamInfoBuffer.resize((size_t) elementsNeededBeamInfo); + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBeams(m_pHandle, elementsNeededBeamInfo, &elementsWrittenBeamInfo, BeamInfoBuffer.data())); + } + + /** + * CBeamLattice::GetBallCount - Returns the ball count of a mesh object. + * @return filled with the ball count. + */ + Lib3MF_uint32 CBeamLattice::GetBallCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBallCount(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_model_addcomponentsobject", (void**)&(pWrapperTable->m_Model_AddComponentsObject)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddComponentsObject == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * CBeamLattice::GetBall - Returns index and radius of a single ball of a mesh object. + * @param[in] nIndex - Index of the ball (0 to ballcount - 1). + * @return filled with the ball node index and radius. + */ + sBall CBeamLattice::GetBall(const Lib3MF_uint32 nIndex) + { + sBall resultBallInfo; + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBall(m_pHandle, nIndex, &resultBallInfo)); - eLookupError = (*pLookup)("lib3mf_model_addslicestack", (void**)&(pWrapperTable->m_Model_AddSliceStack)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddSliceStack == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultBallInfo; + } + + /** + * CBeamLattice::AddBall - Adds a single ball to a mesh object. + * @param[in] BallInfo - contains the node index and radius. + * @return filled with the new Index of the ball. + */ + Lib3MF_uint32 CBeamLattice::AddBall(const sBall & BallInfo) + { + Lib3MF_uint32 resultIndex = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_AddBall(m_pHandle, &BallInfo, &resultIndex)); - eLookupError = (*pLookup)("lib3mf_model_addtexture2dfromattachment", (void**)&(pWrapperTable->m_Model_AddTexture2DFromAttachment)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddTexture2DFromAttachment == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultIndex; + } + + /** + * CBeamLattice::SetBall - Sets the index and radius of a single ball of a mesh object. + * @param[in] nIndex - Index of the ball (0 to ballcount - 1). + * @param[in] BallInfo - filled with the ball node index and radius. + */ + void CBeamLattice::SetBall(const Lib3MF_uint32 nIndex, const sBall & BallInfo) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetBall(m_pHandle, nIndex, &BallInfo)); + } + + /** + * CBeamLattice::SetBalls - Sets all ball indices and radii of a mesh object. + * @param[in] BallInfoBuffer - contains information of a number of balls + */ + void CBeamLattice::SetBalls(const CInputVector & BallInfoBuffer) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetBalls(m_pHandle, (Lib3MF_uint64)BallInfoBuffer.size(), BallInfoBuffer.data())); + } + + /** + * CBeamLattice::GetBalls - obtains all ball indices and radii of a mesh object. + * @param[out] BallInfoBuffer - contains information of all balls + */ + void CBeamLattice::GetBalls(std::vector & BallInfoBuffer) + { + Lib3MF_uint64 elementsNeededBallInfo = 0; + Lib3MF_uint64 elementsWrittenBallInfo = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBalls(m_pHandle, 0, &elementsNeededBallInfo, nullptr)); + BallInfoBuffer.resize((size_t) elementsNeededBallInfo); + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBalls(m_pHandle, elementsNeededBallInfo, &elementsWrittenBallInfo, BallInfoBuffer.data())); + } + + /** + * CBeamLattice::GetBeamSetCount - Returns the number of beamsets of a mesh object. + * @return filled with the beamset count. + */ + Lib3MF_uint32 CBeamLattice::GetBeamSetCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBeamSetCount(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_model_addbasematerialgroup", (void**)&(pWrapperTable->m_Model_AddBaseMaterialGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddBaseMaterialGroup == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * CBeamLattice::AddBeamSet - Adds an empty beamset to a mesh object + * @return the new beamset + */ + PBeamSet CBeamLattice::AddBeamSet() + { + Lib3MFHandle hBeamSet = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_AddBeamSet(m_pHandle, &hBeamSet)); + + if (!hBeamSet) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBeamSet))); + } + + /** + * CBeamLattice::GetBeamSet - Returns a beamset of a mesh object + * @param[in] nIndex - index of the requested beamset (0 ... beamsetcount-1). + * @return the requested beamset + */ + PBeamSet CBeamLattice::GetBeamSet(const Lib3MF_uint32 nIndex) + { + Lib3MFHandle hBeamSet = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBeamSet(m_pHandle, nIndex, &hBeamSet)); - eLookupError = (*pLookup)("lib3mf_model_addcolorgroup", (void**)&(pWrapperTable->m_Model_AddColorGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddColorGroup == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hBeamSet) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBeamSet))); + } + + /** + * Method definitions for class CFunctionReference + */ + + /** + * CFunctionReference::GetFunctionResourceID - Returns the UniqueResourceID of the Function. Only functions with a 'pos'-input are allowed. + * @return returns the UniqueResourceID. + */ + Lib3MF_uint32 CFunctionReference::GetFunctionResourceID() + { + Lib3MF_uint32 resultUniqueResourceID = 0; + CheckError(m_pWrapper->m_WrapperTable.m_FunctionReference_GetFunctionResourceID(m_pHandle, &resultUniqueResourceID)); - eLookupError = (*pLookup)("lib3mf_model_addtexture2dgroup", (void**)&(pWrapperTable->m_Model_AddTexture2DGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddTexture2DGroup == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultUniqueResourceID; + } + + /** + * CFunctionReference::SetFunctionResourceID - Sets the UniqueResourceID to refer to. + * @param[in] nUniqueResourceID - UniqueResourceID of the function + */ + void CFunctionReference::SetFunctionResourceID(const Lib3MF_uint32 nUniqueResourceID) + { + CheckError(m_pWrapper->m_WrapperTable.m_FunctionReference_SetFunctionResourceID(m_pHandle, nUniqueResourceID)); + } + + /** + * CFunctionReference::GetTransform - Returns the transformation matrix into the coordinate system of the referenced Function. + * @return the transformation matrix + */ + sTransform CFunctionReference::GetTransform() + { + sTransform resultTransform; + CheckError(m_pWrapper->m_WrapperTable.m_FunctionReference_GetTransform(m_pHandle, &resultTransform)); - eLookupError = (*pLookup)("lib3mf_model_addcompositematerials", (void**)&(pWrapperTable->m_Model_AddCompositeMaterials)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddCompositeMaterials == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultTransform; + } + + /** + * CFunctionReference::SetTransform - Sets the transformation matrix into the coordinate system of the referenced Function. + * @param[in] Transform - new transformation matrix + */ + void CFunctionReference::SetTransform(const sTransform & Transform) + { + CheckError(m_pWrapper->m_WrapperTable.m_FunctionReference_SetTransform(m_pHandle, &Transform)); + } + + /** + * CFunctionReference::GetChannelName - Returns the name of the function output channel to use. + * @return the name of the function output channel + */ + std::string CFunctionReference::GetChannelName() + { + Lib3MF_uint32 bytesNeededChannelName = 0; + Lib3MF_uint32 bytesWrittenChannelName = 0; + CheckError(m_pWrapper->m_WrapperTable.m_FunctionReference_GetChannelName(m_pHandle, 0, &bytesNeededChannelName, nullptr)); + std::vector bufferChannelName(bytesNeededChannelName); + CheckError(m_pWrapper->m_WrapperTable.m_FunctionReference_GetChannelName(m_pHandle, bytesNeededChannelName, &bytesWrittenChannelName, &bufferChannelName[0])); - eLookupError = (*pLookup)("lib3mf_model_addmultipropertygroup", (void**)&(pWrapperTable->m_Model_AddMultiPropertyGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddMultiPropertyGroup == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferChannelName[0]); + } + + /** + * CFunctionReference::SetChannelName - Sets the name of the function output channel to use. + * @param[in] sChannelName - new name of the function output channel + */ + void CFunctionReference::SetChannelName(const std::string & sChannelName) + { + CheckError(m_pWrapper->m_WrapperTable.m_FunctionReference_SetChannelName(m_pHandle, sChannelName.c_str())); + } + + /** + * CFunctionReference::SetMinFeatureSize - Sets the minimal feature size as a hint for the function evaluator + * @param[in] dMinFeatureSize - minimal feature size + */ + void CFunctionReference::SetMinFeatureSize(const Lib3MF_double dMinFeatureSize) + { + CheckError(m_pWrapper->m_WrapperTable.m_FunctionReference_SetMinFeatureSize(m_pHandle, dMinFeatureSize)); + } + + /** + * CFunctionReference::GetMinFeatureSize - Returns the minimal feature size as a hint for the function evaluator + * @return minimal feature size + */ + Lib3MF_double CFunctionReference::GetMinFeatureSize() + { + Lib3MF_double resultMinFeatureSize = 0; + CheckError(m_pWrapper->m_WrapperTable.m_FunctionReference_GetMinFeatureSize(m_pHandle, &resultMinFeatureSize)); - eLookupError = (*pLookup)("lib3mf_model_addbuilditem", (void**)&(pWrapperTable->m_Model_AddBuildItem)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddBuildItem == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultMinFeatureSize; + } + + /** + * CFunctionReference::SetFallBackValue - Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @param[in] dFallBackValue - fallback value + */ + void CFunctionReference::SetFallBackValue(const Lib3MF_double dFallBackValue) + { + CheckError(m_pWrapper->m_WrapperTable.m_FunctionReference_SetFallBackValue(m_pHandle, dFallBackValue)); + } + + /** + * CFunctionReference::GetFallBackValue - Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @return fallback value + */ + Lib3MF_double CFunctionReference::GetFallBackValue() + { + Lib3MF_double resultFallBackValue = 0; + CheckError(m_pWrapper->m_WrapperTable.m_FunctionReference_GetFallBackValue(m_pHandle, &resultFallBackValue)); - eLookupError = (*pLookup)("lib3mf_model_removebuilditem", (void**)&(pWrapperTable->m_Model_RemoveBuildItem)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_RemoveBuildItem == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultFallBackValue; + } + + /** + * Method definitions for class CVolumeDataColor + */ + + /** + * Method definitions for class CMaterialMapping + */ + + /** + * Method definitions for class CVolumeDataComposite + */ + + /** + * CVolumeDataComposite::GetBaseMaterialGroup - Returns the BaseMaterialGroup used within this volume data item + * @return The BaseMaterialGroup instance of this VolumeDataComposite element + */ + PBaseMaterialGroup CVolumeDataComposite::GetBaseMaterialGroup() + { + Lib3MFHandle hBaseMaterialGroupInstance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_VolumeDataComposite_GetBaseMaterialGroup(m_pHandle, &hBaseMaterialGroupInstance)); - eLookupError = (*pLookup)("lib3mf_model_getmetadatagroup", (void**)&(pWrapperTable->m_Model_GetMetaDataGroup)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetMetaDataGroup == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hBaseMaterialGroupInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBaseMaterialGroupInstance))); + } + + /** + * CVolumeDataComposite::SetBaseMaterialGroup - Sets the BaseMaterialGroup to use within this volume data item. + * @param[in] pBaseMaterialGroupInstance - The new BaseMaterialGroup instance of this VolumeDataComposite element + */ + void CVolumeDataComposite::SetBaseMaterialGroup(classParam pBaseMaterialGroupInstance) + { + Lib3MFHandle hBaseMaterialGroupInstance = pBaseMaterialGroupInstance.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_VolumeDataComposite_SetBaseMaterialGroup(m_pHandle, hBaseMaterialGroupInstance)); + } + + /** + * CVolumeDataComposite::GetMaterialMappingCount - Returns the number of material mappings of this VolumeDataComposite element + * @return the number of material mappings. + */ + Lib3MF_uint32 CVolumeDataComposite::GetMaterialMappingCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_VolumeDataComposite_GetMaterialMappingCount(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_model_addattachment", (void**)&(pWrapperTable->m_Model_AddAttachment)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddAttachment == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * CVolumeDataComposite::GetMaterialMapping - Returns MaterialMappting with given index + * @param[in] nIndex - Index of the MaterialMapping in question. + * @return MaterialMapping used in this element + */ + PMaterialMapping CVolumeDataComposite::GetMaterialMapping(const Lib3MF_uint32 nIndex) + { + Lib3MFHandle hTheMaterialMapping = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_VolumeDataComposite_GetMaterialMapping(m_pHandle, nIndex, &hTheMaterialMapping)); - eLookupError = (*pLookup)("lib3mf_model_removeattachment", (void**)&(pWrapperTable->m_Model_RemoveAttachment)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_RemoveAttachment == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hTheMaterialMapping) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheMaterialMapping))); + } + + /** + * CVolumeDataComposite::AddMaterialMapping - Adds a the MaterialMapping + * @param[in] Transform - new transformation matrix + * @return The new MaterialMapping + */ + PMaterialMapping CVolumeDataComposite::AddMaterialMapping(const sTransform & Transform) + { + Lib3MFHandle hTheMaterialMapping = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_VolumeDataComposite_AddMaterialMapping(m_pHandle, &Transform, &hTheMaterialMapping)); - eLookupError = (*pLookup)("lib3mf_model_getattachment", (void**)&(pWrapperTable->m_Model_GetAttachment)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetAttachment == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hTheMaterialMapping) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheMaterialMapping))); + } + + /** + * CVolumeDataComposite::RemoveMaterialMapping - Removes the MaterialMapping with given index + * @param[in] nIndex - The index of the MaterialMapping to be removed. + */ + void CVolumeDataComposite::RemoveMaterialMapping(const Lib3MF_uint32 nIndex) + { + CheckError(m_pWrapper->m_WrapperTable.m_VolumeDataComposite_RemoveMaterialMapping(m_pHandle, nIndex)); + } + + /** + * Method definitions for class CVolumeDataProperty + */ + + /** + * CVolumeDataProperty::GetName - Gets the qualified name of this property. + * @return The qualified name of this property. + */ + std::string CVolumeDataProperty::GetName() + { + Lib3MF_uint32 bytesNeededPropertyName = 0; + Lib3MF_uint32 bytesWrittenPropertyName = 0; + CheckError(m_pWrapper->m_WrapperTable.m_VolumeDataProperty_GetName(m_pHandle, 0, &bytesNeededPropertyName, nullptr)); + std::vector bufferPropertyName(bytesNeededPropertyName); + CheckError(m_pWrapper->m_WrapperTable.m_VolumeDataProperty_GetName(m_pHandle, bytesNeededPropertyName, &bytesWrittenPropertyName, &bufferPropertyName[0])); - eLookupError = (*pLookup)("lib3mf_model_findattachment", (void**)&(pWrapperTable->m_Model_FindAttachment)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_FindAttachment == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferPropertyName[0]); + } + + /** + * CVolumeDataProperty::SetIsRequired - Sets whether this property is required to process this 3MF document instance. + * @param[in] bIsRequired - New value for whether this property is required to process this 3MF document instance. + */ + void CVolumeDataProperty::SetIsRequired(const bool bIsRequired) + { + CheckError(m_pWrapper->m_WrapperTable.m_VolumeDataProperty_SetIsRequired(m_pHandle, bIsRequired)); + } + + /** + * CVolumeDataProperty::IsRequired - Returns whether this property is required to process this 3MF document instance. + * @return Is this property required to process this 3MF document instance? + */ + bool CVolumeDataProperty::IsRequired() + { + bool resultIsRequired = 0; + CheckError(m_pWrapper->m_WrapperTable.m_VolumeDataProperty_IsRequired(m_pHandle, &resultIsRequired)); - eLookupError = (*pLookup)("lib3mf_model_getattachmentcount", (void**)&(pWrapperTable->m_Model_GetAttachmentCount)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetAttachmentCount == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultIsRequired; + } + + /** + * Method definitions for class CVolumeData + */ + + /** + * CVolumeData::GetComposite - Returns the VolumeDataComposite of this VolumeData instance + * @return filled with the VolumeDataComposite of this VolumeData instance. + */ + PVolumeDataComposite CVolumeData::GetComposite() + { + Lib3MFHandle hTheCompositeData = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_VolumeData_GetComposite(m_pHandle, &hTheCompositeData)); - eLookupError = (*pLookup)("lib3mf_model_haspackagethumbnailattachment", (void**)&(pWrapperTable->m_Model_HasPackageThumbnailAttachment)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_HasPackageThumbnailAttachment == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (hTheCompositeData) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheCompositeData))); + } else { + return nullptr; + } + } + + /** + * CVolumeData::CreateNewComposite - Creates a new VolumeDataComposite for this VolumeData instance + * @return The new VolumeDataComposite of this VolumeData instance. + */ + PVolumeDataComposite CVolumeData::CreateNewComposite() + { + Lib3MFHandle hTheCompositeData = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_VolumeData_CreateNewComposite(m_pHandle, &hTheCompositeData)); - eLookupError = (*pLookup)("lib3mf_model_createpackagethumbnailattachment", (void**)&(pWrapperTable->m_Model_CreatePackageThumbnailAttachment)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_CreatePackageThumbnailAttachment == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hTheCompositeData) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheCompositeData))); + } + + /** + * CVolumeData::RemoveComposite - Removes the VolumeDataComposite of this VolumeData instance + */ + void CVolumeData::RemoveComposite() + { + CheckError(m_pWrapper->m_WrapperTable.m_VolumeData_RemoveComposite(m_pHandle)); + } + + /** + * CVolumeData::GetColor - Returns the VolumeDataColor of this VolumeData instance + * @return filled with the VolumeDataColor of this VolumeData instance. + */ + PVolumeDataColor CVolumeData::GetColor() + { + Lib3MFHandle hTheColorData = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_VolumeData_GetColor(m_pHandle, &hTheColorData)); - eLookupError = (*pLookup)("lib3mf_model_getpackagethumbnailattachment", (void**)&(pWrapperTable->m_Model_GetPackageThumbnailAttachment)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetPackageThumbnailAttachment == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (hTheColorData) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheColorData))); + } else { + return nullptr; + } + } + + /** + * CVolumeData::CreateNewColor - Creates a new VolumeDataColor for this VolumeData instance + * @param[in] pTheFunction - Function used in this element + * @return The new VolumeDataColor of this VolumeData instance. + */ + PVolumeDataColor CVolumeData::CreateNewColor(classParam pTheFunction) + { + Lib3MFHandle hTheFunction = pTheFunction.GetHandle(); + Lib3MFHandle hTheColorData = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_VolumeData_CreateNewColor(m_pHandle, hTheFunction, &hTheColorData)); - eLookupError = (*pLookup)("lib3mf_model_removepackagethumbnailattachment", (void**)&(pWrapperTable->m_Model_RemovePackageThumbnailAttachment)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_RemovePackageThumbnailAttachment == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hTheColorData) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheColorData))); + } + + /** + * CVolumeData::RemoveColor - Removes the VolumeDataColor of this VolumeData instance + */ + void CVolumeData::RemoveColor() + { + CheckError(m_pWrapper->m_WrapperTable.m_VolumeData_RemoveColor(m_pHandle)); + } + + /** + * CVolumeData::GetPropertyCount - Returns the number of VolumeDataProperty + * @return the number of VolumeDataProperty-elements within this VolumdeData + */ + Lib3MF_uint32 CVolumeData::GetPropertyCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_VolumeData_GetPropertyCount(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_model_addcustomcontenttype", (void**)&(pWrapperTable->m_Model_AddCustomContentType)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_AddCustomContentType == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * CVolumeData::GetProperty - Returns the VolumeDataProperty at a given Index + * @param[in] nIndex - the index of the VolumeDataProperty to be returned. + * @return the VolumeDataProperty at the given index. + */ + PVolumeDataProperty CVolumeData::GetProperty(const Lib3MF_uint32 nIndex) + { + Lib3MFHandle hTheVolumeDataProperty = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_VolumeData_GetProperty(m_pHandle, nIndex, &hTheVolumeDataProperty)); - eLookupError = (*pLookup)("lib3mf_model_removecustomcontenttype", (void**)&(pWrapperTable->m_Model_RemoveCustomContentType)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_RemoveCustomContentType == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hTheVolumeDataProperty) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheVolumeDataProperty))); + } + + /** + * CVolumeData::AddPropertyFromFunction - Adds a new VolumeDataProperty from a Function + * @param[in] sName - the qualified name (namespace+name) of the Property + * @param[in] pTheFunction - Function used in this element + * @return the newly created VolumeDataProperty. + */ + PVolumeDataProperty CVolumeData::AddPropertyFromFunction(const std::string & sName, classParam pTheFunction) + { + Lib3MFHandle hTheFunction = pTheFunction.GetHandle(); + Lib3MFHandle hTheVolumeDataProperty = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_VolumeData_AddPropertyFromFunction(m_pHandle, sName.c_str(), hTheFunction, &hTheVolumeDataProperty)); - eLookupError = (*pLookup)("lib3mf_model_setrandomnumbercallback", (void**)&(pWrapperTable->m_Model_SetRandomNumberCallback)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_SetRandomNumberCallback == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hTheVolumeDataProperty) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheVolumeDataProperty))); + } + + /** + * CVolumeData::RemoveProperty - Removes the VolumeDataProperty with a given index + * @param[in] nIndex - the index of the VolumeDataProperty to be removed. + */ + void CVolumeData::RemoveProperty(const Lib3MF_uint32 nIndex) + { + CheckError(m_pWrapper->m_WrapperTable.m_VolumeData_RemoveProperty(m_pHandle, nIndex)); + } + + /** + * Method definitions for class CComponent + */ + + /** + * CComponent::GetObjectResource - Returns the Resource Instance of the component. + * @return filled with the Resource Instance. + */ + PObject CComponent::GetObjectResource() + { + Lib3MFHandle hObjectResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Component_GetObjectResource(m_pHandle, &hObjectResource)); - eLookupError = (*pLookup)("lib3mf_model_getkeystore", (void**)&(pWrapperTable->m_Model_GetKeyStore)); - if ( (eLookupError != 0) || (pWrapperTable->m_Model_GetKeyStore == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hObjectResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hObjectResource))); + } + + /** + * CComponent::GetObjectResourceID - Returns the UniqueResourceID of the component. + * @return returns the UniqueResourceID. + */ + Lib3MF_uint32 CComponent::GetObjectResourceID() + { + Lib3MF_uint32 resultUniqueResourceID = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Component_GetObjectResourceID(m_pHandle, &resultUniqueResourceID)); - eLookupError = (*pLookup)("lib3mf_getlibraryversion", (void**)&(pWrapperTable->m_GetLibraryVersion)); - if ( (eLookupError != 0) || (pWrapperTable->m_GetLibraryVersion == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultUniqueResourceID; + } + + /** + * CComponent::GetUUID - returns, whether a component has a UUID and, if true, the component's UUID + * @param[out] bHasUUID - flag whether the component has a UUID + * @return the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + */ + std::string CComponent::GetUUID(bool & bHasUUID) + { + Lib3MF_uint32 bytesNeededUUID = 0; + Lib3MF_uint32 bytesWrittenUUID = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Component_GetUUID(m_pHandle, &bHasUUID, 0, &bytesNeededUUID, nullptr)); + std::vector bufferUUID(bytesNeededUUID); + CheckError(m_pWrapper->m_WrapperTable.m_Component_GetUUID(m_pHandle, &bHasUUID, bytesNeededUUID, &bytesWrittenUUID, &bufferUUID[0])); - eLookupError = (*pLookup)("lib3mf_getprereleaseinformation", (void**)&(pWrapperTable->m_GetPrereleaseInformation)); - if ( (eLookupError != 0) || (pWrapperTable->m_GetPrereleaseInformation == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferUUID[0]); + } + + /** + * CComponent::SetUUID - sets the component's UUID + * @param[in] sUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + */ + void CComponent::SetUUID(const std::string & sUUID) + { + CheckError(m_pWrapper->m_WrapperTable.m_Component_SetUUID(m_pHandle, sUUID.c_str())); + } + + /** + * CComponent::HasTransform - Returns, if the component has a different transformation than the identity matrix + * @return if true is returned, the transformation is not equal than the identity + */ + bool CComponent::HasTransform() + { + bool resultHasTransform = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Component_HasTransform(m_pHandle, &resultHasTransform)); - eLookupError = (*pLookup)("lib3mf_getbuildinformation", (void**)&(pWrapperTable->m_GetBuildInformation)); - if ( (eLookupError != 0) || (pWrapperTable->m_GetBuildInformation == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultHasTransform; + } + + /** + * CComponent::GetTransform - Returns the transformation matrix of the component. + * @return filled with the component transformation matrix + */ + sTransform CComponent::GetTransform() + { + sTransform resultTransform; + CheckError(m_pWrapper->m_WrapperTable.m_Component_GetTransform(m_pHandle, &resultTransform)); - eLookupError = (*pLookup)("lib3mf_getspecificationversion", (void**)&(pWrapperTable->m_GetSpecificationVersion)); - if ( (eLookupError != 0) || (pWrapperTable->m_GetSpecificationVersion == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultTransform; + } + + /** + * CComponent::SetTransform - Sets the transformation matrix of the component. + * @param[in] Transform - new transformation matrix + */ + void CComponent::SetTransform(const sTransform & Transform) + { + CheckError(m_pWrapper->m_WrapperTable.m_Component_SetTransform(m_pHandle, &Transform)); + } + + /** + * Method definitions for class CComponentsObject + */ + + /** + * CComponentsObject::AddComponent - Adds a new component to a components object. + * @param[in] pObjectResource - object to add as component. Must not lead to circular references! + * @param[in] Transform - optional transform matrix for the component. + * @return new component instance + */ + PComponent CComponentsObject::AddComponent(classParam pObjectResource, const sTransform & Transform) + { + Lib3MFHandle hObjectResource = pObjectResource.GetHandle(); + Lib3MFHandle hComponentInstance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComponentsObject_AddComponent(m_pHandle, hObjectResource, &Transform, &hComponentInstance)); - eLookupError = (*pLookup)("lib3mf_createmodel", (void**)&(pWrapperTable->m_CreateModel)); - if ( (eLookupError != 0) || (pWrapperTable->m_CreateModel == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hComponentInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hComponentInstance))); + } + + /** + * CComponentsObject::GetComponent - Retrieves a component from a component object. + * @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) + * @return component instance + */ + PComponent CComponentsObject::GetComponent(const Lib3MF_uint32 nIndex) + { + Lib3MFHandle hComponentInstance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComponentsObject_GetComponent(m_pHandle, nIndex, &hComponentInstance)); - eLookupError = (*pLookup)("lib3mf_release", (void**)&(pWrapperTable->m_Release)); - if ( (eLookupError != 0) || (pWrapperTable->m_Release == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + if (!hComponentInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hComponentInstance))); + } + + /** + * CComponentsObject::GetComponentCount - Retrieves a component count of a component object. + * @return returns the component count + */ + Lib3MF_uint32 CComponentsObject::GetComponentCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ComponentsObject_GetComponentCount(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_acquire", (void**)&(pWrapperTable->m_Acquire)); - if ( (eLookupError != 0) || (pWrapperTable->m_Acquire == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * Method definitions for class CBeamSet + */ + + /** + * CBeamSet::SetName - Sets a beamset's name string + * @param[in] sName - new name of the beamset. + */ + void CBeamSet::SetName(const std::string & sName) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_SetName(m_pHandle, sName.c_str())); + } + + /** + * CBeamSet::GetName - Retrieves a beamset's name string + * @return returns the name of the beamset. + */ + std::string CBeamSet::GetName() + { + Lib3MF_uint32 bytesNeededName = 0; + Lib3MF_uint32 bytesWrittenName = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetName(m_pHandle, 0, &bytesNeededName, nullptr)); + std::vector bufferName(bytesNeededName); + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetName(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); - eLookupError = (*pLookup)("lib3mf_setjournal", (void**)&(pWrapperTable->m_SetJournal)); - if ( (eLookupError != 0) || (pWrapperTable->m_SetJournal == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferName[0]); + } + + /** + * CBeamSet::SetIdentifier - Sets a beamset's identifier string + * @param[in] sIdentifier - new name of the beamset. + */ + void CBeamSet::SetIdentifier(const std::string & sIdentifier) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_SetIdentifier(m_pHandle, sIdentifier.c_str())); + } + + /** + * CBeamSet::GetIdentifier - Retrieves a beamset's identifier string + * @return returns the identifier of the beamset. + */ + std::string CBeamSet::GetIdentifier() + { + Lib3MF_uint32 bytesNeededIdentifier = 0; + Lib3MF_uint32 bytesWrittenIdentifier = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetIdentifier(m_pHandle, 0, &bytesNeededIdentifier, nullptr)); + std::vector bufferIdentifier(bytesNeededIdentifier); + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetIdentifier(m_pHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0])); - eLookupError = (*pLookup)("lib3mf_getlasterror", (void**)&(pWrapperTable->m_GetLastError)); - if ( (eLookupError != 0) || (pWrapperTable->m_GetLastError == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferIdentifier[0]); + } + + /** + * CBeamSet::GetReferenceCount - Retrieves the reference count of a beamset + * @return returns the reference count + */ + Lib3MF_uint32 CBeamSet::GetReferenceCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetReferenceCount(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_getsymbollookupmethod", (void**)&(pWrapperTable->m_GetSymbolLookupMethod)); - if ( (eLookupError != 0) || (pWrapperTable->m_GetSymbolLookupMethod == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * CBeamSet::SetReferences - Sets the references of a beamset + * @param[in] ReferencesBuffer - the new indices of all beams in this beamset + */ + void CBeamSet::SetReferences(const CInputVector & ReferencesBuffer) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_SetReferences(m_pHandle, (Lib3MF_uint64)ReferencesBuffer.size(), ReferencesBuffer.data())); + } + + /** + * CBeamSet::GetReferences - Retrieves the references of a beamset + * @param[out] ReferencesBuffer - retrieves the indices of all beams in this beamset + */ + void CBeamSet::GetReferences(std::vector & ReferencesBuffer) + { + Lib3MF_uint64 elementsNeededReferences = 0; + Lib3MF_uint64 elementsWrittenReferences = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetReferences(m_pHandle, 0, &elementsNeededReferences, nullptr)); + ReferencesBuffer.resize((size_t) elementsNeededReferences); + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetReferences(m_pHandle, elementsNeededReferences, &elementsWrittenReferences, ReferencesBuffer.data())); + } + + /** + * CBeamSet::GetBallReferenceCount - Retrieves the ball reference count of a beamset + * @return returns the ball reference count + */ + Lib3MF_uint32 CBeamSet::GetBallReferenceCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetBallReferenceCount(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_retrieveprogressmessage", (void**)&(pWrapperTable->m_RetrieveProgressMessage)); - if ( (eLookupError != 0) || (pWrapperTable->m_RetrieveProgressMessage == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * CBeamSet::SetBallReferences - Sets the ball references of a beamset + * @param[in] BallReferencesBuffer - the new indices of all balls in this beamset + */ + void CBeamSet::SetBallReferences(const CInputVector & BallReferencesBuffer) + { + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_SetBallReferences(m_pHandle, (Lib3MF_uint64)BallReferencesBuffer.size(), BallReferencesBuffer.data())); + } + + /** + * CBeamSet::GetBallReferences - Retrieves the ball references of a beamset + * @param[out] BallReferencesBuffer - retrieves the indices of all balls in this beamset + */ + void CBeamSet::GetBallReferences(std::vector & BallReferencesBuffer) + { + Lib3MF_uint64 elementsNeededBallReferences = 0; + Lib3MF_uint64 elementsWrittenBallReferences = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetBallReferences(m_pHandle, 0, &elementsNeededBallReferences, nullptr)); + BallReferencesBuffer.resize((size_t) elementsNeededBallReferences); + CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetBallReferences(m_pHandle, elementsNeededBallReferences, &elementsWrittenBallReferences, BallReferencesBuffer.data())); + } + + /** + * Method definitions for class CBaseMaterialGroup + */ + + /** + * CBaseMaterialGroup::GetCount - Retrieves the count of base materials in the material group. + * @return returns the count of base materials. + */ + Lib3MF_uint32 CBaseMaterialGroup::GetCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_GetCount(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_rgbatocolor", (void**)&(pWrapperTable->m_RGBAToColor)); - if ( (eLookupError != 0) || (pWrapperTable->m_RGBAToColor == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * CBaseMaterialGroup::GetAllPropertyIDs - returns all the PropertyIDs of all materials in this group + * @param[out] PropertyIDsBuffer - PropertyID of the material in the material group. + */ + void CBaseMaterialGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + { + Lib3MF_uint64 elementsNeededPropertyIDs = 0; + Lib3MF_uint64 elementsWrittenPropertyIDs = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_GetAllPropertyIDs(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); + PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); + CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_GetAllPropertyIDs(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + } + + /** + * CBaseMaterialGroup::AddMaterial - Adds a new material to the material group + * @param[in] sName - new name of the base material. + * @param[in] DisplayColor - Display color of the material + * @return returns new PropertyID of the new material in the material group. + */ + Lib3MF_uint32 CBaseMaterialGroup::AddMaterial(const std::string & sName, const sColor & DisplayColor) + { + Lib3MF_uint32 resultPropertyID = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_AddMaterial(m_pHandle, sName.c_str(), &DisplayColor, &resultPropertyID)); - eLookupError = (*pLookup)("lib3mf_floatrgbatocolor", (void**)&(pWrapperTable->m_FloatRGBAToColor)); - if ( (eLookupError != 0) || (pWrapperTable->m_FloatRGBAToColor == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultPropertyID; + } + + /** + * CBaseMaterialGroup::RemoveMaterial - Removes a material from the material group. + * @param[in] nPropertyID - PropertyID of the material in the material group. + */ + void CBaseMaterialGroup::RemoveMaterial(const Lib3MF_uint32 nPropertyID) + { + CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_RemoveMaterial(m_pHandle, nPropertyID)); + } + + /** + * CBaseMaterialGroup::GetName - Returns the base material's name + * @param[in] nPropertyID - PropertyID of the material in the material group. + * @return returns the name of the base material. + */ + std::string CBaseMaterialGroup::GetName(const Lib3MF_uint32 nPropertyID) + { + Lib3MF_uint32 bytesNeededName = 0; + Lib3MF_uint32 bytesWrittenName = 0; + CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_GetName(m_pHandle, nPropertyID, 0, &bytesNeededName, nullptr)); + std::vector bufferName(bytesNeededName); + CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_GetName(m_pHandle, nPropertyID, bytesNeededName, &bytesWrittenName, &bufferName[0])); - eLookupError = (*pLookup)("lib3mf_colortorgba", (void**)&(pWrapperTable->m_ColorToRGBA)); - if ( (eLookupError != 0) || (pWrapperTable->m_ColorToRGBA == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return std::string(&bufferName[0]); + } + + /** + * CBaseMaterialGroup::SetName - Sets a base material's name + * @param[in] nPropertyID - PropertyID of the material in the material group. + * @param[in] sName - new name of the base material. + */ + void CBaseMaterialGroup::SetName(const Lib3MF_uint32 nPropertyID, const std::string & sName) + { + CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_SetName(m_pHandle, nPropertyID, sName.c_str())); + } + + /** + * CBaseMaterialGroup::SetDisplayColor - Sets a base material's display color. + * @param[in] nPropertyID - PropertyID of the material in the material group. + * @param[in] TheColor - The base material's display color + */ + void CBaseMaterialGroup::SetDisplayColor(const Lib3MF_uint32 nPropertyID, const sColor & TheColor) + { + CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_SetDisplayColor(m_pHandle, nPropertyID, &TheColor)); + } + + /** + * CBaseMaterialGroup::GetDisplayColor - Returns a base material's display color. + * @param[in] nPropertyID - PropertyID of the material in the material group. + * @return The base material's display color + */ + sColor CBaseMaterialGroup::GetDisplayColor(const Lib3MF_uint32 nPropertyID) + { + sColor resultTheColor; + CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_GetDisplayColor(m_pHandle, nPropertyID, &resultTheColor)); - eLookupError = (*pLookup)("lib3mf_colortofloatrgba", (void**)&(pWrapperTable->m_ColorToFloatRGBA)); - if ( (eLookupError != 0) || (pWrapperTable->m_ColorToFloatRGBA == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultTheColor; + } + + /** + * Method definitions for class CColorGroup + */ + + /** + * CColorGroup::GetCount - Retrieves the count of base materials in this Color Group. + * @return returns the count of colors within this color group. + */ + Lib3MF_uint32 CColorGroup::GetCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_GetCount(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_getidentitytransform", (void**)&(pWrapperTable->m_GetIdentityTransform)); - if ( (eLookupError != 0) || (pWrapperTable->m_GetIdentityTransform == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * CColorGroup::GetAllPropertyIDs - returns all the PropertyIDs of all colors within this group + * @param[out] PropertyIDsBuffer - PropertyID of the color in the color group. + */ + void CColorGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + { + Lib3MF_uint64 elementsNeededPropertyIDs = 0; + Lib3MF_uint64 elementsWrittenPropertyIDs = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_GetAllPropertyIDs(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); + PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); + CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_GetAllPropertyIDs(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + } + + /** + * CColorGroup::AddColor - Adds a new value. + * @param[in] TheColor - The new color + * @return PropertyID of the new color within this color group. + */ + Lib3MF_uint32 CColorGroup::AddColor(const sColor & TheColor) + { + Lib3MF_uint32 resultPropertyID = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_AddColor(m_pHandle, &TheColor, &resultPropertyID)); - eLookupError = (*pLookup)("lib3mf_getuniformscaletransform", (void**)&(pWrapperTable->m_GetUniformScaleTransform)); - if ( (eLookupError != 0) || (pWrapperTable->m_GetUniformScaleTransform == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultPropertyID; + } + + /** + * CColorGroup::RemoveColor - Removes a color from the color group. + * @param[in] nPropertyID - PropertyID of the color to be removed from the color group. + */ + void CColorGroup::RemoveColor(const Lib3MF_uint32 nPropertyID) + { + CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_RemoveColor(m_pHandle, nPropertyID)); + } + + /** + * CColorGroup::SetColor - Sets a color value. + * @param[in] nPropertyID - PropertyID of a color within this color group. + * @param[in] TheColor - The color + */ + void CColorGroup::SetColor(const Lib3MF_uint32 nPropertyID, const sColor & TheColor) + { + CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_SetColor(m_pHandle, nPropertyID, &TheColor)); + } + + /** + * CColorGroup::GetColor - Sets a color value. + * @param[in] nPropertyID - PropertyID of a color within this color group. + * @return The color + */ + sColor CColorGroup::GetColor(const Lib3MF_uint32 nPropertyID) + { + sColor resultTheColor; + CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_GetColor(m_pHandle, nPropertyID, &resultTheColor)); - eLookupError = (*pLookup)("lib3mf_getscaletransform", (void**)&(pWrapperTable->m_GetScaleTransform)); - if ( (eLookupError != 0) || (pWrapperTable->m_GetScaleTransform == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultTheColor; + } + + /** + * Method definitions for class CTexture2DGroup + */ + + /** + * CTexture2DGroup::GetCount - Retrieves the count of tex2coords in the Texture2DGroup. + * @return returns the count of tex2coords. + */ + Lib3MF_uint32 CTexture2DGroup::GetCount() + { + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_GetCount(m_pHandle, &resultCount)); - eLookupError = (*pLookup)("lib3mf_gettranslationtransform", (void**)&(pWrapperTable->m_GetTranslationTransform)); - if ( (eLookupError != 0) || (pWrapperTable->m_GetTranslationTransform == nullptr) ) - return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + return resultCount; + } + + /** + * CTexture2DGroup::GetAllPropertyIDs - returns all the PropertyIDs of all tex2coords in this Texture2DGroup + * @param[out] PropertyIDsBuffer - PropertyID of the tex2coords in the Texture2DGroup. + */ + void CTexture2DGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + { + Lib3MF_uint64 elementsNeededPropertyIDs = 0; + Lib3MF_uint64 elementsWrittenPropertyIDs = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_GetAllPropertyIDs(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); + PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); + CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_GetAllPropertyIDs(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + } + + /** + * CTexture2DGroup::AddTex2Coord - Adds a new tex2coord to the Texture2DGroup + * @param[in] UVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. + * @return returns new PropertyID of the new tex2coord in the Texture2DGroup. + */ + Lib3MF_uint32 CTexture2DGroup::AddTex2Coord(const sTex2Coord & UVCoordinate) + { + Lib3MF_uint32 resultPropertyID = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_AddTex2Coord(m_pHandle, &UVCoordinate, &resultPropertyID)); - return LIB3MF_SUCCESS; -} - + return resultPropertyID; + } + /** + * CTexture2DGroup::GetTex2Coord - Obtains a tex2coord to the Texture2DGroup + * @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. + * @return The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. + */ + sTex2Coord CTexture2DGroup::GetTex2Coord(const Lib3MF_uint32 nPropertyID) + { + sTex2Coord resultUVCoordinate; + CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_GetTex2Coord(m_pHandle, nPropertyID, &resultUVCoordinate)); + + return resultUVCoordinate; + } /** - * Method definitions for class CBase - */ + * CTexture2DGroup::RemoveTex2Coord - Removes a tex2coords from the Texture2DGroup. + * @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. + */ + void CTexture2DGroup::RemoveTex2Coord(const Lib3MF_uint32 nPropertyID) + { + CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_RemoveTex2Coord(m_pHandle, nPropertyID)); + } /** - * CBase::ClassTypeId - Get Class Type Id - * @return Class type as a 64 bits integer + * CTexture2DGroup::GetTexture2D - Obtains the texture2D instance of this group. + * @return the texture2D instance of this group. */ - Lib3MF_uint64 CBase::ClassTypeId() + PTexture2D CTexture2DGroup::GetTexture2D() { - Lib3MF_uint64 resultClassTypeId = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Base_ClassTypeId(m_pHandle, &resultClassTypeId)); + Lib3MFHandle hTexture2DInstance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_GetTexture2D(m_pHandle, &hTexture2DInstance)); - return resultClassTypeId; + if (!hTexture2DInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTexture2DInstance))); } /** - * Method definitions for class CWriter + * Method definitions for class CCompositeMaterials */ /** - * CWriter::WriteToFile - Writes out the model as file. The file type is specified by the Model Writer class. - * @param[in] sFilename - Filename to write into + * CCompositeMaterials::GetCount - Retrieves the count of Composite-s in the CompositeMaterials. + * @return returns the count of Composite-s */ - void CWriter::WriteToFile(const std::string & sFilename) + Lib3MF_uint32 CCompositeMaterials::GetCount() { - CheckError(m_pWrapper->m_WrapperTable.m_Writer_WriteToFile(m_pHandle, sFilename.c_str())); + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_GetCount(m_pHandle, &resultCount)); + + return resultCount; } /** - * CWriter::GetStreamSize - Retrieves the size of the full 3MF file stream. - * @return the stream size + * CCompositeMaterials::GetAllPropertyIDs - returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials + * @param[out] PropertyIDsBuffer - PropertyID of the Composite-Mixing Values in the CompositeMaterials. */ - Lib3MF_uint64 CWriter::GetStreamSize() + void CCompositeMaterials::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) { - Lib3MF_uint64 resultStreamSize = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Writer_GetStreamSize(m_pHandle, &resultStreamSize)); + Lib3MF_uint64 elementsNeededPropertyIDs = 0; + Lib3MF_uint64 elementsWrittenPropertyIDs = 0; + CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_GetAllPropertyIDs(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); + PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); + CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_GetAllPropertyIDs(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + } + + /** + * CCompositeMaterials::GetBaseMaterialGroup - Obtains the BaseMaterialGroup instance of this CompositeMaterials. + * @return returns the BaseMaterialGroup instance of this CompositeMaterials + */ + PBaseMaterialGroup CCompositeMaterials::GetBaseMaterialGroup() + { + Lib3MFHandle hBaseMaterialGroupInstance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_GetBaseMaterialGroup(m_pHandle, &hBaseMaterialGroupInstance)); - return resultStreamSize; + if (!hBaseMaterialGroupInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBaseMaterialGroupInstance))); } /** - * CWriter::WriteToBuffer - Writes out the 3MF file into a memory buffer - * @param[out] BufferBuffer - buffer to write into + * CCompositeMaterials::AddComposite - Adds a new Composite-Mixing Values to the CompositeMaterials. + * @param[in] CompositeBuffer - The Composite Constituents to be added as composite + * @return returns new PropertyID of the new Composite in the CompositeMaterials. */ - void CWriter::WriteToBuffer(std::vector & BufferBuffer) + Lib3MF_uint32 CCompositeMaterials::AddComposite(const CInputVector & CompositeBuffer) { - Lib3MF_uint64 elementsNeededBuffer = 0; - Lib3MF_uint64 elementsWrittenBuffer = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Writer_WriteToBuffer(m_pHandle, 0, &elementsNeededBuffer, nullptr)); - BufferBuffer.resize((size_t) elementsNeededBuffer); - CheckError(m_pWrapper->m_WrapperTable.m_Writer_WriteToBuffer(m_pHandle, elementsNeededBuffer, &elementsWrittenBuffer, BufferBuffer.data())); + Lib3MF_uint32 resultPropertyID = 0; + CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_AddComposite(m_pHandle, (Lib3MF_uint64)CompositeBuffer.size(), CompositeBuffer.data(), &resultPropertyID)); + + return resultPropertyID; } /** - * CWriter::WriteToCallback - Writes out the model and passes the data to a provided callback function. The file type is specified by the Model Writer class. - * @param[in] pTheWriteCallback - Callback to call for writing a data chunk - * @param[in] pTheSeekCallback - Callback to call for seeking in the stream - * @param[in] pUserData - Userdata that is passed to the callback function + * CCompositeMaterials::RemoveComposite - Removes a Composite-Maxing Ratio from the CompositeMaterials. + * @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. */ - void CWriter::WriteToCallback(const WriteCallback pTheWriteCallback, const SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) + void CCompositeMaterials::RemoveComposite(const Lib3MF_uint32 nPropertyID) { - CheckError(m_pWrapper->m_WrapperTable.m_Writer_WriteToCallback(m_pHandle, pTheWriteCallback, pTheSeekCallback, pUserData)); + CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_RemoveComposite(m_pHandle, nPropertyID)); } /** - * CWriter::SetProgressCallback - Set the progress callback for calls to this writer - * @param[in] pProgressCallback - pointer to the callback function. - * @param[in] pUserData - pointer to arbitrary user data that is passed without modification to the callback. + * CCompositeMaterials::GetComposite - Obtains a Composite-Maxing Ratio of this CompositeMaterials. + * @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. + * @param[out] CompositeBuffer - The Composite-Mixing Values with the given PropertyID */ - void CWriter::SetProgressCallback(const ProgressCallback pProgressCallback, const Lib3MF_pvoid pUserData) + void CCompositeMaterials::GetComposite(const Lib3MF_uint32 nPropertyID, std::vector & CompositeBuffer) { - CheckError(m_pWrapper->m_WrapperTable.m_Writer_SetProgressCallback(m_pHandle, pProgressCallback, pUserData)); + Lib3MF_uint64 elementsNeededComposite = 0; + Lib3MF_uint64 elementsWrittenComposite = 0; + CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_GetComposite(m_pHandle, nPropertyID, 0, &elementsNeededComposite, nullptr)); + CompositeBuffer.resize((size_t) elementsNeededComposite); + CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_GetComposite(m_pHandle, nPropertyID, elementsNeededComposite, &elementsWrittenComposite, CompositeBuffer.data())); } /** - * CWriter::GetDecimalPrecision - Returns the number of digits after the decimal point to be written in each vertex coordinate-value. - * @return The number of digits to be written in each vertex coordinate-value after the decimal point. + * Method definitions for class CMultiPropertyGroup + */ + + /** + * CMultiPropertyGroup::GetCount - Retrieves the count of MultiProperty-s in the MultiPropertyGroup. + * @return returns the count of MultiProperty-s */ - Lib3MF_uint32 CWriter::GetDecimalPrecision() + Lib3MF_uint32 CMultiPropertyGroup::GetCount() { - Lib3MF_uint32 resultDecimalPrecision = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Writer_GetDecimalPrecision(m_pHandle, &resultDecimalPrecision)); + Lib3MF_uint32 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetCount(m_pHandle, &resultCount)); - return resultDecimalPrecision; + return resultCount; } /** - * CWriter::SetDecimalPrecision - Sets the number of digits after the decimal point to be written in each vertex coordinate-value. - * @param[in] nDecimalPrecision - The number of digits to be written in each vertex coordinate-value after the decimal point. + * CMultiPropertyGroup::GetAllPropertyIDs - returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup + * @param[out] PropertyIDsBuffer - PropertyID of the MultiProperty-s in the MultiPropertyGroup. */ - void CWriter::SetDecimalPrecision(const Lib3MF_uint32 nDecimalPrecision) + void CMultiPropertyGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) { - CheckError(m_pWrapper->m_WrapperTable.m_Writer_SetDecimalPrecision(m_pHandle, nDecimalPrecision)); + Lib3MF_uint64 elementsNeededPropertyIDs = 0; + Lib3MF_uint64 elementsWrittenPropertyIDs = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetAllPropertyIDs(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); + PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); + CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetAllPropertyIDs(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); } /** - * CWriter::SetStrictModeActive - Activates (deactivates) the strict mode of the reader. - * @param[in] bStrictModeActive - flag whether strict mode is active or not. + * CMultiPropertyGroup::AddMultiProperty - Adds a new MultiProperty to the MultiPropertyGroup. + * @param[in] PropertyIDsBuffer - The PropertyIDs of the new MultiProperty. + * @return returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. */ - void CWriter::SetStrictModeActive(const bool bStrictModeActive) + Lib3MF_uint32 CMultiPropertyGroup::AddMultiProperty(const CInputVector & PropertyIDsBuffer) { - CheckError(m_pWrapper->m_WrapperTable.m_Writer_SetStrictModeActive(m_pHandle, bStrictModeActive)); + Lib3MF_uint32 resultPropertyID = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_AddMultiProperty(m_pHandle, (Lib3MF_uint64)PropertyIDsBuffer.size(), PropertyIDsBuffer.data(), &resultPropertyID)); + + return resultPropertyID; } /** - * CWriter::GetStrictModeActive - Queries whether the strict mode of the reader is active or not - * @return returns flag whether strict mode is active or not. + * CMultiPropertyGroup::SetMultiProperty - Sets the PropertyIDs of a MultiProperty. + * @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. + * @param[in] PropertyIDsBuffer - The new PropertyIDs of the MultiProperty */ - bool CWriter::GetStrictModeActive() + void CMultiPropertyGroup::SetMultiProperty(const Lib3MF_uint32 nPropertyID, const CInputVector & PropertyIDsBuffer) { - bool resultStrictModeActive = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Writer_GetStrictModeActive(m_pHandle, &resultStrictModeActive)); - - return resultStrictModeActive; + CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_SetMultiProperty(m_pHandle, nPropertyID, (Lib3MF_uint64)PropertyIDsBuffer.size(), PropertyIDsBuffer.data())); } /** - * CWriter::GetWarning - Returns Warning and Error Information of the read process - * @param[in] nIndex - Index of the Warning. Valid values are 0 to WarningCount - 1 - * @param[out] nErrorCode - filled with the error code of the warning - * @return the message of the warning + * CMultiPropertyGroup::GetMultiProperty - Obtains the PropertyIDs of a MultiProperty. + * @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. + * @param[out] PropertyIDsBuffer - The PropertyIDs of the MultiProperty */ - std::string CWriter::GetWarning(const Lib3MF_uint32 nIndex, Lib3MF_uint32 & nErrorCode) + void CMultiPropertyGroup::GetMultiProperty(const Lib3MF_uint32 nPropertyID, std::vector & PropertyIDsBuffer) { - Lib3MF_uint32 bytesNeededWarning = 0; - Lib3MF_uint32 bytesWrittenWarning = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Writer_GetWarning(m_pHandle, nIndex, &nErrorCode, 0, &bytesNeededWarning, nullptr)); - std::vector bufferWarning(bytesNeededWarning); - CheckError(m_pWrapper->m_WrapperTable.m_Writer_GetWarning(m_pHandle, nIndex, &nErrorCode, bytesNeededWarning, &bytesWrittenWarning, &bufferWarning[0])); - - return std::string(&bufferWarning[0]); + Lib3MF_uint64 elementsNeededPropertyIDs = 0; + Lib3MF_uint64 elementsWrittenPropertyIDs = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetMultiProperty(m_pHandle, nPropertyID, 0, &elementsNeededPropertyIDs, nullptr)); + PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); + CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetMultiProperty(m_pHandle, nPropertyID, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); } /** - * CWriter::GetWarningCount - Returns Warning and Error Count of the read process - * @return filled with the count of the occurred warnings. + * CMultiPropertyGroup::RemoveMultiProperty - Removes a MultiProperty from this MultiPropertyGroup. + * @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. */ - Lib3MF_uint32 CWriter::GetWarningCount() + void CMultiPropertyGroup::RemoveMultiProperty(const Lib3MF_uint32 nPropertyID) + { + CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_RemoveMultiProperty(m_pHandle, nPropertyID)); + } + + /** + * CMultiPropertyGroup::GetLayerCount - Retrieves the number of layers of this MultiPropertyGroup. + * @return returns the number of layers + */ + Lib3MF_uint32 CMultiPropertyGroup::GetLayerCount() { Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Writer_GetWarningCount(m_pHandle, &resultCount)); + CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetLayerCount(m_pHandle, &resultCount)); return resultCount; } /** - * CWriter::AddKeyWrappingCallback - Registers a callback to deal with data key encryption/decryption from keystore - * @param[in] sConsumerID - The ConsumerID to register for - * @param[in] pTheCallback - The callback to be callede for wrapping and encryption key - * @param[in] pUserData - Userdata that is passed to the callback function + * CMultiPropertyGroup::AddLayer - Adds a MultiPropertyLayer to this MultiPropertyGroup. + * @param[in] TheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup + * @return returns the index of this MultiPropertyLayer */ - void CWriter::AddKeyWrappingCallback(const std::string & sConsumerID, const KeyWrappingCallback pTheCallback, const Lib3MF_pvoid pUserData) + Lib3MF_uint32 CMultiPropertyGroup::AddLayer(const sMultiPropertyLayer & TheLayer) { - CheckError(m_pWrapper->m_WrapperTable.m_Writer_AddKeyWrappingCallback(m_pHandle, sConsumerID.c_str(), pTheCallback, pUserData)); + Lib3MF_uint32 resultLayerIndex = 0; + CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_AddLayer(m_pHandle, &TheLayer, &resultLayerIndex)); + + return resultLayerIndex; + } + + /** + * CMultiPropertyGroup::GetLayer - Obtains a MultiPropertyLayer of this MultiPropertyGroup. + * @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried + * @return The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup + */ + sMultiPropertyLayer CMultiPropertyGroup::GetLayer(const Lib3MF_uint32 nLayerIndex) + { + sMultiPropertyLayer resultTheLayer; + CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetLayer(m_pHandle, nLayerIndex, &resultTheLayer)); + + return resultTheLayer; } /** - * CWriter::SetContentEncryptionCallback - Registers a callback to deal with encryption of content - * @param[in] pTheCallback - The callback used to encrypt content - * @param[in] pUserData - Userdata that is passed to the callback function + * CMultiPropertyGroup::RemoveLayer - Removes a MultiPropertyLayer from this MultiPropertyGroup. + * @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed */ - void CWriter::SetContentEncryptionCallback(const ContentEncryptionCallback pTheCallback, const Lib3MF_pvoid pUserData) + void CMultiPropertyGroup::RemoveLayer(const Lib3MF_uint32 nLayerIndex) { - CheckError(m_pWrapper->m_WrapperTable.m_Writer_SetContentEncryptionCallback(m_pHandle, pTheCallback, pUserData)); + CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_RemoveLayer(m_pHandle, nLayerIndex)); } /** - * Method definitions for class CReader + * Method definitions for class CImage3D */ /** - * CReader::ReadFromFile - Reads a model from a file. The file type is specified by the Model Reader class - * @param[in] sFilename - Filename to read from + * CImage3D::GetName - returns the name of this Image3D + * @return the name of this Image3D */ - void CReader::ReadFromFile(const std::string & sFilename) + std::string CImage3D::GetName() { - CheckError(m_pWrapper->m_WrapperTable.m_Reader_ReadFromFile(m_pHandle, sFilename.c_str())); + Lib3MF_uint32 bytesNeededName = 0; + Lib3MF_uint32 bytesWrittenName = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Image3D_GetName(m_pHandle, 0, &bytesNeededName, nullptr)); + std::vector bufferName(bytesNeededName); + CheckError(m_pWrapper->m_WrapperTable.m_Image3D_GetName(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); + + return std::string(&bufferName[0]); } /** - * CReader::ReadFromBuffer - Reads a model from a memory buffer. - * @param[in] BufferBuffer - Buffer to read from + * CImage3D::SetName - sets a new name of this Image3D + * @param[in] sName - the new name of this Image3D */ - void CReader::ReadFromBuffer(const CInputVector & BufferBuffer) + void CImage3D::SetName(const std::string & sName) { - CheckError(m_pWrapper->m_WrapperTable.m_Reader_ReadFromBuffer(m_pHandle, (Lib3MF_uint64)BufferBuffer.size(), BufferBuffer.data())); + CheckError(m_pWrapper->m_WrapperTable.m_Image3D_SetName(m_pHandle, sName.c_str())); } /** - * CReader::ReadFromCallback - Reads a model and from the data provided by a callback function - * @param[in] pTheReadCallback - Callback to call for reading a data chunk - * @param[in] nStreamSize - number of bytes the callback returns - * @param[in] pTheSeekCallback - Callback to call for seeking in the stream. - * @param[in] pUserData - Userdata that is passed to the callback function + * CImage3D::IsImageStack - Retrieves, if this Image3D is a ImageStack + * @return returns, whether the Image3D is an ImageStack */ - void CReader::ReadFromCallback(const ReadCallback pTheReadCallback, const Lib3MF_uint64 nStreamSize, const SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) + bool CImage3D::IsImageStack() { - CheckError(m_pWrapper->m_WrapperTable.m_Reader_ReadFromCallback(m_pHandle, pTheReadCallback, nStreamSize, pTheSeekCallback, pUserData)); + bool resultIsImageStack = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Image3D_IsImageStack(m_pHandle, &resultIsImageStack)); + + return resultIsImageStack; } /** - * CReader::SetProgressCallback - Set the progress callback for calls to this writer - * @param[in] pProgressCallback - pointer to the callback function. - * @param[in] pUserData - pointer to arbitrary user data that is passed without modification to the callback. - */ - void CReader::SetProgressCallback(const ProgressCallback pProgressCallback, const Lib3MF_pvoid pUserData) - { - CheckError(m_pWrapper->m_WrapperTable.m_Reader_SetProgressCallback(m_pHandle, pProgressCallback, pUserData)); - } + * Method definitions for class CImageStack + */ /** - * CReader::AddRelationToRead - Adds a relationship type which shall be read as attachment in memory while loading - * @param[in] sRelationShipType - String of the relationship type + * CImageStack::GetRowCount - Retrieves the number of rows in each image of this image3d + * @return number of rows */ - void CReader::AddRelationToRead(const std::string & sRelationShipType) + Lib3MF_uint32 CImageStack::GetRowCount() { - CheckError(m_pWrapper->m_WrapperTable.m_Reader_AddRelationToRead(m_pHandle, sRelationShipType.c_str())); + Lib3MF_uint32 resultRowCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ImageStack_GetRowCount(m_pHandle, &resultRowCount)); + + return resultRowCount; } /** - * CReader::RemoveRelationToRead - Removes a relationship type which shall be read as attachment in memory while loading - * @param[in] sRelationShipType - String of the relationship type + * CImageStack::SetRowCount - Sets the number of rows in each image of this image3d + * @param[in] nRowCount - number of rows */ - void CReader::RemoveRelationToRead(const std::string & sRelationShipType) + void CImageStack::SetRowCount(const Lib3MF_uint32 nRowCount) { - CheckError(m_pWrapper->m_WrapperTable.m_Reader_RemoveRelationToRead(m_pHandle, sRelationShipType.c_str())); + CheckError(m_pWrapper->m_WrapperTable.m_ImageStack_SetRowCount(m_pHandle, nRowCount)); } /** - * CReader::SetStrictModeActive - Activates (deactivates) the strict mode of the reader. - * @param[in] bStrictModeActive - flag whether strict mode is active or not. + * CImageStack::GetColumnCount - Retrieves the number of columns in each image of this image3d + * @return number of columns */ - void CReader::SetStrictModeActive(const bool bStrictModeActive) + Lib3MF_uint32 CImageStack::GetColumnCount() { - CheckError(m_pWrapper->m_WrapperTable.m_Reader_SetStrictModeActive(m_pHandle, bStrictModeActive)); + Lib3MF_uint32 resultColumnCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ImageStack_GetColumnCount(m_pHandle, &resultColumnCount)); + + return resultColumnCount; } /** - * CReader::GetStrictModeActive - Queries whether the strict mode of the reader is active or not - * @return returns flag whether strict mode is active or not. + * CImageStack::SetColumnCount - Sets the number of columns in each image of this image3d + * @param[in] nColumnCount - number of columns */ - bool CReader::GetStrictModeActive() + void CImageStack::SetColumnCount(const Lib3MF_uint32 nColumnCount) { - bool resultStrictModeActive = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Reader_GetStrictModeActive(m_pHandle, &resultStrictModeActive)); - - return resultStrictModeActive; + CheckError(m_pWrapper->m_WrapperTable.m_ImageStack_SetColumnCount(m_pHandle, nColumnCount)); } /** - * CReader::GetWarning - Returns Warning and Error Information of the read process - * @param[in] nIndex - Index of the Warning. Valid values are 0 to WarningCount - 1 - * @param[out] nErrorCode - filled with the error code of the warning - * @return the message of the warning + * CImageStack::GetSheetCount - Retrieves the number of images in the stack. + * @return number of images */ - std::string CReader::GetWarning(const Lib3MF_uint32 nIndex, Lib3MF_uint32 & nErrorCode) + Lib3MF_uint32 CImageStack::GetSheetCount() { - Lib3MF_uint32 bytesNeededWarning = 0; - Lib3MF_uint32 bytesWrittenWarning = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Reader_GetWarning(m_pHandle, nIndex, &nErrorCode, 0, &bytesNeededWarning, nullptr)); - std::vector bufferWarning(bytesNeededWarning); - CheckError(m_pWrapper->m_WrapperTable.m_Reader_GetWarning(m_pHandle, nIndex, &nErrorCode, bytesNeededWarning, &bytesWrittenWarning, &bufferWarning[0])); + Lib3MF_uint32 resultSheetCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ImageStack_GetSheetCount(m_pHandle, &resultSheetCount)); - return std::string(&bufferWarning[0]); + return resultSheetCount; } /** - * CReader::GetWarningCount - Returns Warning and Error Count of the read process - * @return filled with the count of the occurred warnings. + * CImageStack::GetSheet - Retrieves a sheet of the stack. Raises an error if sheet is not set. + * @param[in] nIndex - index of the image (0-based) + * @return attachment containing the image */ - Lib3MF_uint32 CReader::GetWarningCount() + PAttachment CImageStack::GetSheet(const Lib3MF_uint32 nIndex) { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Reader_GetWarningCount(m_pHandle, &resultCount)); + Lib3MFHandle hSheet = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImageStack_GetSheet(m_pHandle, nIndex, &hSheet)); - return resultCount; + if (!hSheet) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSheet))); } /** - * CReader::AddKeyWrappingCallback - Registers a callback to deal with key wrapping mechanism from keystore - * @param[in] sConsumerID - The ConsumerID to register for - * @param[in] pTheCallback - The callback used to decrypt data key - * @param[in] pUserData - Userdata that is passed to the callback function + * CImageStack::SetSheet - Sets a sheet to an existing attachment. + * @param[in] nIndex - index of the image (0-based) + * @param[in] pSheet - attachment containing the image */ - void CReader::AddKeyWrappingCallback(const std::string & sConsumerID, const KeyWrappingCallback pTheCallback, const Lib3MF_pvoid pUserData) + void CImageStack::SetSheet(const Lib3MF_uint32 nIndex, classParam pSheet) { - CheckError(m_pWrapper->m_WrapperTable.m_Reader_AddKeyWrappingCallback(m_pHandle, sConsumerID.c_str(), pTheCallback, pUserData)); + Lib3MFHandle hSheet = pSheet.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_ImageStack_SetSheet(m_pHandle, nIndex, hSheet)); } /** - * CReader::SetContentEncryptionCallback - Registers a callback to deal with encryption of content - * @param[in] pTheCallback - The callback used to encrypt content - * @param[in] pUserData - Userdata that is passed to the callback function + * CImageStack::CreateEmptySheet - Creates a new sheet attachment with empty data. + * @param[in] nIndex - index of the image (0-based) + * @param[in] sPath - path of part in the package + * @return attachment containing the image */ - void CReader::SetContentEncryptionCallback(const ContentEncryptionCallback pTheCallback, const Lib3MF_pvoid pUserData) + PAttachment CImageStack::CreateEmptySheet(const Lib3MF_uint32 nIndex, const std::string & sPath) { - CheckError(m_pWrapper->m_WrapperTable.m_Reader_SetContentEncryptionCallback(m_pHandle, pTheCallback, pUserData)); + Lib3MFHandle hSheet = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImageStack_CreateEmptySheet(m_pHandle, nIndex, sPath.c_str(), &hSheet)); + + if (!hSheet) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSheet))); } /** - * Method definitions for class CPackagePart - */ - - /** - * CPackagePart::GetPath - Returns the absolute path of this PackagePart. - * @return Returns the absolute path of this PackagePart + * CImageStack::CreateSheetFromBuffer - Creates a new sheet attachment from a memory buffer. + * @param[in] nIndex - index of the image (0-based) + * @param[in] sPath - path of part in the package + * @param[in] DataBuffer - binary image data + * @return attachment containing the image */ - std::string CPackagePart::GetPath() + PAttachment CImageStack::CreateSheetFromBuffer(const Lib3MF_uint32 nIndex, const std::string & sPath, const CInputVector & DataBuffer) { - Lib3MF_uint32 bytesNeededPath = 0; - Lib3MF_uint32 bytesWrittenPath = 0; - CheckError(m_pWrapper->m_WrapperTable.m_PackagePart_GetPath(m_pHandle, 0, &bytesNeededPath, nullptr)); - std::vector bufferPath(bytesNeededPath); - CheckError(m_pWrapper->m_WrapperTable.m_PackagePart_GetPath(m_pHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0])); + Lib3MFHandle hSheet = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImageStack_CreateSheetFromBuffer(m_pHandle, nIndex, sPath.c_str(), (Lib3MF_uint64)DataBuffer.size(), DataBuffer.data(), &hSheet)); - return std::string(&bufferPath[0]); + if (!hSheet) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSheet))); } /** - * CPackagePart::SetPath - Sets the absolute path of this PackagePart. - * @param[in] sPath - Sets the absolute path of this PackagePart. + * CImageStack::CreateSheetFromFile - Creates a new sheet attachment from a file on disk. + * @param[in] nIndex - index of the image (0-based) + * @param[in] sPath - path of part in the package + * @param[in] sFileName - file name to read from + * @return attachment containing the image */ - void CPackagePart::SetPath(const std::string & sPath) + PAttachment CImageStack::CreateSheetFromFile(const Lib3MF_uint32 nIndex, const std::string & sPath, const std::string & sFileName) { - CheckError(m_pWrapper->m_WrapperTable.m_PackagePart_SetPath(m_pHandle, sPath.c_str())); + Lib3MFHandle hSheet = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImageStack_CreateSheetFromFile(m_pHandle, nIndex, sPath.c_str(), sFileName.c_str(), &hSheet)); + + if (!hSheet) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSheet))); } /** - * Method definitions for class CResource + * Method definitions for class CAttachment */ /** - * CResource::GetResourceID - Retrieves the unique id of this resource within a package. This function will be removed in a later release in favor of GetUniqueResourceID - * @return Retrieves the unique id of this resource within a package. + * CAttachment::GetPath - Retrieves an attachment's package path. This function will be removed in a later release. + * @return returns the attachment's package path string */ - Lib3MF_uint32 CResource::GetResourceID() + std::string CAttachment::GetPath() { - Lib3MF_uint32 resultUniqueResourceID = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Resource_GetResourceID(m_pHandle, &resultUniqueResourceID)); + Lib3MF_uint32 bytesNeededPath = 0; + Lib3MF_uint32 bytesWrittenPath = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_GetPath(m_pHandle, 0, &bytesNeededPath, nullptr)); + std::vector bufferPath(bytesNeededPath); + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_GetPath(m_pHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0])); - return resultUniqueResourceID; + return std::string(&bufferPath[0]); } /** - * CResource::GetUniqueResourceID - Retrieves the unique id of this resource within a package. - * @return Retrieves the unique id of this resource within a package. + * CAttachment::SetPath - Sets an attachment's package path. This function will be removed in a later release. + * @param[in] sPath - new path of the attachment. */ - Lib3MF_uint32 CResource::GetUniqueResourceID() + void CAttachment::SetPath(const std::string & sPath) { - Lib3MF_uint32 resultUniqueResourceID = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Resource_GetUniqueResourceID(m_pHandle, &resultUniqueResourceID)); - - return resultUniqueResourceID; + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_SetPath(m_pHandle, sPath.c_str())); } /** - * CResource::PackagePart - Returns the PackagePart within which this resource resides - * @return the PackagePart within which this resource resides. + * CAttachment::PackagePart - Returns the PackagePart that is this attachment. + * @return The PackagePart of this attachment. */ - PPackagePart CResource::PackagePart() + PPackagePart CAttachment::PackagePart() { Lib3MFHandle hPackagePart = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_Resource_PackagePart(m_pHandle, &hPackagePart)); + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_PackagePart(m_pHandle, &hPackagePart)); if (!hPackagePart) { CheckError(LIB3MF_ERROR_INVALIDPARAM); @@ -7456,2215 +15594,2949 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) } /** - * CResource::SetPackagePart - Sets the new PackagePart within which this resource resides - * @param[in] pPackagePart - the new PackagePart within which this resource resides. + * CAttachment::GetRelationShipType - Retrieves an attachment's relationship type + * @return returns the attachment's package relationship type string */ - void CResource::SetPackagePart(classParam pPackagePart) + std::string CAttachment::GetRelationShipType() { - Lib3MFHandle hPackagePart = pPackagePart.GetHandle(); - CheckError(m_pWrapper->m_WrapperTable.m_Resource_SetPackagePart(m_pHandle, hPackagePart)); + Lib3MF_uint32 bytesNeededPath = 0; + Lib3MF_uint32 bytesWrittenPath = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_GetRelationShipType(m_pHandle, 0, &bytesNeededPath, nullptr)); + std::vector bufferPath(bytesNeededPath); + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_GetRelationShipType(m_pHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0])); + + return std::string(&bufferPath[0]); } /** - * CResource::GetModelResourceID - Retrieves the id of this resource within a model. - * @return Retrieves the id of this resource within a model. + * CAttachment::SetRelationShipType - Sets an attachment's relationship type. + * @param[in] sPath - new relationship type string. */ - Lib3MF_uint32 CResource::GetModelResourceID() + void CAttachment::SetRelationShipType(const std::string & sPath) { - Lib3MF_uint32 resultModelResourceId = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Resource_GetModelResourceID(m_pHandle, &resultModelResourceId)); - - return resultModelResourceId; + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_SetRelationShipType(m_pHandle, sPath.c_str())); } /** - * Method definitions for class CResourceIterator - */ + * CAttachment::WriteToFile - Writes out the attachment as file. + * @param[in] sFileName - file to write into. + */ + void CAttachment::WriteToFile(const std::string & sFileName) + { + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_WriteToFile(m_pHandle, sFileName.c_str())); + } /** - * CResourceIterator::MoveNext - Iterates to the next resource in the list. - * @return Iterates to the next resource in the list. + * CAttachment::ReadFromFile - Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. + * @param[in] sFileName - file to read from. */ - bool CResourceIterator::MoveNext() + void CAttachment::ReadFromFile(const std::string & sFileName) { - bool resultHasNext = 0; - CheckError(m_pWrapper->m_WrapperTable.m_ResourceIterator_MoveNext(m_pHandle, &resultHasNext)); - - return resultHasNext; + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_ReadFromFile(m_pHandle, sFileName.c_str())); } /** - * CResourceIterator::MovePrevious - Iterates to the previous resource in the list. - * @return Iterates to the previous resource in the list. + * CAttachment::ReadFromCallback - Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. + * @param[in] pTheReadCallback - Callback to call for reading a data chunk + * @param[in] nStreamSize - number of bytes the callback returns + * @param[in] pTheSeekCallback - Callback to call for seeking in the stream. + * @param[in] pUserData - Userdata that is passed to the callback function */ - bool CResourceIterator::MovePrevious() + void CAttachment::ReadFromCallback(const ReadCallback pTheReadCallback, const Lib3MF_uint64 nStreamSize, const SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) { - bool resultHasPrevious = 0; - CheckError(m_pWrapper->m_WrapperTable.m_ResourceIterator_MovePrevious(m_pHandle, &resultHasPrevious)); - - return resultHasPrevious; + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_ReadFromCallback(m_pHandle, pTheReadCallback, nStreamSize, pTheSeekCallback, pUserData)); } /** - * CResourceIterator::GetCurrent - Returns the resource the iterator points at. - * @return returns the resource instance. + * CAttachment::GetStreamSize - Retrieves the size of the attachment stream + * @return the stream size */ - PResource CResourceIterator::GetCurrent() + Lib3MF_uint64 CAttachment::GetStreamSize() { - Lib3MFHandle hResource = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_ResourceIterator_GetCurrent(m_pHandle, &hResource)); + Lib3MF_uint64 resultStreamSize = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_GetStreamSize(m_pHandle, &resultStreamSize)); - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return resultStreamSize; } /** - * CResourceIterator::Clone - Creates a new resource iterator with the same resource list. - * @return returns the cloned Iterator instance + * CAttachment::WriteToBuffer - Writes out the attachment into a buffer + * @param[out] BufferBuffer - Buffer to write into */ - PResourceIterator CResourceIterator::Clone() + void CAttachment::WriteToBuffer(std::vector & BufferBuffer) { - Lib3MFHandle hOutResourceIterator = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_ResourceIterator_Clone(m_pHandle, &hOutResourceIterator)); - - if (!hOutResourceIterator) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hOutResourceIterator))); + Lib3MF_uint64 elementsNeededBuffer = 0; + Lib3MF_uint64 elementsWrittenBuffer = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_WriteToBuffer(m_pHandle, 0, &elementsNeededBuffer, nullptr)); + BufferBuffer.resize((size_t) elementsNeededBuffer); + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_WriteToBuffer(m_pHandle, elementsNeededBuffer, &elementsWrittenBuffer, BufferBuffer.data())); } /** - * CResourceIterator::Count - Returns the number of resoucres the iterator captures. - * @return returns the number of resoucres the iterator captures. + * CAttachment::ReadFromBuffer - Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). + * @param[in] BufferBuffer - Buffer to read from */ - Lib3MF_uint64 CResourceIterator::Count() + void CAttachment::ReadFromBuffer(const CInputVector & BufferBuffer) { - Lib3MF_uint64 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_ResourceIterator_Count(m_pHandle, &resultCount)); - - return resultCount; + CheckError(m_pWrapper->m_WrapperTable.m_Attachment_ReadFromBuffer(m_pHandle, (Lib3MF_uint64)BufferBuffer.size(), BufferBuffer.data())); } /** - * Method definitions for class CSliceStackIterator + * Method definitions for class CTexture2D */ /** - * CSliceStackIterator::GetCurrentSliceStack - Returns the SliceStack the iterator points at. - * @return returns the SliceStack instance. + * CTexture2D::GetAttachment - Retrieves the attachment located at the path of the texture. + * @return attachment that holds the texture's image information. */ - PSliceStack CSliceStackIterator::GetCurrentSliceStack() + PAttachment CTexture2D::GetAttachment() { - Lib3MFHandle hResource = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_SliceStackIterator_GetCurrentSliceStack(m_pHandle, &hResource)); + Lib3MFHandle hAttachment = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_GetAttachment(m_pHandle, &hAttachment)); - if (!hResource) { + if (!hAttachment) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hAttachment))); } /** - * Method definitions for class CObjectIterator - */ + * CTexture2D::SetAttachment - Sets the texture's package path to the path of the attachment. + * @param[in] pAttachment - attachment that holds the texture's image information. + */ + void CTexture2D::SetAttachment(classParam pAttachment) + { + Lib3MFHandle hAttachment = pAttachment.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_SetAttachment(m_pHandle, hAttachment)); + } /** - * CObjectIterator::GetCurrentObject - Returns the Object the iterator points at. - * @return returns the Object instance. + * CTexture2D::GetContentType - Retrieves a texture's content type. + * @return returns content type enum. */ - PObject CObjectIterator::GetCurrentObject() + eTextureType CTexture2D::GetContentType() { - Lib3MFHandle hResource = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_ObjectIterator_GetCurrentObject(m_pHandle, &hResource)); + eTextureType resultContentType = (eTextureType) 0; + CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_GetContentType(m_pHandle, &resultContentType)); - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return resultContentType; } /** - * Method definitions for class CMeshObjectIterator - */ + * CTexture2D::SetContentType - Retrieves a texture's content type. + * @param[in] eContentType - new Content Type + */ + void CTexture2D::SetContentType(const eTextureType eContentType) + { + CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_SetContentType(m_pHandle, eContentType)); + } /** - * CMeshObjectIterator::GetCurrentMeshObject - Returns the MeshObject the iterator points at. - * @return returns the MeshObject instance. + * CTexture2D::GetTileStyleUV - Retrieves a texture's tilestyle type. + * @param[out] eTileStyleU - returns tilestyle type enum. + * @param[out] eTileStyleV - returns tilestyle type enum. */ - PMeshObject CMeshObjectIterator::GetCurrentMeshObject() + void CTexture2D::GetTileStyleUV(eTextureTileStyle & eTileStyleU, eTextureTileStyle & eTileStyleV) { - Lib3MFHandle hResource = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_MeshObjectIterator_GetCurrentMeshObject(m_pHandle, &hResource)); - - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_GetTileStyleUV(m_pHandle, &eTileStyleU, &eTileStyleV)); } /** - * Method definitions for class CComponentsObjectIterator - */ + * CTexture2D::SetTileStyleUV - Sets a texture's tilestyle type. + * @param[in] eTileStyleU - new tilestyle type enum. + * @param[in] eTileStyleV - new tilestyle type enum. + */ + void CTexture2D::SetTileStyleUV(const eTextureTileStyle eTileStyleU, const eTextureTileStyle eTileStyleV) + { + CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_SetTileStyleUV(m_pHandle, eTileStyleU, eTileStyleV)); + } /** - * CComponentsObjectIterator::GetCurrentComponentsObject - Returns the ComponentsObject the iterator points at. - * @return returns the ComponentsObject instance. + * CTexture2D::GetFilter - Retrieves a texture's filter type. + * @return returns filter type enum. */ - PComponentsObject CComponentsObjectIterator::GetCurrentComponentsObject() + eTextureFilter CTexture2D::GetFilter() { - Lib3MFHandle hResource = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_ComponentsObjectIterator_GetCurrentComponentsObject(m_pHandle, &hResource)); + eTextureFilter resultFilter = (eTextureFilter) 0; + CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_GetFilter(m_pHandle, &resultFilter)); - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return resultFilter; } /** - * Method definitions for class CTexture2DIterator - */ - - /** - * CTexture2DIterator::GetCurrentTexture2D - Returns the Texture2D the iterator points at. - * @return returns the Texture2D instance. + * CTexture2D::SetFilter - Sets a texture's filter type. + * @param[in] eFilter - sets new filter type enum. */ - PTexture2D CTexture2DIterator::GetCurrentTexture2D() + void CTexture2D::SetFilter(const eTextureFilter eFilter) { - Lib3MFHandle hResource = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_Texture2DIterator_GetCurrentTexture2D(m_pHandle, &hResource)); - - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_SetFilter(m_pHandle, eFilter)); } /** - * Method definitions for class CBaseMaterialGroupIterator + * Method definitions for class CImplicitPort */ /** - * CBaseMaterialGroupIterator::GetCurrentBaseMaterialGroup - Returns the MaterialGroup the iterator points at. - * @return returns the BaseMaterialGroup instance. + * CImplicitPort::GetIdentifier - Retrieves the identifier of the port + * @return the identifier */ - PBaseMaterialGroup CBaseMaterialGroupIterator::GetCurrentBaseMaterialGroup() + std::string CImplicitPort::GetIdentifier() { - Lib3MFHandle hResource = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroupIterator_GetCurrentBaseMaterialGroup(m_pHandle, &hResource)); + Lib3MF_uint32 bytesNeededIdentifier = 0; + Lib3MF_uint32 bytesWrittenIdentifier = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitPort_GetIdentifier(m_pHandle, 0, &bytesNeededIdentifier, nullptr)); + std::vector bufferIdentifier(bytesNeededIdentifier); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitPort_GetIdentifier(m_pHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0])); - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return std::string(&bufferIdentifier[0]); } /** - * Method definitions for class CColorGroupIterator - */ + * CImplicitPort::SetIdentifier - Sets the identifier of the port + * @param[in] sIdentifier - the identifier + */ + void CImplicitPort::SetIdentifier(const std::string & sIdentifier) + { + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitPort_SetIdentifier(m_pHandle, sIdentifier.c_str())); + } /** - * CColorGroupIterator::GetCurrentColorGroup - Returns the ColorGroup the iterator points at. - * @return returns the ColorGroup instance. + * CImplicitPort::GetDisplayName - Retrieves the display name of the port + * @return the display name */ - PColorGroup CColorGroupIterator::GetCurrentColorGroup() + std::string CImplicitPort::GetDisplayName() { - Lib3MFHandle hResource = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_ColorGroupIterator_GetCurrentColorGroup(m_pHandle, &hResource)); + Lib3MF_uint32 bytesNeededDisplayName = 0; + Lib3MF_uint32 bytesWrittenDisplayName = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitPort_GetDisplayName(m_pHandle, 0, &bytesNeededDisplayName, nullptr)); + std::vector bufferDisplayName(bytesNeededDisplayName); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitPort_GetDisplayName(m_pHandle, bytesNeededDisplayName, &bytesWrittenDisplayName, &bufferDisplayName[0])); - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return std::string(&bufferDisplayName[0]); } /** - * Method definitions for class CTexture2DGroupIterator - */ - - /** - * CTexture2DGroupIterator::GetCurrentTexture2DGroup - Returns the Texture2DGroup the iterator points at. - * @return returns the Texture2DGroup instance. + * CImplicitPort::SetDisplayName - Sets the display name of the port + * @param[in] sDisplayName - the display name */ - PTexture2DGroup CTexture2DGroupIterator::GetCurrentTexture2DGroup() + void CImplicitPort::SetDisplayName(const std::string & sDisplayName) { - Lib3MFHandle hResource = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroupIterator_GetCurrentTexture2DGroup(m_pHandle, &hResource)); - - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitPort_SetDisplayName(m_pHandle, sDisplayName.c_str())); } /** - * Method definitions for class CCompositeMaterialsIterator - */ + * CImplicitPort::SetType - Sets the type of the port + * @param[in] eImplicitPortType - the type + */ + void CImplicitPort::SetType(const eImplicitPortType eImplicitPortType) + { + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitPort_SetType(m_pHandle, eImplicitPortType)); + } /** - * CCompositeMaterialsIterator::GetCurrentCompositeMaterials - Returns the CompositeMaterials the iterator points at. - * @return returns the CompositeMaterials instance. + * CImplicitPort::GetType - Retrieves the type of the port + * @return the type */ - PCompositeMaterials CCompositeMaterialsIterator::GetCurrentCompositeMaterials() + eImplicitPortType CImplicitPort::GetType() { - Lib3MFHandle hResource = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterialsIterator_GetCurrentCompositeMaterials(m_pHandle, &hResource)); + eImplicitPortType resultImplicitPortType = (eImplicitPortType) 0; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitPort_GetType(m_pHandle, &resultImplicitPortType)); - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + return resultImplicitPortType; } /** - * Method definitions for class CMultiPropertyGroupIterator - */ + * CImplicitPort::GetReference - Retrieves the reference of the port, only used for input ports + * @return the reference + */ + std::string CImplicitPort::GetReference() + { + Lib3MF_uint32 bytesNeededReference = 0; + Lib3MF_uint32 bytesWrittenReference = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitPort_GetReference(m_pHandle, 0, &bytesNeededReference, nullptr)); + std::vector bufferReference(bytesNeededReference); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitPort_GetReference(m_pHandle, bytesNeededReference, &bytesWrittenReference, &bufferReference[0])); + + return std::string(&bufferReference[0]); + } /** - * CMultiPropertyGroupIterator::GetCurrentMultiPropertyGroup - Returns the MultiPropertyGroup the iterator points at. - * @return returns the MultiPropertyGroup instance. + * CImplicitPort::SetReference - Sets the reference of the port, only used for input ports + * @param[in] sReference - the reference */ - PMultiPropertyGroup CMultiPropertyGroupIterator::GetCurrentMultiPropertyGroup() + void CImplicitPort::SetReference(const std::string & sReference) { - Lib3MFHandle hResource = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup(m_pHandle, &hResource)); - - if (!hResource) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); - } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitPort_SetReference(m_pHandle, sReference.c_str())); } /** - * Method definitions for class CMetaData + * Method definitions for class CIterator */ /** - * CMetaData::GetNameSpace - returns the namespace URL of the metadata - * @return the namespace URL of the metadata + * CIterator::MoveNext - Iterates to the next item in the list. + * @return Iterates to the next item in the list. */ - std::string CMetaData::GetNameSpace() + bool CIterator::MoveNext() { - Lib3MF_uint32 bytesNeededNameSpace = 0; - Lib3MF_uint32 bytesWrittenNameSpace = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetNameSpace(m_pHandle, 0, &bytesNeededNameSpace, nullptr)); - std::vector bufferNameSpace(bytesNeededNameSpace); - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetNameSpace(m_pHandle, bytesNeededNameSpace, &bytesWrittenNameSpace, &bufferNameSpace[0])); + bool resultHasNext = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Iterator_MoveNext(m_pHandle, &resultHasNext)); - return std::string(&bufferNameSpace[0]); + return resultHasNext; } /** - * CMetaData::SetNameSpace - sets a new namespace URL of the metadata - * @param[in] sNameSpace - the new namespace URL of the metadata + * CIterator::MovePrevious - Iterates to the previous item in the list. + * @return Iterates to the previous item in the list. */ - void CMetaData::SetNameSpace(const std::string & sNameSpace) + bool CIterator::MovePrevious() { - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_SetNameSpace(m_pHandle, sNameSpace.c_str())); + bool resultHasPrevious = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Iterator_MovePrevious(m_pHandle, &resultHasPrevious)); + + return resultHasPrevious; } /** - * CMetaData::GetName - returns the name of a metadata - * @return the name of the metadata + * CIterator::Count - Returns the number of items the iterator captures. + * @return returns the number of items the iterator captures. */ - std::string CMetaData::GetName() + Lib3MF_uint64 CIterator::Count() { - Lib3MF_uint32 bytesNeededName = 0; - Lib3MF_uint32 bytesWrittenName = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetName(m_pHandle, 0, &bytesNeededName, nullptr)); - std::vector bufferName(bytesNeededName); - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetName(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); + Lib3MF_uint64 resultCount = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Iterator_Count(m_pHandle, &resultCount)); - return std::string(&bufferName[0]); + return resultCount; } /** - * CMetaData::SetName - sets a new name of a metadata - * @param[in] sName - the new name of the metadata - */ - void CMetaData::SetName(const std::string & sName) - { - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_SetName(m_pHandle, sName.c_str())); - } + * Method definitions for class CImplicitPortIterator + */ /** - * CMetaData::GetKey - returns the (namespace+name) of a metadata - * @return the key (namespace+name) of the metadata + * CImplicitPortIterator::GetCurrent - Returns the current element + * @return The current element */ - std::string CMetaData::GetKey() + PImplicitPort CImplicitPortIterator::GetCurrent() { - Lib3MF_uint32 bytesNeededKey = 0; - Lib3MF_uint32 bytesWrittenKey = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetKey(m_pHandle, 0, &bytesNeededKey, nullptr)); - std::vector bufferKey(bytesNeededKey); - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetKey(m_pHandle, bytesNeededKey, &bytesWrittenKey, &bufferKey[0])); + Lib3MFHandle hPort = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitPortIterator_GetCurrent(m_pHandle, &hPort)); - return std::string(&bufferKey[0]); + if (!hPort) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPort))); } /** - * CMetaData::GetMustPreserve - returns, whether a metadata must be preserved - * @return returns, whether a metadata must be preserved + * Method definitions for class CImplicitNode + */ + + /** + * CImplicitNode::GetIdentifier - Retrieves the identifier of the node + * @return the identifier */ - bool CMetaData::GetMustPreserve() + std::string CImplicitNode::GetIdentifier() { - bool resultMustPreserve = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetMustPreserve(m_pHandle, &resultMustPreserve)); + Lib3MF_uint32 bytesNeededIdentifier = 0; + Lib3MF_uint32 bytesWrittenIdentifier = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_GetIdentifier(m_pHandle, 0, &bytesNeededIdentifier, nullptr)); + std::vector bufferIdentifier(bytesNeededIdentifier); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_GetIdentifier(m_pHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0])); - return resultMustPreserve; + return std::string(&bufferIdentifier[0]); } /** - * CMetaData::SetMustPreserve - sets whether a metadata must be preserved - * @param[in] bMustPreserve - a new value whether a metadata must be preserved + * CImplicitNode::SetIdentifier - Sets the identifier of the node + * @param[in] sIdentifier - the identifier */ - void CMetaData::SetMustPreserve(const bool bMustPreserve) + void CImplicitNode::SetIdentifier(const std::string & sIdentifier) { - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_SetMustPreserve(m_pHandle, bMustPreserve)); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_SetIdentifier(m_pHandle, sIdentifier.c_str())); } /** - * CMetaData::GetType - returns the type of a metadata - * @return the type of the metadata + * CImplicitNode::GetDisplayName - Retrieves the display name of the node + * @return the display name */ - std::string CMetaData::GetType() - { - Lib3MF_uint32 bytesNeededType = 0; - Lib3MF_uint32 bytesWrittenType = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetType(m_pHandle, 0, &bytesNeededType, nullptr)); - std::vector bufferType(bytesNeededType); - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetType(m_pHandle, bytesNeededType, &bytesWrittenType, &bufferType[0])); + std::string CImplicitNode::GetDisplayName() + { + Lib3MF_uint32 bytesNeededDisplayName = 0; + Lib3MF_uint32 bytesWrittenDisplayName = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_GetDisplayName(m_pHandle, 0, &bytesNeededDisplayName, nullptr)); + std::vector bufferDisplayName(bytesNeededDisplayName); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_GetDisplayName(m_pHandle, bytesNeededDisplayName, &bytesWrittenDisplayName, &bufferDisplayName[0])); - return std::string(&bufferType[0]); + return std::string(&bufferDisplayName[0]); } /** - * CMetaData::SetType - sets a new type of a metadata. This must be a simple XML type - * @param[in] sType - a new type of the metadata + * CImplicitNode::SetDisplayName - Sets the display name of the node + * @param[in] sDisplayName - the display name */ - void CMetaData::SetType(const std::string & sType) + void CImplicitNode::SetDisplayName(const std::string & sDisplayName) { - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_SetType(m_pHandle, sType.c_str())); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_SetDisplayName(m_pHandle, sDisplayName.c_str())); } /** - * CMetaData::GetValue - returns the value of the metadata - * @return the value of the metadata + * CImplicitNode::GetTag - Retrieves the tag of the node + * @return the tag */ - std::string CMetaData::GetValue() + std::string CImplicitNode::GetTag() { - Lib3MF_uint32 bytesNeededValue = 0; - Lib3MF_uint32 bytesWrittenValue = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetValue(m_pHandle, 0, &bytesNeededValue, nullptr)); - std::vector bufferValue(bytesNeededValue); - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_GetValue(m_pHandle, bytesNeededValue, &bytesWrittenValue, &bufferValue[0])); + Lib3MF_uint32 bytesNeededTag = 0; + Lib3MF_uint32 bytesWrittenTag = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_GetTag(m_pHandle, 0, &bytesNeededTag, nullptr)); + std::vector bufferTag(bytesNeededTag); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_GetTag(m_pHandle, bytesNeededTag, &bytesWrittenTag, &bufferTag[0])); - return std::string(&bufferValue[0]); + return std::string(&bufferTag[0]); } /** - * CMetaData::SetValue - sets a new value of the metadata - * @param[in] sValue - a new value of the metadata + * CImplicitNode::SetTag - Sets the tag of the node + * @param[in] sTag - the tag */ - void CMetaData::SetValue(const std::string & sValue) + void CImplicitNode::SetTag(const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_MetaData_SetValue(m_pHandle, sValue.c_str())); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_SetTag(m_pHandle, sTag.c_str())); } /** - * Method definitions for class CMetaDataGroup - */ + * CImplicitNode::GetNodeType - Retrieves the type of the node + * @return the type of the node + */ + eImplicitNodeType CImplicitNode::GetNodeType() + { + eImplicitNodeType resultType = (eImplicitNodeType) 0; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_GetNodeType(m_pHandle, &resultType)); + + return resultType; + } /** - * CMetaDataGroup::GetMetaDataCount - returns the number of metadata in this metadatagroup - * @return returns the number metadata + * CImplicitNode::AddInput - Add an input + * @param[in] sIdentifier - the identifier of the input + * @param[in] sDisplayName - the display name of the input + * @return */ - Lib3MF_uint32 CMetaDataGroup::GetMetaDataCount() + PImplicitPort CImplicitNode::AddInput(const std::string & sIdentifier, const std::string & sDisplayName) { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MetaDataGroup_GetMetaDataCount(m_pHandle, &resultCount)); + Lib3MFHandle hPort = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_AddInput(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), &hPort)); - return resultCount; + if (!hPort) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPort))); } /** - * CMetaDataGroup::GetMetaData - returns a metadata value within this metadatagroup - * @param[in] nIndex - Index of the Metadata. - * @return an instance of the metadata + * CImplicitNode::GetInputs - Retrieves the inputs + * @return the iterator for the inputs */ - PMetaData CMetaDataGroup::GetMetaData(const Lib3MF_uint32 nIndex) + PImplicitPortIterator CImplicitNode::GetInputs() { - Lib3MFHandle hMetaData = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_MetaDataGroup_GetMetaData(m_pHandle, nIndex, &hMetaData)); + Lib3MFHandle hIterator = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_GetInputs(m_pHandle, &hIterator)); - if (!hMetaData) { + if (!hIterator) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaData))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hIterator))); } /** - * CMetaDataGroup::GetMetaDataByKey - returns a metadata value within this metadatagroup - * @param[in] sNameSpace - the namespace of the metadata - * @param[in] sName - the name of the Metadata - * @return an instance of the metadata + * CImplicitNode::AddOutput - Add an output + * @param[in] sIdentifier - the identifier of the output + * @param[in] sDisplayName - the display name of the output + * @return */ - PMetaData CMetaDataGroup::GetMetaDataByKey(const std::string & sNameSpace, const std::string & sName) + PImplicitPort CImplicitNode::AddOutput(const std::string & sIdentifier, const std::string & sDisplayName) { - Lib3MFHandle hMetaData = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_MetaDataGroup_GetMetaDataByKey(m_pHandle, sNameSpace.c_str(), sName.c_str(), &hMetaData)); + Lib3MFHandle hPort = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_AddOutput(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), &hPort)); - if (!hMetaData) { + if (!hPort) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaData))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPort))); } /** - * CMetaDataGroup::RemoveMetaDataByIndex - removes metadata by index from the model. - * @param[in] nIndex - Index of the metadata to remove + * CImplicitNode::GetOutputs - Retrieves the outputs + * @return the iterator the outputs */ - void CMetaDataGroup::RemoveMetaDataByIndex(const Lib3MF_uint32 nIndex) + PImplicitPortIterator CImplicitNode::GetOutputs() { - CheckError(m_pWrapper->m_WrapperTable.m_MetaDataGroup_RemoveMetaDataByIndex(m_pHandle, nIndex)); + Lib3MFHandle hIterator = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_GetOutputs(m_pHandle, &hIterator)); + + if (!hIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hIterator))); } /** - * CMetaDataGroup::RemoveMetaData - removes metadata from the model. - * @param[in] pTheMetaData - The metadata to remove + * CImplicitNode::FindInput - Retrieves an input + * @param[in] sIdentifier - the identifier of the input + * @return the input port */ - void CMetaDataGroup::RemoveMetaData(classParam pTheMetaData) + PImplicitPort CImplicitNode::FindInput(const std::string & sIdentifier) { - Lib3MFHandle hTheMetaData = pTheMetaData.GetHandle(); - CheckError(m_pWrapper->m_WrapperTable.m_MetaDataGroup_RemoveMetaData(m_pHandle, hTheMetaData)); + Lib3MFHandle hInput = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_FindInput(m_pHandle, sIdentifier.c_str(), &hInput)); + + if (hInput) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hInput))); + } else { + return nullptr; + } } /** - * CMetaDataGroup::AddMetaData - adds a new metadata to this metadatagroup - * @param[in] sNameSpace - the namespace of the metadata - * @param[in] sName - the name of the metadata - * @param[in] sValue - the value of the metadata - * @param[in] sType - the type of the metadata - * @param[in] bMustPreserve - shuold the metadata be preserved - * @return a new instance of the metadata + * CImplicitNode::FindOutput - Retrieves an output + * @param[in] sIdentifier - the identifier of the output + * @return the output port */ - PMetaData CMetaDataGroup::AddMetaData(const std::string & sNameSpace, const std::string & sName, const std::string & sValue, const std::string & sType, const bool bMustPreserve) + PImplicitPort CImplicitNode::FindOutput(const std::string & sIdentifier) { - Lib3MFHandle hMetaData = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_MetaDataGroup_AddMetaData(m_pHandle, sNameSpace.c_str(), sName.c_str(), sValue.c_str(), sType.c_str(), bMustPreserve, &hMetaData)); + Lib3MFHandle hOutput = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_FindOutput(m_pHandle, sIdentifier.c_str(), &hOutput)); - if (!hMetaData) { - CheckError(LIB3MF_ERROR_INVALIDPARAM); + if (hOutput) { + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hOutput))); + } else { + return nullptr; } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaData))); } /** - * Method definitions for class CObject + * CImplicitNode::AreTypesValid - Checks if the types of the input and output ports are valid for the node type + * @return true, if the types are valid + */ + bool CImplicitNode::AreTypesValid() + { + bool resultValid = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitNode_AreTypesValid(m_pHandle, &resultValid)); + + return resultValid; + } + + /** + * Method definitions for class COneInputNode */ /** - * CObject::GetType - Retrieves an object's type - * @return returns object type enum. + * COneInputNode::GetInputA - Retrieves the input + * @return the input */ - eObjectType CObject::GetType() + PImplicitPort COneInputNode::GetInputA() { - eObjectType resultObjectType = (eObjectType) 0; - CheckError(m_pWrapper->m_WrapperTable.m_Object_GetType(m_pHandle, &resultObjectType)); + Lib3MFHandle hInput = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_OneInputNode_GetInputA(m_pHandle, &hInput)); - return resultObjectType; + if (!hInput) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hInput))); } /** - * CObject::SetType - Sets an object's type - * @param[in] eObjectType - object type enum. + * COneInputNode::GetOutputResult - Retrieves the output + * @return the output */ - void CObject::SetType(const eObjectType eObjectType) + PImplicitPort COneInputNode::GetOutputResult() { - CheckError(m_pWrapper->m_WrapperTable.m_Object_SetType(m_pHandle, eObjectType)); + Lib3MFHandle hResult = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_OneInputNode_GetOutputResult(m_pHandle, &hResult)); + + if (!hResult) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResult))); } /** - * CObject::GetName - Retrieves an object's name - * @return returns object name. + * Method definitions for class CSinNode + */ + + /** + * Method definitions for class CCosNode + */ + + /** + * Method definitions for class CTanNode + */ + + /** + * Method definitions for class CArcSinNode + */ + + /** + * Method definitions for class CArcCosNode + */ + + /** + * Method definitions for class CArcTanNode + */ + + /** + * Method definitions for class CSinhNode + */ + + /** + * Method definitions for class CCoshNode + */ + + /** + * Method definitions for class CTanhNode + */ + + /** + * Method definitions for class CRoundNode + */ + + /** + * Method definitions for class CCeilNode + */ + + /** + * Method definitions for class CFloorNode + */ + + /** + * Method definitions for class CSignNode + */ + + /** + * Method definitions for class CFractNode + */ + + /** + * Method definitions for class CAbsNode + */ + + /** + * Method definitions for class CExpNode + */ + + /** + * Method definitions for class CLogNode + */ + + /** + * Method definitions for class CLog2Node + */ + + /** + * Method definitions for class CLog10Node + */ + + /** + * Method definitions for class CLengthNode + */ + + /** + * Method definitions for class CTransposeNode + */ + + /** + * Method definitions for class CInverseNode + */ + + /** + * Method definitions for class CSqrtNode + */ + + /** + * Method definitions for class CResourceIdNode + */ + + /** + * CResourceIdNode::SetResource - Sets the Resource that the resourceid attribute of the node will point to + * @param[in] pResource - the resource */ - std::string CObject::GetName() + void CResourceIdNode::SetResource(classParam pResource) { - Lib3MF_uint32 bytesNeededName = 0; - Lib3MF_uint32 bytesWrittenName = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Object_GetName(m_pHandle, 0, &bytesNeededName, nullptr)); - std::vector bufferName(bytesNeededName); - CheckError(m_pWrapper->m_WrapperTable.m_Object_GetName(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); + Lib3MFHandle hResource = pResource.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_ResourceIdNode_SetResource(m_pHandle, hResource)); + } + + /** + * CResourceIdNode::GetResource - Retrieves the resource of the node + * @return the resource + */ + PResource CResourceIdNode::GetResource() + { + Lib3MFHandle hResource = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ResourceIdNode_GetResource(m_pHandle, &hResource)); - return std::string(&bufferName[0]); + if (!hResource) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResource))); } /** - * CObject::SetName - Sets an object's name string - * @param[in] sName - new object name. + * CResourceIdNode::GetOutputValue - Retrieves the output + * @return the output */ - void CObject::SetName(const std::string & sName) + PImplicitPort CResourceIdNode::GetOutputValue() { - CheckError(m_pWrapper->m_WrapperTable.m_Object_SetName(m_pHandle, sName.c_str())); + Lib3MFHandle hValue = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ResourceIdNode_GetOutputValue(m_pHandle, &hValue)); + + if (!hValue) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hValue))); } /** - * CObject::GetPartNumber - Retrieves an object's part number - * @return returns object part number. + * Method definitions for class CTwoInputNode + */ + + /** + * CTwoInputNode::GetInputB - Retrieves the second input + * @return the second input */ - std::string CObject::GetPartNumber() + PImplicitPort CTwoInputNode::GetInputB() { - Lib3MF_uint32 bytesNeededPartNumber = 0; - Lib3MF_uint32 bytesWrittenPartNumber = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Object_GetPartNumber(m_pHandle, 0, &bytesNeededPartNumber, nullptr)); - std::vector bufferPartNumber(bytesNeededPartNumber); - CheckError(m_pWrapper->m_WrapperTable.m_Object_GetPartNumber(m_pHandle, bytesNeededPartNumber, &bytesWrittenPartNumber, &bufferPartNumber[0])); + Lib3MFHandle hB = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_TwoInputNode_GetInputB(m_pHandle, &hB)); - return std::string(&bufferPartNumber[0]); + if (!hB) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hB))); } /** - * CObject::SetPartNumber - Sets an objects partnumber string - * @param[in] sPartNumber - new object part number. - */ - void CObject::SetPartNumber(const std::string & sPartNumber) - { - CheckError(m_pWrapper->m_WrapperTable.m_Object_SetPartNumber(m_pHandle, sPartNumber.c_str())); - } + * Method definitions for class CAdditionNode + */ + + /** + * Method definitions for class CSubtractionNode + */ + + /** + * Method definitions for class CMultiplicationNode + */ + + /** + * Method definitions for class CDivisionNode + */ + + /** + * Method definitions for class CDotNode + */ + + /** + * Method definitions for class CCrossNode + */ + + /** + * Method definitions for class CArcTan2Node + */ + + /** + * Method definitions for class CMatVecMultiplicationNode + */ + + /** + * Method definitions for class CMinNode + */ + + /** + * Method definitions for class CMaxNode + */ + + /** + * Method definitions for class CFmodNode + */ + + /** + * Method definitions for class CModNode + */ + + /** + * Method definitions for class CPowNode + */ + + /** + * Method definitions for class CSelectNode + */ /** - * CObject::IsMeshObject - Retrieves, if an object is a mesh object - * @return returns, whether the object is a mesh object + * CSelectNode::GetInputB - Retrieves the second input + * @return the second input */ - bool CObject::IsMeshObject() + PImplicitPort CSelectNode::GetInputB() { - bool resultIsMeshObject = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Object_IsMeshObject(m_pHandle, &resultIsMeshObject)); + Lib3MFHandle hB = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_SelectNode_GetInputB(m_pHandle, &hB)); - return resultIsMeshObject; + if (!hB) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hB))); } /** - * CObject::IsComponentsObject - Retrieves, if an object is a components object - * @return returns, whether the object is a components object + * CSelectNode::GetInputC - Retrieves the third input + * @return the third input */ - bool CObject::IsComponentsObject() + PImplicitPort CSelectNode::GetInputC() { - bool resultIsComponentsObject = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Object_IsComponentsObject(m_pHandle, &resultIsComponentsObject)); + Lib3MFHandle hC = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_SelectNode_GetInputC(m_pHandle, &hC)); - return resultIsComponentsObject; + if (!hC) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hC))); } /** - * CObject::IsValid - Retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. - * @return returns whether the object is a valid object description + * CSelectNode::GetInputD - Retrieves the fourth input + * @return the fourth input */ - bool CObject::IsValid() + PImplicitPort CSelectNode::GetInputD() { - bool resultIsValid = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Object_IsValid(m_pHandle, &resultIsValid)); + Lib3MFHandle hD = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_SelectNode_GetInputD(m_pHandle, &hD)); - return resultIsValid; + if (!hD) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hD))); } /** - * CObject::SetAttachmentAsThumbnail - Use an existing attachment as thumbnail for this object - * @param[in] pAttachment - Instance of a new or the existing thumbnailattachment object. - */ - void CObject::SetAttachmentAsThumbnail(classParam pAttachment) - { - Lib3MFHandle hAttachment = pAttachment.GetHandle(); - CheckError(m_pWrapper->m_WrapperTable.m_Object_SetAttachmentAsThumbnail(m_pHandle, hAttachment)); - } + * Method definitions for class CClampNode + */ /** - * CObject::GetThumbnailAttachment - Get the attachment containing the object thumbnail. - * @return Instance of the thumbnailattachment object or NULL. + * CClampNode::GetInputMin - Retrieves the input for the lower limit + * @return the input for the lower limit */ - PAttachment CObject::GetThumbnailAttachment() + PImplicitPort CClampNode::GetInputMin() { - Lib3MFHandle hAttachment = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_Object_GetThumbnailAttachment(m_pHandle, &hAttachment)); + Lib3MFHandle hMin = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ClampNode_GetInputMin(m_pHandle, &hMin)); - if (hAttachment) { - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hAttachment))); - } else { - return nullptr; + if (!hMin) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMin))); } /** - * CObject::ClearThumbnailAttachment - Clears the attachment. The attachment instance is not removed from the package. + * CClampNode::GetInputMax - Retrieves the input for the upper limit + * @return the input for the upper limit */ - void CObject::ClearThumbnailAttachment() + PImplicitPort CClampNode::GetInputMax() { - CheckError(m_pWrapper->m_WrapperTable.m_Object_ClearThumbnailAttachment(m_pHandle)); + Lib3MFHandle hMax = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ClampNode_GetInputMax(m_pHandle, &hMax)); + + if (!hMax) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMax))); } /** - * CObject::GetOutbox - Returns the outbox of a build item - * @return Outbox of this build item + * Method definitions for class CComposeVectorNode + */ + + /** + * CComposeVectorNode::GetInputX - Retrieves the input for the x component + * @return the input for the x component */ - sBox CObject::GetOutbox() + PImplicitPort CComposeVectorNode::GetInputX() { - sBox resultOutbox; - CheckError(m_pWrapper->m_WrapperTable.m_Object_GetOutbox(m_pHandle, &resultOutbox)); + Lib3MFHandle hX = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeVectorNode_GetInputX(m_pHandle, &hX)); - return resultOutbox; + if (!hX) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hX))); } /** - * CObject::GetUUID - Retrieves an object's uuid string (see production extension specification) - * @param[out] bHasUUID - flag whether the build item has a UUID - * @return returns object uuid. + * CComposeVectorNode::GetInputY - Retrieves the input for the y component + * @return the input for the y component */ - std::string CObject::GetUUID(bool & bHasUUID) + PImplicitPort CComposeVectorNode::GetInputY() { - Lib3MF_uint32 bytesNeededUUID = 0; - Lib3MF_uint32 bytesWrittenUUID = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Object_GetUUID(m_pHandle, &bHasUUID, 0, &bytesNeededUUID, nullptr)); - std::vector bufferUUID(bytesNeededUUID); - CheckError(m_pWrapper->m_WrapperTable.m_Object_GetUUID(m_pHandle, &bHasUUID, bytesNeededUUID, &bytesWrittenUUID, &bufferUUID[0])); + Lib3MFHandle hY = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeVectorNode_GetInputY(m_pHandle, &hY)); - return std::string(&bufferUUID[0]); + if (!hY) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hY))); } /** - * CObject::SetUUID - Sets a build object's uuid string (see production extension specification) - * @param[in] sUUID - new object uuid string. + * CComposeVectorNode::GetInputZ - Retrieves the input for the z component + * @return the input for the z component */ - void CObject::SetUUID(const std::string & sUUID) + PImplicitPort CComposeVectorNode::GetInputZ() { - CheckError(m_pWrapper->m_WrapperTable.m_Object_SetUUID(m_pHandle, sUUID.c_str())); + Lib3MFHandle hZ = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeVectorNode_GetInputZ(m_pHandle, &hZ)); + + if (!hZ) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hZ))); } /** - * CObject::GetMetaDataGroup - Returns the metadatagroup of this object - * @return returns an Instance of the metadatagroup of this object + * CComposeVectorNode::GetOutputResult - Retrieves the output + * @return the output */ - PMetaDataGroup CObject::GetMetaDataGroup() + PImplicitPort CComposeVectorNode::GetOutputResult() { - Lib3MFHandle hMetaDataGroup = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_Object_GetMetaDataGroup(m_pHandle, &hMetaDataGroup)); + Lib3MFHandle hResult = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeVectorNode_GetOutputResult(m_pHandle, &hResult)); - if (!hMetaDataGroup) { + if (!hResult) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMetaDataGroup))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResult))); } /** - * CObject::SetSlicesMeshResolution - set the meshresolution of the mesh object - * @param[in] eMeshResolution - meshresolution of this object + * Method definitions for class CVectorFromScalarNode + */ + + /** + * Method definitions for class CDecomposeVectorNode + */ + + /** + * CDecomposeVectorNode::GetInputA - Retrieves the input + * @return the input port for the vector to decompose */ - void CObject::SetSlicesMeshResolution(const eSlicesMeshResolution eMeshResolution) + PImplicitPort CDecomposeVectorNode::GetInputA() { - CheckError(m_pWrapper->m_WrapperTable.m_Object_SetSlicesMeshResolution(m_pHandle, eMeshResolution)); + Lib3MFHandle hA = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_DecomposeVectorNode_GetInputA(m_pHandle, &hA)); + + if (!hA) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hA))); } /** - * CObject::GetSlicesMeshResolution - get the meshresolution of the mesh object - * @return meshresolution of this object + * CDecomposeVectorNode::GetOutputX - Retrieves the output for the x component + * @return the output for the x component */ - eSlicesMeshResolution CObject::GetSlicesMeshResolution() + PImplicitPort CDecomposeVectorNode::GetOutputX() { - eSlicesMeshResolution resultMeshResolution = (eSlicesMeshResolution) 0; - CheckError(m_pWrapper->m_WrapperTable.m_Object_GetSlicesMeshResolution(m_pHandle, &resultMeshResolution)); + Lib3MFHandle hX = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_DecomposeVectorNode_GetOutputX(m_pHandle, &hX)); - return resultMeshResolution; + if (!hX) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hX))); } /** - * CObject::HasSlices - returns whether the Object has a slice stack. If Recursive is true, also checks whether any references object has a slice stack - * @param[in] bRecursive - check also all referenced objects? - * @return does the object have a slice stack? + * CDecomposeVectorNode::GetOutputY - Retrieves the output for the y component + * @return the output for the y component */ - bool CObject::HasSlices(const bool bRecursive) + PImplicitPort CDecomposeVectorNode::GetOutputY() { - bool resultHasSlices = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Object_HasSlices(m_pHandle, bRecursive, &resultHasSlices)); + Lib3MFHandle hY = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_DecomposeVectorNode_GetOutputY(m_pHandle, &hY)); - return resultHasSlices; + if (!hY) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hY))); } /** - * CObject::ClearSliceStack - unlinks the attached slicestack from this object. If no slice stack is attached, do noting. + * CDecomposeVectorNode::GetOutputZ - Retrieves the output for the z component + * @return the output for the z component */ - void CObject::ClearSliceStack() + PImplicitPort CDecomposeVectorNode::GetOutputZ() { - CheckError(m_pWrapper->m_WrapperTable.m_Object_ClearSliceStack(m_pHandle)); + Lib3MFHandle hZ = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_DecomposeVectorNode_GetOutputZ(m_pHandle, &hZ)); + + if (!hZ) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hZ))); } /** - * CObject::GetSliceStack - get the Slicestack attached to the object - * @return returns the slicestack instance + * Method definitions for class CComposeMatrixNode + */ + + /** + * CComposeMatrixNode::GetInputM00 - Retrieves the input for the element 0 0 + * @return the input for the m00 element */ - PSliceStack CObject::GetSliceStack() + PImplicitPort CComposeMatrixNode::GetInputM00() { - Lib3MFHandle hSliceStackInstance = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_Object_GetSliceStack(m_pHandle, &hSliceStackInstance)); + Lib3MFHandle hM00 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM00(m_pHandle, &hM00)); - if (!hSliceStackInstance) { + if (!hM00) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSliceStackInstance))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM00))); } /** - * CObject::AssignSliceStack - assigns a slicestack to the object - * @param[in] pSliceStackInstance - the new slice stack of this Object + * CComposeMatrixNode::GetInputM01 - Retrieves the input for the element 0 1 + * @return the input for the m01 element */ - void CObject::AssignSliceStack(classParam pSliceStackInstance) + PImplicitPort CComposeMatrixNode::GetInputM01() { - Lib3MFHandle hSliceStackInstance = pSliceStackInstance.GetHandle(); - CheckError(m_pWrapper->m_WrapperTable.m_Object_AssignSliceStack(m_pHandle, hSliceStackInstance)); + Lib3MFHandle hM01 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM01(m_pHandle, &hM01)); + + if (!hM01) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM01))); } /** - * Method definitions for class CMeshObject - */ - - /** - * CMeshObject::GetVertexCount - Returns the vertex count of a mesh object. - * @return filled with the vertex count. + * CComposeMatrixNode::GetInputM02 - Retrieves the input for the element 0 2 + * @return the input for the m02 element */ - Lib3MF_uint32 CMeshObject::GetVertexCount() + PImplicitPort CComposeMatrixNode::GetInputM02() { - Lib3MF_uint32 resultVertexCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetVertexCount(m_pHandle, &resultVertexCount)); + Lib3MFHandle hM02 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM02(m_pHandle, &hM02)); - return resultVertexCount; + if (!hM02) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM02))); } /** - * CMeshObject::GetTriangleCount - Returns the triangle count of a mesh object. - * @return filled with the triangle count. + * CComposeMatrixNode::GetInputM03 - Retrieves the input for the element 0 3 + * @return the input for the m03 element */ - Lib3MF_uint32 CMeshObject::GetTriangleCount() + PImplicitPort CComposeMatrixNode::GetInputM03() { - Lib3MF_uint32 resultVertexCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetTriangleCount(m_pHandle, &resultVertexCount)); + Lib3MFHandle hM03 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM03(m_pHandle, &hM03)); - return resultVertexCount; + if (!hM03) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM03))); } /** - * CMeshObject::GetVertex - Returns the vertex count of a mesh object. - * @param[in] nIndex - Index of the vertex (0 to vertexcount - 1) - * @return filled with the vertex coordinates. + * CComposeMatrixNode::GetInputM10 - Retrieves the input for the element 1 0 + * @return the input for the m10 element */ - sPosition CMeshObject::GetVertex(const Lib3MF_uint32 nIndex) + PImplicitPort CComposeMatrixNode::GetInputM10() { - sPosition resultCoordinates; - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetVertex(m_pHandle, nIndex, &resultCoordinates)); + Lib3MFHandle hM10 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM10(m_pHandle, &hM10)); - return resultCoordinates; + if (!hM10) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM10))); } /** - * CMeshObject::SetVertex - Sets the coordinates of a single vertex of a mesh object - * @param[in] nIndex - Index of the vertex (0 to vertexcount - 1) - * @param[in] Coordinates - contains the vertex coordinates. + * CComposeMatrixNode::GetInputM11 - Retrieves the input for the element 1 1 + * @return the input for the m11 element */ - void CMeshObject::SetVertex(const Lib3MF_uint32 nIndex, const sPosition & Coordinates) + PImplicitPort CComposeMatrixNode::GetInputM11() { - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_SetVertex(m_pHandle, nIndex, &Coordinates)); + Lib3MFHandle hM11 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM11(m_pHandle, &hM11)); + + if (!hM11) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM11))); } /** - * CMeshObject::AddVertex - Adds a single vertex to a mesh object - * @param[in] Coordinates - contains the vertex coordinates. - * @return Index of the new vertex + * CComposeMatrixNode::GetInputM12 - Retrieves the input for the element 1 2 + * @return the input for the m12 element */ - Lib3MF_uint32 CMeshObject::AddVertex(const sPosition & Coordinates) + PImplicitPort CComposeMatrixNode::GetInputM12() { - Lib3MF_uint32 resultNewIndex = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_AddVertex(m_pHandle, &Coordinates, &resultNewIndex)); + Lib3MFHandle hM12 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM12(m_pHandle, &hM12)); - return resultNewIndex; + if (!hM12) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM12))); } /** - * CMeshObject::GetVertices - Obtains all vertex positions of a mesh object - * @param[out] VerticesBuffer - contains the vertex coordinates. + * CComposeMatrixNode::GetInputM13 - Retrieves the input for the element 1 3 + * @return the input for the m3 element */ - void CMeshObject::GetVertices(std::vector & VerticesBuffer) + PImplicitPort CComposeMatrixNode::GetInputM13() { - Lib3MF_uint64 elementsNeededVertices = 0; - Lib3MF_uint64 elementsWrittenVertices = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetVertices(m_pHandle, 0, &elementsNeededVertices, nullptr)); - VerticesBuffer.resize((size_t) elementsNeededVertices); - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetVertices(m_pHandle, elementsNeededVertices, &elementsWrittenVertices, VerticesBuffer.data())); + Lib3MFHandle hM13 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM13(m_pHandle, &hM13)); + + if (!hM13) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM13))); } /** - * CMeshObject::GetTriangle - Returns indices of a single triangle of a mesh object. - * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) - * @return filled with the triangle indices. + * CComposeMatrixNode::GetInputM20 - Retrieves the input for the element 2 0 + * @return the input for the m2 element */ - sTriangle CMeshObject::GetTriangle(const Lib3MF_uint32 nIndex) + PImplicitPort CComposeMatrixNode::GetInputM20() { - sTriangle resultIndices; - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetTriangle(m_pHandle, nIndex, &resultIndices)); + Lib3MFHandle hM20 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM20(m_pHandle, &hM20)); - return resultIndices; + if (!hM20) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM20))); } /** - * CMeshObject::SetTriangle - Sets the indices of a single triangle of a mesh object. - * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) - * @param[in] Indices - contains the triangle indices. + * CComposeMatrixNode::GetInputM21 - Retrieves the input for the element 2 1 + * @return */ - void CMeshObject::SetTriangle(const Lib3MF_uint32 nIndex, const sTriangle & Indices) + PImplicitPort CComposeMatrixNode::GetInputM21() { - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_SetTriangle(m_pHandle, nIndex, &Indices)); + Lib3MFHandle hM21 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM21(m_pHandle, &hM21)); + + if (!hM21) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM21))); } /** - * CMeshObject::AddTriangle - Adds a single triangle to a mesh object - * @param[in] Indices - contains the triangle indices. - * @return Index of the new triangle + * CComposeMatrixNode::GetInputM22 - Retrieves the input for the element 2 2 + * @return the input for the m22 element */ - Lib3MF_uint32 CMeshObject::AddTriangle(const sTriangle & Indices) + PImplicitPort CComposeMatrixNode::GetInputM22() { - Lib3MF_uint32 resultNewIndex = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_AddTriangle(m_pHandle, &Indices, &resultNewIndex)); + Lib3MFHandle hM22 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM22(m_pHandle, &hM22)); - return resultNewIndex; + if (!hM22) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM22))); } /** - * CMeshObject::GetTriangleIndices - Get all triangles of a mesh object - * @param[out] IndicesBuffer - contains the triangle indices. + * CComposeMatrixNode::GetInputM23 - Retrieves the input for the element 2 3 + * @return the input for the m23 element */ - void CMeshObject::GetTriangleIndices(std::vector & IndicesBuffer) + PImplicitPort CComposeMatrixNode::GetInputM23() { - Lib3MF_uint64 elementsNeededIndices = 0; - Lib3MF_uint64 elementsWrittenIndices = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetTriangleIndices(m_pHandle, 0, &elementsNeededIndices, nullptr)); - IndicesBuffer.resize((size_t) elementsNeededIndices); - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetTriangleIndices(m_pHandle, elementsNeededIndices, &elementsWrittenIndices, IndicesBuffer.data())); + Lib3MFHandle hM23 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM23(m_pHandle, &hM23)); + + if (!hM23) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM23))); } /** - * CMeshObject::SetObjectLevelProperty - Sets the property at the object-level of the mesh object. - * @param[in] nUniqueResourceID - the object-level Property UniqueResourceID. - * @param[in] nPropertyID - the object-level PropertyID. + * CComposeMatrixNode::GetInputM30 - Retrieves the input for the element 3 0 + * @return the input for the m30 element */ - void CMeshObject::SetObjectLevelProperty(const Lib3MF_uint32 nUniqueResourceID, const Lib3MF_uint32 nPropertyID) + PImplicitPort CComposeMatrixNode::GetInputM30() { - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_SetObjectLevelProperty(m_pHandle, nUniqueResourceID, nPropertyID)); + Lib3MFHandle hM30 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM30(m_pHandle, &hM30)); + + if (!hM30) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM30))); } - /** - * CMeshObject::GetObjectLevelProperty - Gets the property at the object-level of the mesh object. - * @param[out] nUniqueResourceID - the object-level Property UniqueResourceID. - * @param[out] nPropertyID - the object-level PropertyID. - * @return Has an object-level property been specified? + /** + * CComposeMatrixNode::GetInputM31 - Retrieves the input for the element 3 1 + * @return the input for the m31 element */ - bool CMeshObject::GetObjectLevelProperty(Lib3MF_uint32 & nUniqueResourceID, Lib3MF_uint32 & nPropertyID) + PImplicitPort CComposeMatrixNode::GetInputM31() { - bool resultHasObjectLevelProperty = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetObjectLevelProperty(m_pHandle, &nUniqueResourceID, &nPropertyID, &resultHasObjectLevelProperty)); + Lib3MFHandle hM31 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM31(m_pHandle, &hM31)); - return resultHasObjectLevelProperty; + if (!hM31) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM31))); } /** - * CMeshObject::SetTriangleProperties - Sets the properties of a single triangle of a mesh object. - * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) - * @param[in] Properties - contains the triangle properties. + * CComposeMatrixNode::GetInputM32 - Retrieves the input for the element 3 2 + * @return the input for the m32 element */ - void CMeshObject::SetTriangleProperties(const Lib3MF_uint32 nIndex, const sTriangleProperties & Properties) + PImplicitPort CComposeMatrixNode::GetInputM32() { - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_SetTriangleProperties(m_pHandle, nIndex, &Properties)); + Lib3MFHandle hM32 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM32(m_pHandle, &hM32)); + + if (!hM32) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM32))); } /** - * CMeshObject::GetTriangleProperties - Gets the properties of a single triangle of a mesh object. - * @param[in] nIndex - Index of the triangle (0 to trianglecount - 1) - * @param[out] Property - returns the triangle properties. + * CComposeMatrixNode::GetInputM33 - Retrieves the input for the element 3 3 + * @return the input for the m33 element */ - void CMeshObject::GetTriangleProperties(const Lib3MF_uint32 nIndex, sTriangleProperties & Property) + PImplicitPort CComposeMatrixNode::GetInputM33() { - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetTriangleProperties(m_pHandle, nIndex, &Property)); + Lib3MFHandle hM33 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetInputM33(m_pHandle, &hM33)); + + if (!hM33) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hM33))); } /** - * CMeshObject::SetAllTriangleProperties - Sets the properties of all triangles of a mesh object. Sets the object level property to the first entry of the passed triangle properties, if not yet specified. - * @param[in] PropertiesArrayBuffer - contains the triangle properties array. Must have trianglecount elements. + * CComposeMatrixNode::GetOutputResult - Retrieves the output + * @return the output */ - void CMeshObject::SetAllTriangleProperties(const CInputVector & PropertiesArrayBuffer) + PImplicitPort CComposeMatrixNode::GetOutputResult() { - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_SetAllTriangleProperties(m_pHandle, (Lib3MF_uint64)PropertiesArrayBuffer.size(), PropertiesArrayBuffer.data())); + Lib3MFHandle hResult = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ComposeMatrixNode_GetOutputResult(m_pHandle, &hResult)); + + if (!hResult) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResult))); } /** - * CMeshObject::GetAllTriangleProperties - Gets the properties of all triangles of a mesh object. - * @param[out] PropertiesArrayBuffer - returns the triangle properties array. Must have trianglecount elements. + * Method definitions for class CMatrixFromRowsNode + */ + + /** + * CMatrixFromRowsNode::GetInputA - Retrieves the input for the first row + * @return the input for the first row */ - void CMeshObject::GetAllTriangleProperties(std::vector & PropertiesArrayBuffer) + PImplicitPort CMatrixFromRowsNode::GetInputA() { - Lib3MF_uint64 elementsNeededPropertiesArray = 0; - Lib3MF_uint64 elementsWrittenPropertiesArray = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetAllTriangleProperties(m_pHandle, 0, &elementsNeededPropertiesArray, nullptr)); - PropertiesArrayBuffer.resize((size_t) elementsNeededPropertiesArray); - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_GetAllTriangleProperties(m_pHandle, elementsNeededPropertiesArray, &elementsWrittenPropertiesArray, PropertiesArrayBuffer.data())); + Lib3MFHandle hRow0 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MatrixFromRowsNode_GetInputA(m_pHandle, &hRow0)); + + if (!hRow0) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hRow0))); } /** - * CMeshObject::ClearAllProperties - Clears all properties of this mesh object (triangle and object-level). + * CMatrixFromRowsNode::GetInputB - Retrieves the input for the second row + * @return the input for the second row */ - void CMeshObject::ClearAllProperties() + PImplicitPort CMatrixFromRowsNode::GetInputB() { - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_ClearAllProperties(m_pHandle)); + Lib3MFHandle hRow1 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MatrixFromRowsNode_GetInputB(m_pHandle, &hRow1)); + + if (!hRow1) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hRow1))); } /** - * CMeshObject::SetGeometry - Set all triangles of a mesh object - * @param[in] VerticesBuffer - contains the positions. - * @param[in] IndicesBuffer - contains the triangle indices. + * CMatrixFromRowsNode::GetInputC - Retrieves the input for the third row + * @return the input for the third row */ - void CMeshObject::SetGeometry(const CInputVector & VerticesBuffer, const CInputVector & IndicesBuffer) + PImplicitPort CMatrixFromRowsNode::GetInputC() { - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_SetGeometry(m_pHandle, (Lib3MF_uint64)VerticesBuffer.size(), VerticesBuffer.data(), (Lib3MF_uint64)IndicesBuffer.size(), IndicesBuffer.data())); + Lib3MFHandle hRow2 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MatrixFromRowsNode_GetInputC(m_pHandle, &hRow2)); + + if (!hRow2) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hRow2))); } /** - * CMeshObject::IsManifoldAndOriented - Retrieves, if an object describes a topologically oriented and manifold mesh, according to the core spec. - * @return returns, if the object is oriented and manifold. + * CMatrixFromRowsNode::GetInputD - Retrieves the input for the fourth row + * @return the input for the fourth row */ - bool CMeshObject::IsManifoldAndOriented() + PImplicitPort CMatrixFromRowsNode::GetInputD() { - bool resultIsManifoldAndOriented = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_IsManifoldAndOriented(m_pHandle, &resultIsManifoldAndOriented)); + Lib3MFHandle hRow3 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MatrixFromRowsNode_GetInputD(m_pHandle, &hRow3)); - return resultIsManifoldAndOriented; + if (!hRow3) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hRow3))); } /** - * CMeshObject::BeamLattice - Retrieves the BeamLattice within this MeshObject. - * @return the BeamLattice within this MeshObject + * CMatrixFromRowsNode::GetOutputResult - Retrieves the output + * @return the output */ - PBeamLattice CMeshObject::BeamLattice() + PImplicitPort CMatrixFromRowsNode::GetOutputResult() { - Lib3MFHandle hTheBeamLattice = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_MeshObject_BeamLattice(m_pHandle, &hTheBeamLattice)); + Lib3MFHandle hResult = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MatrixFromRowsNode_GetOutputResult(m_pHandle, &hResult)); - if (!hTheBeamLattice) { + if (!hResult) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheBeamLattice))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResult))); } /** - * Method definitions for class CBeamLattice + * Method definitions for class CMatrixFromColumnsNode */ /** - * CBeamLattice::GetMinLength - Returns the minimal length of beams for the beamlattice. - * @return minimal length of beams for the beamlattice + * CMatrixFromColumnsNode::GetInputA - Retrieves the input for the first column + * @return the input for the first column */ - Lib3MF_double CBeamLattice::GetMinLength() + PImplicitPort CMatrixFromColumnsNode::GetInputA() { - Lib3MF_double resultMinLength = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetMinLength(m_pHandle, &resultMinLength)); + Lib3MFHandle hColumn0 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MatrixFromColumnsNode_GetInputA(m_pHandle, &hColumn0)); - return resultMinLength; + if (!hColumn0) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hColumn0))); } /** - * CBeamLattice::SetMinLength - Sets the minimal length of beams for the beamlattice. - * @param[in] dMinLength - minimal length of beams for the beamlattice + * CMatrixFromColumnsNode::GetInputB - Retrieves the input for the second column + * @return the input for the second column */ - void CBeamLattice::SetMinLength(const Lib3MF_double dMinLength) + PImplicitPort CMatrixFromColumnsNode::GetInputB() { - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetMinLength(m_pHandle, dMinLength)); + Lib3MFHandle hColumn1 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MatrixFromColumnsNode_GetInputB(m_pHandle, &hColumn1)); + + if (!hColumn1) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hColumn1))); } /** - * CBeamLattice::GetClipping - Returns the clipping mode and the clipping-mesh for the beamlattice of this mesh. - * @param[out] eClipMode - contains the clip mode of this mesh - * @param[out] nUniqueResourceID - filled with the UniqueResourceID of the clipping mesh-object or an undefined value if pClipMode is MODELBEAMLATTICECLIPMODE_NONE + * CMatrixFromColumnsNode::GetInputC - Retrieves the input for the third column + * @return the input for the third column */ - void CBeamLattice::GetClipping(eBeamLatticeClipMode & eClipMode, Lib3MF_uint32 & nUniqueResourceID) + PImplicitPort CMatrixFromColumnsNode::GetInputC() { - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetClipping(m_pHandle, &eClipMode, &nUniqueResourceID)); + Lib3MFHandle hColumn2 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MatrixFromColumnsNode_GetInputC(m_pHandle, &hColumn2)); + + if (!hColumn2) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hColumn2))); } /** - * CBeamLattice::SetClipping - Sets the clipping mode and the clipping-mesh for the beamlattice of this mesh. - * @param[in] eClipMode - contains the clip mode of this mesh - * @param[in] nUniqueResourceID - the UniqueResourceID of the clipping mesh-object. This mesh-object has to be defined before setting the Clipping. + * CMatrixFromColumnsNode::GetInputD - Retrieves the input for the fourth column + * @return the input for the fourth column */ - void CBeamLattice::SetClipping(const eBeamLatticeClipMode eClipMode, const Lib3MF_uint32 nUniqueResourceID) + PImplicitPort CMatrixFromColumnsNode::GetInputD() { - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetClipping(m_pHandle, eClipMode, nUniqueResourceID)); + Lib3MFHandle hColumn3 = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MatrixFromColumnsNode_GetInputD(m_pHandle, &hColumn3)); + + if (!hColumn3) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hColumn3))); } /** - * CBeamLattice::GetRepresentation - Returns the representation-mesh for the beamlattice of this mesh. - * @return flag whether the beamlattice has a representation mesh. - * @param[out] nUniqueResourceID - filled with the UniqueResourceID of the clipping mesh-object. + * CMatrixFromColumnsNode::GetOutputResult - Retrieves the output + * @return the output */ - bool CBeamLattice::GetRepresentation(Lib3MF_uint32 & nUniqueResourceID) + PImplicitPort CMatrixFromColumnsNode::GetOutputResult() { - bool resultHasRepresentation = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetRepresentation(m_pHandle, &resultHasRepresentation, &nUniqueResourceID)); + Lib3MFHandle hResult = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MatrixFromColumnsNode_GetOutputResult(m_pHandle, &hResult)); - return resultHasRepresentation; + if (!hResult) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResult))); } /** - * CBeamLattice::SetRepresentation - Sets the representation-mesh for the beamlattice of this mesh. - * @param[in] nUniqueResourceID - the UniqueResourceID of the representation mesh-object. This mesh-object has to be defined before setting the representation. - */ - void CBeamLattice::SetRepresentation(const Lib3MF_uint32 nUniqueResourceID) - { - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetRepresentation(m_pHandle, nUniqueResourceID)); - } + * Method definitions for class CConstantNode + */ /** - * CBeamLattice::GetBallOptions - Returns the ball mode and the default ball radius for the beamlattice of this mesh. - * @param[out] eBallMode - contains the ball mode of this mesh - * @param[out] dBallRadius - default ball radius of balls for the beamlattice + * CConstantNode::SetConstant - Sets the constant value of the node + * @param[in] dValue - the value */ - void CBeamLattice::GetBallOptions(eBeamLatticeBallMode & eBallMode, Lib3MF_double & dBallRadius) + void CConstantNode::SetConstant(const Lib3MF_double dValue) { - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBallOptions(m_pHandle, &eBallMode, &dBallRadius)); + CheckError(m_pWrapper->m_WrapperTable.m_ConstantNode_SetConstant(m_pHandle, dValue)); } /** - * CBeamLattice::SetBallOptions - Sets the ball mode and thedefault ball radius for the beamlattice. - * @param[in] eBallMode - contains the ball mode of this mesh - * @param[in] dBallRadius - default ball radius of balls for the beamlattice + * CConstantNode::GetConstant - Retrieves the constant value of the node + * @return the value */ - void CBeamLattice::SetBallOptions(const eBeamLatticeBallMode eBallMode, const Lib3MF_double dBallRadius) + Lib3MF_double CConstantNode::GetConstant() { - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetBallOptions(m_pHandle, eBallMode, dBallRadius)); + Lib3MF_double resultValue = 0; + CheckError(m_pWrapper->m_WrapperTable.m_ConstantNode_GetConstant(m_pHandle, &resultValue)); + + return resultValue; } /** - * CBeamLattice::GetBeamCount - Returns the beam count of a mesh object. - * @return filled with the beam count. + * CConstantNode::GetOutputValue - Retrieves the output + * @return the output */ - Lib3MF_uint32 CBeamLattice::GetBeamCount() + PImplicitPort CConstantNode::GetOutputValue() { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBeamCount(m_pHandle, &resultCount)); + Lib3MFHandle hValue = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ConstantNode_GetOutputValue(m_pHandle, &hValue)); - return resultCount; + if (!hValue) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hValue))); } /** - * CBeamLattice::GetBeam - Returns indices, radii and capmodes of a single beam of a mesh object. - * @param[in] nIndex - Index of the beam (0 to beamcount - 1). - * @return filled with the beam indices, radii and capmodes. + * Method definitions for class CConstVecNode + */ + + /** + * CConstVecNode::SetVector - Sets the vector value of the node + * @param[in] Value - the value */ - sBeam CBeamLattice::GetBeam(const Lib3MF_uint32 nIndex) + void CConstVecNode::SetVector(const sVector & Value) { - sBeam resultBeamInfo; - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBeam(m_pHandle, nIndex, &resultBeamInfo)); - - return resultBeamInfo; + CheckError(m_pWrapper->m_WrapperTable.m_ConstVecNode_SetVector(m_pHandle, &Value)); } /** - * CBeamLattice::AddBeam - Adds a single beam to a mesh object. - * @param[in] BeamInfo - contains the node indices, radii and capmodes. - * @return filled with the new Index of the beam. + * CConstVecNode::GetVector - Retrieves the vector value of the node + * @return the value */ - Lib3MF_uint32 CBeamLattice::AddBeam(const sBeam & BeamInfo) + sVector CConstVecNode::GetVector() { - Lib3MF_uint32 resultIndex = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_AddBeam(m_pHandle, &BeamInfo, &resultIndex)); + sVector resultValue; + CheckError(m_pWrapper->m_WrapperTable.m_ConstVecNode_GetVector(m_pHandle, &resultValue)); - return resultIndex; + return resultValue; } /** - * CBeamLattice::SetBeam - Sets the indices, radii and capmodes of a single beam of a mesh object. - * @param[in] nIndex - Index of the beam (0 to beamcount - 1). - * @param[in] BeamInfo - filled with the beam indices, radii and capmodes. + * CConstVecNode::GetOutputVector - Retrieves the output + * @return the output */ - void CBeamLattice::SetBeam(const Lib3MF_uint32 nIndex, const sBeam & BeamInfo) + PImplicitPort CConstVecNode::GetOutputVector() { - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetBeam(m_pHandle, nIndex, &BeamInfo)); + Lib3MFHandle hVector = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ConstVecNode_GetOutputVector(m_pHandle, &hVector)); + + if (!hVector) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hVector))); } /** - * CBeamLattice::SetBeams - Sets all beam indices, radii and capmodes of a mesh object. - * @param[in] BeamInfoBuffer - contains information of a number of beams - */ - void CBeamLattice::SetBeams(const CInputVector & BeamInfoBuffer) - { - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetBeams(m_pHandle, (Lib3MF_uint64)BeamInfoBuffer.size(), BeamInfoBuffer.data())); - } + * Method definitions for class CConstMatNode + */ /** - * CBeamLattice::GetBeams - obtains all beam indices, radii and capmodes of a mesh object. - * @param[out] BeamInfoBuffer - contains information of all beams + * CConstMatNode::SetMatrix - Sets the matrix value of the node + * @param[in] Value - the value */ - void CBeamLattice::GetBeams(std::vector & BeamInfoBuffer) + void CConstMatNode::SetMatrix(const sMatrix4x4 & Value) { - Lib3MF_uint64 elementsNeededBeamInfo = 0; - Lib3MF_uint64 elementsWrittenBeamInfo = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBeams(m_pHandle, 0, &elementsNeededBeamInfo, nullptr)); - BeamInfoBuffer.resize((size_t) elementsNeededBeamInfo); - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBeams(m_pHandle, elementsNeededBeamInfo, &elementsWrittenBeamInfo, BeamInfoBuffer.data())); + CheckError(m_pWrapper->m_WrapperTable.m_ConstMatNode_SetMatrix(m_pHandle, &Value)); } /** - * CBeamLattice::GetBallCount - Returns the ball count of a mesh object. - * @return filled with the ball count. + * CConstMatNode::GetMatrix - Retrieves the matrix value of the node + * @return the matrix */ - Lib3MF_uint32 CBeamLattice::GetBallCount() + sMatrix4x4 CConstMatNode::GetMatrix() { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBallCount(m_pHandle, &resultCount)); + sMatrix4x4 resultValue; + CheckError(m_pWrapper->m_WrapperTable.m_ConstMatNode_GetMatrix(m_pHandle, &resultValue)); - return resultCount; + return resultValue; } /** - * CBeamLattice::GetBall - Returns index and radius of a single ball of a mesh object. - * @param[in] nIndex - Index of the ball (0 to ballcount - 1). - * @return filled with the ball node index and radius. + * CConstMatNode::GetOutputMatrix - Retrieves the output + * @return the output */ - sBall CBeamLattice::GetBall(const Lib3MF_uint32 nIndex) + PImplicitPort CConstMatNode::GetOutputMatrix() { - sBall resultBallInfo; - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBall(m_pHandle, nIndex, &resultBallInfo)); + Lib3MFHandle hMatrix = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ConstMatNode_GetOutputMatrix(m_pHandle, &hMatrix)); - return resultBallInfo; + if (!hMatrix) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMatrix))); } /** - * CBeamLattice::AddBall - Adds a single ball to a mesh object. - * @param[in] BallInfo - contains the node index and radius. - * @return filled with the new Index of the ball. + * Method definitions for class CMeshNode + */ + + /** + * CMeshNode::GetInputMesh - Retrieves the input for the model resource id of the mesh + * @return the input port for the model resource id of the mesh */ - Lib3MF_uint32 CBeamLattice::AddBall(const sBall & BallInfo) + PImplicitPort CMeshNode::GetInputMesh() { - Lib3MF_uint32 resultIndex = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_AddBall(m_pHandle, &BallInfo, &resultIndex)); + Lib3MFHandle hMesh = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MeshNode_GetInputMesh(m_pHandle, &hMesh)); - return resultIndex; + if (!hMesh) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMesh))); } /** - * CBeamLattice::SetBall - Sets the index and radius of a single ball of a mesh object. - * @param[in] nIndex - Index of the ball (0 to ballcount - 1). - * @param[in] BallInfo - filled with the ball node index and radius. + * CMeshNode::GetInputPos - Retrieves the input for the position + * @return the input port for the position */ - void CBeamLattice::SetBall(const Lib3MF_uint32 nIndex, const sBall & BallInfo) + PImplicitPort CMeshNode::GetInputPos() { - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetBall(m_pHandle, nIndex, &BallInfo)); + Lib3MFHandle hPos = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MeshNode_GetInputPos(m_pHandle, &hPos)); + + if (!hPos) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPos))); } /** - * CBeamLattice::SetBalls - Sets all ball indices and radii of a mesh object. - * @param[in] BallInfoBuffer - contains information of a number of balls + * CMeshNode::GetOutputDistance - Retrieves the output + * @return the output port for the signed distance to the mesh */ - void CBeamLattice::SetBalls(const CInputVector & BallInfoBuffer) + PImplicitPort CMeshNode::GetOutputDistance() { - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_SetBalls(m_pHandle, (Lib3MF_uint64)BallInfoBuffer.size(), BallInfoBuffer.data())); + Lib3MFHandle hDistance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_MeshNode_GetOutputDistance(m_pHandle, &hDistance)); + + if (!hDistance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hDistance))); } /** - * CBeamLattice::GetBalls - obtains all ball indices and radii of a mesh object. - * @param[out] BallInfoBuffer - contains information of all balls - */ - void CBeamLattice::GetBalls(std::vector & BallInfoBuffer) - { - Lib3MF_uint64 elementsNeededBallInfo = 0; - Lib3MF_uint64 elementsWrittenBallInfo = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBalls(m_pHandle, 0, &elementsNeededBallInfo, nullptr)); - BallInfoBuffer.resize((size_t) elementsNeededBallInfo); - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBalls(m_pHandle, elementsNeededBallInfo, &elementsWrittenBallInfo, BallInfoBuffer.data())); - } + * Method definitions for class CUnsignedMeshNode + */ /** - * CBeamLattice::GetBeamSetCount - Returns the number of beamsets of a mesh object. - * @return filled with the beamset count. + * CUnsignedMeshNode::GetInputMesh - Retrieves the input for the model resource id of the mesh + * @return the input port for the model resource id of the mesh */ - Lib3MF_uint32 CBeamLattice::GetBeamSetCount() + PImplicitPort CUnsignedMeshNode::GetInputMesh() { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBeamSetCount(m_pHandle, &resultCount)); + Lib3MFHandle hMesh = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_UnsignedMeshNode_GetInputMesh(m_pHandle, &hMesh)); - return resultCount; + if (!hMesh) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMesh))); } /** - * CBeamLattice::AddBeamSet - Adds an empty beamset to a mesh object - * @return the new beamset + * CUnsignedMeshNode::GetInputPos - Retrieves the input for the position + * @return the input port for the position */ - PBeamSet CBeamLattice::AddBeamSet() + PImplicitPort CUnsignedMeshNode::GetInputPos() { - Lib3MFHandle hBeamSet = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_AddBeamSet(m_pHandle, &hBeamSet)); + Lib3MFHandle hPos = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_UnsignedMeshNode_GetInputPos(m_pHandle, &hPos)); - if (!hBeamSet) { + if (!hPos) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBeamSet))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPos))); } /** - * CBeamLattice::GetBeamSet - Returns a beamset of a mesh object - * @param[in] nIndex - index of the requested beamset (0 ... beamsetcount-1). - * @return the requested beamset + * CUnsignedMeshNode::GetOutputDistance - Retrieves the output + * @return the output port for the unsigned distance to the mesh */ - PBeamSet CBeamLattice::GetBeamSet(const Lib3MF_uint32 nIndex) + PImplicitPort CUnsignedMeshNode::GetOutputDistance() { - Lib3MFHandle hBeamSet = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_BeamLattice_GetBeamSet(m_pHandle, nIndex, &hBeamSet)); + Lib3MFHandle hDistance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_UnsignedMeshNode_GetOutputDistance(m_pHandle, &hDistance)); - if (!hBeamSet) { + if (!hDistance) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBeamSet))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hDistance))); } /** - * Method definitions for class CComponent + * Method definitions for class CFunctionCallNode */ /** - * CComponent::GetObjectResource - Returns the Resource Instance of the component. - * @return filled with the Resource Instance. + * CFunctionCallNode::GetInputFunctionID - Retrieves the input for the function id + * @return the input port for the function */ - PObject CComponent::GetObjectResource() + PImplicitPort CFunctionCallNode::GetInputFunctionID() { - Lib3MFHandle hObjectResource = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_Component_GetObjectResource(m_pHandle, &hObjectResource)); + Lib3MFHandle hFunction = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_FunctionCallNode_GetInputFunctionID(m_pHandle, &hFunction)); - if (!hObjectResource) { + if (!hFunction) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hObjectResource))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hFunction))); } /** - * CComponent::GetObjectResourceID - Returns the UniqueResourceID of the component. - * @return returns the UniqueResourceID. + * Method definitions for class CNodeIterator + */ + + /** + * CNodeIterator::GetCurrent - Returns the current element + * @return The current element */ - Lib3MF_uint32 CComponent::GetObjectResourceID() + PImplicitNode CNodeIterator::GetCurrent() { - Lib3MF_uint32 resultUniqueResourceID = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Component_GetObjectResourceID(m_pHandle, &resultUniqueResourceID)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_NodeIterator_GetCurrent(m_pHandle, &hNode)); - return resultUniqueResourceID; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CComponent::GetUUID - returns, whether a component has a UUID and, if true, the component's UUID - * @param[out] bHasUUID - flag whether the component has a UUID - * @return the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + * Method definitions for class CFunction + */ + + /** + * CFunction::GetDisplayName - Retrieves the display name of the function + * @return the display name */ - std::string CComponent::GetUUID(bool & bHasUUID) + std::string CFunction::GetDisplayName() { - Lib3MF_uint32 bytesNeededUUID = 0; - Lib3MF_uint32 bytesWrittenUUID = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Component_GetUUID(m_pHandle, &bHasUUID, 0, &bytesNeededUUID, nullptr)); - std::vector bufferUUID(bytesNeededUUID); - CheckError(m_pWrapper->m_WrapperTable.m_Component_GetUUID(m_pHandle, &bHasUUID, bytesNeededUUID, &bytesWrittenUUID, &bufferUUID[0])); + Lib3MF_uint32 bytesNeededDisplayName = 0; + Lib3MF_uint32 bytesWrittenDisplayName = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Function_GetDisplayName(m_pHandle, 0, &bytesNeededDisplayName, nullptr)); + std::vector bufferDisplayName(bytesNeededDisplayName); + CheckError(m_pWrapper->m_WrapperTable.m_Function_GetDisplayName(m_pHandle, bytesNeededDisplayName, &bytesWrittenDisplayName, &bufferDisplayName[0])); - return std::string(&bufferUUID[0]); + return std::string(&bufferDisplayName[0]); } /** - * CComponent::SetUUID - sets the component's UUID - * @param[in] sUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + * CFunction::SetDisplayName - Sets the display name of the function + * @param[in] sDisplayName - the display name */ - void CComponent::SetUUID(const std::string & sUUID) + void CFunction::SetDisplayName(const std::string & sDisplayName) { - CheckError(m_pWrapper->m_WrapperTable.m_Component_SetUUID(m_pHandle, sUUID.c_str())); + CheckError(m_pWrapper->m_WrapperTable.m_Function_SetDisplayName(m_pHandle, sDisplayName.c_str())); } /** - * CComponent::HasTransform - Returns, if the component has a different transformation than the identity matrix - * @return if true is returned, the transformation is not equal than the identity + * CFunction::AddInput - Add an input + * @param[in] sIdentifier - the identifier of the input + * @param[in] sDisplayName - the display name of the input + * @param[in] eType - the type of the input + * @return The added input port */ - bool CComponent::HasTransform() + PImplicitPort CFunction::AddInput(const std::string & sIdentifier, const std::string & sDisplayName, const eImplicitPortType eType) { - bool resultHasTransform = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Component_HasTransform(m_pHandle, &resultHasTransform)); + Lib3MFHandle hPort = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Function_AddInput(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), eType, &hPort)); - return resultHasTransform; + if (!hPort) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPort))); } /** - * CComponent::GetTransform - Returns the transformation matrix of the component. - * @return filled with the component transformation matrix + * CFunction::GetInputs - Retrieves the inputs + * @return iterator for the list of inputs */ - sTransform CComponent::GetTransform() + PImplicitPortIterator CFunction::GetInputs() { - sTransform resultTransform; - CheckError(m_pWrapper->m_WrapperTable.m_Component_GetTransform(m_pHandle, &resultTransform)); + Lib3MFHandle hIterator = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Function_GetInputs(m_pHandle, &hIterator)); - return resultTransform; + if (!hIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hIterator))); } /** - * CComponent::SetTransform - Sets the transformation matrix of the component. - * @param[in] Transform - new transformation matrix + * CFunction::RemoveInput - Removes an input + * @param[in] pInput - The input to be removed */ - void CComponent::SetTransform(const sTransform & Transform) + void CFunction::RemoveInput(classParam pInput) { - CheckError(m_pWrapper->m_WrapperTable.m_Component_SetTransform(m_pHandle, &Transform)); + Lib3MFHandle hInput = pInput.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_Function_RemoveInput(m_pHandle, hInput)); } /** - * Method definitions for class CComponentsObject - */ - - /** - * CComponentsObject::AddComponent - Adds a new component to a components object. - * @param[in] pObjectResource - object to add as component. Must not lead to circular references! - * @param[in] Transform - optional transform matrix for the component. - * @return new component instance + * CFunction::AddOutput - Add an output + * @param[in] sIdentifier - the identifier of the output + * @param[in] sDisplayName - the display name of the output + * @param[in] eType - the type of the input + * @return The added input port */ - PComponent CComponentsObject::AddComponent(classParam pObjectResource, const sTransform & Transform) + PImplicitPort CFunction::AddOutput(const std::string & sIdentifier, const std::string & sDisplayName, const eImplicitPortType eType) { - Lib3MFHandle hObjectResource = pObjectResource.GetHandle(); - Lib3MFHandle hComponentInstance = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_ComponentsObject_AddComponent(m_pHandle, hObjectResource, &Transform, &hComponentInstance)); + Lib3MFHandle hPort = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Function_AddOutput(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), eType, &hPort)); - if (!hComponentInstance) { + if (!hPort) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hComponentInstance))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPort))); } /** - * CComponentsObject::GetComponent - Retrieves a component from a component object. - * @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) - * @return component instance + * CFunction::GetOutputs - Retrieves the outputs + * @return iterator for the outputs */ - PComponent CComponentsObject::GetComponent(const Lib3MF_uint32 nIndex) + PImplicitPortIterator CFunction::GetOutputs() { - Lib3MFHandle hComponentInstance = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_ComponentsObject_GetComponent(m_pHandle, nIndex, &hComponentInstance)); + Lib3MFHandle hIterator = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Function_GetOutputs(m_pHandle, &hIterator)); - if (!hComponentInstance) { + if (!hIterator) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hComponentInstance))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hIterator))); } /** - * CComponentsObject::GetComponentCount - Retrieves a component count of a component object. - * @return returns the component count + * CFunction::RemoveOutput - Removes an output + * @param[in] pOutput - The output to be removed */ - Lib3MF_uint32 CComponentsObject::GetComponentCount() + void CFunction::RemoveOutput(classParam pOutput) { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_ComponentsObject_GetComponentCount(m_pHandle, &resultCount)); - - return resultCount; + Lib3MFHandle hOutput = pOutput.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_Function_RemoveOutput(m_pHandle, hOutput)); } /** - * Method definitions for class CBeamSet - */ - - /** - * CBeamSet::SetName - Sets a beamset's name string - * @param[in] sName - new name of the beamset. + * CFunction::FindInput - Retrieves an input + * @param[in] sIdentifier - the identifier of the input + * @return the input port */ - void CBeamSet::SetName(const std::string & sName) + PImplicitPort CFunction::FindInput(const std::string & sIdentifier) { - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_SetName(m_pHandle, sName.c_str())); + Lib3MFHandle hInput = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Function_FindInput(m_pHandle, sIdentifier.c_str(), &hInput)); + + if (!hInput) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hInput))); } /** - * CBeamSet::GetName - Retrieves a beamset's name string - * @return returns the name of the beamset. + * CFunction::FindOutput - Retrieves an output + * @param[in] sIdentifier - the identifier of the output + * @return the output port */ - std::string CBeamSet::GetName() + PImplicitPort CFunction::FindOutput(const std::string & sIdentifier) { - Lib3MF_uint32 bytesNeededName = 0; - Lib3MF_uint32 bytesWrittenName = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetName(m_pHandle, 0, &bytesNeededName, nullptr)); - std::vector bufferName(bytesNeededName); - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetName(m_pHandle, bytesNeededName, &bytesWrittenName, &bufferName[0])); + Lib3MFHandle hOutput = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Function_FindOutput(m_pHandle, sIdentifier.c_str(), &hOutput)); - return std::string(&bufferName[0]); + if (!hOutput) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hOutput))); } /** - * CBeamSet::SetIdentifier - Sets a beamset's identifier string - * @param[in] sIdentifier - new name of the beamset. - */ - void CBeamSet::SetIdentifier(const std::string & sIdentifier) - { - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_SetIdentifier(m_pHandle, sIdentifier.c_str())); - } + * Method definitions for class CImplicitFunction + */ /** - * CBeamSet::GetIdentifier - Retrieves a beamset's identifier string - * @return returns the identifier of the beamset. + * CImplicitFunction::GetIdentifier - Retrieves the identifier of the function + * @return the identifier */ - std::string CBeamSet::GetIdentifier() + std::string CImplicitFunction::GetIdentifier() { Lib3MF_uint32 bytesNeededIdentifier = 0; Lib3MF_uint32 bytesWrittenIdentifier = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetIdentifier(m_pHandle, 0, &bytesNeededIdentifier, nullptr)); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_GetIdentifier(m_pHandle, 0, &bytesNeededIdentifier, nullptr)); std::vector bufferIdentifier(bytesNeededIdentifier); - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetIdentifier(m_pHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0])); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_GetIdentifier(m_pHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0])); return std::string(&bufferIdentifier[0]); } /** - * CBeamSet::GetReferenceCount - Retrieves the reference count of a beamset - * @return returns the reference count + * CImplicitFunction::SetIdentifier - Sets the identifier of the function + * @param[in] sIdentifier - the identifier */ - Lib3MF_uint32 CBeamSet::GetReferenceCount() + void CImplicitFunction::SetIdentifier(const std::string & sIdentifier) { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetReferenceCount(m_pHandle, &resultCount)); - - return resultCount; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_SetIdentifier(m_pHandle, sIdentifier.c_str())); } /** - * CBeamSet::SetReferences - Sets the references of a beamset - * @param[in] ReferencesBuffer - the new indices of all beams in this beamset + * CImplicitFunction::AddNode - Add a node + * @param[in] eNodeType - the type of the node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBeamSet::SetReferences(const CInputVector & ReferencesBuffer) + PImplicitNode CImplicitFunction::AddNode(const eImplicitNodeType eNodeType, const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_SetReferences(m_pHandle, (Lib3MF_uint64)ReferencesBuffer.size(), ReferencesBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddNode(m_pHandle, eNodeType, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBeamSet::GetReferences - Retrieves the references of a beamset - * @param[out] ReferencesBuffer - retrieves the indices of all beams in this beamset + * CImplicitFunction::AddSinNode - Add a SinNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBeamSet::GetReferences(std::vector & ReferencesBuffer) + PSinNode CImplicitFunction::AddSinNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededReferences = 0; - Lib3MF_uint64 elementsWrittenReferences = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetReferences(m_pHandle, 0, &elementsNeededReferences, nullptr)); - ReferencesBuffer.resize((size_t) elementsNeededReferences); - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetReferences(m_pHandle, elementsNeededReferences, &elementsWrittenReferences, ReferencesBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddSinNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBeamSet::GetBallReferenceCount - Retrieves the ball reference count of a beamset - * @return returns the ball reference count + * CImplicitFunction::AddCosNode - Add a CosNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CBeamSet::GetBallReferenceCount() + PCosNode CImplicitFunction::AddCosNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetBallReferenceCount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddCosNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBeamSet::SetBallReferences - Sets the ball references of a beamset - * @param[in] BallReferencesBuffer - the new indices of all balls in this beamset + * CImplicitFunction::AddTanNode - Add a TanNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBeamSet::SetBallReferences(const CInputVector & BallReferencesBuffer) + PTanNode CImplicitFunction::AddTanNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_SetBallReferences(m_pHandle, (Lib3MF_uint64)BallReferencesBuffer.size(), BallReferencesBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddTanNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBeamSet::GetBallReferences - Retrieves the ball references of a beamset - * @param[out] BallReferencesBuffer - retrieves the indices of all balls in this beamset + * CImplicitFunction::AddArcSinNode - Add a ArcSinNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBeamSet::GetBallReferences(std::vector & BallReferencesBuffer) + PArcSinNode CImplicitFunction::AddArcSinNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededBallReferences = 0; - Lib3MF_uint64 elementsWrittenBallReferences = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetBallReferences(m_pHandle, 0, &elementsNeededBallReferences, nullptr)); - BallReferencesBuffer.resize((size_t) elementsNeededBallReferences); - CheckError(m_pWrapper->m_WrapperTable.m_BeamSet_GetBallReferences(m_pHandle, elementsNeededBallReferences, &elementsWrittenBallReferences, BallReferencesBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddArcSinNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * Method definitions for class CBaseMaterialGroup - */ + * CImplicitFunction::AddArcCosNode - Add a ArcCosNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + PArcCosNode CImplicitFunction::AddArcCosNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) + { + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddArcCosNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); + } /** - * CBaseMaterialGroup::GetCount - Retrieves the count of base materials in the material group. - * @return returns the count of base materials. + * CImplicitFunction::AddArcTan2Node - Add a ArcTan2Node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CBaseMaterialGroup::GetCount() + PArcTan2Node CImplicitFunction::AddArcTan2Node(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_GetCount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddArcTan2Node(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::GetAllPropertyIDs - returns all the PropertyIDs of all materials in this group - * @param[out] PropertyIDsBuffer - PropertyID of the material in the material group. + * CImplicitFunction::AddSinhNode - Add a SinhNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBaseMaterialGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + PSinhNode CImplicitFunction::AddSinhNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededPropertyIDs = 0; - Lib3MF_uint64 elementsWrittenPropertyIDs = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_GetAllPropertyIDs(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); - PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); - CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_GetAllPropertyIDs(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddSinhNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::AddMaterial - Adds a new material to the material group - * @param[in] sName - new name of the base material. - * @param[in] DisplayColor - Display color of the material - * @return returns new PropertyID of the new material in the material group. + * CImplicitFunction::AddCoshNode - Add a CoshNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CBaseMaterialGroup::AddMaterial(const std::string & sName, const sColor & DisplayColor) + PCoshNode CImplicitFunction::AddCoshNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultPropertyID = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_AddMaterial(m_pHandle, sName.c_str(), &DisplayColor, &resultPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddCoshNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultPropertyID; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::RemoveMaterial - Removes a material from the material group. - * @param[in] nPropertyID - PropertyID of the material in the material group. + * CImplicitFunction::AddTanhNode - Add a TanhNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBaseMaterialGroup::RemoveMaterial(const Lib3MF_uint32 nPropertyID) + PTanhNode CImplicitFunction::AddTanhNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_RemoveMaterial(m_pHandle, nPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddTanhNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::GetName - Returns the base material's name - * @param[in] nPropertyID - PropertyID of the material in the material group. - * @return returns the name of the base material. + * CImplicitFunction::AddRoundNode - Add a RoundNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - std::string CBaseMaterialGroup::GetName(const Lib3MF_uint32 nPropertyID) + PRoundNode CImplicitFunction::AddRoundNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 bytesNeededName = 0; - Lib3MF_uint32 bytesWrittenName = 0; - CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_GetName(m_pHandle, nPropertyID, 0, &bytesNeededName, nullptr)); - std::vector bufferName(bytesNeededName); - CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_GetName(m_pHandle, nPropertyID, bytesNeededName, &bytesWrittenName, &bufferName[0])); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddRoundNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return std::string(&bufferName[0]); + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::SetName - Sets a base material's name - * @param[in] nPropertyID - PropertyID of the material in the material group. - * @param[in] sName - new name of the base material. + * CImplicitFunction::AddCeilNode - Add a CeilNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBaseMaterialGroup::SetName(const Lib3MF_uint32 nPropertyID, const std::string & sName) + PCeilNode CImplicitFunction::AddCeilNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_SetName(m_pHandle, nPropertyID, sName.c_str())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddCeilNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::SetDisplayColor - Sets a base material's display color. - * @param[in] nPropertyID - PropertyID of the material in the material group. - * @param[in] TheColor - The base material's display color + * CImplicitFunction::AddFloorNode - Add a FloorNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CBaseMaterialGroup::SetDisplayColor(const Lib3MF_uint32 nPropertyID, const sColor & TheColor) + PFloorNode CImplicitFunction::AddFloorNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_SetDisplayColor(m_pHandle, nPropertyID, &TheColor)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddFloorNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CBaseMaterialGroup::GetDisplayColor - Returns a base material's display color. - * @param[in] nPropertyID - PropertyID of the material in the material group. - * @return The base material's display color + * CImplicitFunction::AddSignNode - Add a SignNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - sColor CBaseMaterialGroup::GetDisplayColor(const Lib3MF_uint32 nPropertyID) + PSignNode CImplicitFunction::AddSignNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - sColor resultTheColor; - CheckError(m_pWrapper->m_WrapperTable.m_BaseMaterialGroup_GetDisplayColor(m_pHandle, nPropertyID, &resultTheColor)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddSignNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultTheColor; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * Method definitions for class CColorGroup - */ - - /** - * CColorGroup::GetCount - Retrieves the count of base materials in this Color Group. - * @return returns the count of colors within this color group. + * CImplicitFunction::AddFractNode - Add a FractNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CColorGroup::GetCount() + PFractNode CImplicitFunction::AddFractNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_GetCount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddFractNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CColorGroup::GetAllPropertyIDs - returns all the PropertyIDs of all colors within this group - * @param[out] PropertyIDsBuffer - PropertyID of the color in the color group. + * CImplicitFunction::AddAbsNode - Add a AbsNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CColorGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + PAbsNode CImplicitFunction::AddAbsNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededPropertyIDs = 0; - Lib3MF_uint64 elementsWrittenPropertyIDs = 0; - CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_GetAllPropertyIDs(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); - PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); - CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_GetAllPropertyIDs(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddAbsNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CColorGroup::AddColor - Adds a new value. - * @param[in] TheColor - The new color - * @return PropertyID of the new color within this color group. + * CImplicitFunction::AddExpNode - Add a ExpNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CColorGroup::AddColor(const sColor & TheColor) + PExpNode CImplicitFunction::AddExpNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultPropertyID = 0; - CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_AddColor(m_pHandle, &TheColor, &resultPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddExpNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultPropertyID; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CColorGroup::RemoveColor - Removes a color from the color group. - * @param[in] nPropertyID - PropertyID of the color to be removed from the color group. + * CImplicitFunction::AddLogNode - Add a LogNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CColorGroup::RemoveColor(const Lib3MF_uint32 nPropertyID) + PLogNode CImplicitFunction::AddLogNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_RemoveColor(m_pHandle, nPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddLogNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CColorGroup::SetColor - Sets a color value. - * @param[in] nPropertyID - PropertyID of a color within this color group. - * @param[in] TheColor - The color + * CImplicitFunction::AddLog2Node - Add a Log2Node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CColorGroup::SetColor(const Lib3MF_uint32 nPropertyID, const sColor & TheColor) + PLog2Node CImplicitFunction::AddLog2Node(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_SetColor(m_pHandle, nPropertyID, &TheColor)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddLog2Node(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CColorGroup::GetColor - Sets a color value. - * @param[in] nPropertyID - PropertyID of a color within this color group. - * @return The color + * CImplicitFunction::AddLog10Node - Add a Log10Node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - sColor CColorGroup::GetColor(const Lib3MF_uint32 nPropertyID) + PLog10Node CImplicitFunction::AddLog10Node(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - sColor resultTheColor; - CheckError(m_pWrapper->m_WrapperTable.m_ColorGroup_GetColor(m_pHandle, nPropertyID, &resultTheColor)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddLog10Node(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultTheColor; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * Method definitions for class CTexture2DGroup - */ + * CImplicitFunction::AddLengthNode - Add a LengthNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + PLengthNode CImplicitFunction::AddLengthNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) + { + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddLengthNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); + } /** - * CTexture2DGroup::GetCount - Retrieves the count of tex2coords in the Texture2DGroup. - * @return returns the count of tex2coords. + * CImplicitFunction::AddTransposeNode - Add a TransposeNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CTexture2DGroup::GetCount() + PTransposeNode CImplicitFunction::AddTransposeNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_GetCount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddTransposeNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CTexture2DGroup::GetAllPropertyIDs - returns all the PropertyIDs of all tex2coords in this Texture2DGroup - * @param[out] PropertyIDsBuffer - PropertyID of the tex2coords in the Texture2DGroup. + * CImplicitFunction::InverseNode - Add a InverseNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CTexture2DGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + PInverseNode CImplicitFunction::InverseNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededPropertyIDs = 0; - Lib3MF_uint64 elementsWrittenPropertyIDs = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_GetAllPropertyIDs(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); - PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); - CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_GetAllPropertyIDs(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_InverseNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CTexture2DGroup::AddTex2Coord - Adds a new tex2coord to the Texture2DGroup - * @param[in] UVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. - * @return returns new PropertyID of the new tex2coord in the Texture2DGroup. + * CImplicitFunction::AddSqrtNode - Add a SqrtNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CTexture2DGroup::AddTex2Coord(const sTex2Coord & UVCoordinate) + PSqrtNode CImplicitFunction::AddSqrtNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultPropertyID = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_AddTex2Coord(m_pHandle, &UVCoordinate, &resultPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddSqrtNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultPropertyID; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CTexture2DGroup::GetTex2Coord - Obtains a tex2coord to the Texture2DGroup - * @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. - * @return The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. + * CImplicitFunction::AddResourceIdNode - Add a ResourceIdNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - sTex2Coord CTexture2DGroup::GetTex2Coord(const Lib3MF_uint32 nPropertyID) + PResourceIdNode CImplicitFunction::AddResourceIdNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - sTex2Coord resultUVCoordinate; - CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_GetTex2Coord(m_pHandle, nPropertyID, &resultUVCoordinate)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddResourceIdNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultUVCoordinate; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CTexture2DGroup::RemoveTex2Coord - Removes a tex2coords from the Texture2DGroup. - * @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. + * CImplicitFunction::AddAdditionNode - Add an AdditionNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CTexture2DGroup::RemoveTex2Coord(const Lib3MF_uint32 nPropertyID) + PAdditionNode CImplicitFunction::AddAdditionNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_RemoveTex2Coord(m_pHandle, nPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddAdditionNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CTexture2DGroup::GetTexture2D - Obtains the texture2D instance of this group. - * @return the texture2D instance of this group. + * CImplicitFunction::AddSubtractionNode - Add a SubtractionNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - PTexture2D CTexture2DGroup::GetTexture2D() + PSubtractionNode CImplicitFunction::AddSubtractionNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MFHandle hTexture2DInstance = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_Texture2DGroup_GetTexture2D(m_pHandle, &hTexture2DInstance)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddSubtractionNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - if (!hTexture2DInstance) { + if (!hNode) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTexture2DInstance))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * Method definitions for class CCompositeMaterials - */ + * CImplicitFunction::AddMultiplicationNode - Add a MultiplicationNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + PMultiplicationNode CImplicitFunction::AddMultiplicationNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) + { + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddMultiplicationNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); + } /** - * CCompositeMaterials::GetCount - Retrieves the count of Composite-s in the CompositeMaterials. - * @return returns the count of Composite-s + * CImplicitFunction::AddDivisionNode - Add a DivisionNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CCompositeMaterials::GetCount() + PDivisionNode CImplicitFunction::AddDivisionNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_GetCount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddDivisionNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CCompositeMaterials::GetAllPropertyIDs - returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials - * @param[out] PropertyIDsBuffer - PropertyID of the Composite-Mixing Values in the CompositeMaterials. + * CImplicitFunction::AddDotNode - Add a DotNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CCompositeMaterials::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + PDotNode CImplicitFunction::AddDotNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededPropertyIDs = 0; - Lib3MF_uint64 elementsWrittenPropertyIDs = 0; - CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_GetAllPropertyIDs(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); - PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); - CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_GetAllPropertyIDs(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddDotNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CCompositeMaterials::GetBaseMaterialGroup - Obtains the BaseMaterialGroup instance of this CompositeMaterials. - * @return returns the BaseMaterialGroup instance of this CompositeMaterials + * CImplicitFunction::AddCrossNode - Add a CrossNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - PBaseMaterialGroup CCompositeMaterials::GetBaseMaterialGroup() + PCrossNode CImplicitFunction::AddCrossNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MFHandle hBaseMaterialGroupInstance = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_GetBaseMaterialGroup(m_pHandle, &hBaseMaterialGroupInstance)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddCrossNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - if (!hBaseMaterialGroupInstance) { + if (!hNode) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hBaseMaterialGroupInstance))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CCompositeMaterials::AddComposite - Adds a new Composite-Mixing Values to the CompositeMaterials. - * @param[in] CompositeBuffer - The Composite Constituents to be added as composite - * @return returns new PropertyID of the new Composite in the CompositeMaterials. + * CImplicitFunction::AddMatVecMultiplicationNode - Add a MatVecMultiplicationNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CCompositeMaterials::AddComposite(const CInputVector & CompositeBuffer) + PMatVecMultiplicationNode CImplicitFunction::AddMatVecMultiplicationNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultPropertyID = 0; - CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_AddComposite(m_pHandle, (Lib3MF_uint64)CompositeBuffer.size(), CompositeBuffer.data(), &resultPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddMatVecMultiplicationNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultPropertyID; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CCompositeMaterials::RemoveComposite - Removes a Composite-Maxing Ratio from the CompositeMaterials. - * @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. + * CImplicitFunction::AddMinNode - Add a MinNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CCompositeMaterials::RemoveComposite(const Lib3MF_uint32 nPropertyID) + PMinNode CImplicitFunction::AddMinNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_RemoveComposite(m_pHandle, nPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddMinNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CCompositeMaterials::GetComposite - Obtains a Composite-Maxing Ratio of this CompositeMaterials. - * @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. - * @param[out] CompositeBuffer - The Composite-Mixing Values with the given PropertyID + * CImplicitFunction::AddMaxNode - Add a MaxNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CCompositeMaterials::GetComposite(const Lib3MF_uint32 nPropertyID, std::vector & CompositeBuffer) + PMaxNode CImplicitFunction::AddMaxNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededComposite = 0; - Lib3MF_uint64 elementsWrittenComposite = 0; - CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_GetComposite(m_pHandle, nPropertyID, 0, &elementsNeededComposite, nullptr)); - CompositeBuffer.resize((size_t) elementsNeededComposite); - CheckError(m_pWrapper->m_WrapperTable.m_CompositeMaterials_GetComposite(m_pHandle, nPropertyID, elementsNeededComposite, &elementsWrittenComposite, CompositeBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddMaxNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * Method definitions for class CMultiPropertyGroup - */ + * CImplicitFunction::AddFmodNode - Add a FmodNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + PFmodNode CImplicitFunction::AddFmodNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) + { + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddFmodNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); + } /** - * CMultiPropertyGroup::GetCount - Retrieves the count of MultiProperty-s in the MultiPropertyGroup. - * @return returns the count of MultiProperty-s + * CImplicitFunction::AddPowNode - Add a PowNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CMultiPropertyGroup::GetCount() + PPowNode CImplicitFunction::AddPowNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetCount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddPowNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::GetAllPropertyIDs - returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup - * @param[out] PropertyIDsBuffer - PropertyID of the MultiProperty-s in the MultiPropertyGroup. + * CImplicitFunction::AddSelectNode - Add a SelectNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CMultiPropertyGroup::GetAllPropertyIDs(std::vector & PropertyIDsBuffer) + PSelectNode CImplicitFunction::AddSelectNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededPropertyIDs = 0; - Lib3MF_uint64 elementsWrittenPropertyIDs = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetAllPropertyIDs(m_pHandle, 0, &elementsNeededPropertyIDs, nullptr)); - PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); - CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetAllPropertyIDs(m_pHandle, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddSelectNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::AddMultiProperty - Adds a new MultiProperty to the MultiPropertyGroup. - * @param[in] PropertyIDsBuffer - The PropertyIDs of the new MultiProperty. - * @return returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. + * CImplicitFunction::AddClampNode - Add a ClampNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CMultiPropertyGroup::AddMultiProperty(const CInputVector & PropertyIDsBuffer) + PClampNode CImplicitFunction::AddClampNode(const std::string & sIdentifier, const eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultPropertyID = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_AddMultiProperty(m_pHandle, (Lib3MF_uint64)PropertyIDsBuffer.size(), PropertyIDsBuffer.data(), &resultPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddClampNode(m_pHandle, sIdentifier.c_str(), eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultPropertyID; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::SetMultiProperty - Sets the PropertyIDs of a MultiProperty. - * @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. - * @param[in] PropertyIDsBuffer - The new PropertyIDs of the MultiProperty + * CImplicitFunction::AddComposeVectorNode - Add a ComposeVectorNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CMultiPropertyGroup::SetMultiProperty(const Lib3MF_uint32 nPropertyID, const CInputVector & PropertyIDsBuffer) + PComposeVectorNode CImplicitFunction::AddComposeVectorNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_SetMultiProperty(m_pHandle, nPropertyID, (Lib3MF_uint64)PropertyIDsBuffer.size(), PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddComposeVectorNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::GetMultiProperty - Obtains the PropertyIDs of a MultiProperty. - * @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. - * @param[out] PropertyIDsBuffer - The PropertyIDs of the MultiProperty + * CImplicitFunction::AddVectorFromScalarNode - Add a VectorFromScalar + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CMultiPropertyGroup::GetMultiProperty(const Lib3MF_uint32 nPropertyID, std::vector & PropertyIDsBuffer) + PVectorFromScalarNode CImplicitFunction::AddVectorFromScalarNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint64 elementsNeededPropertyIDs = 0; - Lib3MF_uint64 elementsWrittenPropertyIDs = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetMultiProperty(m_pHandle, nPropertyID, 0, &elementsNeededPropertyIDs, nullptr)); - PropertyIDsBuffer.resize((size_t) elementsNeededPropertyIDs); - CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetMultiProperty(m_pHandle, nPropertyID, elementsNeededPropertyIDs, &elementsWrittenPropertyIDs, PropertyIDsBuffer.data())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddVectorFromScalarNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::RemoveMultiProperty - Removes a MultiProperty from this MultiPropertyGroup. - * @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. + * CImplicitFunction::AddDecomposeVectorNode - Add a DecomposeVectorNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CMultiPropertyGroup::RemoveMultiProperty(const Lib3MF_uint32 nPropertyID) + PDecomposeVectorNode CImplicitFunction::AddDecomposeVectorNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_RemoveMultiProperty(m_pHandle, nPropertyID)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddDecomposeVectorNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::GetLayerCount - Retrieves the number of layers of this MultiPropertyGroup. - * @return returns the number of layers + * CImplicitFunction::AddComposeMatrixNode - Add a ComposeMatrixNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CMultiPropertyGroup::GetLayerCount() + PComposeMatrixNode CImplicitFunction::AddComposeMatrixNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultCount = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetLayerCount(m_pHandle, &resultCount)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddComposeMatrixNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultCount; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::AddLayer - Adds a MultiPropertyLayer to this MultiPropertyGroup. - * @param[in] TheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup - * @return returns the index of this MultiPropertyLayer + * CImplicitFunction::AddMatrixFromRowsNode - Add a MatrixFromRowsNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint32 CMultiPropertyGroup::AddLayer(const sMultiPropertyLayer & TheLayer) + PMatrixFromRowsNode CImplicitFunction::AddMatrixFromRowsNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 resultLayerIndex = 0; - CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_AddLayer(m_pHandle, &TheLayer, &resultLayerIndex)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddMatrixFromRowsNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultLayerIndex; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::GetLayer - Obtains a MultiPropertyLayer of this MultiPropertyGroup. - * @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried - * @return The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup + * CImplicitFunction::AddMatrixFromColumnsNode - Add a MatrixFromColumnsNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - sMultiPropertyLayer CMultiPropertyGroup::GetLayer(const Lib3MF_uint32 nLayerIndex) + PMatrixFromColumnsNode CImplicitFunction::AddMatrixFromColumnsNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - sMultiPropertyLayer resultTheLayer; - CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_GetLayer(m_pHandle, nLayerIndex, &resultTheLayer)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddMatrixFromColumnsNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return resultTheLayer; + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CMultiPropertyGroup::RemoveLayer - Removes a MultiPropertyLayer from this MultiPropertyGroup. - * @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed + * CImplicitFunction::AddConstantNode - Add a ConstantNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CMultiPropertyGroup::RemoveLayer(const Lib3MF_uint32 nLayerIndex) + PConstantNode CImplicitFunction::AddConstantNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_MultiPropertyGroup_RemoveLayer(m_pHandle, nLayerIndex)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddConstantNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * Method definitions for class CAttachment - */ - - /** - * CAttachment::GetPath - Retrieves an attachment's package path. This function will be removed in a later release. - * @return returns the attachment's package path string + * CImplicitFunction::AddConstVecNode - Add a ConstVecNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - std::string CAttachment::GetPath() + PConstVecNode CImplicitFunction::AddConstVecNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 bytesNeededPath = 0; - Lib3MF_uint32 bytesWrittenPath = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_GetPath(m_pHandle, 0, &bytesNeededPath, nullptr)); - std::vector bufferPath(bytesNeededPath); - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_GetPath(m_pHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0])); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddConstVecNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return std::string(&bufferPath[0]); + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CAttachment::SetPath - Sets an attachment's package path. This function will be removed in a later release. - * @param[in] sPath - new path of the attachment. + * CImplicitFunction::AddConstMatNode - Add a ConstMatNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CAttachment::SetPath(const std::string & sPath) + PConstMatNode CImplicitFunction::AddConstMatNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_SetPath(m_pHandle, sPath.c_str())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddConstMatNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CAttachment::PackagePart - Returns the PackagePart that is this attachment. - * @return The PackagePart of this attachment. + * CImplicitFunction::AddMeshNode - Add a MeshNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - PPackagePart CAttachment::PackagePart() + PMeshNode CImplicitFunction::AddMeshNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MFHandle hPackagePart = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_PackagePart(m_pHandle, &hPackagePart)); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddMeshNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - if (!hPackagePart) { + if (!hNode) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hPackagePart))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CAttachment::GetRelationShipType - Retrieves an attachment's relationship type - * @return returns the attachment's package relationship type string + * CImplicitFunction::AddUnsignedMeshNode - Add a UnsignedMeshNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - std::string CAttachment::GetRelationShipType() + PUnsignedMeshNode CImplicitFunction::AddUnsignedMeshNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - Lib3MF_uint32 bytesNeededPath = 0; - Lib3MF_uint32 bytesWrittenPath = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_GetRelationShipType(m_pHandle, 0, &bytesNeededPath, nullptr)); - std::vector bufferPath(bytesNeededPath); - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_GetRelationShipType(m_pHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0])); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddUnsignedMeshNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); - return std::string(&bufferPath[0]); + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CAttachment::SetRelationShipType - Sets an attachment's relationship type. - * @param[in] sPath - new relationship type string. + * CImplicitFunction::AddFunctionCallNode - Add a FunctionCallNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - void CAttachment::SetRelationShipType(const std::string & sPath) + PFunctionCallNode CImplicitFunction::AddFunctionCallNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) { - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_SetRelationShipType(m_pHandle, sPath.c_str())); + Lib3MFHandle hNode = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddFunctionCallNode(m_pHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hNode)); + + if (!hNode) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hNode))); } /** - * CAttachment::WriteToFile - Writes out the attachment as file. - * @param[in] sFileName - file to write into. + * CImplicitFunction::GetNodes - Retrieves the nodes + * @return iterator for the list of nodes */ - void CAttachment::WriteToFile(const std::string & sFileName) + PNodeIterator CImplicitFunction::GetNodes() { - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_WriteToFile(m_pHandle, sFileName.c_str())); + Lib3MFHandle hIterator = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_GetNodes(m_pHandle, &hIterator)); + + if (!hIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hIterator))); } /** - * CAttachment::ReadFromFile - Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. - * @param[in] sFileName - file to read from. + * CImplicitFunction::RemoveNode - Removes a node + * @param[in] pNode - The node to be removed */ - void CAttachment::ReadFromFile(const std::string & sFileName) + void CImplicitFunction::RemoveNode(classParam pNode) { - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_ReadFromFile(m_pHandle, sFileName.c_str())); + Lib3MFHandle hNode = pNode.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_RemoveNode(m_pHandle, hNode)); } /** - * CAttachment::ReadFromCallback - Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. - * @param[in] pTheReadCallback - Callback to call for reading a data chunk - * @param[in] nStreamSize - number of bytes the callback returns - * @param[in] pTheSeekCallback - Callback to call for seeking in the stream. - * @param[in] pUserData - Userdata that is passed to the callback function + * CImplicitFunction::AddLink - Add a link + * @param[in] pSource - the source port + * @param[in] pTarget - the target port */ - void CAttachment::ReadFromCallback(const ReadCallback pTheReadCallback, const Lib3MF_uint64 nStreamSize, const SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) + void CImplicitFunction::AddLink(classParam pSource, classParam pTarget) { - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_ReadFromCallback(m_pHandle, pTheReadCallback, nStreamSize, pTheSeekCallback, pUserData)); + Lib3MFHandle hSource = pSource.GetHandle(); + Lib3MFHandle hTarget = pTarget.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddLink(m_pHandle, hSource, hTarget)); } /** - * CAttachment::GetStreamSize - Retrieves the size of the attachment stream - * @return the stream size + * CImplicitFunction::AddLinkByNames - Add a link + * @param[in] sSource - name of the source port in the format nodename.portname + * @param[in] sTarget - name of the target port in the format nodename.portname */ - Lib3MF_uint64 CAttachment::GetStreamSize() + void CImplicitFunction::AddLinkByNames(const std::string & sSource, const std::string & sTarget) { - Lib3MF_uint64 resultStreamSize = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_GetStreamSize(m_pHandle, &resultStreamSize)); - - return resultStreamSize; + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_AddLinkByNames(m_pHandle, sSource.c_str(), sTarget.c_str())); } /** - * CAttachment::WriteToBuffer - Writes out the attachment into a buffer - * @param[out] BufferBuffer - Buffer to write into + * CImplicitFunction::Clear - Clears the function */ - void CAttachment::WriteToBuffer(std::vector & BufferBuffer) + void CImplicitFunction::Clear() { - Lib3MF_uint64 elementsNeededBuffer = 0; - Lib3MF_uint64 elementsWrittenBuffer = 0; - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_WriteToBuffer(m_pHandle, 0, &elementsNeededBuffer, nullptr)); - BufferBuffer.resize((size_t) elementsNeededBuffer); - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_WriteToBuffer(m_pHandle, elementsNeededBuffer, &elementsWrittenBuffer, BufferBuffer.data())); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_Clear(m_pHandle)); } /** - * CAttachment::ReadFromBuffer - Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). - * @param[in] BufferBuffer - Buffer to read from + * CImplicitFunction::SortNodesTopologically - Sorts the nodes topologically */ - void CAttachment::ReadFromBuffer(const CInputVector & BufferBuffer) + void CImplicitFunction::SortNodesTopologically() { - CheckError(m_pWrapper->m_WrapperTable.m_Attachment_ReadFromBuffer(m_pHandle, (Lib3MF_uint64)BufferBuffer.size(), BufferBuffer.data())); + CheckError(m_pWrapper->m_WrapperTable.m_ImplicitFunction_SortNodesTopologically(m_pHandle)); } /** - * Method definitions for class CTexture2D + * Method definitions for class CFunctionFromImage3D */ /** - * CTexture2D::GetAttachment - Retrieves the attachment located at the path of the texture. - * @return attachment that holds the texture's image information. + * CFunctionFromImage3D::GetImage3D - Returns the selected 3D image. + * @return image instance */ - PAttachment CTexture2D::GetAttachment() + PImage3D CFunctionFromImage3D::GetImage3D() { - Lib3MFHandle hAttachment = nullptr; - CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_GetAttachment(m_pHandle, &hAttachment)); + Lib3MFHandle hImage3D = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_FunctionFromImage3D_GetImage3D(m_pHandle, &hImage3D)); - if (!hAttachment) { + if (!hImage3D) { CheckError(LIB3MF_ERROR_INVALIDPARAM); } - return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hAttachment))); + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hImage3D))); } /** - * CTexture2D::SetAttachment - Sets the texture's package path to the path of the attachment. - * @param[in] pAttachment - attachment that holds the texture's image information. + * CFunctionFromImage3D::SetImage3D - Sets the 3D image of the selector. + * @param[in] pImage3D - image instance */ - void CTexture2D::SetAttachment(classParam pAttachment) + void CFunctionFromImage3D::SetImage3D(classParam pImage3D) { - Lib3MFHandle hAttachment = pAttachment.GetHandle(); - CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_SetAttachment(m_pHandle, hAttachment)); + Lib3MFHandle hImage3D = pImage3D.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_FunctionFromImage3D_SetImage3D(m_pHandle, hImage3D)); } /** - * CTexture2D::GetContentType - Retrieves a texture's content type. - * @return returns content type enum. + * CFunctionFromImage3D::SetFilter - Sets the texture filter of the selector. + * @param[in] eFilter - texture filter */ - eTextureType CTexture2D::GetContentType() + void CFunctionFromImage3D::SetFilter(const eTextureFilter eFilter) { - eTextureType resultContentType = (eTextureType) 0; - CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_GetContentType(m_pHandle, &resultContentType)); + CheckError(m_pWrapper->m_WrapperTable.m_FunctionFromImage3D_SetFilter(m_pHandle, eFilter)); + } + + /** + * CFunctionFromImage3D::GetFilter - Returns the texture filter of the selector. + * @return texture filter + */ + eTextureFilter CFunctionFromImage3D::GetFilter() + { + eTextureFilter resultFilter = (eTextureFilter) 0; + CheckError(m_pWrapper->m_WrapperTable.m_FunctionFromImage3D_GetFilter(m_pHandle, &resultFilter)); - return resultContentType; + return resultFilter; } /** - * CTexture2D::SetContentType - Retrieves a texture's content type. - * @param[in] eContentType - new Content Type + * CFunctionFromImage3D::SetTileStyles - Sets the tile styles of the selector. + * @param[in] eTileStyleU - tile style in U + * @param[in] eTileStyleV - tile style in V + * @param[in] eTileStyleW - tile style in W */ - void CTexture2D::SetContentType(const eTextureType eContentType) + void CFunctionFromImage3D::SetTileStyles(const eTextureTileStyle eTileStyleU, const eTextureTileStyle eTileStyleV, const eTextureTileStyle eTileStyleW) { - CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_SetContentType(m_pHandle, eContentType)); + CheckError(m_pWrapper->m_WrapperTable.m_FunctionFromImage3D_SetTileStyles(m_pHandle, eTileStyleU, eTileStyleV, eTileStyleW)); } /** - * CTexture2D::GetTileStyleUV - Retrieves a texture's tilestyle type. - * @param[out] eTileStyleU - returns tilestyle type enum. - * @param[out] eTileStyleV - returns tilestyle type enum. + * CFunctionFromImage3D::GetTileStyles - Retrieves the tile styles of the selector. + * @param[out] eTileStyleU - tile style in U + * @param[out] eTileStyleV - tile style in V + * @param[out] eTileStyleW - tile style in W */ - void CTexture2D::GetTileStyleUV(eTextureTileStyle & eTileStyleU, eTextureTileStyle & eTileStyleV) + void CFunctionFromImage3D::GetTileStyles(eTextureTileStyle & eTileStyleU, eTextureTileStyle & eTileStyleV, eTextureTileStyle & eTileStyleW) { - CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_GetTileStyleUV(m_pHandle, &eTileStyleU, &eTileStyleV)); + CheckError(m_pWrapper->m_WrapperTable.m_FunctionFromImage3D_GetTileStyles(m_pHandle, &eTileStyleU, &eTileStyleV, &eTileStyleW)); } /** - * CTexture2D::SetTileStyleUV - Sets a texture's tilestyle type. - * @param[in] eTileStyleU - new tilestyle type enum. - * @param[in] eTileStyleV - new tilestyle type enum. + * CFunctionFromImage3D::GetOffset - returns the offset value for the pixel values in the Image3D + * @return the offset value for the pixel values in the Image3D */ - void CTexture2D::SetTileStyleUV(const eTextureTileStyle eTileStyleU, const eTextureTileStyle eTileStyleV) + Lib3MF_double CFunctionFromImage3D::GetOffset() { - CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_SetTileStyleUV(m_pHandle, eTileStyleU, eTileStyleV)); + Lib3MF_double resultOffset = 0; + CheckError(m_pWrapper->m_WrapperTable.m_FunctionFromImage3D_GetOffset(m_pHandle, &resultOffset)); + + return resultOffset; } /** - * CTexture2D::GetFilter - Retrieves a texture's filter type. - * @return returns filter type enum. + * CFunctionFromImage3D::SetOffset - Sets the offset value for the pixel values in the Image3D + * @param[in] dOffset - the offset value for the pixel values in the Image3D */ - eTextureFilter CTexture2D::GetFilter() + void CFunctionFromImage3D::SetOffset(const Lib3MF_double dOffset) { - eTextureFilter resultFilter = (eTextureFilter) 0; - CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_GetFilter(m_pHandle, &resultFilter)); + CheckError(m_pWrapper->m_WrapperTable.m_FunctionFromImage3D_SetOffset(m_pHandle, dOffset)); + } + + /** + * CFunctionFromImage3D::GetScale - returns the scale value for the pixel values in the Image3D + * @return the scale value for the pixel values in the Image3D + */ + Lib3MF_double CFunctionFromImage3D::GetScale() + { + Lib3MF_double resultScale = 0; + CheckError(m_pWrapper->m_WrapperTable.m_FunctionFromImage3D_GetScale(m_pHandle, &resultScale)); - return resultFilter; + return resultScale; } /** - * CTexture2D::SetFilter - Sets a texture's filter type. - * @param[in] eFilter - sets new filter type enum. + * CFunctionFromImage3D::SetScale - Sets the scale value for the pixel values in the Image3D + * @param[in] dScale - the scale value for the pixel values in the Image3D */ - void CTexture2D::SetFilter(const eTextureFilter eFilter) + void CFunctionFromImage3D::SetScale(const Lib3MF_double dScale) { - CheckError(m_pWrapper->m_WrapperTable.m_Texture2D_SetFilter(m_pHandle, eFilter)); + CheckError(m_pWrapper->m_WrapperTable.m_FunctionFromImage3D_SetScale(m_pHandle, dScale)); } /** @@ -10986,6 +19858,22 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hSliceStacInstance))); } + /** + * CModel::GetLevelSetByID - finds a level set object by its UniqueResourceID + * @param[in] nUniqueResourceID - UniqueResourceID + * @return returns the level set object instance + */ + PLevelSet CModel::GetLevelSetByID(const Lib3MF_uint32 nUniqueResourceID) + { + Lib3MFHandle hLevelSetObjectInstance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Model_GetLevelSetByID(m_pHandle, nUniqueResourceID, &hLevelSetObjectInstance)); + + if (!hLevelSetObjectInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hLevelSetObjectInstance))); + } + /** * CModel::GetBuildUUID - returns, whether a build has a UUID and, if true, the build's UUID * @param[out] bHasUUID - flag whether the build has a UUID @@ -11203,6 +20091,21 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResourceIterator))); } + /** + * CModel::GetImage3Ds - creates a resource iterator instance with all image3d resources. + * @return returns the iterator instance. + */ + PImage3DIterator CModel::GetImage3Ds() + { + Lib3MFHandle hResourceIterator = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Model_GetImage3Ds(m_pHandle, &hResourceIterator)); + + if (!hResourceIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResourceIterator))); + } + /** * CModel::MergeToModel - Merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. * @return returns the merged model instance @@ -11218,6 +20121,16 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMergedModelInstance))); } + /** + * CModel::MergeFromModel - Merges the given model into this model. + * @param[in] pModelInstance - model to be merged + */ + void CModel::MergeFromModel(classParam pModelInstance) + { + Lib3MFHandle hModelInstance = pModelInstance.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_Model_MergeFromModel(m_pHandle, hModelInstance)); + } + /** * CModel::AddMeshObject - adds an empty mesh object to the model. * @return returns the mesh object instance @@ -11360,6 +20273,40 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hMultiPropertyGroupInstance))); } + /** + * CModel::AddImageStack - creates a new 3D Image Resource + * @param[in] nColumnCount - the number of columns in each sheet. + * @param[in] nRowCount - the number of rows in each sheet. + * @param[in] nSheetCount - the number of sheets in the image stack. + * @return returns the new ImageStack instance + */ + PImageStack CModel::AddImageStack(const Lib3MF_uint32 nColumnCount, const Lib3MF_uint32 nRowCount, const Lib3MF_uint32 nSheetCount) + { + Lib3MFHandle hInstance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Model_AddImageStack(m_pHandle, nColumnCount, nRowCount, nSheetCount, &hInstance)); + + if (!hInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hInstance))); + } + + /** + * CModel::GetImageStackByID - finds an ImageStack object by its UniqueResourceID + * @param[in] nUniqueResourceID - UniqueResourceID + * @return returns the image stack instance + */ + PImageStack CModel::GetImageStackByID(const Lib3MF_uint32 nUniqueResourceID) + { + Lib3MFHandle hImageStackInstance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Model_GetImageStackByID(m_pHandle, nUniqueResourceID, &hImageStackInstance)); + + if (!hImageStackInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hImageStackInstance))); + } + /** * CModel::AddBuildItem - adds a build item to the model. * @param[in] pObject - Object instance. @@ -11568,6 +20515,108 @@ inline CBase* CWrapper::polymorphicFactory(Lib3MFHandle pHandle) } return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hKeyStore))); } + + /** + * CModel::GetFunctions - creates a resource iterator for all functions + * @return returns the resource iterator + */ + PFunctionIterator CModel::GetFunctions() + { + Lib3MFHandle hTheResourceIterator = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Model_GetFunctions(m_pHandle, &hTheResourceIterator)); + + if (!hTheResourceIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hTheResourceIterator))); + } + + /** + * CModel::AddImplicitFunction - adds a function described by nodes to the model + * @return returns the function instance + */ + PImplicitFunction CModel::AddImplicitFunction() + { + Lib3MFHandle hFunctionInstance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Model_AddImplicitFunction(m_pHandle, &hFunctionInstance)); + + if (!hFunctionInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hFunctionInstance))); + } + + /** + * CModel::AddFunctionFromImage3D - adds a function defined by an image3d to the model + * @param[in] pImage3DInstance - the Image3D-instance used for this function + * @return returns the function instance + */ + PFunctionFromImage3D CModel::AddFunctionFromImage3D(classParam pImage3DInstance) + { + Lib3MFHandle hImage3DInstance = pImage3DInstance.GetHandle(); + Lib3MFHandle hFunctionInstance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Model_AddFunctionFromImage3D(m_pHandle, hImage3DInstance, &hFunctionInstance)); + + if (!hFunctionInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hFunctionInstance))); + } + + /** + * CModel::AddVolumeData - adds a volume data resource to the model. + * @return returns the new volume data instance. + */ + PVolumeData CModel::AddVolumeData() + { + Lib3MFHandle hVolumeDataInstance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Model_AddVolumeData(m_pHandle, &hVolumeDataInstance)); + + if (!hVolumeDataInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hVolumeDataInstance))); + } + + /** + * CModel::AddLevelSet - adds an empty boundary shape object to the model. + * @return returns the mesh object instance + */ + PLevelSet CModel::AddLevelSet() + { + Lib3MFHandle hLevelSetInstance = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Model_AddLevelSet(m_pHandle, &hLevelSetInstance)); + + if (!hLevelSetInstance) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hLevelSetInstance))); + } + + /** + * CModel::GetLevelSets - creates a resource iterator instance with all boundary shape resources. + * @return returns the iterator instance. + */ + PLevelSetIterator CModel::GetLevelSets() + { + Lib3MFHandle hResourceIterator = nullptr; + CheckError(m_pWrapper->m_WrapperTable.m_Model_GetLevelSets(m_pHandle, &hResourceIterator)); + + if (!hResourceIterator) { + CheckError(LIB3MF_ERROR_INVALIDPARAM); + } + return std::shared_ptr(dynamic_cast(m_pWrapper->polymorphicFactory(hResourceIterator))); + } + + /** + * CModel::RemoveResource - Removes a resource from the model + * @param[in] pResource - The resource to remove + */ + void CModel::RemoveResource(classParam pResource) + { + Lib3MFHandle hResource = pResource.GetHandle(); + CheckError(m_pWrapper->m_WrapperTable.m_Model_RemoveResource(m_pHandle, hResource)); + } } // namespace Lib3MF diff --git a/Autogenerated/Bindings/CppDynamic/lib3mf_types.hpp b/Autogenerated/Bindings/CppDynamic/lib3mf_types.hpp index 705f02718..61ecedc56 100644 --- a/Autogenerated/Bindings/CppDynamic/lib3mf_types.hpp +++ b/Autogenerated/Bindings/CppDynamic/lib3mf_types.hpp @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++-Header file with basic types in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -83,8 +83,8 @@ typedef void * Lib3MF_pvoid; **************************************************************************************************************************/ #define LIB3MF_VERSION_MAJOR 2 -#define LIB3MF_VERSION_MINOR 3 -#define LIB3MF_VERSION_MICRO 2 +#define LIB3MF_VERSION_MINOR 4 +#define LIB3MF_VERSION_MICRO 0 #define LIB3MF_VERSION_PRERELEASEINFO "" #define LIB3MF_VERSION_BUILDINFO "" @@ -129,13 +129,18 @@ typedef void * Lib3MF_pvoid; #define LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER 140 /** A progress identifier is unknown */ #define LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT 141 /** An element buffer exceeds its spec limit */ #define LIB3MF_ERROR_INVALIDRESOURCE 142 /** A resource is invalid */ +#define LIB3MF_ERROR_INVALIDLEVELSET 143 /** A level set is invalid */ #define LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE 2000 /** This object type is not valid for beamlattices */ #define LIB3MF_ERROR_INVALIDKEYSTORE 3000 /** The keystore object is invalid */ #define LIB3MF_ERROR_INVALIDKEYSTORECONSUMER 3001 /** The consumer keystore object is invalid */ #define LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND 3002 /** A consumer has not been found */ #define LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND 3003 /** A resource data has not been found */ #define LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED 3004 /** A Key or Conentent encryption callback has not been registered */ -#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key siue is invalid */ +#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key size is invalid */ +#define LIB3MF_ERROR_INCOMPATIBLEPORTTYPES 4000 /** Link could not be added, the port types are incompatible */ +#define LIB3MF_ERROR_GRAPHISCYCLIC 4001 /** The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted. */ +#define LIB3MF_ERROR_INPUTNOTSET 4002 /** The input of a node is not set. */ +#define LIB3MF_ERROR_INVALIDNODECONFIGURATION 4003 /** The selected node configuration is not supported */ /************************************************************************************************************************* Error strings for Lib3MF @@ -180,13 +185,18 @@ inline const char * LIB3MF_GETERRORSTRING (Lib3MFResult nErrorCode) { case LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: return "A progress identifier is unknown"; case LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: return "An element buffer exceeds its spec limit"; case LIB3MF_ERROR_INVALIDRESOURCE: return "A resource is invalid"; + case LIB3MF_ERROR_INVALIDLEVELSET: return "A level set is invalid"; case LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: return "This object type is not valid for beamlattices"; case LIB3MF_ERROR_INVALIDKEYSTORE: return "The keystore object is invalid"; case LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: return "The consumer keystore object is invalid"; case LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND: return "A consumer has not been found"; case LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: return "A resource data has not been found"; case LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: return "A Key or Conentent encryption callback has not been registered"; - case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key siue is invalid"; + case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key size is invalid"; + case LIB3MF_ERROR_INCOMPATIBLEPORTTYPES: return "Link could not be added, the port types are incompatible"; + case LIB3MF_ERROR_GRAPHISCYCLIC: return "The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted."; + case LIB3MF_ERROR_INPUTNOTSET: return "The input of a node is not set."; + case LIB3MF_ERROR_INVALIDNODECONFIGURATION: return "The selected node configuration is not supported"; default: return "unknown error"; } } @@ -211,11 +221,21 @@ typedef Lib3MFHandle Lib3MF_ColorGroupIterator; typedef Lib3MFHandle Lib3MF_Texture2DGroupIterator; typedef Lib3MFHandle Lib3MF_CompositeMaterialsIterator; typedef Lib3MFHandle Lib3MF_MultiPropertyGroupIterator; +typedef Lib3MFHandle Lib3MF_Image3DIterator; +typedef Lib3MFHandle Lib3MF_FunctionIterator; +typedef Lib3MFHandle Lib3MF_LevelSetIterator; typedef Lib3MFHandle Lib3MF_MetaData; typedef Lib3MFHandle Lib3MF_MetaDataGroup; typedef Lib3MFHandle Lib3MF_Object; typedef Lib3MFHandle Lib3MF_MeshObject; +typedef Lib3MFHandle Lib3MF_LevelSet; typedef Lib3MFHandle Lib3MF_BeamLattice; +typedef Lib3MFHandle Lib3MF_FunctionReference; +typedef Lib3MFHandle Lib3MF_VolumeDataColor; +typedef Lib3MFHandle Lib3MF_MaterialMapping; +typedef Lib3MFHandle Lib3MF_VolumeDataComposite; +typedef Lib3MFHandle Lib3MF_VolumeDataProperty; +typedef Lib3MFHandle Lib3MF_VolumeData; typedef Lib3MFHandle Lib3MF_Component; typedef Lib3MFHandle Lib3MF_ComponentsObject; typedef Lib3MFHandle Lib3MF_BeamSet; @@ -224,8 +244,71 @@ typedef Lib3MFHandle Lib3MF_ColorGroup; typedef Lib3MFHandle Lib3MF_Texture2DGroup; typedef Lib3MFHandle Lib3MF_CompositeMaterials; typedef Lib3MFHandle Lib3MF_MultiPropertyGroup; +typedef Lib3MFHandle Lib3MF_Image3D; +typedef Lib3MFHandle Lib3MF_ImageStack; typedef Lib3MFHandle Lib3MF_Attachment; typedef Lib3MFHandle Lib3MF_Texture2D; +typedef Lib3MFHandle Lib3MF_ImplicitPort; +typedef Lib3MFHandle Lib3MF_Iterator; +typedef Lib3MFHandle Lib3MF_ImplicitPortIterator; +typedef Lib3MFHandle Lib3MF_ImplicitNode; +typedef Lib3MFHandle Lib3MF_OneInputNode; +typedef Lib3MFHandle Lib3MF_SinNode; +typedef Lib3MFHandle Lib3MF_CosNode; +typedef Lib3MFHandle Lib3MF_TanNode; +typedef Lib3MFHandle Lib3MF_ArcSinNode; +typedef Lib3MFHandle Lib3MF_ArcCosNode; +typedef Lib3MFHandle Lib3MF_ArcTanNode; +typedef Lib3MFHandle Lib3MF_SinhNode; +typedef Lib3MFHandle Lib3MF_CoshNode; +typedef Lib3MFHandle Lib3MF_TanhNode; +typedef Lib3MFHandle Lib3MF_RoundNode; +typedef Lib3MFHandle Lib3MF_CeilNode; +typedef Lib3MFHandle Lib3MF_FloorNode; +typedef Lib3MFHandle Lib3MF_SignNode; +typedef Lib3MFHandle Lib3MF_FractNode; +typedef Lib3MFHandle Lib3MF_AbsNode; +typedef Lib3MFHandle Lib3MF_ExpNode; +typedef Lib3MFHandle Lib3MF_LogNode; +typedef Lib3MFHandle Lib3MF_Log2Node; +typedef Lib3MFHandle Lib3MF_Log10Node; +typedef Lib3MFHandle Lib3MF_LengthNode; +typedef Lib3MFHandle Lib3MF_TransposeNode; +typedef Lib3MFHandle Lib3MF_InverseNode; +typedef Lib3MFHandle Lib3MF_SqrtNode; +typedef Lib3MFHandle Lib3MF_ResourceIdNode; +typedef Lib3MFHandle Lib3MF_TwoInputNode; +typedef Lib3MFHandle Lib3MF_AdditionNode; +typedef Lib3MFHandle Lib3MF_SubtractionNode; +typedef Lib3MFHandle Lib3MF_MultiplicationNode; +typedef Lib3MFHandle Lib3MF_DivisionNode; +typedef Lib3MFHandle Lib3MF_DotNode; +typedef Lib3MFHandle Lib3MF_CrossNode; +typedef Lib3MFHandle Lib3MF_ArcTan2Node; +typedef Lib3MFHandle Lib3MF_MatVecMultiplicationNode; +typedef Lib3MFHandle Lib3MF_MinNode; +typedef Lib3MFHandle Lib3MF_MaxNode; +typedef Lib3MFHandle Lib3MF_FmodNode; +typedef Lib3MFHandle Lib3MF_ModNode; +typedef Lib3MFHandle Lib3MF_PowNode; +typedef Lib3MFHandle Lib3MF_SelectNode; +typedef Lib3MFHandle Lib3MF_ClampNode; +typedef Lib3MFHandle Lib3MF_ComposeVectorNode; +typedef Lib3MFHandle Lib3MF_VectorFromScalarNode; +typedef Lib3MFHandle Lib3MF_DecomposeVectorNode; +typedef Lib3MFHandle Lib3MF_ComposeMatrixNode; +typedef Lib3MFHandle Lib3MF_MatrixFromRowsNode; +typedef Lib3MFHandle Lib3MF_MatrixFromColumnsNode; +typedef Lib3MFHandle Lib3MF_ConstantNode; +typedef Lib3MFHandle Lib3MF_ConstVecNode; +typedef Lib3MFHandle Lib3MF_ConstMatNode; +typedef Lib3MFHandle Lib3MF_MeshNode; +typedef Lib3MFHandle Lib3MF_UnsignedMeshNode; +typedef Lib3MFHandle Lib3MF_FunctionCallNode; +typedef Lib3MFHandle Lib3MF_NodeIterator; +typedef Lib3MFHandle Lib3MF_Function; +typedef Lib3MFHandle Lib3MF_ImplicitFunction; +typedef Lib3MFHandle Lib3MF_FunctionFromImage3D; typedef Lib3MFHandle Lib3MF_BuildItem; typedef Lib3MFHandle Lib3MF_BuildItemIterator; typedef Lib3MFHandle Lib3MF_Slice; @@ -306,7 +389,7 @@ namespace Lib3MF { }; enum class eBeamLatticeBallMode : Lib3MF_int32 { - None = 0, + BeamLatticeBallModeNone = 0, Mixed = 1, All = 2 }; @@ -344,6 +427,103 @@ namespace Lib3MF { Multiply = 2 }; + enum class eChannelName : Lib3MF_int32 { + Red = 0, + Green = 1, + Blue = 2, + Alpha = 3 + }; + + enum class eCompositionMethod : Lib3MF_int32 { + WeightedSum = 0, + Multiply = 1, + Min = 2, + Max = 3, + Mask = 4 + }; + + enum class eCompositionSpace : Lib3MF_int32 { + Raw = 0, + LinearColor = 1 + }; + + /** + * enum class eImplicitNodeType - The type of the node + */ + enum class eImplicitNodeType : Lib3MF_int32 { + Addition = 1, /** Adds to values (scalar or vector) */ + Subtraction = 2, /** Subtracts two values (scalar or vector) */ + Multiplication = 3, /** Multiplies two values (scalar or vector) */ + Division = 4, /** Divides two values (scalar or vector) */ + Constant = 5, /** A constant scalar value */ + ConstVec = 6, /** A constant vector value */ + ConstMat = 7, /** A constant matrix value */ + ComposeVector = 8, /** Creates a vector from three scalar values */ + DecomposeVector = 9, /** Decomposes a vector into three scalar values */ + ComposeMatrix = 10, /** Creates a matrix from nine scalar values */ + MatrixFromColumns = 11, /** Creates a matrix from three column vector values */ + MatrixFromRows = 12, /** Creates a matrix from three row vector values */ + Dot = 13, /** Calculates the dot product of two vector values */ + Cross = 14, /** Calculates the cross product of two vector values */ + MatVecMultiplication = 15, /** Multiplies a matrix with a vector */ + Transpose = 16, /** Transposes a matrix */ + Inverse = 17, /** Computes the inverse of a matrix */ + Sinus = 18, /** Calculates the sinus */ + Cosinus = 19, /** Calculates the cosinus */ + Tan = 20, /** Calculates the tangent */ + ArcSin = 21, /** Calculates the arcsinus */ + ArcCos = 22, /** Calculates the arccosinus */ + ArcTan = 23, /** Calculates the arctangent */ + ArcTan2 = 24, /** Calculates the arctangent */ + Min = 25, /** Calculates the minimum tow values */ + Max = 26, /** Calculates the maximum of two values */ + Abs = 27, /** Calcul the absolute value */ + Fmod = 28, /** Computes the remainder of the divison of the inputs (same behavior as C fmod) */ + Pow = 29, /** Calculates the power A^B */ + Sqrt = 30, /** Calculates the square root */ + Exp = 31, /** Exponential function */ + Log = 32, /** Natural logarithmus */ + Log2 = 33, /** Logarithmus to the base 2 */ + Log10 = 34, /** Logarithmus to the base 10 */ + Select = 35, /** If A is less B returns C, else D */ + Clamp = 36, /** Clamps the input value to min and max */ + Sinh = 37, /** Calculates the hyperbolic sine */ + Cosh = 38, /** Calculates the hyperbolic cosine */ + Tanh = 39, /** Calculates the hyperbolic tangent */ + Round = 40, /** Rounds a scalar value to the nearest integer */ + Ceil = 41, /** Rounds a scalar value up to the nearest integer */ + Floor = 42, /** Rounds a scalar value down to the nearest integer */ + Sign = 43, /** Returns the sign */ + Fract = 44, /** Returns the fractional part */ + FunctionCall = 45, /** Calls a function */ + Mesh = 46, /** Calculates the signed distance to a mesh */ + Length = 47, /** Calculates the length of a vector */ + ConstResourceID = 48, /** Selects a resource (function, mesh etc.) */ + VectorFromScalar = 49, /** Creates a vector from one scalar values */ + UnsignedMesh = 50, /** Calculates the unsigned distance to a mesh */ + Mod = 51 /** Calculates the modulo of two values (same behaviour as glsl mod) */ + }; + + /** + * enum class eImplicitPortType - The type of the port + */ + enum class eImplicitPortType : Lib3MF_int32 { + Scalar = 1, /** Scalar */ + Vector = 2, /** Vector */ + Matrix = 3, /** 4x4 Matrix */ + ResourceID = 4 /** Resource ID */ + }; + + /** + * enum class eImplicitNodeConfiguration - Defines the input and output types of a node + */ + enum class eImplicitNodeConfiguration : Lib3MF_int32 { + Default = 1, /** Default */ + ScalarToScalar = 2, /** Scalar -> Scalar */ + VectorToVector = 3, /** Vector -> Vector */ + MatrixToMatrix = 4 /** Matrix -> Matrix */ + }; + enum class eEncryptionAlgorithm : Lib3MF_int32 { AES256_GCM = 1 /** http://www.w3.org/2009/xmlenc11#aes256-gcm */ }; @@ -435,6 +615,14 @@ namespace Lib3MF { Lib3MF_double m_Radius; } sBall; + typedef struct sVector { + Lib3MF_double m_Coordinates[3]; + } sVector; + + typedef struct sMatrix4x4 { + Lib3MF_double m_Field[4][4]; + } sMatrix4x4; + #pragma pack () /************************************************************************************************************************* @@ -530,6 +718,12 @@ typedef Lib3MF::eBeamLatticeClipMode eLib3MFBeamLatticeClipMode; typedef Lib3MF::eBeamLatticeBallMode eLib3MFBeamLatticeBallMode; typedef Lib3MF::eProgressIdentifier eLib3MFProgressIdentifier; typedef Lib3MF::eBlendMethod eLib3MFBlendMethod; +typedef Lib3MF::eChannelName eLib3MFChannelName; +typedef Lib3MF::eCompositionMethod eLib3MFCompositionMethod; +typedef Lib3MF::eCompositionSpace eLib3MFCompositionSpace; +typedef Lib3MF::eImplicitNodeType eLib3MFImplicitNodeType; +typedef Lib3MF::eImplicitPortType eLib3MFImplicitPortType; +typedef Lib3MF::eImplicitNodeConfiguration eLib3MFImplicitNodeConfiguration; typedef Lib3MF::eEncryptionAlgorithm eLib3MFEncryptionAlgorithm; typedef Lib3MF::eWrappingAlgorithm eLib3MFWrappingAlgorithm; typedef Lib3MF::eMgfAlgorithm eLib3MFMgfAlgorithm; @@ -547,6 +741,8 @@ typedef Lib3MF::sBox sLib3MFBox; typedef Lib3MF::sColor sLib3MFColor; typedef Lib3MF::sBeam sLib3MFBeam; typedef Lib3MF::sBall sLib3MFBall; +typedef Lib3MF::sVector sLib3MFVector; +typedef Lib3MF::sMatrix4x4 sLib3MFMatrix4x4; typedef Lib3MF::ProgressCallback Lib3MFProgressCallback; typedef Lib3MF::WriteCallback Lib3MFWriteCallback; typedef Lib3MF::ReadCallback Lib3MFReadCallback; diff --git a/Autogenerated/Bindings/Go/cfunc.go b/Autogenerated/Bindings/Go/cfunc.go index 0256de1e0..e50393613 100644 --- a/Autogenerated/Bindings/Go/cfunc.go +++ b/Autogenerated/Bindings/Go/cfunc.go @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated Go wrapper file in order to allow an easy use of the 3MF Library. -Interface version: 2.3.2 +Interface version: 2.4.0 */ diff --git a/Autogenerated/Bindings/Go/lib3mf.go b/Autogenerated/Bindings/Go/lib3mf.go index 705bad104..7a8592b92 100644 --- a/Autogenerated/Bindings/Go/lib3mf.go +++ b/Autogenerated/Bindings/Go/lib3mf.go @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated Go wrapper file in order to allow an easy use of the 3MF Library. -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -504,6 +504,33 @@ Lib3MFResult CCall_lib3mf_multipropertygroupiterator_getcurrentmultipropertygrou } +Lib3MFResult CCall_lib3mf_image3diterator_getcurrentimage3d(Lib3MFHandle libraryHandle, Lib3MF_Image3DIterator pImage3DIterator, Lib3MF_Image3D * pResource) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Image3DIterator_GetCurrentImage3D (pImage3DIterator, pResource); +} + + +Lib3MFResult CCall_lib3mf_functioniterator_getcurrentfunction(Lib3MFHandle libraryHandle, Lib3MF_FunctionIterator pFunctionIterator, Lib3MF_Function * pResource) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_FunctionIterator_GetCurrentFunction (pFunctionIterator, pResource); +} + + +Lib3MFResult CCall_lib3mf_levelsetiterator_getcurrentlevelset(Lib3MFHandle libraryHandle, Lib3MF_LevelSetIterator pLevelSetIterator, Lib3MF_LevelSet * pResource) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_LevelSetIterator_GetCurrentLevelSet (pLevelSetIterator, pResource); +} + + Lib3MFResult CCall_lib3mf_metadata_getnamespace(Lib3MFHandle libraryHandle, Lib3MF_MetaData pMetaData, const Lib3MF_uint32 nNameSpaceBufferSize, Lib3MF_uint32* pNameSpaceNeededChars, char * pNameSpaceBuffer) { if (libraryHandle == 0) @@ -729,6 +756,15 @@ Lib3MFResult CCall_lib3mf_object_iscomponentsobject(Lib3MFHandle libraryHandle, } +Lib3MFResult CCall_lib3mf_object_islevelsetobject(Lib3MFHandle libraryHandle, Lib3MF_Object pObject, bool * pIsLevelSetObject) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Object_IsLevelSetObject (pObject, pIsLevelSetObject); +} + + Lib3MFResult CCall_lib3mf_object_isvalid(Lib3MFHandle libraryHandle, Lib3MF_Object pObject, bool * pIsValid) { if (libraryHandle == 0) @@ -1035,5251 +1071,10630 @@ Lib3MFResult CCall_lib3mf_meshobject_beamlattice(Lib3MFHandle libraryHandle, Lib } -Lib3MFResult CCall_lib3mf_beamlattice_getminlength(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_double * pMinLength) +Lib3MFResult CCall_lib3mf_meshobject_getvolumedata(Lib3MFHandle libraryHandle, Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData * pTheVolumeData) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_GetMinLength (pBeamLattice, pMinLength); + return wrapperTable->m_MeshObject_GetVolumeData (pMeshObject, pTheVolumeData); } -Lib3MFResult CCall_lib3mf_beamlattice_setminlength(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_double dMinLength) +Lib3MFResult CCall_lib3mf_meshobject_setvolumedata(Lib3MFHandle libraryHandle, Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData pTheVolumeData) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_SetMinLength (pBeamLattice, dMinLength); + return wrapperTable->m_MeshObject_SetVolumeData (pMeshObject, pTheVolumeData); } -Lib3MFResult CCall_lib3mf_beamlattice_getclipping(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeClipMode * pClipMode, Lib3MF_uint32 * pUniqueResourceID) +Lib3MFResult CCall_lib3mf_levelset_getfunction(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, Lib3MF_Function * pTheFunction) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_GetClipping (pBeamLattice, pClipMode, pUniqueResourceID); + return wrapperTable->m_LevelSet_GetFunction (pLevelSet, pTheFunction); } -Lib3MFResult CCall_lib3mf_beamlattice_setclipping(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeClipMode eClipMode, Lib3MF_uint32 nUniqueResourceID) +Lib3MFResult CCall_lib3mf_levelset_setfunction(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, Lib3MF_Function pTheFunction) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_SetClipping (pBeamLattice, eClipMode, nUniqueResourceID); + return wrapperTable->m_LevelSet_SetFunction (pLevelSet, pTheFunction); } -Lib3MFResult CCall_lib3mf_beamlattice_getrepresentation(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, bool * pHasRepresentation, Lib3MF_uint32 * pUniqueResourceID) +Lib3MFResult CCall_lib3mf_levelset_gettransform(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, sLib3MFTransform * pTransform) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_GetRepresentation (pBeamLattice, pHasRepresentation, pUniqueResourceID); + return wrapperTable->m_LevelSet_GetTransform (pLevelSet, pTransform); } -Lib3MFResult CCall_lib3mf_beamlattice_setrepresentation(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nUniqueResourceID) +Lib3MFResult CCall_lib3mf_levelset_settransform(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, const sLib3MFTransform * pTransform) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_SetRepresentation (pBeamLattice, nUniqueResourceID); + return wrapperTable->m_LevelSet_SetTransform (pLevelSet, pTransform); } -Lib3MFResult CCall_lib3mf_beamlattice_getballoptions(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeBallMode * pBallMode, Lib3MF_double * pBallRadius) +Lib3MFResult CCall_lib3mf_levelset_getchannelname(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_GetBallOptions (pBeamLattice, pBallMode, pBallRadius); + return wrapperTable->m_LevelSet_GetChannelName (pLevelSet, nChannelNameBufferSize, pChannelNameNeededChars, pChannelNameBuffer); } -Lib3MFResult CCall_lib3mf_beamlattice_setballoptions(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeBallMode eBallMode, Lib3MF_double dBallRadius) +Lib3MFResult CCall_lib3mf_levelset_setchannelname(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, const char * pChannelName) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_SetBallOptions (pBeamLattice, eBallMode, dBallRadius); + return wrapperTable->m_LevelSet_SetChannelName (pLevelSet, pChannelName); } -Lib3MFResult CCall_lib3mf_beamlattice_getbeamcount(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount) +Lib3MFResult CCall_lib3mf_levelset_setminfeaturesize(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, Lib3MF_double dMinFeatureSize) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_GetBeamCount (pBeamLattice, pCount); + return wrapperTable->m_LevelSet_SetMinFeatureSize (pLevelSet, dMinFeatureSize); } -Lib3MFResult CCall_lib3mf_beamlattice_getbeam(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, sLib3MFBeam * pBeamInfo) +Lib3MFResult CCall_lib3mf_levelset_getminfeaturesize(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, Lib3MF_double * pMinFeatureSize) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_GetBeam (pBeamLattice, nIndex, pBeamInfo); + return wrapperTable->m_LevelSet_GetMinFeatureSize (pLevelSet, pMinFeatureSize); } -Lib3MFResult CCall_lib3mf_beamlattice_addbeam(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, const sLib3MFBeam * pBeamInfo, Lib3MF_uint32 * pIndex) +Lib3MFResult CCall_lib3mf_levelset_setfallbackvalue(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, Lib3MF_double dFallBackValue) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_AddBeam (pBeamLattice, pBeamInfo, pIndex); + return wrapperTable->m_LevelSet_SetFallBackValue (pLevelSet, dFallBackValue); } -Lib3MFResult CCall_lib3mf_beamlattice_setbeam(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, const sLib3MFBeam * pBeamInfo) +Lib3MFResult CCall_lib3mf_levelset_getfallbackvalue(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, Lib3MF_double * pFallBackValue) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_SetBeam (pBeamLattice, nIndex, pBeamInfo); + return wrapperTable->m_LevelSet_GetFallBackValue (pLevelSet, pFallBackValue); } -Lib3MFResult CCall_lib3mf_beamlattice_setbeams(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint64 nBeamInfoBufferSize, const sLib3MFBeam * pBeamInfoBuffer) +Lib3MFResult CCall_lib3mf_levelset_setmeshbboxonly(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, bool bMeshBBoxOnly) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_SetBeams (pBeamLattice, nBeamInfoBufferSize, pBeamInfoBuffer); + return wrapperTable->m_LevelSet_SetMeshBBoxOnly (pLevelSet, bMeshBBoxOnly); } -Lib3MFResult CCall_lib3mf_beamlattice_getbeams(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, const Lib3MF_uint64 nBeamInfoBufferSize, Lib3MF_uint64* pBeamInfoNeededCount, sLib3MFBeam * pBeamInfoBuffer) +Lib3MFResult CCall_lib3mf_levelset_getmeshbboxonly(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, bool * pMeshBBoxOnly) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_GetBeams (pBeamLattice, nBeamInfoBufferSize, pBeamInfoNeededCount, pBeamInfoBuffer); + return wrapperTable->m_LevelSet_GetMeshBBoxOnly (pLevelSet, pMeshBBoxOnly); } -Lib3MFResult CCall_lib3mf_beamlattice_getballcount(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount) +Lib3MFResult CCall_lib3mf_levelset_setmesh(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject pTheMesh) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_GetBallCount (pBeamLattice, pCount); + return wrapperTable->m_LevelSet_SetMesh (pLevelSet, pTheMesh); } -Lib3MFResult CCall_lib3mf_beamlattice_getball(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, sLib3MFBall * pBallInfo) +Lib3MFResult CCall_lib3mf_levelset_getmesh(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject * pTheMesh) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_GetBall (pBeamLattice, nIndex, pBallInfo); + return wrapperTable->m_LevelSet_GetMesh (pLevelSet, pTheMesh); } -Lib3MFResult CCall_lib3mf_beamlattice_addball(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, const sLib3MFBall * pBallInfo, Lib3MF_uint32 * pIndex) +Lib3MFResult CCall_lib3mf_levelset_getvolumedata(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData * pTheVolumeData) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_AddBall (pBeamLattice, pBallInfo, pIndex); + return wrapperTable->m_LevelSet_GetVolumeData (pLevelSet, pTheVolumeData); } -Lib3MFResult CCall_lib3mf_beamlattice_setball(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, const sLib3MFBall * pBallInfo) +Lib3MFResult CCall_lib3mf_levelset_setvolumedata(Lib3MFHandle libraryHandle, Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData pTheVolumeData) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_SetBall (pBeamLattice, nIndex, pBallInfo); + return wrapperTable->m_LevelSet_SetVolumeData (pLevelSet, pTheVolumeData); } -Lib3MFResult CCall_lib3mf_beamlattice_setballs(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint64 nBallInfoBufferSize, const sLib3MFBall * pBallInfoBuffer) +Lib3MFResult CCall_lib3mf_beamlattice_getminlength(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_double * pMinLength) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_SetBalls (pBeamLattice, nBallInfoBufferSize, pBallInfoBuffer); + return wrapperTable->m_BeamLattice_GetMinLength (pBeamLattice, pMinLength); } -Lib3MFResult CCall_lib3mf_beamlattice_getballs(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, const Lib3MF_uint64 nBallInfoBufferSize, Lib3MF_uint64* pBallInfoNeededCount, sLib3MFBall * pBallInfoBuffer) +Lib3MFResult CCall_lib3mf_beamlattice_setminlength(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_double dMinLength) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_GetBalls (pBeamLattice, nBallInfoBufferSize, pBallInfoNeededCount, pBallInfoBuffer); + return wrapperTable->m_BeamLattice_SetMinLength (pBeamLattice, dMinLength); } -Lib3MFResult CCall_lib3mf_beamlattice_getbeamsetcount(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount) +Lib3MFResult CCall_lib3mf_beamlattice_getclipping(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeClipMode * pClipMode, Lib3MF_uint32 * pUniqueResourceID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_GetBeamSetCount (pBeamLattice, pCount); + return wrapperTable->m_BeamLattice_GetClipping (pBeamLattice, pClipMode, pUniqueResourceID); } -Lib3MFResult CCall_lib3mf_beamlattice_addbeamset(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_BeamSet * pBeamSet) +Lib3MFResult CCall_lib3mf_beamlattice_setclipping(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeClipMode eClipMode, Lib3MF_uint32 nUniqueResourceID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_AddBeamSet (pBeamLattice, pBeamSet); + return wrapperTable->m_BeamLattice_SetClipping (pBeamLattice, eClipMode, nUniqueResourceID); } -Lib3MFResult CCall_lib3mf_beamlattice_getbeamset(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF_BeamSet * pBeamSet) +Lib3MFResult CCall_lib3mf_beamlattice_getrepresentation(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, bool * pHasRepresentation, Lib3MF_uint32 * pUniqueResourceID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamLattice_GetBeamSet (pBeamLattice, nIndex, pBeamSet); + return wrapperTable->m_BeamLattice_GetRepresentation (pBeamLattice, pHasRepresentation, pUniqueResourceID); } -Lib3MFResult CCall_lib3mf_component_getobjectresource(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource) +Lib3MFResult CCall_lib3mf_beamlattice_setrepresentation(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nUniqueResourceID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Component_GetObjectResource (pComponent, pObjectResource); + return wrapperTable->m_BeamLattice_SetRepresentation (pBeamLattice, nUniqueResourceID); } -Lib3MFResult CCall_lib3mf_component_getobjectresourceid(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID) +Lib3MFResult CCall_lib3mf_beamlattice_getballoptions(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeBallMode * pBallMode, Lib3MF_double * pBallRadius) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Component_GetObjectResourceID (pComponent, pUniqueResourceID); + return wrapperTable->m_BeamLattice_GetBallOptions (pBeamLattice, pBallMode, pBallRadius); } -Lib3MFResult CCall_lib3mf_component_getuuid(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) +Lib3MFResult CCall_lib3mf_beamlattice_setballoptions(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeBallMode eBallMode, Lib3MF_double dBallRadius) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Component_GetUUID (pComponent, pHasUUID, nUUIDBufferSize, pUUIDNeededChars, pUUIDBuffer); + return wrapperTable->m_BeamLattice_SetBallOptions (pBeamLattice, eBallMode, dBallRadius); } -Lib3MFResult CCall_lib3mf_component_setuuid(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, const char * pUUID) +Lib3MFResult CCall_lib3mf_beamlattice_getbeamcount(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Component_SetUUID (pComponent, pUUID); + return wrapperTable->m_BeamLattice_GetBeamCount (pBeamLattice, pCount); } -Lib3MFResult CCall_lib3mf_component_hastransform(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, bool * pHasTransform) +Lib3MFResult CCall_lib3mf_beamlattice_getbeam(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, sLib3MFBeam * pBeamInfo) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Component_HasTransform (pComponent, pHasTransform); + return wrapperTable->m_BeamLattice_GetBeam (pBeamLattice, nIndex, pBeamInfo); } -Lib3MFResult CCall_lib3mf_component_gettransform(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, sLib3MFTransform * pTransform) +Lib3MFResult CCall_lib3mf_beamlattice_addbeam(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, const sLib3MFBeam * pBeamInfo, Lib3MF_uint32 * pIndex) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Component_GetTransform (pComponent, pTransform); + return wrapperTable->m_BeamLattice_AddBeam (pBeamLattice, pBeamInfo, pIndex); } -Lib3MFResult CCall_lib3mf_component_settransform(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, const sLib3MFTransform * pTransform) +Lib3MFResult CCall_lib3mf_beamlattice_setbeam(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, const sLib3MFBeam * pBeamInfo) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Component_SetTransform (pComponent, pTransform); + return wrapperTable->m_BeamLattice_SetBeam (pBeamLattice, nIndex, pBeamInfo); } -Lib3MFResult CCall_lib3mf_componentsobject_addcomponent(Lib3MFHandle libraryHandle, Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const sLib3MFTransform * pTransform, Lib3MF_Component * pComponentInstance) +Lib3MFResult CCall_lib3mf_beamlattice_setbeams(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint64 nBeamInfoBufferSize, const sLib3MFBeam * pBeamInfoBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ComponentsObject_AddComponent (pComponentsObject, pObjectResource, pTransform, pComponentInstance); + return wrapperTable->m_BeamLattice_SetBeams (pBeamLattice, nBeamInfoBufferSize, pBeamInfoBuffer); } -Lib3MFResult CCall_lib3mf_componentsobject_getcomponent(Lib3MFHandle libraryHandle, Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance) +Lib3MFResult CCall_lib3mf_beamlattice_getbeams(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, const Lib3MF_uint64 nBeamInfoBufferSize, Lib3MF_uint64* pBeamInfoNeededCount, sLib3MFBeam * pBeamInfoBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ComponentsObject_GetComponent (pComponentsObject, nIndex, pComponentInstance); + return wrapperTable->m_BeamLattice_GetBeams (pBeamLattice, nBeamInfoBufferSize, pBeamInfoNeededCount, pBeamInfoBuffer); } -Lib3MFResult CCall_lib3mf_componentsobject_getcomponentcount(Lib3MFHandle libraryHandle, Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount) +Lib3MFResult CCall_lib3mf_beamlattice_getballcount(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ComponentsObject_GetComponentCount (pComponentsObject, pCount); + return wrapperTable->m_BeamLattice_GetBallCount (pBeamLattice, pCount); } -Lib3MFResult CCall_lib3mf_beamset_setname(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, const char * pName) +Lib3MFResult CCall_lib3mf_beamlattice_getball(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, sLib3MFBall * pBallInfo) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamSet_SetName (pBeamSet, pName); + return wrapperTable->m_BeamLattice_GetBall (pBeamLattice, nIndex, pBallInfo); } -Lib3MFResult CCall_lib3mf_beamset_getname(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer) +Lib3MFResult CCall_lib3mf_beamlattice_addball(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, const sLib3MFBall * pBallInfo, Lib3MF_uint32 * pIndex) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamSet_GetName (pBeamSet, nNameBufferSize, pNameNeededChars, pNameBuffer); + return wrapperTable->m_BeamLattice_AddBall (pBeamLattice, pBallInfo, pIndex); } -Lib3MFResult CCall_lib3mf_beamset_setidentifier(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, const char * pIdentifier) +Lib3MFResult CCall_lib3mf_beamlattice_setball(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, const sLib3MFBall * pBallInfo) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamSet_SetIdentifier (pBeamSet, pIdentifier); + return wrapperTable->m_BeamLattice_SetBall (pBeamLattice, nIndex, pBallInfo); } -Lib3MFResult CCall_lib3mf_beamset_getidentifier(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer) +Lib3MFResult CCall_lib3mf_beamlattice_setballs(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint64 nBallInfoBufferSize, const sLib3MFBall * pBallInfoBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamSet_GetIdentifier (pBeamSet, nIdentifierBufferSize, pIdentifierNeededChars, pIdentifierBuffer); + return wrapperTable->m_BeamLattice_SetBalls (pBeamLattice, nBallInfoBufferSize, pBallInfoBuffer); } -Lib3MFResult CCall_lib3mf_beamset_getreferencecount(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount) +Lib3MFResult CCall_lib3mf_beamlattice_getballs(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, const Lib3MF_uint64 nBallInfoBufferSize, Lib3MF_uint64* pBallInfoNeededCount, sLib3MFBall * pBallInfoBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamSet_GetReferenceCount (pBeamSet, pCount); + return wrapperTable->m_BeamLattice_GetBalls (pBeamLattice, nBallInfoBufferSize, pBallInfoNeededCount, pBallInfoBuffer); } -Lib3MFResult CCall_lib3mf_beamset_setreferences(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer) +Lib3MFResult CCall_lib3mf_beamlattice_getbeamsetcount(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamSet_SetReferences (pBeamSet, nReferencesBufferSize, pReferencesBuffer); + return wrapperTable->m_BeamLattice_GetBeamSetCount (pBeamLattice, pCount); } -Lib3MFResult CCall_lib3mf_beamset_getreferences(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer) +Lib3MFResult CCall_lib3mf_beamlattice_addbeamset(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_BeamSet * pBeamSet) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamSet_GetReferences (pBeamSet, nReferencesBufferSize, pReferencesNeededCount, pReferencesBuffer); + return wrapperTable->m_BeamLattice_AddBeamSet (pBeamLattice, pBeamSet); } -Lib3MFResult CCall_lib3mf_beamset_getballreferencecount(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount) +Lib3MFResult CCall_lib3mf_beamlattice_getbeamset(Lib3MFHandle libraryHandle, Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF_BeamSet * pBeamSet) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamSet_GetBallReferenceCount (pBeamSet, pCount); + return wrapperTable->m_BeamLattice_GetBeamSet (pBeamLattice, nIndex, pBeamSet); } -Lib3MFResult CCall_lib3mf_beamset_setballreferences(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer) +Lib3MFResult CCall_lib3mf_functionreference_getfunctionresourceid(Lib3MFHandle libraryHandle, Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 * pUniqueResourceID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamSet_SetBallReferences (pBeamSet, nBallReferencesBufferSize, pBallReferencesBuffer); + return wrapperTable->m_FunctionReference_GetFunctionResourceID (pFunctionReference, pUniqueResourceID); } -Lib3MFResult CCall_lib3mf_beamset_getballreferences(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer) +Lib3MFResult CCall_lib3mf_functionreference_setfunctionresourceid(Lib3MFHandle libraryHandle, Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 nUniqueResourceID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BeamSet_GetBallReferences (pBeamSet, nBallReferencesBufferSize, pBallReferencesNeededCount, pBallReferencesBuffer); + return wrapperTable->m_FunctionReference_SetFunctionResourceID (pFunctionReference, nUniqueResourceID); } -Lib3MFResult CCall_lib3mf_basematerialgroup_getcount(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount) +Lib3MFResult CCall_lib3mf_functionreference_gettransform(Lib3MFHandle libraryHandle, Lib3MF_FunctionReference pFunctionReference, sLib3MFTransform * pTransform) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BaseMaterialGroup_GetCount (pBaseMaterialGroup, pCount); + return wrapperTable->m_FunctionReference_GetTransform (pFunctionReference, pTransform); } -Lib3MFResult CCall_lib3mf_basematerialgroup_getallpropertyids(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult CCall_lib3mf_functionreference_settransform(Lib3MFHandle libraryHandle, Lib3MF_FunctionReference pFunctionReference, const sLib3MFTransform * pTransform) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs (pBaseMaterialGroup, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + return wrapperTable->m_FunctionReference_SetTransform (pFunctionReference, pTransform); } -Lib3MFResult CCall_lib3mf_basematerialgroup_addmaterial(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const sLib3MFColor * pDisplayColor, Lib3MF_uint32 * pPropertyID) +Lib3MFResult CCall_lib3mf_functionreference_getchannelname(Lib3MFHandle libraryHandle, Lib3MF_FunctionReference pFunctionReference, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BaseMaterialGroup_AddMaterial (pBaseMaterialGroup, pName, pDisplayColor, pPropertyID); + return wrapperTable->m_FunctionReference_GetChannelName (pFunctionReference, nChannelNameBufferSize, pChannelNameNeededChars, pChannelNameBuffer); } -Lib3MFResult CCall_lib3mf_basematerialgroup_removematerial(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID) +Lib3MFResult CCall_lib3mf_functionreference_setchannelname(Lib3MFHandle libraryHandle, Lib3MF_FunctionReference pFunctionReference, const char * pChannelName) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BaseMaterialGroup_RemoveMaterial (pBaseMaterialGroup, nPropertyID); + return wrapperTable->m_FunctionReference_SetChannelName (pFunctionReference, pChannelName); } -Lib3MFResult CCall_lib3mf_basematerialgroup_getname(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer) +Lib3MFResult CCall_lib3mf_functionreference_setminfeaturesize(Lib3MFHandle libraryHandle, Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dMinFeatureSize) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BaseMaterialGroup_GetName (pBaseMaterialGroup, nPropertyID, nNameBufferSize, pNameNeededChars, pNameBuffer); + return wrapperTable->m_FunctionReference_SetMinFeatureSize (pFunctionReference, dMinFeatureSize); } -Lib3MFResult CCall_lib3mf_basematerialgroup_setname(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName) +Lib3MFResult CCall_lib3mf_functionreference_getminfeaturesize(Lib3MFHandle libraryHandle, Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pMinFeatureSize) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BaseMaterialGroup_SetName (pBaseMaterialGroup, nPropertyID, pName); + return wrapperTable->m_FunctionReference_GetMinFeatureSize (pFunctionReference, pMinFeatureSize); } -Lib3MFResult CCall_lib3mf_basematerialgroup_setdisplaycolor(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor) +Lib3MFResult CCall_lib3mf_functionreference_setfallbackvalue(Lib3MFHandle libraryHandle, Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dFallBackValue) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BaseMaterialGroup_SetDisplayColor (pBaseMaterialGroup, nPropertyID, pTheColor); + return wrapperTable->m_FunctionReference_SetFallBackValue (pFunctionReference, dFallBackValue); } -Lib3MFResult CCall_lib3mf_basematerialgroup_getdisplaycolor(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor) +Lib3MFResult CCall_lib3mf_functionreference_getfallbackvalue(Lib3MFHandle libraryHandle, Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pFallBackValue) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BaseMaterialGroup_GetDisplayColor (pBaseMaterialGroup, nPropertyID, pTheColor); + return wrapperTable->m_FunctionReference_GetFallBackValue (pFunctionReference, pFallBackValue); } -Lib3MFResult CCall_lib3mf_colorgroup_getcount(Lib3MFHandle libraryHandle, Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount) +Lib3MFResult CCall_lib3mf_volumedatacomposite_getbasematerialgroup(Lib3MFHandle libraryHandle, Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ColorGroup_GetCount (pColorGroup, pCount); + return wrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup (pVolumeDataComposite, pBaseMaterialGroupInstance); } -Lib3MFResult CCall_lib3mf_colorgroup_getallpropertyids(Lib3MFHandle libraryHandle, Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult CCall_lib3mf_volumedatacomposite_setbasematerialgroup(Lib3MFHandle libraryHandle, Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ColorGroup_GetAllPropertyIDs (pColorGroup, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + return wrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup (pVolumeDataComposite, pBaseMaterialGroupInstance); } -Lib3MFResult CCall_lib3mf_colorgroup_addcolor(Lib3MFHandle libraryHandle, Lib3MF_ColorGroup pColorGroup, const sLib3MFColor * pTheColor, Lib3MF_uint32 * pPropertyID) +Lib3MFResult CCall_lib3mf_volumedatacomposite_getmaterialmappingcount(Lib3MFHandle libraryHandle, Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ColorGroup_AddColor (pColorGroup, pTheColor, pPropertyID); + return wrapperTable->m_VolumeDataComposite_GetMaterialMappingCount (pVolumeDataComposite, pCount); } -Lib3MFResult CCall_lib3mf_colorgroup_removecolor(Lib3MFHandle libraryHandle, Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID) +Lib3MFResult CCall_lib3mf_volumedatacomposite_getmaterialmapping(Lib3MFHandle libraryHandle, Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex, Lib3MF_MaterialMapping * pTheMaterialMapping) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ColorGroup_RemoveColor (pColorGroup, nPropertyID); + return wrapperTable->m_VolumeDataComposite_GetMaterialMapping (pVolumeDataComposite, nIndex, pTheMaterialMapping); } -Lib3MFResult CCall_lib3mf_colorgroup_setcolor(Lib3MFHandle libraryHandle, Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor) +Lib3MFResult CCall_lib3mf_volumedatacomposite_addmaterialmapping(Lib3MFHandle libraryHandle, Lib3MF_VolumeDataComposite pVolumeDataComposite, const sLib3MFTransform * pTransform, Lib3MF_MaterialMapping * pTheMaterialMapping) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ColorGroup_SetColor (pColorGroup, nPropertyID, pTheColor); + return wrapperTable->m_VolumeDataComposite_AddMaterialMapping (pVolumeDataComposite, pTransform, pTheMaterialMapping); } -Lib3MFResult CCall_lib3mf_colorgroup_getcolor(Lib3MFHandle libraryHandle, Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor) +Lib3MFResult CCall_lib3mf_volumedatacomposite_removematerialmapping(Lib3MFHandle libraryHandle, Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ColorGroup_GetColor (pColorGroup, nPropertyID, pTheColor); + return wrapperTable->m_VolumeDataComposite_RemoveMaterialMapping (pVolumeDataComposite, nIndex); } -Lib3MFResult CCall_lib3mf_texture2dgroup_getcount(Lib3MFHandle libraryHandle, Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount) +Lib3MFResult CCall_lib3mf_volumedataproperty_getname(Lib3MFHandle libraryHandle, Lib3MF_VolumeDataProperty pVolumeDataProperty, const Lib3MF_uint32 nPropertyNameBufferSize, Lib3MF_uint32* pPropertyNameNeededChars, char * pPropertyNameBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2DGroup_GetCount (pTexture2DGroup, pCount); + return wrapperTable->m_VolumeDataProperty_GetName (pVolumeDataProperty, nPropertyNameBufferSize, pPropertyNameNeededChars, pPropertyNameBuffer); } -Lib3MFResult CCall_lib3mf_texture2dgroup_getallpropertyids(Lib3MFHandle libraryHandle, Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult CCall_lib3mf_volumedataproperty_setisrequired(Lib3MFHandle libraryHandle, Lib3MF_VolumeDataProperty pVolumeDataProperty, bool bIsRequired) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2DGroup_GetAllPropertyIDs (pTexture2DGroup, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + return wrapperTable->m_VolumeDataProperty_SetIsRequired (pVolumeDataProperty, bIsRequired); } -Lib3MFResult CCall_lib3mf_texture2dgroup_addtex2coord(Lib3MFHandle libraryHandle, Lib3MF_Texture2DGroup pTexture2DGroup, const sLib3MFTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID) +Lib3MFResult CCall_lib3mf_volumedataproperty_isrequired(Lib3MFHandle libraryHandle, Lib3MF_VolumeDataProperty pVolumeDataProperty, bool * pIsRequired) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2DGroup_AddTex2Coord (pTexture2DGroup, pUVCoordinate, pPropertyID); + return wrapperTable->m_VolumeDataProperty_IsRequired (pVolumeDataProperty, pIsRequired); } -Lib3MFResult CCall_lib3mf_texture2dgroup_gettex2coord(Lib3MFHandle libraryHandle, Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, sLib3MFTex2Coord * pUVCoordinate) +Lib3MFResult CCall_lib3mf_volumedata_getcomposite(Lib3MFHandle libraryHandle, Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2DGroup_GetTex2Coord (pTexture2DGroup, nPropertyID, pUVCoordinate); + return wrapperTable->m_VolumeData_GetComposite (pVolumeData, pTheCompositeData); } -Lib3MFResult CCall_lib3mf_texture2dgroup_removetex2coord(Lib3MFHandle libraryHandle, Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID) +Lib3MFResult CCall_lib3mf_volumedata_createnewcomposite(Lib3MFHandle libraryHandle, Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2DGroup_RemoveTex2Coord (pTexture2DGroup, nPropertyID); + return wrapperTable->m_VolumeData_CreateNewComposite (pVolumeData, pTheCompositeData); } -Lib3MFResult CCall_lib3mf_texture2dgroup_gettexture2d(Lib3MFHandle libraryHandle, Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance) +Lib3MFResult CCall_lib3mf_volumedata_removecomposite(Lib3MFHandle libraryHandle, Lib3MF_VolumeData pVolumeData) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2DGroup_GetTexture2D (pTexture2DGroup, pTexture2DInstance); + return wrapperTable->m_VolumeData_RemoveComposite (pVolumeData); } -Lib3MFResult CCall_lib3mf_compositematerials_getcount(Lib3MFHandle libraryHandle, Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount) +Lib3MFResult CCall_lib3mf_volumedata_getcolor(Lib3MFHandle libraryHandle, Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataColor * pTheColorData) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_CompositeMaterials_GetCount (pCompositeMaterials, pCount); + return wrapperTable->m_VolumeData_GetColor (pVolumeData, pTheColorData); } -Lib3MFResult CCall_lib3mf_compositematerials_getallpropertyids(Lib3MFHandle libraryHandle, Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult CCall_lib3mf_volumedata_createnewcolor(Lib3MFHandle libraryHandle, Lib3MF_VolumeData pVolumeData, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataColor * pTheColorData) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_CompositeMaterials_GetAllPropertyIDs (pCompositeMaterials, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + return wrapperTable->m_VolumeData_CreateNewColor (pVolumeData, pTheFunction, pTheColorData); } -Lib3MFResult CCall_lib3mf_compositematerials_getbasematerialgroup(Lib3MFHandle libraryHandle, Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance) +Lib3MFResult CCall_lib3mf_volumedata_removecolor(Lib3MFHandle libraryHandle, Lib3MF_VolumeData pVolumeData) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_CompositeMaterials_GetBaseMaterialGroup (pCompositeMaterials, pBaseMaterialGroupInstance); + return wrapperTable->m_VolumeData_RemoveColor (pVolumeData); } -Lib3MFResult CCall_lib3mf_compositematerials_addcomposite(Lib3MFHandle libraryHandle, Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const sLib3MFCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID) +Lib3MFResult CCall_lib3mf_volumedata_getpropertycount(Lib3MFHandle libraryHandle, Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_CompositeMaterials_AddComposite (pCompositeMaterials, nCompositeBufferSize, pCompositeBuffer, pPropertyID); + return wrapperTable->m_VolumeData_GetPropertyCount (pVolumeData, pCount); } -Lib3MFResult CCall_lib3mf_compositematerials_removecomposite(Lib3MFHandle libraryHandle, Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID) +Lib3MFResult CCall_lib3mf_volumedata_getproperty(Lib3MFHandle libraryHandle, Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_CompositeMaterials_RemoveComposite (pCompositeMaterials, nPropertyID); + return wrapperTable->m_VolumeData_GetProperty (pVolumeData, nIndex, pTheVolumeDataProperty); } -Lib3MFResult CCall_lib3mf_compositematerials_getcomposite(Lib3MFHandle libraryHandle, Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, sLib3MFCompositeConstituent * pCompositeBuffer) +Lib3MFResult CCall_lib3mf_volumedata_addpropertyfromfunction(Lib3MFHandle libraryHandle, Lib3MF_VolumeData pVolumeData, const char * pName, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_CompositeMaterials_GetComposite (pCompositeMaterials, nPropertyID, nCompositeBufferSize, pCompositeNeededCount, pCompositeBuffer); + return wrapperTable->m_VolumeData_AddPropertyFromFunction (pVolumeData, pName, pTheFunction, pTheVolumeDataProperty); } -Lib3MFResult CCall_lib3mf_multipropertygroup_getcount(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount) +Lib3MFResult CCall_lib3mf_volumedata_removeproperty(Lib3MFHandle libraryHandle, Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_MultiPropertyGroup_GetCount (pMultiPropertyGroup, pCount); + return wrapperTable->m_VolumeData_RemoveProperty (pVolumeData, nIndex); } -Lib3MFResult CCall_lib3mf_multipropertygroup_getallpropertyids(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult CCall_lib3mf_component_getobjectresource(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs (pMultiPropertyGroup, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + return wrapperTable->m_Component_GetObjectResource (pComponent, pObjectResource); } -Lib3MFResult CCall_lib3mf_multipropertygroup_addmultiproperty(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID) +Lib3MFResult CCall_lib3mf_component_getobjectresourceid(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_MultiPropertyGroup_AddMultiProperty (pMultiPropertyGroup, nPropertyIDsBufferSize, pPropertyIDsBuffer, pPropertyID); + return wrapperTable->m_Component_GetObjectResourceID (pComponent, pUniqueResourceID); } -Lib3MFResult CCall_lib3mf_multipropertygroup_setmultiproperty(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult CCall_lib3mf_component_getuuid(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_MultiPropertyGroup_SetMultiProperty (pMultiPropertyGroup, nPropertyID, nPropertyIDsBufferSize, pPropertyIDsBuffer); + return wrapperTable->m_Component_GetUUID (pComponent, pHasUUID, nUUIDBufferSize, pUUIDNeededChars, pUUIDBuffer); } -Lib3MFResult CCall_lib3mf_multipropertygroup_getmultiproperty(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult CCall_lib3mf_component_setuuid(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, const char * pUUID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_MultiPropertyGroup_GetMultiProperty (pMultiPropertyGroup, nPropertyID, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + return wrapperTable->m_Component_SetUUID (pComponent, pUUID); } -Lib3MFResult CCall_lib3mf_multipropertygroup_removemultiproperty(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID) +Lib3MFResult CCall_lib3mf_component_hastransform(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, bool * pHasTransform) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_MultiPropertyGroup_RemoveMultiProperty (pMultiPropertyGroup, nPropertyID); + return wrapperTable->m_Component_HasTransform (pComponent, pHasTransform); } -Lib3MFResult CCall_lib3mf_multipropertygroup_getlayercount(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount) +Lib3MFResult CCall_lib3mf_component_gettransform(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, sLib3MFTransform * pTransform) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_MultiPropertyGroup_GetLayerCount (pMultiPropertyGroup, pCount); + return wrapperTable->m_Component_GetTransform (pComponent, pTransform); } -Lib3MFResult CCall_lib3mf_multipropertygroup_addlayer(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const sLib3MFMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex) +Lib3MFResult CCall_lib3mf_component_settransform(Lib3MFHandle libraryHandle, Lib3MF_Component pComponent, const sLib3MFTransform * pTransform) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_MultiPropertyGroup_AddLayer (pMultiPropertyGroup, pTheLayer, pLayerIndex); + return wrapperTable->m_Component_SetTransform (pComponent, pTransform); } -Lib3MFResult CCall_lib3mf_multipropertygroup_getlayer(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, sLib3MFMultiPropertyLayer * pTheLayer) +Lib3MFResult CCall_lib3mf_componentsobject_addcomponent(Lib3MFHandle libraryHandle, Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const sLib3MFTransform * pTransform, Lib3MF_Component * pComponentInstance) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_MultiPropertyGroup_GetLayer (pMultiPropertyGroup, nLayerIndex, pTheLayer); + return wrapperTable->m_ComponentsObject_AddComponent (pComponentsObject, pObjectResource, pTransform, pComponentInstance); } -Lib3MFResult CCall_lib3mf_multipropertygroup_removelayer(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex) +Lib3MFResult CCall_lib3mf_componentsobject_getcomponent(Lib3MFHandle libraryHandle, Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_MultiPropertyGroup_RemoveLayer (pMultiPropertyGroup, nLayerIndex); + return wrapperTable->m_ComponentsObject_GetComponent (pComponentsObject, nIndex, pComponentInstance); } -Lib3MFResult CCall_lib3mf_attachment_getpath(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer) +Lib3MFResult CCall_lib3mf_componentsobject_getcomponentcount(Lib3MFHandle libraryHandle, Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Attachment_GetPath (pAttachment, nPathBufferSize, pPathNeededChars, pPathBuffer); + return wrapperTable->m_ComponentsObject_GetComponentCount (pComponentsObject, pCount); } -Lib3MFResult CCall_lib3mf_attachment_setpath(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const char * pPath) +Lib3MFResult CCall_lib3mf_beamset_setname(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, const char * pName) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Attachment_SetPath (pAttachment, pPath); + return wrapperTable->m_BeamSet_SetName (pBeamSet, pName); } -Lib3MFResult CCall_lib3mf_attachment_packagepart(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart) +Lib3MFResult CCall_lib3mf_beamset_getname(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Attachment_PackagePart (pAttachment, pPackagePart); + return wrapperTable->m_BeamSet_GetName (pBeamSet, nNameBufferSize, pNameNeededChars, pNameBuffer); } -Lib3MFResult CCall_lib3mf_attachment_getrelationshiptype(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer) +Lib3MFResult CCall_lib3mf_beamset_setidentifier(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, const char * pIdentifier) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Attachment_GetRelationShipType (pAttachment, nPathBufferSize, pPathNeededChars, pPathBuffer); + return wrapperTable->m_BeamSet_SetIdentifier (pBeamSet, pIdentifier); } -Lib3MFResult CCall_lib3mf_attachment_setrelationshiptype(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const char * pPath) +Lib3MFResult CCall_lib3mf_beamset_getidentifier(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Attachment_SetRelationShipType (pAttachment, pPath); + return wrapperTable->m_BeamSet_GetIdentifier (pBeamSet, nIdentifierBufferSize, pIdentifierNeededChars, pIdentifierBuffer); } -Lib3MFResult CCall_lib3mf_attachment_writetofile(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const char * pFileName) +Lib3MFResult CCall_lib3mf_beamset_getreferencecount(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Attachment_WriteToFile (pAttachment, pFileName); + return wrapperTable->m_BeamSet_GetReferenceCount (pBeamSet, pCount); } -Lib3MFResult CCall_lib3mf_attachment_readfromfile(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const char * pFileName) +Lib3MFResult CCall_lib3mf_beamset_setreferences(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Attachment_ReadFromFile (pAttachment, pFileName); + return wrapperTable->m_BeamSet_SetReferences (pBeamSet, nReferencesBufferSize, pReferencesBuffer); } -Lib3MFResult CCall_lib3mf_attachment_readfromcallback(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, Lib3MFReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MFSeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData) +Lib3MFResult CCall_lib3mf_beamset_getreferences(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Attachment_ReadFromCallback (pAttachment, pTheReadCallback, nStreamSize, pTheSeekCallback, pUserData); + return wrapperTable->m_BeamSet_GetReferences (pBeamSet, nReferencesBufferSize, pReferencesNeededCount, pReferencesBuffer); } -Lib3MFResult CCall_lib3mf_attachment_getstreamsize(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize) +Lib3MFResult CCall_lib3mf_beamset_getballreferencecount(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Attachment_GetStreamSize (pAttachment, pStreamSize); + return wrapperTable->m_BeamSet_GetBallReferenceCount (pBeamSet, pCount); } -Lib3MFResult CCall_lib3mf_attachment_writetobuffer(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer) +Lib3MFResult CCall_lib3mf_beamset_setballreferences(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Attachment_WriteToBuffer (pAttachment, nBufferBufferSize, pBufferNeededCount, pBufferBuffer); + return wrapperTable->m_BeamSet_SetBallReferences (pBeamSet, nBallReferencesBufferSize, pBallReferencesBuffer); } -Lib3MFResult CCall_lib3mf_attachment_readfrombuffer(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer) +Lib3MFResult CCall_lib3mf_beamset_getballreferences(Lib3MFHandle libraryHandle, Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Attachment_ReadFromBuffer (pAttachment, nBufferBufferSize, pBufferBuffer); + return wrapperTable->m_BeamSet_GetBallReferences (pBeamSet, nBallReferencesBufferSize, pBallReferencesNeededCount, pBallReferencesBuffer); } -Lib3MFResult CCall_lib3mf_texture2d_getattachment(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment) +Lib3MFResult CCall_lib3mf_basematerialgroup_getcount(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2D_GetAttachment (pTexture2D, pAttachment); + return wrapperTable->m_BaseMaterialGroup_GetCount (pBaseMaterialGroup, pCount); } -Lib3MFResult CCall_lib3mf_texture2d_setattachment(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment) +Lib3MFResult CCall_lib3mf_basematerialgroup_getallpropertyids(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2D_SetAttachment (pTexture2D, pAttachment); + return wrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs (pBaseMaterialGroup, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); } -Lib3MFResult CCall_lib3mf_texture2d_getcontenttype(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, eLib3MFTextureType * pContentType) +Lib3MFResult CCall_lib3mf_basematerialgroup_addmaterial(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const sLib3MFColor * pDisplayColor, Lib3MF_uint32 * pPropertyID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2D_GetContentType (pTexture2D, pContentType); + return wrapperTable->m_BaseMaterialGroup_AddMaterial (pBaseMaterialGroup, pName, pDisplayColor, pPropertyID); } -Lib3MFResult CCall_lib3mf_texture2d_setcontenttype(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, eLib3MFTextureType eContentType) +Lib3MFResult CCall_lib3mf_basematerialgroup_removematerial(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2D_SetContentType (pTexture2D, eContentType); + return wrapperTable->m_BaseMaterialGroup_RemoveMaterial (pBaseMaterialGroup, nPropertyID); } -Lib3MFResult CCall_lib3mf_texture2d_gettilestyleuv(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV) +Lib3MFResult CCall_lib3mf_basematerialgroup_getname(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2D_GetTileStyleUV (pTexture2D, pTileStyleU, pTileStyleV); + return wrapperTable->m_BaseMaterialGroup_GetName (pBaseMaterialGroup, nPropertyID, nNameBufferSize, pNameNeededChars, pNameBuffer); } -Lib3MFResult CCall_lib3mf_texture2d_settilestyleuv(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV) +Lib3MFResult CCall_lib3mf_basematerialgroup_setname(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2D_SetTileStyleUV (pTexture2D, eTileStyleU, eTileStyleV); + return wrapperTable->m_BaseMaterialGroup_SetName (pBaseMaterialGroup, nPropertyID, pName); } -Lib3MFResult CCall_lib3mf_texture2d_getfilter(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter * pFilter) +Lib3MFResult CCall_lib3mf_basematerialgroup_setdisplaycolor(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2D_GetFilter (pTexture2D, pFilter); + return wrapperTable->m_BaseMaterialGroup_SetDisplayColor (pBaseMaterialGroup, nPropertyID, pTheColor); } -Lib3MFResult CCall_lib3mf_texture2d_setfilter(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter eFilter) +Lib3MFResult CCall_lib3mf_basematerialgroup_getdisplaycolor(Lib3MFHandle libraryHandle, Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Texture2D_SetFilter (pTexture2D, eFilter); + return wrapperTable->m_BaseMaterialGroup_GetDisplayColor (pBaseMaterialGroup, nPropertyID, pTheColor); } -Lib3MFResult CCall_lib3mf_builditem_getobjectresource(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, Lib3MF_Object * pObjectResource) +Lib3MFResult CCall_lib3mf_colorgroup_getcount(Lib3MFHandle libraryHandle, Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItem_GetObjectResource (pBuildItem, pObjectResource); + return wrapperTable->m_ColorGroup_GetCount (pColorGroup, pCount); } -Lib3MFResult CCall_lib3mf_builditem_getuuid(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) +Lib3MFResult CCall_lib3mf_colorgroup_getallpropertyids(Lib3MFHandle libraryHandle, Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItem_GetUUID (pBuildItem, pHasUUID, nUUIDBufferSize, pUUIDNeededChars, pUUIDBuffer); + return wrapperTable->m_ColorGroup_GetAllPropertyIDs (pColorGroup, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); } -Lib3MFResult CCall_lib3mf_builditem_setuuid(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, const char * pUUID) +Lib3MFResult CCall_lib3mf_colorgroup_addcolor(Lib3MFHandle libraryHandle, Lib3MF_ColorGroup pColorGroup, const sLib3MFColor * pTheColor, Lib3MF_uint32 * pPropertyID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItem_SetUUID (pBuildItem, pUUID); + return wrapperTable->m_ColorGroup_AddColor (pColorGroup, pTheColor, pPropertyID); } -Lib3MFResult CCall_lib3mf_builditem_getobjectresourceid(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, Lib3MF_uint32 * pUniqueResourceID) +Lib3MFResult CCall_lib3mf_colorgroup_removecolor(Lib3MFHandle libraryHandle, Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItem_GetObjectResourceID (pBuildItem, pUniqueResourceID); + return wrapperTable->m_ColorGroup_RemoveColor (pColorGroup, nPropertyID); } -Lib3MFResult CCall_lib3mf_builditem_hasobjecttransform(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, bool * pHasTransform) +Lib3MFResult CCall_lib3mf_colorgroup_setcolor(Lib3MFHandle libraryHandle, Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItem_HasObjectTransform (pBuildItem, pHasTransform); + return wrapperTable->m_ColorGroup_SetColor (pColorGroup, nPropertyID, pTheColor); } -Lib3MFResult CCall_lib3mf_builditem_getobjecttransform(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, sLib3MFTransform * pTransform) +Lib3MFResult CCall_lib3mf_colorgroup_getcolor(Lib3MFHandle libraryHandle, Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItem_GetObjectTransform (pBuildItem, pTransform); + return wrapperTable->m_ColorGroup_GetColor (pColorGroup, nPropertyID, pTheColor); } -Lib3MFResult CCall_lib3mf_builditem_setobjecttransform(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, const sLib3MFTransform * pTransform) +Lib3MFResult CCall_lib3mf_texture2dgroup_getcount(Lib3MFHandle libraryHandle, Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItem_SetObjectTransform (pBuildItem, pTransform); + return wrapperTable->m_Texture2DGroup_GetCount (pTexture2DGroup, pCount); } -Lib3MFResult CCall_lib3mf_builditem_getpartnumber(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, const Lib3MF_uint32 nPartNumberBufferSize, Lib3MF_uint32* pPartNumberNeededChars, char * pPartNumberBuffer) +Lib3MFResult CCall_lib3mf_texture2dgroup_getallpropertyids(Lib3MFHandle libraryHandle, Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItem_GetPartNumber (pBuildItem, nPartNumberBufferSize, pPartNumberNeededChars, pPartNumberBuffer); + return wrapperTable->m_Texture2DGroup_GetAllPropertyIDs (pTexture2DGroup, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); } -Lib3MFResult CCall_lib3mf_builditem_setpartnumber(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, const char * pSetPartnumber) +Lib3MFResult CCall_lib3mf_texture2dgroup_addtex2coord(Lib3MFHandle libraryHandle, Lib3MF_Texture2DGroup pTexture2DGroup, const sLib3MFTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItem_SetPartNumber (pBuildItem, pSetPartnumber); + return wrapperTable->m_Texture2DGroup_AddTex2Coord (pTexture2DGroup, pUVCoordinate, pPropertyID); } -Lib3MFResult CCall_lib3mf_builditem_getmetadatagroup(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, Lib3MF_MetaDataGroup * pMetaDataGroup) +Lib3MFResult CCall_lib3mf_texture2dgroup_gettex2coord(Lib3MFHandle libraryHandle, Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, sLib3MFTex2Coord * pUVCoordinate) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItem_GetMetaDataGroup (pBuildItem, pMetaDataGroup); + return wrapperTable->m_Texture2DGroup_GetTex2Coord (pTexture2DGroup, nPropertyID, pUVCoordinate); } -Lib3MFResult CCall_lib3mf_builditem_getoutbox(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, sLib3MFBox * pOutbox) +Lib3MFResult CCall_lib3mf_texture2dgroup_removetex2coord(Lib3MFHandle libraryHandle, Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItem_GetOutbox (pBuildItem, pOutbox); + return wrapperTable->m_Texture2DGroup_RemoveTex2Coord (pTexture2DGroup, nPropertyID); } -Lib3MFResult CCall_lib3mf_builditemiterator_movenext(Lib3MFHandle libraryHandle, Lib3MF_BuildItemIterator pBuildItemIterator, bool * pHasNext) +Lib3MFResult CCall_lib3mf_texture2dgroup_gettexture2d(Lib3MFHandle libraryHandle, Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItemIterator_MoveNext (pBuildItemIterator, pHasNext); + return wrapperTable->m_Texture2DGroup_GetTexture2D (pTexture2DGroup, pTexture2DInstance); } -Lib3MFResult CCall_lib3mf_builditemiterator_moveprevious(Lib3MFHandle libraryHandle, Lib3MF_BuildItemIterator pBuildItemIterator, bool * pHasPrevious) +Lib3MFResult CCall_lib3mf_compositematerials_getcount(Lib3MFHandle libraryHandle, Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItemIterator_MovePrevious (pBuildItemIterator, pHasPrevious); + return wrapperTable->m_CompositeMaterials_GetCount (pCompositeMaterials, pCount); } -Lib3MFResult CCall_lib3mf_builditemiterator_getcurrent(Lib3MFHandle libraryHandle, Lib3MF_BuildItemIterator pBuildItemIterator, Lib3MF_BuildItem * pBuildItem) +Lib3MFResult CCall_lib3mf_compositematerials_getallpropertyids(Lib3MFHandle libraryHandle, Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItemIterator_GetCurrent (pBuildItemIterator, pBuildItem); + return wrapperTable->m_CompositeMaterials_GetAllPropertyIDs (pCompositeMaterials, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); } -Lib3MFResult CCall_lib3mf_builditemiterator_clone(Lib3MFHandle libraryHandle, Lib3MF_BuildItemIterator pBuildItemIterator, Lib3MF_BuildItemIterator * pOutBuildItemIterator) +Lib3MFResult CCall_lib3mf_compositematerials_getbasematerialgroup(Lib3MFHandle libraryHandle, Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItemIterator_Clone (pBuildItemIterator, pOutBuildItemIterator); + return wrapperTable->m_CompositeMaterials_GetBaseMaterialGroup (pCompositeMaterials, pBaseMaterialGroupInstance); } -Lib3MFResult CCall_lib3mf_builditemiterator_count(Lib3MFHandle libraryHandle, Lib3MF_BuildItemIterator pBuildItemIterator, Lib3MF_uint64 * pCount) +Lib3MFResult CCall_lib3mf_compositematerials_addcomposite(Lib3MFHandle libraryHandle, Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const sLib3MFCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_BuildItemIterator_Count (pBuildItemIterator, pCount); + return wrapperTable->m_CompositeMaterials_AddComposite (pCompositeMaterials, nCompositeBufferSize, pCompositeBuffer, pPropertyID); } -Lib3MFResult CCall_lib3mf_slice_setvertices(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 nVerticesBufferSize, const sLib3MFPosition2D * pVerticesBuffer) +Lib3MFResult CCall_lib3mf_compositematerials_removecomposite(Lib3MFHandle libraryHandle, Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Slice_SetVertices (pSlice, nVerticesBufferSize, pVerticesBuffer); + return wrapperTable->m_CompositeMaterials_RemoveComposite (pCompositeMaterials, nPropertyID); } -Lib3MFResult CCall_lib3mf_slice_getvertices(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, const Lib3MF_uint64 nVerticesBufferSize, Lib3MF_uint64* pVerticesNeededCount, sLib3MFPosition2D * pVerticesBuffer) +Lib3MFResult CCall_lib3mf_compositematerials_getcomposite(Lib3MFHandle libraryHandle, Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, sLib3MFCompositeConstituent * pCompositeBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Slice_GetVertices (pSlice, nVerticesBufferSize, pVerticesNeededCount, pVerticesBuffer); + return wrapperTable->m_CompositeMaterials_GetComposite (pCompositeMaterials, nPropertyID, nCompositeBufferSize, pCompositeNeededCount, pCompositeBuffer); } -Lib3MFResult CCall_lib3mf_slice_getvertexcount(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 * pCount) +Lib3MFResult CCall_lib3mf_multipropertygroup_getcount(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Slice_GetVertexCount (pSlice, pCount); + return wrapperTable->m_MultiPropertyGroup_GetCount (pMultiPropertyGroup, pCount); } -Lib3MFResult CCall_lib3mf_slice_addpolygon(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 nIndicesBufferSize, const Lib3MF_uint32 * pIndicesBuffer, Lib3MF_uint64 * pIndex) +Lib3MFResult CCall_lib3mf_multipropertygroup_getallpropertyids(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Slice_AddPolygon (pSlice, nIndicesBufferSize, pIndicesBuffer, pIndex); + return wrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs (pMultiPropertyGroup, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); } -Lib3MFResult CCall_lib3mf_slice_getpolygoncount(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 * pCount) +Lib3MFResult CCall_lib3mf_multipropertygroup_addmultiproperty(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Slice_GetPolygonCount (pSlice, pCount); + return wrapperTable->m_MultiPropertyGroup_AddMultiProperty (pMultiPropertyGroup, nPropertyIDsBufferSize, pPropertyIDsBuffer, pPropertyID); } -Lib3MFResult CCall_lib3mf_slice_setpolygonindices(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 nIndex, Lib3MF_uint64 nIndicesBufferSize, const Lib3MF_uint32 * pIndicesBuffer) +Lib3MFResult CCall_lib3mf_multipropertygroup_setmultiproperty(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Slice_SetPolygonIndices (pSlice, nIndex, nIndicesBufferSize, pIndicesBuffer); + return wrapperTable->m_MultiPropertyGroup_SetMultiProperty (pMultiPropertyGroup, nPropertyID, nPropertyIDsBufferSize, pPropertyIDsBuffer); } -Lib3MFResult CCall_lib3mf_slice_getpolygonindices(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 nIndex, const Lib3MF_uint64 nIndicesBufferSize, Lib3MF_uint64* pIndicesNeededCount, Lib3MF_uint32 * pIndicesBuffer) +Lib3MFResult CCall_lib3mf_multipropertygroup_getmultiproperty(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Slice_GetPolygonIndices (pSlice, nIndex, nIndicesBufferSize, pIndicesNeededCount, pIndicesBuffer); + return wrapperTable->m_MultiPropertyGroup_GetMultiProperty (pMultiPropertyGroup, nPropertyID, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); } -Lib3MFResult CCall_lib3mf_slice_getpolygonindexcount(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 nIndex, Lib3MF_uint64 * pCount) +Lib3MFResult CCall_lib3mf_multipropertygroup_removemultiproperty(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Slice_GetPolygonIndexCount (pSlice, nIndex, pCount); + return wrapperTable->m_MultiPropertyGroup_RemoveMultiProperty (pMultiPropertyGroup, nPropertyID); } -Lib3MFResult CCall_lib3mf_slice_getztop(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_double * pZTop) +Lib3MFResult CCall_lib3mf_multipropertygroup_getlayercount(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Slice_GetZTop (pSlice, pZTop); + return wrapperTable->m_MultiPropertyGroup_GetLayerCount (pMultiPropertyGroup, pCount); } -Lib3MFResult CCall_lib3mf_slicestack_getbottomz(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_double * pZBottom) +Lib3MFResult CCall_lib3mf_multipropertygroup_addlayer(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const sLib3MFMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_SliceStack_GetBottomZ (pSliceStack, pZBottom); + return wrapperTable->m_MultiPropertyGroup_AddLayer (pMultiPropertyGroup, pTheLayer, pLayerIndex); } -Lib3MFResult CCall_lib3mf_slicestack_getslicecount(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_uint64 * pCount) +Lib3MFResult CCall_lib3mf_multipropertygroup_getlayer(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, sLib3MFMultiPropertyLayer * pTheLayer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_SliceStack_GetSliceCount (pSliceStack, pCount); + return wrapperTable->m_MultiPropertyGroup_GetLayer (pMultiPropertyGroup, nLayerIndex, pTheLayer); } -Lib3MFResult CCall_lib3mf_slicestack_getslice(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_uint64 nSliceIndex, Lib3MF_Slice * pTheSlice) +Lib3MFResult CCall_lib3mf_multipropertygroup_removelayer(Lib3MFHandle libraryHandle, Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_SliceStack_GetSlice (pSliceStack, nSliceIndex, pTheSlice); + return wrapperTable->m_MultiPropertyGroup_RemoveLayer (pMultiPropertyGroup, nLayerIndex); } -Lib3MFResult CCall_lib3mf_slicestack_addslice(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_double dZTop, Lib3MF_Slice * pTheSlice) +Lib3MFResult CCall_lib3mf_image3d_getname(Lib3MFHandle libraryHandle, Lib3MF_Image3D pImage3D, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_SliceStack_AddSlice (pSliceStack, dZTop, pTheSlice); + return wrapperTable->m_Image3D_GetName (pImage3D, nNameBufferSize, pNameNeededChars, pNameBuffer); } -Lib3MFResult CCall_lib3mf_slicestack_getslicerefcount(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_uint64 * pCount) +Lib3MFResult CCall_lib3mf_image3d_setname(Lib3MFHandle libraryHandle, Lib3MF_Image3D pImage3D, const char * pName) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_SliceStack_GetSliceRefCount (pSliceStack, pCount); + return wrapperTable->m_Image3D_SetName (pImage3D, pName); } -Lib3MFResult CCall_lib3mf_slicestack_addslicestackreference(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_SliceStack pTheSliceStack) +Lib3MFResult CCall_lib3mf_image3d_isimagestack(Lib3MFHandle libraryHandle, Lib3MF_Image3D pImage3D, bool * pIsImageStack) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_SliceStack_AddSliceStackReference (pSliceStack, pTheSliceStack); + return wrapperTable->m_Image3D_IsImageStack (pImage3D, pIsImageStack); } -Lib3MFResult CCall_lib3mf_slicestack_getslicestackreference(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_uint64 nSliceRefIndex, Lib3MF_SliceStack * pTheSliceStack) +Lib3MFResult CCall_lib3mf_imagestack_getrowcount(Lib3MFHandle libraryHandle, Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pRowCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_SliceStack_GetSliceStackReference (pSliceStack, nSliceRefIndex, pTheSliceStack); + return wrapperTable->m_ImageStack_GetRowCount (pImageStack, pRowCount); } -Lib3MFResult CCall_lib3mf_slicestack_collapseslicereferences(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack) +Lib3MFResult CCall_lib3mf_imagestack_setrowcount(Lib3MFHandle libraryHandle, Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nRowCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_SliceStack_CollapseSliceReferences (pSliceStack); + return wrapperTable->m_ImageStack_SetRowCount (pImageStack, nRowCount); } -Lib3MFResult CCall_lib3mf_slicestack_setownpath(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, const char * pPath) +Lib3MFResult CCall_lib3mf_imagestack_getcolumncount(Lib3MFHandle libraryHandle, Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pColumnCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_SliceStack_SetOwnPath (pSliceStack, pPath); + return wrapperTable->m_ImageStack_GetColumnCount (pImageStack, pColumnCount); } -Lib3MFResult CCall_lib3mf_slicestack_getownpath(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer) +Lib3MFResult CCall_lib3mf_imagestack_setcolumncount(Lib3MFHandle libraryHandle, Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nColumnCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_SliceStack_GetOwnPath (pSliceStack, nPathBufferSize, pPathNeededChars, pPathBuffer); + return wrapperTable->m_ImageStack_SetColumnCount (pImageStack, nColumnCount); } -Lib3MFResult CCall_lib3mf_consumer_getconsumerid(Lib3MFHandle libraryHandle, Lib3MF_Consumer pConsumer, const Lib3MF_uint32 nConsumerIDBufferSize, Lib3MF_uint32* pConsumerIDNeededChars, char * pConsumerIDBuffer) +Lib3MFResult CCall_lib3mf_imagestack_getsheetcount(Lib3MFHandle libraryHandle, Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pSheetCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Consumer_GetConsumerID (pConsumer, nConsumerIDBufferSize, pConsumerIDNeededChars, pConsumerIDBuffer); + return wrapperTable->m_ImageStack_GetSheetCount (pImageStack, pSheetCount); } -Lib3MFResult CCall_lib3mf_consumer_getkeyid(Lib3MFHandle libraryHandle, Lib3MF_Consumer pConsumer, const Lib3MF_uint32 nKeyIDBufferSize, Lib3MF_uint32* pKeyIDNeededChars, char * pKeyIDBuffer) +Lib3MFResult CCall_lib3mf_imagestack_getsheet(Lib3MFHandle libraryHandle, Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment * pSheet) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Consumer_GetKeyID (pConsumer, nKeyIDBufferSize, pKeyIDNeededChars, pKeyIDBuffer); + return wrapperTable->m_ImageStack_GetSheet (pImageStack, nIndex, pSheet); } -Lib3MFResult CCall_lib3mf_consumer_getkeyvalue(Lib3MFHandle libraryHandle, Lib3MF_Consumer pConsumer, const Lib3MF_uint32 nKeyValueBufferSize, Lib3MF_uint32* pKeyValueNeededChars, char * pKeyValueBuffer) +Lib3MFResult CCall_lib3mf_imagestack_setsheet(Lib3MFHandle libraryHandle, Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment pSheet) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Consumer_GetKeyValue (pConsumer, nKeyValueBufferSize, pKeyValueNeededChars, pKeyValueBuffer); + return wrapperTable->m_ImageStack_SetSheet (pImageStack, nIndex, pSheet); } -Lib3MFResult CCall_lib3mf_accessright_getconsumer(Lib3MFHandle libraryHandle, Lib3MF_AccessRight pAccessRight, Lib3MF_Consumer * pConsumer) +Lib3MFResult CCall_lib3mf_imagestack_createemptysheet(Lib3MFHandle libraryHandle, Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_Attachment * pSheet) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_AccessRight_GetConsumer (pAccessRight, pConsumer); + return wrapperTable->m_ImageStack_CreateEmptySheet (pImageStack, nIndex, pPath, pSheet); } -Lib3MFResult CCall_lib3mf_accessright_getwrappingalgorithm(Lib3MFHandle libraryHandle, Lib3MF_AccessRight pAccessRight, eLib3MFWrappingAlgorithm * pAlgorithm) +Lib3MFResult CCall_lib3mf_imagestack_createsheetfrombuffer(Lib3MFHandle libraryHandle, Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_uint64 nDataBufferSize, const Lib3MF_uint8 * pDataBuffer, Lib3MF_Attachment * pSheet) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_AccessRight_GetWrappingAlgorithm (pAccessRight, pAlgorithm); + return wrapperTable->m_ImageStack_CreateSheetFromBuffer (pImageStack, nIndex, pPath, nDataBufferSize, pDataBuffer, pSheet); } -Lib3MFResult CCall_lib3mf_accessright_getmgfalgorithm(Lib3MFHandle libraryHandle, Lib3MF_AccessRight pAccessRight, eLib3MFMgfAlgorithm * pAlgorithm) +Lib3MFResult CCall_lib3mf_imagestack_createsheetfromfile(Lib3MFHandle libraryHandle, Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, const char * pFileName, Lib3MF_Attachment * pSheet) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_AccessRight_GetMgfAlgorithm (pAccessRight, pAlgorithm); + return wrapperTable->m_ImageStack_CreateSheetFromFile (pImageStack, nIndex, pPath, pFileName, pSheet); } -Lib3MFResult CCall_lib3mf_accessright_getdigestmethod(Lib3MFHandle libraryHandle, Lib3MF_AccessRight pAccessRight, eLib3MFDigestMethod * pAlgorithm) +Lib3MFResult CCall_lib3mf_attachment_getpath(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_AccessRight_GetDigestMethod (pAccessRight, pAlgorithm); + return wrapperTable->m_Attachment_GetPath (pAttachment, nPathBufferSize, pPathNeededChars, pPathBuffer); } -Lib3MFResult CCall_lib3mf_contentencryptionparams_getencryptionalgorithm(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, eLib3MFEncryptionAlgorithm * pAlgorithm) +Lib3MFResult CCall_lib3mf_attachment_setpath(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const char * pPath) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ContentEncryptionParams_GetEncryptionAlgorithm (pContentEncryptionParams, pAlgorithm); + return wrapperTable->m_Attachment_SetPath (pAttachment, pPath); } -Lib3MFResult CCall_lib3mf_contentencryptionparams_getkey(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, const Lib3MF_uint64 nByteDataBufferSize, Lib3MF_uint64* pByteDataNeededCount, Lib3MF_uint8 * pByteDataBuffer) +Lib3MFResult CCall_lib3mf_attachment_packagepart(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ContentEncryptionParams_GetKey (pContentEncryptionParams, nByteDataBufferSize, pByteDataNeededCount, pByteDataBuffer); + return wrapperTable->m_Attachment_PackagePart (pAttachment, pPackagePart); } -Lib3MFResult CCall_lib3mf_contentencryptionparams_getinitializationvector(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, const Lib3MF_uint64 nByteDataBufferSize, Lib3MF_uint64* pByteDataNeededCount, Lib3MF_uint8 * pByteDataBuffer) +Lib3MFResult CCall_lib3mf_attachment_getrelationshiptype(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ContentEncryptionParams_GetInitializationVector (pContentEncryptionParams, nByteDataBufferSize, pByteDataNeededCount, pByteDataBuffer); + return wrapperTable->m_Attachment_GetRelationShipType (pAttachment, nPathBufferSize, pPathNeededChars, pPathBuffer); } -Lib3MFResult CCall_lib3mf_contentencryptionparams_getauthenticationtag(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, const Lib3MF_uint64 nByteDataBufferSize, Lib3MF_uint64* pByteDataNeededCount, Lib3MF_uint8 * pByteDataBuffer) +Lib3MFResult CCall_lib3mf_attachment_setrelationshiptype(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const char * pPath) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ContentEncryptionParams_GetAuthenticationTag (pContentEncryptionParams, nByteDataBufferSize, pByteDataNeededCount, pByteDataBuffer); + return wrapperTable->m_Attachment_SetRelationShipType (pAttachment, pPath); } -Lib3MFResult CCall_lib3mf_contentencryptionparams_setauthenticationtag(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, Lib3MF_uint64 nByteDataBufferSize, const Lib3MF_uint8 * pByteDataBuffer) +Lib3MFResult CCall_lib3mf_attachment_writetofile(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const char * pFileName) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ContentEncryptionParams_SetAuthenticationTag (pContentEncryptionParams, nByteDataBufferSize, pByteDataBuffer); + return wrapperTable->m_Attachment_WriteToFile (pAttachment, pFileName); } -Lib3MFResult CCall_lib3mf_contentencryptionparams_getadditionalauthenticationdata(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, const Lib3MF_uint64 nByteDataBufferSize, Lib3MF_uint64* pByteDataNeededCount, Lib3MF_uint8 * pByteDataBuffer) +Lib3MFResult CCall_lib3mf_attachment_readfromfile(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const char * pFileName) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ContentEncryptionParams_GetAdditionalAuthenticationData (pContentEncryptionParams, nByteDataBufferSize, pByteDataNeededCount, pByteDataBuffer); + return wrapperTable->m_Attachment_ReadFromFile (pAttachment, pFileName); } -Lib3MFResult CCall_lib3mf_contentencryptionparams_getdescriptor(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, Lib3MF_uint64 * pDescriptor) +Lib3MFResult CCall_lib3mf_attachment_readfromcallback(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, Lib3MFReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MFSeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ContentEncryptionParams_GetDescriptor (pContentEncryptionParams, pDescriptor); + return wrapperTable->m_Attachment_ReadFromCallback (pAttachment, pTheReadCallback, nStreamSize, pTheSeekCallback, pUserData); } -Lib3MFResult CCall_lib3mf_contentencryptionparams_getkeyuuid(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) +Lib3MFResult CCall_lib3mf_attachment_getstreamsize(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ContentEncryptionParams_GetKeyUUID (pContentEncryptionParams, nUUIDBufferSize, pUUIDNeededChars, pUUIDBuffer); + return wrapperTable->m_Attachment_GetStreamSize (pAttachment, pStreamSize); } -Lib3MFResult CCall_lib3mf_resourcedata_getpath(Lib3MFHandle libraryHandle, Lib3MF_ResourceData pResourceData, Lib3MF_PackagePart * pPath) +Lib3MFResult CCall_lib3mf_attachment_writetobuffer(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ResourceData_GetPath (pResourceData, pPath); + return wrapperTable->m_Attachment_WriteToBuffer (pAttachment, nBufferBufferSize, pBufferNeededCount, pBufferBuffer); } -Lib3MFResult CCall_lib3mf_resourcedata_getencryptionalgorithm(Lib3MFHandle libraryHandle, Lib3MF_ResourceData pResourceData, eLib3MFEncryptionAlgorithm * pEncryptionAlgorithm) +Lib3MFResult CCall_lib3mf_attachment_readfrombuffer(Lib3MFHandle libraryHandle, Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ResourceData_GetEncryptionAlgorithm (pResourceData, pEncryptionAlgorithm); + return wrapperTable->m_Attachment_ReadFromBuffer (pAttachment, nBufferBufferSize, pBufferBuffer); } -Lib3MFResult CCall_lib3mf_resourcedata_getcompression(Lib3MFHandle libraryHandle, Lib3MF_ResourceData pResourceData, eLib3MFCompression * pCompression) +Lib3MFResult CCall_lib3mf_texture2d_getattachment(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ResourceData_GetCompression (pResourceData, pCompression); + return wrapperTable->m_Texture2D_GetAttachment (pTexture2D, pAttachment); } -Lib3MFResult CCall_lib3mf_resourcedata_getadditionalauthenticationdata(Lib3MFHandle libraryHandle, Lib3MF_ResourceData pResourceData, const Lib3MF_uint64 nByteDataBufferSize, Lib3MF_uint64* pByteDataNeededCount, Lib3MF_uint8 * pByteDataBuffer) +Lib3MFResult CCall_lib3mf_texture2d_setattachment(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ResourceData_GetAdditionalAuthenticationData (pResourceData, nByteDataBufferSize, pByteDataNeededCount, pByteDataBuffer); + return wrapperTable->m_Texture2D_SetAttachment (pTexture2D, pAttachment); } -Lib3MFResult CCall_lib3mf_resourcedatagroup_getkeyuuid(Lib3MFHandle libraryHandle, Lib3MF_ResourceDataGroup pResourceDataGroup, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) +Lib3MFResult CCall_lib3mf_texture2d_getcontenttype(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, eLib3MFTextureType * pContentType) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ResourceDataGroup_GetKeyUUID (pResourceDataGroup, nUUIDBufferSize, pUUIDNeededChars, pUUIDBuffer); + return wrapperTable->m_Texture2D_GetContentType (pTexture2D, pContentType); } -Lib3MFResult CCall_lib3mf_resourcedatagroup_addaccessright(Lib3MFHandle libraryHandle, Lib3MF_ResourceDataGroup pResourceDataGroup, Lib3MF_Consumer pConsumer, eLib3MFWrappingAlgorithm eWrappingAlgorithm, eLib3MFMgfAlgorithm eMgfAlgorithm, eLib3MFDigestMethod eDigestMethod, Lib3MF_AccessRight * pTheAccessRight) +Lib3MFResult CCall_lib3mf_texture2d_setcontenttype(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, eLib3MFTextureType eContentType) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ResourceDataGroup_AddAccessRight (pResourceDataGroup, pConsumer, eWrappingAlgorithm, eMgfAlgorithm, eDigestMethod, pTheAccessRight); + return wrapperTable->m_Texture2D_SetContentType (pTexture2D, eContentType); } -Lib3MFResult CCall_lib3mf_resourcedatagroup_findaccessrightbyconsumer(Lib3MFHandle libraryHandle, Lib3MF_ResourceDataGroup pResourceDataGroup, Lib3MF_Consumer pConsumer, Lib3MF_AccessRight * pTheAccessRight) +Lib3MFResult CCall_lib3mf_texture2d_gettilestyleuv(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ResourceDataGroup_FindAccessRightByConsumer (pResourceDataGroup, pConsumer, pTheAccessRight); + return wrapperTable->m_Texture2D_GetTileStyleUV (pTexture2D, pTileStyleU, pTileStyleV); } -Lib3MFResult CCall_lib3mf_resourcedatagroup_removeaccessright(Lib3MFHandle libraryHandle, Lib3MF_ResourceDataGroup pResourceDataGroup, Lib3MF_Consumer pConsumer) +Lib3MFResult CCall_lib3mf_texture2d_settilestyleuv(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ResourceDataGroup_RemoveAccessRight (pResourceDataGroup, pConsumer); + return wrapperTable->m_Texture2D_SetTileStyleUV (pTexture2D, eTileStyleU, eTileStyleV); } -Lib3MFResult CCall_lib3mf_keystore_addconsumer(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, const char * pConsumerID, const char * pKeyID, const char * pKeyValue, Lib3MF_Consumer * pConsumer) +Lib3MFResult CCall_lib3mf_texture2d_getfilter(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter * pFilter) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_AddConsumer (pKeyStore, pConsumerID, pKeyID, pKeyValue, pConsumer); + return wrapperTable->m_Texture2D_GetFilter (pTexture2D, pFilter); } -Lib3MFResult CCall_lib3mf_keystore_getconsumercount(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_uint64 * pCount) +Lib3MFResult CCall_lib3mf_texture2d_setfilter(Lib3MFHandle libraryHandle, Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter eFilter) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_GetConsumerCount (pKeyStore, pCount); + return wrapperTable->m_Texture2D_SetFilter (pTexture2D, eFilter); } -Lib3MFResult CCall_lib3mf_keystore_getconsumer(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_uint64 nConsumerIndex, Lib3MF_Consumer * pConsumer) +Lib3MFResult CCall_lib3mf_implicitport_getidentifier(Lib3MFHandle libraryHandle, Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_GetConsumer (pKeyStore, nConsumerIndex, pConsumer); + return wrapperTable->m_ImplicitPort_GetIdentifier (pImplicitPort, nIdentifierBufferSize, pIdentifierNeededChars, pIdentifierBuffer); } -Lib3MFResult CCall_lib3mf_keystore_removeconsumer(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_Consumer pConsumer) +Lib3MFResult CCall_lib3mf_implicitport_setidentifier(Lib3MFHandle libraryHandle, Lib3MF_ImplicitPort pImplicitPort, const char * pIdentifier) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_RemoveConsumer (pKeyStore, pConsumer); + return wrapperTable->m_ImplicitPort_SetIdentifier (pImplicitPort, pIdentifier); } -Lib3MFResult CCall_lib3mf_keystore_findconsumer(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, const char * pConsumerID, Lib3MF_Consumer * pConsumer) +Lib3MFResult CCall_lib3mf_implicitport_getdisplayname(Lib3MFHandle libraryHandle, Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_FindConsumer (pKeyStore, pConsumerID, pConsumer); + return wrapperTable->m_ImplicitPort_GetDisplayName (pImplicitPort, nDisplayNameBufferSize, pDisplayNameNeededChars, pDisplayNameBuffer); } -Lib3MFResult CCall_lib3mf_keystore_getresourcedatagroupcount(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_uint64 * pCount) +Lib3MFResult CCall_lib3mf_implicitport_setdisplayname(Lib3MFHandle libraryHandle, Lib3MF_ImplicitPort pImplicitPort, const char * pDisplayName) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_GetResourceDataGroupCount (pKeyStore, pCount); + return wrapperTable->m_ImplicitPort_SetDisplayName (pImplicitPort, pDisplayName); } -Lib3MFResult CCall_lib3mf_keystore_addresourcedatagroup(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_ResourceDataGroup * pResourceDataGroup) +Lib3MFResult CCall_lib3mf_implicitport_settype(Lib3MFHandle libraryHandle, Lib3MF_ImplicitPort pImplicitPort, eLib3MFImplicitPortType eImplicitPortType) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_AddResourceDataGroup (pKeyStore, pResourceDataGroup); + return wrapperTable->m_ImplicitPort_SetType (pImplicitPort, eImplicitPortType); } -Lib3MFResult CCall_lib3mf_keystore_getresourcedatagroup(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_uint64 nResourceDataIndex, Lib3MF_ResourceDataGroup * pResourceDataGroup) +Lib3MFResult CCall_lib3mf_implicitport_gettype(Lib3MFHandle libraryHandle, Lib3MF_ImplicitPort pImplicitPort, eLib3MFImplicitPortType * pImplicitPortType) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_GetResourceDataGroup (pKeyStore, nResourceDataIndex, pResourceDataGroup); + return wrapperTable->m_ImplicitPort_GetType (pImplicitPort, pImplicitPortType); } -Lib3MFResult CCall_lib3mf_keystore_removeresourcedatagroup(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_ResourceDataGroup pResourceDataGroup) +Lib3MFResult CCall_lib3mf_implicitport_getreference(Lib3MFHandle libraryHandle, Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nReferenceBufferSize, Lib3MF_uint32* pReferenceNeededChars, char * pReferenceBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_RemoveResourceDataGroup (pKeyStore, pResourceDataGroup); + return wrapperTable->m_ImplicitPort_GetReference (pImplicitPort, nReferenceBufferSize, pReferenceNeededChars, pReferenceBuffer); } -Lib3MFResult CCall_lib3mf_keystore_findresourcedatagroup(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_PackagePart pPartPath, Lib3MF_ResourceDataGroup * pResourceDataGroup) +Lib3MFResult CCall_lib3mf_implicitport_setreference(Lib3MFHandle libraryHandle, Lib3MF_ImplicitPort pImplicitPort, const char * pReference) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_FindResourceDataGroup (pKeyStore, pPartPath, pResourceDataGroup); + return wrapperTable->m_ImplicitPort_SetReference (pImplicitPort, pReference); } -Lib3MFResult CCall_lib3mf_keystore_addresourcedata(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_ResourceDataGroup pResourceDataGroup, Lib3MF_PackagePart pPartPath, eLib3MFEncryptionAlgorithm eAlgorithm, eLib3MFCompression eCompression, Lib3MF_uint64 nAdditionalAuthenticationDataBufferSize, const Lib3MF_uint8 * pAdditionalAuthenticationDataBuffer, Lib3MF_ResourceData * pResourceData) +Lib3MFResult CCall_lib3mf_iterator_movenext(Lib3MFHandle libraryHandle, Lib3MF_Iterator pIterator, bool * pHasNext) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_AddResourceData (pKeyStore, pResourceDataGroup, pPartPath, eAlgorithm, eCompression, nAdditionalAuthenticationDataBufferSize, pAdditionalAuthenticationDataBuffer, pResourceData); + return wrapperTable->m_Iterator_MoveNext (pIterator, pHasNext); } -Lib3MFResult CCall_lib3mf_keystore_removeresourcedata(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_ResourceData pResourceData) +Lib3MFResult CCall_lib3mf_iterator_moveprevious(Lib3MFHandle libraryHandle, Lib3MF_Iterator pIterator, bool * pHasPrevious) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_RemoveResourceData (pKeyStore, pResourceData); + return wrapperTable->m_Iterator_MovePrevious (pIterator, pHasPrevious); } -Lib3MFResult CCall_lib3mf_keystore_findresourcedata(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_PackagePart pResourcePath, Lib3MF_ResourceData * pResourceData) +Lib3MFResult CCall_lib3mf_iterator_count(Lib3MFHandle libraryHandle, Lib3MF_Iterator pIterator, Lib3MF_uint64 * pCount) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_FindResourceData (pKeyStore, pResourcePath, pResourceData); + return wrapperTable->m_Iterator_Count (pIterator, pCount); } -Lib3MFResult CCall_lib3mf_keystore_getresourcedatacount(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_uint64 * pCount) +Lib3MFResult CCall_lib3mf_implicitportiterator_getcurrent(Lib3MFHandle libraryHandle, Lib3MF_ImplicitPortIterator pImplicitPortIterator, Lib3MF_ImplicitPort * pPort) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_GetResourceDataCount (pKeyStore, pCount); + return wrapperTable->m_ImplicitPortIterator_GetCurrent (pImplicitPortIterator, pPort); } -Lib3MFResult CCall_lib3mf_keystore_getresourcedata(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_uint64 nResourceDataIndex, Lib3MF_ResourceData * pResourceData) +Lib3MFResult CCall_lib3mf_implicitnode_getidentifier(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_GetResourceData (pKeyStore, nResourceDataIndex, pResourceData); + return wrapperTable->m_ImplicitNode_GetIdentifier (pImplicitNode, nIdentifierBufferSize, pIdentifierNeededChars, pIdentifierBuffer); } -Lib3MFResult CCall_lib3mf_keystore_getuuid(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) +Lib3MFResult CCall_lib3mf_implicitnode_setidentifier(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_GetUUID (pKeyStore, pHasUUID, nUUIDBufferSize, pUUIDNeededChars, pUUIDBuffer); + return wrapperTable->m_ImplicitNode_SetIdentifier (pImplicitNode, pIdentifier); } -Lib3MFResult CCall_lib3mf_keystore_setuuid(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, const char * pUUID) +Lib3MFResult CCall_lib3mf_implicitnode_getdisplayname(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_KeyStore_SetUUID (pKeyStore, pUUID); + return wrapperTable->m_ImplicitNode_GetDisplayName (pImplicitNode, nDisplayNameBufferSize, pDisplayNameNeededChars, pDisplayNameBuffer); } -Lib3MFResult CCall_lib3mf_model_rootmodelpart(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_PackagePart * pRootModelPart) +Lib3MFResult CCall_lib3mf_implicitnode_setdisplayname(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, const char * pDisplayName) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_RootModelPart (pModel, pRootModelPart); + return wrapperTable->m_ImplicitNode_SetDisplayName (pImplicitNode, pDisplayName); } -Lib3MFResult CCall_lib3mf_model_findorcreatepackagepart(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pAbsolutePath, Lib3MF_PackagePart * pModelPart) +Lib3MFResult CCall_lib3mf_implicitnode_gettag(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nTagBufferSize, Lib3MF_uint32* pTagNeededChars, char * pTagBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_FindOrCreatePackagePart (pModel, pAbsolutePath, pModelPart); + return wrapperTable->m_ImplicitNode_GetTag (pImplicitNode, nTagBufferSize, pTagNeededChars, pTagBuffer); } -Lib3MFResult CCall_lib3mf_model_setunit(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, eLib3MFModelUnit eUnit) +Lib3MFResult CCall_lib3mf_implicitnode_settag(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, const char * pTag) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_SetUnit (pModel, eUnit); + return wrapperTable->m_ImplicitNode_SetTag (pImplicitNode, pTag); } -Lib3MFResult CCall_lib3mf_model_getunit(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, eLib3MFModelUnit * pUnit) +Lib3MFResult CCall_lib3mf_implicitnode_getnodetype(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, eLib3MFImplicitNodeType * pType) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetUnit (pModel, pUnit); + return wrapperTable->m_ImplicitNode_GetNodeType (pImplicitNode, pType); } -Lib3MFResult CCall_lib3mf_model_getlanguage(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const Lib3MF_uint32 nLanguageBufferSize, Lib3MF_uint32* pLanguageNeededChars, char * pLanguageBuffer) +Lib3MFResult CCall_lib3mf_implicitnode_addinput(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetLanguage (pModel, nLanguageBufferSize, pLanguageNeededChars, pLanguageBuffer); + return wrapperTable->m_ImplicitNode_AddInput (pImplicitNode, pIdentifier, pDisplayName, pPort); } -Lib3MFResult CCall_lib3mf_model_setlanguage(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pLanguage) +Lib3MFResult CCall_lib3mf_implicitnode_getinputs(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_SetLanguage (pModel, pLanguage); + return wrapperTable->m_ImplicitNode_GetInputs (pImplicitNode, pIterator); } -Lib3MFResult CCall_lib3mf_model_querywriter(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pWriterClass, Lib3MF_Writer * pWriterInstance) +Lib3MFResult CCall_lib3mf_implicitnode_addoutput(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_QueryWriter (pModel, pWriterClass, pWriterInstance); + return wrapperTable->m_ImplicitNode_AddOutput (pImplicitNode, pIdentifier, pDisplayName, pPort); } -Lib3MFResult CCall_lib3mf_model_queryreader(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pReaderClass, Lib3MF_Reader * pReaderInstance) +Lib3MFResult CCall_lib3mf_implicitnode_getoutputs(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_QueryReader (pModel, pReaderClass, pReaderInstance); + return wrapperTable->m_ImplicitNode_GetOutputs (pImplicitNode, pIterator); } -Lib3MFResult CCall_lib3mf_model_getresourcebyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_Resource * pResource) +Lib3MFResult CCall_lib3mf_implicitnode_findinput(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pInput) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetResourceByID (pModel, nUniqueResourceID, pResource); + return wrapperTable->m_ImplicitNode_FindInput (pImplicitNode, pIdentifier, pInput); } -Lib3MFResult CCall_lib3mf_model_gettexture2dbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_Texture2D * pTextureInstance) +Lib3MFResult CCall_lib3mf_implicitnode_findoutput(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetTexture2DByID (pModel, nUniqueResourceID, pTextureInstance); + return wrapperTable->m_ImplicitNode_FindOutput (pImplicitNode, pIdentifier, pOutput); } -Lib3MFResult CCall_lib3mf_model_getpropertytypebyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, eLib3MFPropertyType * pThePropertyType) +Lib3MFResult CCall_lib3mf_implicitnode_aretypesvalid(Lib3MFHandle libraryHandle, Lib3MF_ImplicitNode pImplicitNode, bool * pValid) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetPropertyTypeByID (pModel, nUniqueResourceID, pThePropertyType); + return wrapperTable->m_ImplicitNode_AreTypesValid (pImplicitNode, pValid); } -Lib3MFResult CCall_lib3mf_model_getbasematerialgroupbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance) +Lib3MFResult CCall_lib3mf_oneinputnode_getinputa(Lib3MFHandle libraryHandle, Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pInput) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetBaseMaterialGroupByID (pModel, nUniqueResourceID, pBaseMaterialGroupInstance); + return wrapperTable->m_OneInputNode_GetInputA (pOneInputNode, pInput); } -Lib3MFResult CCall_lib3mf_model_gettexture2dgroupbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_Texture2DGroup * pTexture2DGroupInstance) +Lib3MFResult CCall_lib3mf_oneinputnode_getoutputresult(Lib3MFHandle libraryHandle, Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pResult) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetTexture2DGroupByID (pModel, nUniqueResourceID, pTexture2DGroupInstance); + return wrapperTable->m_OneInputNode_GetOutputResult (pOneInputNode, pResult); } -Lib3MFResult CCall_lib3mf_model_getcompositematerialsbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_CompositeMaterials * pCompositeMaterialsInstance) +Lib3MFResult CCall_lib3mf_resourceidnode_setresource(Lib3MFHandle libraryHandle, Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource pResource) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetCompositeMaterialsByID (pModel, nUniqueResourceID, pCompositeMaterialsInstance); + return wrapperTable->m_ResourceIdNode_SetResource (pResourceIdNode, pResource); } -Lib3MFResult CCall_lib3mf_model_getmultipropertygroupbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance) +Lib3MFResult CCall_lib3mf_resourceidnode_getresource(Lib3MFHandle libraryHandle, Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource * pResource) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetMultiPropertyGroupByID (pModel, nUniqueResourceID, pMultiPropertyGroupInstance); + return wrapperTable->m_ResourceIdNode_GetResource (pResourceIdNode, pResource); } -Lib3MFResult CCall_lib3mf_model_getmeshobjectbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_MeshObject * pMeshObjectInstance) +Lib3MFResult CCall_lib3mf_resourceidnode_getoutputvalue(Lib3MFHandle libraryHandle, Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_ImplicitPort * pValue) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetMeshObjectByID (pModel, nUniqueResourceID, pMeshObjectInstance); + return wrapperTable->m_ResourceIdNode_GetOutputValue (pResourceIdNode, pValue); } -Lib3MFResult CCall_lib3mf_model_getcomponentsobjectbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ComponentsObject * pComponentsObjectInstance) +Lib3MFResult CCall_lib3mf_twoinputnode_getinputb(Lib3MFHandle libraryHandle, Lib3MF_TwoInputNode pTwoInputNode, Lib3MF_ImplicitPort * pB) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetComponentsObjectByID (pModel, nUniqueResourceID, pComponentsObjectInstance); + return wrapperTable->m_TwoInputNode_GetInputB (pTwoInputNode, pB); } -Lib3MFResult CCall_lib3mf_model_getcolorgroupbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ColorGroup * pColorGroupInstance) +Lib3MFResult CCall_lib3mf_selectnode_getinputb(Lib3MFHandle libraryHandle, Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pB) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetColorGroupByID (pModel, nUniqueResourceID, pColorGroupInstance); + return wrapperTable->m_SelectNode_GetInputB (pSelectNode, pB); } -Lib3MFResult CCall_lib3mf_model_getslicestackbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_SliceStack * pSliceStacInstance) +Lib3MFResult CCall_lib3mf_selectnode_getinputc(Lib3MFHandle libraryHandle, Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pC) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetSliceStackByID (pModel, nUniqueResourceID, pSliceStacInstance); + return wrapperTable->m_SelectNode_GetInputC (pSelectNode, pC); } -Lib3MFResult CCall_lib3mf_model_getbuilduuid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) +Lib3MFResult CCall_lib3mf_selectnode_getinputd(Lib3MFHandle libraryHandle, Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pD) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetBuildUUID (pModel, pHasUUID, nUUIDBufferSize, pUUIDNeededChars, pUUIDBuffer); + return wrapperTable->m_SelectNode_GetInputD (pSelectNode, pD); } -Lib3MFResult CCall_lib3mf_model_setbuilduuid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pUUID) +Lib3MFResult CCall_lib3mf_clampnode_getinputmin(Lib3MFHandle libraryHandle, Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMin) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_SetBuildUUID (pModel, pUUID); + return wrapperTable->m_ClampNode_GetInputMin (pClampNode, pMin); } -Lib3MFResult CCall_lib3mf_model_getbuilditems(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_BuildItemIterator * pBuildItemIterator) +Lib3MFResult CCall_lib3mf_clampnode_getinputmax(Lib3MFHandle libraryHandle, Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMax) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetBuildItems (pModel, pBuildItemIterator); + return wrapperTable->m_ClampNode_GetInputMax (pClampNode, pMax); } -Lib3MFResult CCall_lib3mf_model_getoutbox(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, sLib3MFBox * pOutbox) +Lib3MFResult CCall_lib3mf_composevectornode_getinputx(Lib3MFHandle libraryHandle, Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pX) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetOutbox (pModel, pOutbox); + return wrapperTable->m_ComposeVectorNode_GetInputX (pComposeVectorNode, pX); } -Lib3MFResult CCall_lib3mf_model_getresources(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_ResourceIterator * pResourceIterator) +Lib3MFResult CCall_lib3mf_composevectornode_getinputy(Lib3MFHandle libraryHandle, Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pY) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetResources (pModel, pResourceIterator); + return wrapperTable->m_ComposeVectorNode_GetInputY (pComposeVectorNode, pY); } -Lib3MFResult CCall_lib3mf_model_getobjects(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_ObjectIterator * pResourceIterator) +Lib3MFResult CCall_lib3mf_composevectornode_getinputz(Lib3MFHandle libraryHandle, Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pZ) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetObjects (pModel, pResourceIterator); + return wrapperTable->m_ComposeVectorNode_GetInputZ (pComposeVectorNode, pZ); } -Lib3MFResult CCall_lib3mf_model_getmeshobjects(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_MeshObjectIterator * pResourceIterator) +Lib3MFResult CCall_lib3mf_composevectornode_getoutputresult(Lib3MFHandle libraryHandle, Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pResult) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetMeshObjects (pModel, pResourceIterator); + return wrapperTable->m_ComposeVectorNode_GetOutputResult (pComposeVectorNode, pResult); } -Lib3MFResult CCall_lib3mf_model_getcomponentsobjects(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_ComponentsObjectIterator * pResourceIterator) +Lib3MFResult CCall_lib3mf_decomposevectornode_getinputa(Lib3MFHandle libraryHandle, Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pA) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetComponentsObjects (pModel, pResourceIterator); + return wrapperTable->m_DecomposeVectorNode_GetInputA (pDecomposeVectorNode, pA); } -Lib3MFResult CCall_lib3mf_model_gettexture2ds(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Texture2DIterator * pResourceIterator) +Lib3MFResult CCall_lib3mf_decomposevectornode_getoutputx(Lib3MFHandle libraryHandle, Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pX) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetTexture2Ds (pModel, pResourceIterator); + return wrapperTable->m_DecomposeVectorNode_GetOutputX (pDecomposeVectorNode, pX); } -Lib3MFResult CCall_lib3mf_model_getbasematerialgroups(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_BaseMaterialGroupIterator * pResourceIterator) +Lib3MFResult CCall_lib3mf_decomposevectornode_getoutputy(Lib3MFHandle libraryHandle, Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pY) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetBaseMaterialGroups (pModel, pResourceIterator); + return wrapperTable->m_DecomposeVectorNode_GetOutputY (pDecomposeVectorNode, pY); } -Lib3MFResult CCall_lib3mf_model_getcolorgroups(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_ColorGroupIterator * pResourceIterator) +Lib3MFResult CCall_lib3mf_decomposevectornode_getoutputz(Lib3MFHandle libraryHandle, Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pZ) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetColorGroups (pModel, pResourceIterator); + return wrapperTable->m_DecomposeVectorNode_GetOutputZ (pDecomposeVectorNode, pZ); } -Lib3MFResult CCall_lib3mf_model_gettexture2dgroups(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Texture2DGroupIterator * pResourceIterator) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm00(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM00) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetTexture2DGroups (pModel, pResourceIterator); + return wrapperTable->m_ComposeMatrixNode_GetInputM00 (pComposeMatrixNode, pM00); } -Lib3MFResult CCall_lib3mf_model_getcompositematerials(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_CompositeMaterialsIterator * pResourceIterator) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm01(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM01) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetCompositeMaterials (pModel, pResourceIterator); + return wrapperTable->m_ComposeMatrixNode_GetInputM01 (pComposeMatrixNode, pM01); } -Lib3MFResult CCall_lib3mf_model_getmultipropertygroups(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_MultiPropertyGroupIterator * pResourceIterator) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm02(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM02) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetMultiPropertyGroups (pModel, pResourceIterator); + return wrapperTable->m_ComposeMatrixNode_GetInputM02 (pComposeMatrixNode, pM02); } -Lib3MFResult CCall_lib3mf_model_getslicestacks(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_SliceStackIterator * pResourceIterator) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm03(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM03) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetSliceStacks (pModel, pResourceIterator); + return wrapperTable->m_ComposeMatrixNode_GetInputM03 (pComposeMatrixNode, pM03); } -Lib3MFResult CCall_lib3mf_model_mergetomodel(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Model * pMergedModelInstance) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm10(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM10) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_MergeToModel (pModel, pMergedModelInstance); + return wrapperTable->m_ComposeMatrixNode_GetInputM10 (pComposeMatrixNode, pM10); } -Lib3MFResult CCall_lib3mf_model_addmeshobject(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_MeshObject * pMeshObjectInstance) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm11(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM11) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_AddMeshObject (pModel, pMeshObjectInstance); + return wrapperTable->m_ComposeMatrixNode_GetInputM11 (pComposeMatrixNode, pM11); } -Lib3MFResult CCall_lib3mf_model_addcomponentsobject(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_ComponentsObject * pComponentsObjectInstance) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm12(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM12) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_AddComponentsObject (pModel, pComponentsObjectInstance); + return wrapperTable->m_ComposeMatrixNode_GetInputM12 (pComposeMatrixNode, pM12); } -Lib3MFResult CCall_lib3mf_model_addslicestack(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_double dZBottom, Lib3MF_SliceStack * pSliceStackInstance) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm13(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM13) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_AddSliceStack (pModel, dZBottom, pSliceStackInstance); + return wrapperTable->m_ComposeMatrixNode_GetInputM13 (pComposeMatrixNode, pM13); } -Lib3MFResult CCall_lib3mf_model_addtexture2dfromattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Attachment pTextureAttachment, Lib3MF_Texture2D * pTexture2DInstance) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm20(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM20) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_AddTexture2DFromAttachment (pModel, pTextureAttachment, pTexture2DInstance); + return wrapperTable->m_ComposeMatrixNode_GetInputM20 (pComposeMatrixNode, pM20); } -Lib3MFResult CCall_lib3mf_model_addbasematerialgroup(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm21(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM21) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_AddBaseMaterialGroup (pModel, pBaseMaterialGroupInstance); + return wrapperTable->m_ComposeMatrixNode_GetInputM21 (pComposeMatrixNode, pM21); } -Lib3MFResult CCall_lib3mf_model_addcolorgroup(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_ColorGroup * pColorGroupInstance) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm22(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM22) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_AddColorGroup (pModel, pColorGroupInstance); + return wrapperTable->m_ComposeMatrixNode_GetInputM22 (pComposeMatrixNode, pM22); } -Lib3MFResult CCall_lib3mf_model_addtexture2dgroup(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Texture2D pTexture2DInstance, Lib3MF_Texture2DGroup * pTexture2DGroupInstance) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm23(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM23) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_AddTexture2DGroup (pModel, pTexture2DInstance, pTexture2DGroupInstance); + return wrapperTable->m_ComposeMatrixNode_GetInputM23 (pComposeMatrixNode, pM23); } -Lib3MFResult CCall_lib3mf_model_addcompositematerials(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance, Lib3MF_CompositeMaterials * pCompositeMaterialsInstance) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm30(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM30) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_AddCompositeMaterials (pModel, pBaseMaterialGroupInstance, pCompositeMaterialsInstance); + return wrapperTable->m_ComposeMatrixNode_GetInputM30 (pComposeMatrixNode, pM30); } -Lib3MFResult CCall_lib3mf_model_addmultipropertygroup(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm31(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM31) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_AddMultiPropertyGroup (pModel, pMultiPropertyGroupInstance); + return wrapperTable->m_ComposeMatrixNode_GetInputM31 (pComposeMatrixNode, pM31); } -Lib3MFResult CCall_lib3mf_model_addbuilditem(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Object pObject, const sLib3MFTransform * pTransform, Lib3MF_BuildItem * pBuildItemInstance) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm32(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM32) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_AddBuildItem (pModel, pObject, pTransform, pBuildItemInstance); + return wrapperTable->m_ComposeMatrixNode_GetInputM32 (pComposeMatrixNode, pM32); } -Lib3MFResult CCall_lib3mf_model_removebuilditem(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_BuildItem pBuildItemInstance) +Lib3MFResult CCall_lib3mf_composematrixnode_getinputm33(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM33) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_RemoveBuildItem (pModel, pBuildItemInstance); + return wrapperTable->m_ComposeMatrixNode_GetInputM33 (pComposeMatrixNode, pM33); } -Lib3MFResult CCall_lib3mf_model_getmetadatagroup(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_MetaDataGroup * pTheMetaDataGroup) +Lib3MFResult CCall_lib3mf_composematrixnode_getoutputresult(Lib3MFHandle libraryHandle, Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pResult) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetMetaDataGroup (pModel, pTheMetaDataGroup); + return wrapperTable->m_ComposeMatrixNode_GetOutputResult (pComposeMatrixNode, pResult); } -Lib3MFResult CCall_lib3mf_model_addattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pURI, const char * pRelationShipType, Lib3MF_Attachment * pAttachmentInstance) +Lib3MFResult CCall_lib3mf_matrixfromrowsnode_getinputa(Lib3MFHandle libraryHandle, Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow0) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_AddAttachment (pModel, pURI, pRelationShipType, pAttachmentInstance); + return wrapperTable->m_MatrixFromRowsNode_GetInputA (pMatrixFromRowsNode, pRow0); } -Lib3MFResult CCall_lib3mf_model_removeattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Attachment pAttachmentInstance) +Lib3MFResult CCall_lib3mf_matrixfromrowsnode_getinputb(Lib3MFHandle libraryHandle, Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow1) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_RemoveAttachment (pModel, pAttachmentInstance); + return wrapperTable->m_MatrixFromRowsNode_GetInputB (pMatrixFromRowsNode, pRow1); } -Lib3MFResult CCall_lib3mf_model_getattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nIndex, Lib3MF_Attachment * pAttachmentInstance) +Lib3MFResult CCall_lib3mf_matrixfromrowsnode_getinputc(Lib3MFHandle libraryHandle, Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow2) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetAttachment (pModel, nIndex, pAttachmentInstance); + return wrapperTable->m_MatrixFromRowsNode_GetInputC (pMatrixFromRowsNode, pRow2); } -Lib3MFResult CCall_lib3mf_model_findattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pURI, Lib3MF_Attachment * pAttachmentInstance) +Lib3MFResult CCall_lib3mf_matrixfromrowsnode_getinputd(Lib3MFHandle libraryHandle, Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow3) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_FindAttachment (pModel, pURI, pAttachmentInstance); + return wrapperTable->m_MatrixFromRowsNode_GetInputD (pMatrixFromRowsNode, pRow3); } -Lib3MFResult CCall_lib3mf_model_getattachmentcount(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 * pAttachmentCount) +Lib3MFResult CCall_lib3mf_matrixfromrowsnode_getoutputresult(Lib3MFHandle libraryHandle, Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pResult) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetAttachmentCount (pModel, pAttachmentCount); + return wrapperTable->m_MatrixFromRowsNode_GetOutputResult (pMatrixFromRowsNode, pResult); } -Lib3MFResult CCall_lib3mf_model_haspackagethumbnailattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, bool * pHasThumbnail) +Lib3MFResult CCall_lib3mf_matrixfromcolumnsnode_getinputa(Lib3MFHandle libraryHandle, Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn0) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_HasPackageThumbnailAttachment (pModel, pHasThumbnail); + return wrapperTable->m_MatrixFromColumnsNode_GetInputA (pMatrixFromColumnsNode, pColumn0); } -Lib3MFResult CCall_lib3mf_model_createpackagethumbnailattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Attachment * pAttachment) +Lib3MFResult CCall_lib3mf_matrixfromcolumnsnode_getinputb(Lib3MFHandle libraryHandle, Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn1) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_CreatePackageThumbnailAttachment (pModel, pAttachment); + return wrapperTable->m_MatrixFromColumnsNode_GetInputB (pMatrixFromColumnsNode, pColumn1); } -Lib3MFResult CCall_lib3mf_model_getpackagethumbnailattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Attachment * pAttachment) +Lib3MFResult CCall_lib3mf_matrixfromcolumnsnode_getinputc(Lib3MFHandle libraryHandle, Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn2) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetPackageThumbnailAttachment (pModel, pAttachment); + return wrapperTable->m_MatrixFromColumnsNode_GetInputC (pMatrixFromColumnsNode, pColumn2); } -Lib3MFResult CCall_lib3mf_model_removepackagethumbnailattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel) +Lib3MFResult CCall_lib3mf_matrixfromcolumnsnode_getinputd(Lib3MFHandle libraryHandle, Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn3) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_RemovePackageThumbnailAttachment (pModel); + return wrapperTable->m_MatrixFromColumnsNode_GetInputD (pMatrixFromColumnsNode, pColumn3); } -Lib3MFResult CCall_lib3mf_model_addcustomcontenttype(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pExtension, const char * pContentType) +Lib3MFResult CCall_lib3mf_matrixfromcolumnsnode_getoutputresult(Lib3MFHandle libraryHandle, Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pResult) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_AddCustomContentType (pModel, pExtension, pContentType); + return wrapperTable->m_MatrixFromColumnsNode_GetOutputResult (pMatrixFromColumnsNode, pResult); } -Lib3MFResult CCall_lib3mf_model_removecustomcontenttype(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pExtension) +Lib3MFResult CCall_lib3mf_constantnode_setconstant(Lib3MFHandle libraryHandle, Lib3MF_ConstantNode pConstantNode, Lib3MF_double dValue) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_RemoveCustomContentType (pModel, pExtension); + return wrapperTable->m_ConstantNode_SetConstant (pConstantNode, dValue); } -Lib3MFResult CCall_lib3mf_model_setrandomnumbercallback(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MFRandomNumberCallback pTheCallback, Lib3MF_pvoid pUserData) +Lib3MFResult CCall_lib3mf_constantnode_getconstant(Lib3MFHandle libraryHandle, Lib3MF_ConstantNode pConstantNode, Lib3MF_double * pValue) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_SetRandomNumberCallback (pModel, pTheCallback, pUserData); + return wrapperTable->m_ConstantNode_GetConstant (pConstantNode, pValue); } -Lib3MFResult CCall_lib3mf_model_getkeystore(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_KeyStore * pKeyStore) +Lib3MFResult CCall_lib3mf_constantnode_getoutputvalue(Lib3MFHandle libraryHandle, Lib3MF_ConstantNode pConstantNode, Lib3MF_ImplicitPort * pValue) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Model_GetKeyStore (pModel, pKeyStore); + return wrapperTable->m_ConstantNode_GetOutputValue (pConstantNode, pValue); } -Lib3MFResult CCall_lib3mf_getlibraryversion(Lib3MFHandle libraryHandle, Lib3MF_uint32 * pMajor, Lib3MF_uint32 * pMinor, Lib3MF_uint32 * pMicro) +Lib3MFResult CCall_lib3mf_constvecnode_setvector(Lib3MFHandle libraryHandle, Lib3MF_ConstVecNode pConstVecNode, const sLib3MFVector * pValue) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_GetLibraryVersion (pMajor, pMinor, pMicro); + return wrapperTable->m_ConstVecNode_SetVector (pConstVecNode, pValue); } -Lib3MFResult CCall_lib3mf_getprereleaseinformation(Lib3MFHandle libraryHandle, bool * pHasPrereleaseInfo, const Lib3MF_uint32 nPrereleaseInfoBufferSize, Lib3MF_uint32* pPrereleaseInfoNeededChars, char * pPrereleaseInfoBuffer) +Lib3MFResult CCall_lib3mf_constvecnode_getvector(Lib3MFHandle libraryHandle, Lib3MF_ConstVecNode pConstVecNode, sLib3MFVector * pValue) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_GetPrereleaseInformation (pHasPrereleaseInfo, nPrereleaseInfoBufferSize, pPrereleaseInfoNeededChars, pPrereleaseInfoBuffer); + return wrapperTable->m_ConstVecNode_GetVector (pConstVecNode, pValue); } -Lib3MFResult CCall_lib3mf_getbuildinformation(Lib3MFHandle libraryHandle, bool * pHasBuildInfo, const Lib3MF_uint32 nBuildInformationBufferSize, Lib3MF_uint32* pBuildInformationNeededChars, char * pBuildInformationBuffer) +Lib3MFResult CCall_lib3mf_constvecnode_getoutputvector(Lib3MFHandle libraryHandle, Lib3MF_ConstVecNode pConstVecNode, Lib3MF_ImplicitPort * pVector) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_GetBuildInformation (pHasBuildInfo, nBuildInformationBufferSize, pBuildInformationNeededChars, pBuildInformationBuffer); + return wrapperTable->m_ConstVecNode_GetOutputVector (pConstVecNode, pVector); } -Lib3MFResult CCall_lib3mf_getspecificationversion(Lib3MFHandle libraryHandle, const char * pSpecificationURL, bool * pIsSupported, Lib3MF_uint32 * pMajor, Lib3MF_uint32 * pMinor, Lib3MF_uint32 * pMicro) +Lib3MFResult CCall_lib3mf_constmatnode_setmatrix(Lib3MFHandle libraryHandle, Lib3MF_ConstMatNode pConstMatNode, const sLib3MFMatrix4x4 * pValue) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_GetSpecificationVersion (pSpecificationURL, pIsSupported, pMajor, pMinor, pMicro); + return wrapperTable->m_ConstMatNode_SetMatrix (pConstMatNode, pValue); } -Lib3MFResult CCall_lib3mf_createmodel(Lib3MFHandle libraryHandle, Lib3MF_Model * pModel) +Lib3MFResult CCall_lib3mf_constmatnode_getmatrix(Lib3MFHandle libraryHandle, Lib3MF_ConstMatNode pConstMatNode, sLib3MFMatrix4x4 * pValue) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_CreateModel (pModel); + return wrapperTable->m_ConstMatNode_GetMatrix (pConstMatNode, pValue); } -Lib3MFResult CCall_lib3mf_release(Lib3MFHandle libraryHandle, Lib3MF_Base pInstance) +Lib3MFResult CCall_lib3mf_constmatnode_getoutputmatrix(Lib3MFHandle libraryHandle, Lib3MF_ConstMatNode pConstMatNode, Lib3MF_ImplicitPort * pMatrix) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Release (pInstance); + return wrapperTable->m_ConstMatNode_GetOutputMatrix (pConstMatNode, pMatrix); } -Lib3MFResult CCall_lib3mf_acquire(Lib3MFHandle libraryHandle, Lib3MF_Base pInstance) +Lib3MFResult CCall_lib3mf_meshnode_getinputmesh(Lib3MFHandle libraryHandle, Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pMesh) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_Acquire (pInstance); + return wrapperTable->m_MeshNode_GetInputMesh (pMeshNode, pMesh); } -Lib3MFResult CCall_lib3mf_setjournal(Lib3MFHandle libraryHandle, const char * pJournalPath) +Lib3MFResult CCall_lib3mf_meshnode_getinputpos(Lib3MFHandle libraryHandle, Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pPos) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_SetJournal (pJournalPath); + return wrapperTable->m_MeshNode_GetInputPos (pMeshNode, pPos); } -Lib3MFResult CCall_lib3mf_getlasterror(Lib3MFHandle libraryHandle, Lib3MF_Base pInstance, const Lib3MF_uint32 nLastErrorStringBufferSize, Lib3MF_uint32* pLastErrorStringNeededChars, char * pLastErrorStringBuffer, bool * pHasLastError) +Lib3MFResult CCall_lib3mf_meshnode_getoutputdistance(Lib3MFHandle libraryHandle, Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pDistance) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_GetLastError (pInstance, nLastErrorStringBufferSize, pLastErrorStringNeededChars, pLastErrorStringBuffer, pHasLastError); + return wrapperTable->m_MeshNode_GetOutputDistance (pMeshNode, pDistance); } -Lib3MFResult CCall_lib3mf_getsymbollookupmethod(Lib3MFHandle libraryHandle, Lib3MF_pvoid * pSymbolLookupMethod) +Lib3MFResult CCall_lib3mf_unsignedmeshnode_getinputmesh(Lib3MFHandle libraryHandle, Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pMesh) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_GetSymbolLookupMethod (pSymbolLookupMethod); + return wrapperTable->m_UnsignedMeshNode_GetInputMesh (pUnsignedMeshNode, pMesh); } -Lib3MFResult CCall_lib3mf_retrieveprogressmessage(Lib3MFHandle libraryHandle, eLib3MFProgressIdentifier eTheProgressIdentifier, const Lib3MF_uint32 nProgressMessageBufferSize, Lib3MF_uint32* pProgressMessageNeededChars, char * pProgressMessageBuffer) +Lib3MFResult CCall_lib3mf_unsignedmeshnode_getinputpos(Lib3MFHandle libraryHandle, Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pPos) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_RetrieveProgressMessage (eTheProgressIdentifier, nProgressMessageBufferSize, pProgressMessageNeededChars, pProgressMessageBuffer); + return wrapperTable->m_UnsignedMeshNode_GetInputPos (pUnsignedMeshNode, pPos); } -Lib3MFResult CCall_lib3mf_rgbatocolor(Lib3MFHandle libraryHandle, Lib3MF_uint8 nRed, Lib3MF_uint8 nGreen, Lib3MF_uint8 nBlue, Lib3MF_uint8 nAlpha, sLib3MFColor * pTheColor) +Lib3MFResult CCall_lib3mf_unsignedmeshnode_getoutputdistance(Lib3MFHandle libraryHandle, Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pDistance) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_RGBAToColor (nRed, nGreen, nBlue, nAlpha, pTheColor); + return wrapperTable->m_UnsignedMeshNode_GetOutputDistance (pUnsignedMeshNode, pDistance); } -Lib3MFResult CCall_lib3mf_floatrgbatocolor(Lib3MFHandle libraryHandle, Lib3MF_single fRed, Lib3MF_single fGreen, Lib3MF_single fBlue, Lib3MF_single fAlpha, sLib3MFColor * pTheColor) +Lib3MFResult CCall_lib3mf_functioncallnode_getinputfunctionid(Lib3MFHandle libraryHandle, Lib3MF_FunctionCallNode pFunctionCallNode, Lib3MF_ImplicitPort * pFunction) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_FloatRGBAToColor (fRed, fGreen, fBlue, fAlpha, pTheColor); + return wrapperTable->m_FunctionCallNode_GetInputFunctionID (pFunctionCallNode, pFunction); } -Lib3MFResult CCall_lib3mf_colortorgba(Lib3MFHandle libraryHandle, const sLib3MFColor * pTheColor, Lib3MF_uint8 * pRed, Lib3MF_uint8 * pGreen, Lib3MF_uint8 * pBlue, Lib3MF_uint8 * pAlpha) +Lib3MFResult CCall_lib3mf_nodeiterator_getcurrent(Lib3MFHandle libraryHandle, Lib3MF_NodeIterator pNodeIterator, Lib3MF_ImplicitNode * pNode) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ColorToRGBA (pTheColor, pRed, pGreen, pBlue, pAlpha); + return wrapperTable->m_NodeIterator_GetCurrent (pNodeIterator, pNode); } -Lib3MFResult CCall_lib3mf_colortofloatrgba(Lib3MFHandle libraryHandle, const sLib3MFColor * pTheColor, Lib3MF_single * pRed, Lib3MF_single * pGreen, Lib3MF_single * pBlue, Lib3MF_single * pAlpha) +Lib3MFResult CCall_lib3mf_function_getdisplayname(Lib3MFHandle libraryHandle, Lib3MF_Function pFunction, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_ColorToFloatRGBA (pTheColor, pRed, pGreen, pBlue, pAlpha); + return wrapperTable->m_Function_GetDisplayName (pFunction, nDisplayNameBufferSize, pDisplayNameNeededChars, pDisplayNameBuffer); } -Lib3MFResult CCall_lib3mf_getidentitytransform(Lib3MFHandle libraryHandle, sLib3MFTransform * pTransform) +Lib3MFResult CCall_lib3mf_function_setdisplayname(Lib3MFHandle libraryHandle, Lib3MF_Function pFunction, const char * pDisplayName) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_GetIdentityTransform (pTransform); + return wrapperTable->m_Function_SetDisplayName (pFunction, pDisplayName); } -Lib3MFResult CCall_lib3mf_getuniformscaletransform(Lib3MFHandle libraryHandle, Lib3MF_single fFactor, sLib3MFTransform * pTransform) +Lib3MFResult CCall_lib3mf_function_addinput(Lib3MFHandle libraryHandle, Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, eLib3MFImplicitPortType eType, Lib3MF_ImplicitPort * pPort) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_GetUniformScaleTransform (fFactor, pTransform); + return wrapperTable->m_Function_AddInput (pFunction, pIdentifier, pDisplayName, eType, pPort); } -Lib3MFResult CCall_lib3mf_getscaletransform(Lib3MFHandle libraryHandle, Lib3MF_single fFactorX, Lib3MF_single fFactorY, Lib3MF_single fFactorZ, sLib3MFTransform * pTransform) +Lib3MFResult CCall_lib3mf_function_getinputs(Lib3MFHandle libraryHandle, Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_GetScaleTransform (fFactorX, fFactorY, fFactorZ, pTransform); + return wrapperTable->m_Function_GetInputs (pFunction, pIterator); } -Lib3MFResult CCall_lib3mf_gettranslationtransform(Lib3MFHandle libraryHandle, Lib3MF_single fVectorX, Lib3MF_single fVectorY, Lib3MF_single fVectorZ, sLib3MFTransform * pTransform) +Lib3MFResult CCall_lib3mf_function_removeinput(Lib3MFHandle libraryHandle, Lib3MF_Function pFunction, Lib3MF_ImplicitPort pInput) { if (libraryHandle == 0) return LIB3MF_ERROR_INVALIDCAST; sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; - return wrapperTable->m_GetTranslationTransform (fVectorX, fVectorY, fVectorZ, pTransform); + return wrapperTable->m_Function_RemoveInput (pFunction, pInput); } -*/ -import "C" - -import ( - "fmt" - "unsafe" - "runtime" -) -type ref = C.Lib3MFHandle +Lib3MFResult CCall_lib3mf_function_addoutput(Lib3MFHandle libraryHandle, Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, eLib3MFImplicitPortType eType, Lib3MF_ImplicitPort * pPort) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Function_AddOutput (pFunction, pIdentifier, pDisplayName, eType, pPort); +} -// PropertyType represents a Lib3MF enum. -type PropertyType int +Lib3MFResult CCall_lib3mf_function_getoutputs(Lib3MFHandle libraryHandle, Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Function_GetOutputs (pFunction, pIterator); +} -const ( - PropertyType_NoPropertyType = 0 - PropertyType_BaseMaterial = 1 - PropertyType_TexCoord = 2 - PropertyType_Colors = 3 - PropertyType_Composite = 4 - PropertyType_Multi = 5 -) -// SlicesMeshResolution represents a Lib3MF enum. -type SlicesMeshResolution int +Lib3MFResult CCall_lib3mf_function_removeoutput(Lib3MFHandle libraryHandle, Lib3MF_Function pFunction, Lib3MF_ImplicitPort pOutput) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Function_RemoveOutput (pFunction, pOutput); +} -const ( - SlicesMeshResolution_Fullres = 0 - SlicesMeshResolution_Lowres = 1 -) -// ModelUnit represents a Lib3MF enum. -type ModelUnit int +Lib3MFResult CCall_lib3mf_function_findinput(Lib3MFHandle libraryHandle, Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pInput) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Function_FindInput (pFunction, pIdentifier, pInput); +} -const ( - ModelUnit_MicroMeter = 0 - ModelUnit_MilliMeter = 1 - ModelUnit_CentiMeter = 2 - ModelUnit_Inch = 3 - ModelUnit_Foot = 4 - ModelUnit_Meter = 5 -) -// ObjectType represents a Lib3MF enum. -type ObjectType int +Lib3MFResult CCall_lib3mf_function_findoutput(Lib3MFHandle libraryHandle, Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Function_FindOutput (pFunction, pIdentifier, pOutput); +} -const ( - ObjectType_Other = 0 - ObjectType_Model = 1 - ObjectType_Support = 2 - ObjectType_SolidSupport = 3 -) -// TextureType represents a Lib3MF enum. -type TextureType int +Lib3MFResult CCall_lib3mf_implicitfunction_getidentifier(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_GetIdentifier (pImplicitFunction, nIdentifierBufferSize, pIdentifierNeededChars, pIdentifierBuffer); +} -const ( - TextureType_Unknown = 0 - TextureType_PNG = 1 - TextureType_JPEG = 2 -) -// TextureTileStyle represents a Lib3MF enum. -type TextureTileStyle int +Lib3MFResult CCall_lib3mf_implicitfunction_setidentifier(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_SetIdentifier (pImplicitFunction, pIdentifier); +} -const ( - TextureTileStyle_Wrap = 0 - TextureTileStyle_Mirror = 1 - TextureTileStyle_Clamp = 2 - TextureTileStyle_NoTileStyle = 3 -) -// TextureFilter represents a Lib3MF enum. -type TextureFilter int +Lib3MFResult CCall_lib3mf_implicitfunction_addnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, eLib3MFImplicitNodeType eNodeType, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ImplicitNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddNode (pImplicitFunction, eNodeType, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} -const ( - TextureFilter_Auto = 0 - TextureFilter_Linear = 1 - TextureFilter_Nearest = 2 -) -// BeamLatticeCapMode represents a Lib3MF enum. -type BeamLatticeCapMode int +Lib3MFResult CCall_lib3mf_implicitfunction_addsinnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddSinNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} -const ( - BeamLatticeCapMode_Sphere = 0 - BeamLatticeCapMode_HemiSphere = 1 - BeamLatticeCapMode_Butt = 2 -) -// BeamLatticeClipMode represents a Lib3MF enum. -type BeamLatticeClipMode int +Lib3MFResult CCall_lib3mf_implicitfunction_addcosnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CosNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddCosNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} -const ( - BeamLatticeClipMode_NoClipMode = 0 - BeamLatticeClipMode_Inside = 1 - BeamLatticeClipMode_Outside = 2 -) -// BeamLatticeBallMode represents a Lib3MF enum. -type BeamLatticeBallMode int +Lib3MFResult CCall_lib3mf_implicitfunction_addtannode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddTanNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} -const ( - BeamLatticeBallMode_None = 0 - BeamLatticeBallMode_Mixed = 1 - BeamLatticeBallMode_All = 2 -) -// ProgressIdentifier represents a Lib3MF enum. -type ProgressIdentifier int +Lib3MFResult CCall_lib3mf_implicitfunction_addarcsinnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcSinNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddArcSinNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} -const ( - ProgressIdentifier_QUERYCANCELED = 0 - ProgressIdentifier_DONE = 1 - ProgressIdentifier_CLEANUP = 2 - ProgressIdentifier_READSTREAM = 3 - ProgressIdentifier_EXTRACTOPCPACKAGE = 4 - ProgressIdentifier_READNONROOTMODELS = 5 - ProgressIdentifier_READROOTMODEL = 6 - ProgressIdentifier_READRESOURCES = 7 - ProgressIdentifier_READMESH = 8 - ProgressIdentifier_READSLICES = 9 - ProgressIdentifier_READBUILD = 10 - ProgressIdentifier_READCUSTOMATTACHMENT = 11 - ProgressIdentifier_READTEXTURETACHMENTS = 12 - ProgressIdentifier_CREATEOPCPACKAGE = 13 - ProgressIdentifier_WRITEMODELSTOSTREAM = 14 - ProgressIdentifier_WRITEROOTMODEL = 15 - ProgressIdentifier_WRITENONROOTMODELS = 16 - ProgressIdentifier_WRITEATTACHMENTS = 17 - ProgressIdentifier_WRITECONTENTTYPES = 18 - ProgressIdentifier_WRITENOBJECTS = 19 - ProgressIdentifier_WRITENODES = 20 - ProgressIdentifier_WRITETRIANGLES = 21 - ProgressIdentifier_WRITESLICES = 22 - ProgressIdentifier_WRITEKEYSTORE = 23 -) -// BlendMethod represents a Lib3MF enum. -type BlendMethod int +Lib3MFResult CCall_lib3mf_implicitfunction_addarccosnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcCosNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddArcCosNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} -const ( - BlendMethod_NoBlendMethod = 0 - BlendMethod_Mix = 1 - BlendMethod_Multiply = 2 -) -// EncryptionAlgorithm represents a Lib3MF enum. -type EncryptionAlgorithm int +Lib3MFResult CCall_lib3mf_implicitfunction_addarctan2node(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcTan2Node * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddArcTan2Node (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} -const ( - EncryptionAlgorithm_AES256_GCM = 1 -) -// WrappingAlgorithm represents a Lib3MF enum. -type WrappingAlgorithm int +Lib3MFResult CCall_lib3mf_implicitfunction_addsinhnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinhNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddSinhNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} -const ( - WrappingAlgorithm_RSA_OAEP = 0 -) -// MgfAlgorithm represents a Lib3MF enum. -type MgfAlgorithm int +Lib3MFResult CCall_lib3mf_implicitfunction_addcoshnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CoshNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddCoshNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} -const ( - MgfAlgorithm_MGF1_SHA1 = 160 - MgfAlgorithm_MGF1_SHA224 = 224 - MgfAlgorithm_MGF1_SHA256 = 256 - MgfAlgorithm_MGF1_SHA384 = 384 - MgfAlgorithm_MGF1_SHA512 = 512 -) -// DigestMethod represents a Lib3MF enum. -type DigestMethod int +Lib3MFResult CCall_lib3mf_implicitfunction_addtanhnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanhNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddTanhNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} -const ( - DigestMethod_SHA1 = 160 - DigestMethod_SHA256 = 256 -) -// Compression represents a Lib3MF enum. -type Compression int +Lib3MFResult CCall_lib3mf_implicitfunction_addroundnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_RoundNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddRoundNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} -const ( - Compression_NoCompression = 0 - Compression_Deflate = 1 -) -// Triangle represents a Lib3MF struct. -type Triangle struct { - Indices[3] uint32 +Lib3MFResult CCall_lib3mf_implicitfunction_addceilnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CeilNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddCeilNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); } -// TriangleProperties represents a Lib3MF struct. -type TriangleProperties struct { - ResourceID uint32 - PropertyIDs[3] uint32 -} -// Position represents a Lib3MF struct. -type Position struct { - Coordinates[3] float32 +Lib3MFResult CCall_lib3mf_implicitfunction_addfloornode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FloorNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddFloorNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); } -// Position2D represents a Lib3MF struct. -type Position2D struct { - Coordinates[2] float32 -} -// CompositeConstituent represents a Lib3MF struct. -type CompositeConstituent struct { - PropertyID uint32 - MixingRatio float64 +Lib3MFResult CCall_lib3mf_implicitfunction_addsignnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SignNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddSignNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); } -// MultiPropertyLayer represents a Lib3MF struct. -type MultiPropertyLayer struct { - ResourceID uint32 - TheBlendMethod BlendMethod -} -// Tex2Coord represents a Lib3MF struct. -type Tex2Coord struct { - U float64 - V float64 +Lib3MFResult CCall_lib3mf_implicitfunction_addfractnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FractNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddFractNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); } -// Transform represents a Lib3MF struct. -type Transform struct { - Fields[4][3] float32 + +Lib3MFResult CCall_lib3mf_implicitfunction_addabsnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AbsNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddAbsNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); } -// Box represents a Lib3MF struct. -type Box struct { - MinCoordinate[3] float32 - MaxCoordinate[3] float32 -} -// Color represents a Lib3MF struct. -type Color struct { - Red uint8 - Green uint8 - Blue uint8 - Alpha uint8 +Lib3MFResult CCall_lib3mf_implicitfunction_addexpnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ExpNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddExpNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); } -// Beam represents a Lib3MF struct. -type Beam struct { - Indices[2] uint32 - Radii[2] float64 - CapModes[2] BeamLatticeCapMode -} -// Ball represents a Lib3MF struct. -type Ball struct { - Index uint32 - Radius float64 +Lib3MFResult CCall_lib3mf_implicitfunction_addlognode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_LogNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddLogNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); } -// Error constants for Lib3MF. -const LIB3MF_ERROR_NOTIMPLEMENTED = 1; -const LIB3MF_ERROR_INVALIDPARAM = 2; -const LIB3MF_ERROR_INVALIDCAST = 3; -const LIB3MF_ERROR_BUFFERTOOSMALL = 4; -const LIB3MF_ERROR_GENERICEXCEPTION = 5; -const LIB3MF_ERROR_COULDNOTLOADLIBRARY = 6; -const LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT = 7; -const LIB3MF_ERROR_INCOMPATIBLEBINARYVERSION = 8; -const LIB3MF_ERROR_CALCULATIONABORTED = 10; -const LIB3MF_ERROR_SHOULDNOTBECALLED = 11; -const LIB3MF_ERROR_READERCLASSUNKNOWN = 100; -const LIB3MF_ERROR_WRITERCLASSUNKNOWN = 101; -const LIB3MF_ERROR_ITERATORINVALIDINDEX = 102; -const LIB3MF_ERROR_INVALIDMODELRESOURCE = 103; -const LIB3MF_ERROR_RESOURCENOTFOUND = 104; -const LIB3MF_ERROR_INVALIDMODEL = 105; -const LIB3MF_ERROR_INVALIDOBJECT = 106; -const LIB3MF_ERROR_INVALIDMESHOBJECT = 107; -const LIB3MF_ERROR_INVALIDCOMPONENTSOBJECT = 108; -const LIB3MF_ERROR_INVALIDCOMPONENT = 109; -const LIB3MF_ERROR_INVALIDBUILDITEM = 110; -const LIB3MF_ERROR_INVALIDBASEMATERIALGROUP = 111; -const LIB3MF_ERROR_INVALIDSLICESTACKRESOURCE = 112; -const LIB3MF_ERROR_INVALIDTEXTURERESOURCE = 113; -const LIB3MF_ERROR_INVALIDCOLORGROUP = 114; -const LIB3MF_ERROR_INVALIDTEXTURE2DGROUP = 115; -const LIB3MF_ERROR_INVALIDCOMPOSITEMATERIALS = 116; -const LIB3MF_ERROR_INVALIDMULTIPROPERTYGROUP = 117; -const LIB3MF_ERROR_INVALIDRESOURCEINDEX = 120; -const LIB3MF_ERROR_ATTACHMENTNOTFOUND = 121; -const LIB3MF_ERROR_FORBIDDENCYCLICREFERENCE = 130; -const LIB3MF_ERROR_INVALIDATTACHMENTSTREAM = 131; -const LIB3MF_ERROR_INVALIDPROPERTYCOUNT = 132; -const LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER = 140; -const LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT = 141; -const LIB3MF_ERROR_INVALIDRESOURCE = 142; -const LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE = 2000; -const LIB3MF_ERROR_INVALIDKEYSTORE = 3000; -const LIB3MF_ERROR_INVALIDKEYSTORECONSUMER = 3001; -const LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND = 3002; -const LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND = 3003; -const LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED = 3004; -const LIB3MF_ERROR_INVALIDKEYSIZE = 3005; -// WrappedError is an error that wraps a Lib3MF error. -type WrappedError struct { - Code uint32 - Message string +Lib3MFResult CCall_lib3mf_implicitfunction_addlog2node(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log2Node * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddLog2Node (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); } -func (e *WrappedError) Error() string { - return fmt.Sprintf("lib3mf: %s (%d)", e.Message, e.Code) -} -func errorMessage(errorcode uint32) string { - switch (errorcode) { - case LIB3MF_ERROR_NOTIMPLEMENTED: - return "functionality not implemented"; - case LIB3MF_ERROR_INVALIDPARAM: - return "an invalid parameter was passed"; - case LIB3MF_ERROR_INVALIDCAST: - return "a type cast failed"; - case LIB3MF_ERROR_BUFFERTOOSMALL: - return "a provided buffer is too small"; - case LIB3MF_ERROR_GENERICEXCEPTION: - return "a generic exception occurred"; - case LIB3MF_ERROR_COULDNOTLOADLIBRARY: - return "the library could not be loaded"; - case LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT: - return "a required exported symbol could not be found in the library"; - case LIB3MF_ERROR_INCOMPATIBLEBINARYVERSION: - return "the version of the binary interface does not match the bindings interface"; - case LIB3MF_ERROR_CALCULATIONABORTED: - return "a calculation has been aborted"; - case LIB3MF_ERROR_SHOULDNOTBECALLED: - return "functionality should not be called"; - case LIB3MF_ERROR_READERCLASSUNKNOWN: - return "the queried reader class is unknown"; - case LIB3MF_ERROR_WRITERCLASSUNKNOWN: - return "the queried writer class is unknown"; - case LIB3MF_ERROR_ITERATORINVALIDINDEX: - return "the current index of an iterator is invalid"; - case LIB3MF_ERROR_INVALIDMODELRESOURCE: - return "no Model Resource has been given"; - case LIB3MF_ERROR_RESOURCENOTFOUND: - return "Resource not found"; - case LIB3MF_ERROR_INVALIDMODEL: - return "A model is invalid"; - case LIB3MF_ERROR_INVALIDOBJECT: - return "An object is invalid"; - case LIB3MF_ERROR_INVALIDMESHOBJECT: - return "A mesh object is invalid"; - case LIB3MF_ERROR_INVALIDCOMPONENTSOBJECT: - return "A components object is invalid"; - case LIB3MF_ERROR_INVALIDCOMPONENT: - return "A component is invalid"; - case LIB3MF_ERROR_INVALIDBUILDITEM: - return "A build item is invalid"; - case LIB3MF_ERROR_INVALIDBASEMATERIALGROUP: - return "A basematerialgroup is invalid"; - case LIB3MF_ERROR_INVALIDSLICESTACKRESOURCE: - return "A slicestack resource is invalid"; - case LIB3MF_ERROR_INVALIDTEXTURERESOURCE: - return "A texture resource is invalid"; - case LIB3MF_ERROR_INVALIDCOLORGROUP: - return "A color group resource is invalid"; - case LIB3MF_ERROR_INVALIDTEXTURE2DGROUP: - return "A texture2d group resource is invalid"; - case LIB3MF_ERROR_INVALIDCOMPOSITEMATERIALS: - return "A composite materials resource is invalid"; - case LIB3MF_ERROR_INVALIDMULTIPROPERTYGROUP: - return "A MultiPropertyGroup resource is invalid"; - case LIB3MF_ERROR_INVALIDRESOURCEINDEX: - return "A resource index is invalid"; - case LIB3MF_ERROR_ATTACHMENTNOTFOUND: - return "Attachment not found"; - case LIB3MF_ERROR_FORBIDDENCYCLICREFERENCE: - return "A component references one of its ancestors"; - case LIB3MF_ERROR_INVALIDATTACHMENTSTREAM: - return "An attachment stream is invalid"; - case LIB3MF_ERROR_INVALIDPROPERTYCOUNT: - return "Invalid property count."; - case LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: - return "A progress identifier is unknown"; - case LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: - return "An element buffer exceeds its spec limit"; - case LIB3MF_ERROR_INVALIDRESOURCE: - return "A resource is invalid"; - case LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: - return "This object type is not valid for beamlattices"; - case LIB3MF_ERROR_INVALIDKEYSTORE: - return "The keystore object is invalid"; - case LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: - return "The consumer keystore object is invalid"; - case LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND: - return "A consumer has not been found"; - case LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: - return "A resource data has not been found"; - case LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: - return "A Key or Conentent encryption callback has not been registered"; - case LIB3MF_ERROR_INVALIDKEYSIZE: - return "The key siue is invalid"; - default: - return "unknown"; - } +Lib3MFResult CCall_lib3mf_implicitfunction_addlog10node(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log10Node * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddLog10Node (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); } -func makeError(errorcode uint32) error { - return &WrappedError{errorcode, errorMessage(uint32(errorcode))} -} -// ProgressCallbackFunc a callback function. -type ProgressCallbackFunc = func(abort *bool, progressValue float64, progressIdentifier ProgressIdentifier, userData uintptr) +Lib3MFResult CCall_lib3mf_implicitfunction_addlengthnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_LengthNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddLengthNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} -var progressCallbackFunc ProgressCallbackFunc -//export progressCallback -func progressCallback(abort *C.bool, progressValue C.double, progressIdentifier C.eLib3MFProgressIdentifier, userData C.Lib3MF_pvoid) { - if progressCallbackFunc == nil { - return - } - progressCallbackFunc((*bool)(abort), float64(progressValue), ProgressIdentifier(progressIdentifier), uintptr(userData)) +Lib3MFResult CCall_lib3mf_implicitfunction_addtransposenode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TransposeNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddTransposeNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); } -// WriteCallbackFunc callback to call for writing a data chunk. -type WriteCallbackFunc = func(byteData uint64, numBytes uint64, userData uintptr) - -var writeCallbackFunc WriteCallbackFunc -//export writeCallback -func writeCallback(byteData C.uint64_t, numBytes C.uint64_t, userData C.Lib3MF_pvoid) { - if writeCallbackFunc == nil { - return - } - writeCallbackFunc(uint64(byteData), uint64(numBytes), uintptr(userData)) +Lib3MFResult CCall_lib3mf_implicitfunction_inversenode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_InverseNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_InverseNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); } -// ReadCallbackFunc callback to call for reading a data chunk. -type ReadCallbackFunc = func(byteData uint64, numBytes uint64, userData uintptr) -var readCallbackFunc ReadCallbackFunc +Lib3MFResult CCall_lib3mf_implicitfunction_addsqrtnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SqrtNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddSqrtNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} -//export readCallback -func readCallback(byteData C.uint64_t, numBytes C.uint64_t, userData C.Lib3MF_pvoid) { - if readCallbackFunc == nil { - return - } - readCallbackFunc(uint64(byteData), uint64(numBytes), uintptr(userData)) + +Lib3MFResult CCall_lib3mf_implicitfunction_addresourceidnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ResourceIdNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddResourceIdNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); } -// SeekCallbackFunc callback to call for seeking in the stream. -type SeekCallbackFunc = func(position uint64, userData uintptr) -var seekCallbackFunc SeekCallbackFunc +Lib3MFResult CCall_lib3mf_implicitfunction_addadditionnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AdditionNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddAdditionNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} -//export seekCallback -func seekCallback(position C.uint64_t, userData C.Lib3MF_pvoid) { - if seekCallbackFunc == nil { - return - } - seekCallbackFunc(uint64(position), uintptr(userData)) + +Lib3MFResult CCall_lib3mf_implicitfunction_addsubtractionnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SubtractionNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddSubtractionNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); } -// RandomNumberCallbackFunc callback to generate random numbers. -type RandomNumberCallbackFunc = func(byteData uint64, numBytes uint64, userData uintptr, bytesWritten *uint64) -var randomNumberCallbackFunc RandomNumberCallbackFunc +Lib3MFResult CCall_lib3mf_implicitfunction_addmultiplicationnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MultiplicationNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddMultiplicationNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_adddivisionnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_DivisionNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddDivisionNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_adddotnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DotNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddDotNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addcrossnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_CrossNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddCrossNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addmatvecmultiplicationnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatVecMultiplicationNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addminnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MinNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddMinNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addmaxnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MaxNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddMaxNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addfmodnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FmodNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddFmodNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addpownode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_PowNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddPowNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addselectnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SelectNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddSelectNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addclampnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ClampNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddClampNode (pImplicitFunction, pIdentifier, eConfiguration, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addcomposevectornode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeVectorNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddComposeVectorNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addvectorfromscalarnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_VectorFromScalarNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddVectorFromScalarNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_adddecomposevectornode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DecomposeVectorNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddDecomposeVectorNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addcomposematrixnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeMatrixNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddComposeMatrixNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addmatrixfromrowsnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromRowsNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addmatrixfromcolumnsnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromColumnsNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addconstantnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstantNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddConstantNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addconstvecnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstVecNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddConstVecNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addconstmatnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstMatNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddConstMatNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addmeshnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MeshNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddMeshNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addunsignedmeshnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_UnsignedMeshNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddUnsignedMeshNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addfunctioncallnode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_FunctionCallNode * pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddFunctionCallNode (pImplicitFunction, pIdentifier, pDisplayName, pTag, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_getnodes(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_NodeIterator * pIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_GetNodes (pImplicitFunction, pIterator); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_removenode(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitNode pNode) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_RemoveNode (pImplicitFunction, pNode); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addlink(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitPort pSource, Lib3MF_ImplicitPort pTarget) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddLink (pImplicitFunction, pSource, pTarget); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_addlinkbynames(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction, const char * pSource, const char * pTarget) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_AddLinkByNames (pImplicitFunction, pSource, pTarget); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_clear(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_Clear (pImplicitFunction); +} + + +Lib3MFResult CCall_lib3mf_implicitfunction_sortnodestopologically(Lib3MFHandle libraryHandle, Lib3MF_ImplicitFunction pImplicitFunction) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ImplicitFunction_SortNodesTopologically (pImplicitFunction); +} + + +Lib3MFResult CCall_lib3mf_functionfromimage3d_getimage3d(Lib3MFHandle libraryHandle, Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D * pImage3D) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_FunctionFromImage3D_GetImage3D (pFunctionFromImage3D, pImage3D); +} + + +Lib3MFResult CCall_lib3mf_functionfromimage3d_setimage3d(Lib3MFHandle libraryHandle, Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D pImage3D) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_FunctionFromImage3D_SetImage3D (pFunctionFromImage3D, pImage3D); +} + + +Lib3MFResult CCall_lib3mf_functionfromimage3d_setfilter(Lib3MFHandle libraryHandle, Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureFilter eFilter) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_FunctionFromImage3D_SetFilter (pFunctionFromImage3D, eFilter); +} + + +Lib3MFResult CCall_lib3mf_functionfromimage3d_getfilter(Lib3MFHandle libraryHandle, Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureFilter * pFilter) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_FunctionFromImage3D_GetFilter (pFunctionFromImage3D, pFilter); +} + + +Lib3MFResult CCall_lib3mf_functionfromimage3d_settilestyles(Lib3MFHandle libraryHandle, Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV, eLib3MFTextureTileStyle eTileStyleW) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_FunctionFromImage3D_SetTileStyles (pFunctionFromImage3D, eTileStyleU, eTileStyleV, eTileStyleW); +} + + +Lib3MFResult CCall_lib3mf_functionfromimage3d_gettilestyles(Lib3MFHandle libraryHandle, Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV, eLib3MFTextureTileStyle * pTileStyleW) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_FunctionFromImage3D_GetTileStyles (pFunctionFromImage3D, pTileStyleU, pTileStyleV, pTileStyleW); +} + + +Lib3MFResult CCall_lib3mf_functionfromimage3d_getoffset(Lib3MFHandle libraryHandle, Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pOffset) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_FunctionFromImage3D_GetOffset (pFunctionFromImage3D, pOffset); +} + + +Lib3MFResult CCall_lib3mf_functionfromimage3d_setoffset(Lib3MFHandle libraryHandle, Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dOffset) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_FunctionFromImage3D_SetOffset (pFunctionFromImage3D, dOffset); +} + + +Lib3MFResult CCall_lib3mf_functionfromimage3d_getscale(Lib3MFHandle libraryHandle, Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pScale) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_FunctionFromImage3D_GetScale (pFunctionFromImage3D, pScale); +} + + +Lib3MFResult CCall_lib3mf_functionfromimage3d_setscale(Lib3MFHandle libraryHandle, Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dScale) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_FunctionFromImage3D_SetScale (pFunctionFromImage3D, dScale); +} + + +Lib3MFResult CCall_lib3mf_builditem_getobjectresource(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, Lib3MF_Object * pObjectResource) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItem_GetObjectResource (pBuildItem, pObjectResource); +} + + +Lib3MFResult CCall_lib3mf_builditem_getuuid(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItem_GetUUID (pBuildItem, pHasUUID, nUUIDBufferSize, pUUIDNeededChars, pUUIDBuffer); +} + + +Lib3MFResult CCall_lib3mf_builditem_setuuid(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, const char * pUUID) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItem_SetUUID (pBuildItem, pUUID); +} + + +Lib3MFResult CCall_lib3mf_builditem_getobjectresourceid(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, Lib3MF_uint32 * pUniqueResourceID) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItem_GetObjectResourceID (pBuildItem, pUniqueResourceID); +} + + +Lib3MFResult CCall_lib3mf_builditem_hasobjecttransform(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, bool * pHasTransform) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItem_HasObjectTransform (pBuildItem, pHasTransform); +} + + +Lib3MFResult CCall_lib3mf_builditem_getobjecttransform(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, sLib3MFTransform * pTransform) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItem_GetObjectTransform (pBuildItem, pTransform); +} + + +Lib3MFResult CCall_lib3mf_builditem_setobjecttransform(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, const sLib3MFTransform * pTransform) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItem_SetObjectTransform (pBuildItem, pTransform); +} + + +Lib3MFResult CCall_lib3mf_builditem_getpartnumber(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, const Lib3MF_uint32 nPartNumberBufferSize, Lib3MF_uint32* pPartNumberNeededChars, char * pPartNumberBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItem_GetPartNumber (pBuildItem, nPartNumberBufferSize, pPartNumberNeededChars, pPartNumberBuffer); +} + + +Lib3MFResult CCall_lib3mf_builditem_setpartnumber(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, const char * pSetPartnumber) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItem_SetPartNumber (pBuildItem, pSetPartnumber); +} + + +Lib3MFResult CCall_lib3mf_builditem_getmetadatagroup(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, Lib3MF_MetaDataGroup * pMetaDataGroup) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItem_GetMetaDataGroup (pBuildItem, pMetaDataGroup); +} + + +Lib3MFResult CCall_lib3mf_builditem_getoutbox(Lib3MFHandle libraryHandle, Lib3MF_BuildItem pBuildItem, sLib3MFBox * pOutbox) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItem_GetOutbox (pBuildItem, pOutbox); +} + + +Lib3MFResult CCall_lib3mf_builditemiterator_movenext(Lib3MFHandle libraryHandle, Lib3MF_BuildItemIterator pBuildItemIterator, bool * pHasNext) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItemIterator_MoveNext (pBuildItemIterator, pHasNext); +} + + +Lib3MFResult CCall_lib3mf_builditemiterator_moveprevious(Lib3MFHandle libraryHandle, Lib3MF_BuildItemIterator pBuildItemIterator, bool * pHasPrevious) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItemIterator_MovePrevious (pBuildItemIterator, pHasPrevious); +} + + +Lib3MFResult CCall_lib3mf_builditemiterator_getcurrent(Lib3MFHandle libraryHandle, Lib3MF_BuildItemIterator pBuildItemIterator, Lib3MF_BuildItem * pBuildItem) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItemIterator_GetCurrent (pBuildItemIterator, pBuildItem); +} + + +Lib3MFResult CCall_lib3mf_builditemiterator_clone(Lib3MFHandle libraryHandle, Lib3MF_BuildItemIterator pBuildItemIterator, Lib3MF_BuildItemIterator * pOutBuildItemIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItemIterator_Clone (pBuildItemIterator, pOutBuildItemIterator); +} + + +Lib3MFResult CCall_lib3mf_builditemiterator_count(Lib3MFHandle libraryHandle, Lib3MF_BuildItemIterator pBuildItemIterator, Lib3MF_uint64 * pCount) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_BuildItemIterator_Count (pBuildItemIterator, pCount); +} + + +Lib3MFResult CCall_lib3mf_slice_setvertices(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 nVerticesBufferSize, const sLib3MFPosition2D * pVerticesBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Slice_SetVertices (pSlice, nVerticesBufferSize, pVerticesBuffer); +} + + +Lib3MFResult CCall_lib3mf_slice_getvertices(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, const Lib3MF_uint64 nVerticesBufferSize, Lib3MF_uint64* pVerticesNeededCount, sLib3MFPosition2D * pVerticesBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Slice_GetVertices (pSlice, nVerticesBufferSize, pVerticesNeededCount, pVerticesBuffer); +} + + +Lib3MFResult CCall_lib3mf_slice_getvertexcount(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 * pCount) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Slice_GetVertexCount (pSlice, pCount); +} + + +Lib3MFResult CCall_lib3mf_slice_addpolygon(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 nIndicesBufferSize, const Lib3MF_uint32 * pIndicesBuffer, Lib3MF_uint64 * pIndex) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Slice_AddPolygon (pSlice, nIndicesBufferSize, pIndicesBuffer, pIndex); +} + + +Lib3MFResult CCall_lib3mf_slice_getpolygoncount(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 * pCount) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Slice_GetPolygonCount (pSlice, pCount); +} + + +Lib3MFResult CCall_lib3mf_slice_setpolygonindices(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 nIndex, Lib3MF_uint64 nIndicesBufferSize, const Lib3MF_uint32 * pIndicesBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Slice_SetPolygonIndices (pSlice, nIndex, nIndicesBufferSize, pIndicesBuffer); +} + + +Lib3MFResult CCall_lib3mf_slice_getpolygonindices(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 nIndex, const Lib3MF_uint64 nIndicesBufferSize, Lib3MF_uint64* pIndicesNeededCount, Lib3MF_uint32 * pIndicesBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Slice_GetPolygonIndices (pSlice, nIndex, nIndicesBufferSize, pIndicesNeededCount, pIndicesBuffer); +} + + +Lib3MFResult CCall_lib3mf_slice_getpolygonindexcount(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_uint64 nIndex, Lib3MF_uint64 * pCount) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Slice_GetPolygonIndexCount (pSlice, nIndex, pCount); +} + + +Lib3MFResult CCall_lib3mf_slice_getztop(Lib3MFHandle libraryHandle, Lib3MF_Slice pSlice, Lib3MF_double * pZTop) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Slice_GetZTop (pSlice, pZTop); +} + + +Lib3MFResult CCall_lib3mf_slicestack_getbottomz(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_double * pZBottom) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_SliceStack_GetBottomZ (pSliceStack, pZBottom); +} + + +Lib3MFResult CCall_lib3mf_slicestack_getslicecount(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_uint64 * pCount) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_SliceStack_GetSliceCount (pSliceStack, pCount); +} + + +Lib3MFResult CCall_lib3mf_slicestack_getslice(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_uint64 nSliceIndex, Lib3MF_Slice * pTheSlice) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_SliceStack_GetSlice (pSliceStack, nSliceIndex, pTheSlice); +} + + +Lib3MFResult CCall_lib3mf_slicestack_addslice(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_double dZTop, Lib3MF_Slice * pTheSlice) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_SliceStack_AddSlice (pSliceStack, dZTop, pTheSlice); +} + + +Lib3MFResult CCall_lib3mf_slicestack_getslicerefcount(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_uint64 * pCount) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_SliceStack_GetSliceRefCount (pSliceStack, pCount); +} + + +Lib3MFResult CCall_lib3mf_slicestack_addslicestackreference(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_SliceStack pTheSliceStack) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_SliceStack_AddSliceStackReference (pSliceStack, pTheSliceStack); +} + + +Lib3MFResult CCall_lib3mf_slicestack_getslicestackreference(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, Lib3MF_uint64 nSliceRefIndex, Lib3MF_SliceStack * pTheSliceStack) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_SliceStack_GetSliceStackReference (pSliceStack, nSliceRefIndex, pTheSliceStack); +} + + +Lib3MFResult CCall_lib3mf_slicestack_collapseslicereferences(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_SliceStack_CollapseSliceReferences (pSliceStack); +} + + +Lib3MFResult CCall_lib3mf_slicestack_setownpath(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, const char * pPath) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_SliceStack_SetOwnPath (pSliceStack, pPath); +} + + +Lib3MFResult CCall_lib3mf_slicestack_getownpath(Lib3MFHandle libraryHandle, Lib3MF_SliceStack pSliceStack, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_SliceStack_GetOwnPath (pSliceStack, nPathBufferSize, pPathNeededChars, pPathBuffer); +} + + +Lib3MFResult CCall_lib3mf_consumer_getconsumerid(Lib3MFHandle libraryHandle, Lib3MF_Consumer pConsumer, const Lib3MF_uint32 nConsumerIDBufferSize, Lib3MF_uint32* pConsumerIDNeededChars, char * pConsumerIDBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Consumer_GetConsumerID (pConsumer, nConsumerIDBufferSize, pConsumerIDNeededChars, pConsumerIDBuffer); +} + + +Lib3MFResult CCall_lib3mf_consumer_getkeyid(Lib3MFHandle libraryHandle, Lib3MF_Consumer pConsumer, const Lib3MF_uint32 nKeyIDBufferSize, Lib3MF_uint32* pKeyIDNeededChars, char * pKeyIDBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Consumer_GetKeyID (pConsumer, nKeyIDBufferSize, pKeyIDNeededChars, pKeyIDBuffer); +} + + +Lib3MFResult CCall_lib3mf_consumer_getkeyvalue(Lib3MFHandle libraryHandle, Lib3MF_Consumer pConsumer, const Lib3MF_uint32 nKeyValueBufferSize, Lib3MF_uint32* pKeyValueNeededChars, char * pKeyValueBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Consumer_GetKeyValue (pConsumer, nKeyValueBufferSize, pKeyValueNeededChars, pKeyValueBuffer); +} + + +Lib3MFResult CCall_lib3mf_accessright_getconsumer(Lib3MFHandle libraryHandle, Lib3MF_AccessRight pAccessRight, Lib3MF_Consumer * pConsumer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_AccessRight_GetConsumer (pAccessRight, pConsumer); +} + + +Lib3MFResult CCall_lib3mf_accessright_getwrappingalgorithm(Lib3MFHandle libraryHandle, Lib3MF_AccessRight pAccessRight, eLib3MFWrappingAlgorithm * pAlgorithm) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_AccessRight_GetWrappingAlgorithm (pAccessRight, pAlgorithm); +} + + +Lib3MFResult CCall_lib3mf_accessright_getmgfalgorithm(Lib3MFHandle libraryHandle, Lib3MF_AccessRight pAccessRight, eLib3MFMgfAlgorithm * pAlgorithm) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_AccessRight_GetMgfAlgorithm (pAccessRight, pAlgorithm); +} + + +Lib3MFResult CCall_lib3mf_accessright_getdigestmethod(Lib3MFHandle libraryHandle, Lib3MF_AccessRight pAccessRight, eLib3MFDigestMethod * pAlgorithm) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_AccessRight_GetDigestMethod (pAccessRight, pAlgorithm); +} + + +Lib3MFResult CCall_lib3mf_contentencryptionparams_getencryptionalgorithm(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, eLib3MFEncryptionAlgorithm * pAlgorithm) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ContentEncryptionParams_GetEncryptionAlgorithm (pContentEncryptionParams, pAlgorithm); +} + + +Lib3MFResult CCall_lib3mf_contentencryptionparams_getkey(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, const Lib3MF_uint64 nByteDataBufferSize, Lib3MF_uint64* pByteDataNeededCount, Lib3MF_uint8 * pByteDataBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ContentEncryptionParams_GetKey (pContentEncryptionParams, nByteDataBufferSize, pByteDataNeededCount, pByteDataBuffer); +} + + +Lib3MFResult CCall_lib3mf_contentencryptionparams_getinitializationvector(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, const Lib3MF_uint64 nByteDataBufferSize, Lib3MF_uint64* pByteDataNeededCount, Lib3MF_uint8 * pByteDataBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ContentEncryptionParams_GetInitializationVector (pContentEncryptionParams, nByteDataBufferSize, pByteDataNeededCount, pByteDataBuffer); +} + + +Lib3MFResult CCall_lib3mf_contentencryptionparams_getauthenticationtag(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, const Lib3MF_uint64 nByteDataBufferSize, Lib3MF_uint64* pByteDataNeededCount, Lib3MF_uint8 * pByteDataBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ContentEncryptionParams_GetAuthenticationTag (pContentEncryptionParams, nByteDataBufferSize, pByteDataNeededCount, pByteDataBuffer); +} + + +Lib3MFResult CCall_lib3mf_contentencryptionparams_setauthenticationtag(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, Lib3MF_uint64 nByteDataBufferSize, const Lib3MF_uint8 * pByteDataBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ContentEncryptionParams_SetAuthenticationTag (pContentEncryptionParams, nByteDataBufferSize, pByteDataBuffer); +} + + +Lib3MFResult CCall_lib3mf_contentencryptionparams_getadditionalauthenticationdata(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, const Lib3MF_uint64 nByteDataBufferSize, Lib3MF_uint64* pByteDataNeededCount, Lib3MF_uint8 * pByteDataBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ContentEncryptionParams_GetAdditionalAuthenticationData (pContentEncryptionParams, nByteDataBufferSize, pByteDataNeededCount, pByteDataBuffer); +} + + +Lib3MFResult CCall_lib3mf_contentencryptionparams_getdescriptor(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, Lib3MF_uint64 * pDescriptor) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ContentEncryptionParams_GetDescriptor (pContentEncryptionParams, pDescriptor); +} + + +Lib3MFResult CCall_lib3mf_contentencryptionparams_getkeyuuid(Lib3MFHandle libraryHandle, Lib3MF_ContentEncryptionParams pContentEncryptionParams, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ContentEncryptionParams_GetKeyUUID (pContentEncryptionParams, nUUIDBufferSize, pUUIDNeededChars, pUUIDBuffer); +} + + +Lib3MFResult CCall_lib3mf_resourcedata_getpath(Lib3MFHandle libraryHandle, Lib3MF_ResourceData pResourceData, Lib3MF_PackagePart * pPath) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ResourceData_GetPath (pResourceData, pPath); +} + + +Lib3MFResult CCall_lib3mf_resourcedata_getencryptionalgorithm(Lib3MFHandle libraryHandle, Lib3MF_ResourceData pResourceData, eLib3MFEncryptionAlgorithm * pEncryptionAlgorithm) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ResourceData_GetEncryptionAlgorithm (pResourceData, pEncryptionAlgorithm); +} + + +Lib3MFResult CCall_lib3mf_resourcedata_getcompression(Lib3MFHandle libraryHandle, Lib3MF_ResourceData pResourceData, eLib3MFCompression * pCompression) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ResourceData_GetCompression (pResourceData, pCompression); +} + + +Lib3MFResult CCall_lib3mf_resourcedata_getadditionalauthenticationdata(Lib3MFHandle libraryHandle, Lib3MF_ResourceData pResourceData, const Lib3MF_uint64 nByteDataBufferSize, Lib3MF_uint64* pByteDataNeededCount, Lib3MF_uint8 * pByteDataBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ResourceData_GetAdditionalAuthenticationData (pResourceData, nByteDataBufferSize, pByteDataNeededCount, pByteDataBuffer); +} + + +Lib3MFResult CCall_lib3mf_resourcedatagroup_getkeyuuid(Lib3MFHandle libraryHandle, Lib3MF_ResourceDataGroup pResourceDataGroup, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ResourceDataGroup_GetKeyUUID (pResourceDataGroup, nUUIDBufferSize, pUUIDNeededChars, pUUIDBuffer); +} + + +Lib3MFResult CCall_lib3mf_resourcedatagroup_addaccessright(Lib3MFHandle libraryHandle, Lib3MF_ResourceDataGroup pResourceDataGroup, Lib3MF_Consumer pConsumer, eLib3MFWrappingAlgorithm eWrappingAlgorithm, eLib3MFMgfAlgorithm eMgfAlgorithm, eLib3MFDigestMethod eDigestMethod, Lib3MF_AccessRight * pTheAccessRight) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ResourceDataGroup_AddAccessRight (pResourceDataGroup, pConsumer, eWrappingAlgorithm, eMgfAlgorithm, eDigestMethod, pTheAccessRight); +} + + +Lib3MFResult CCall_lib3mf_resourcedatagroup_findaccessrightbyconsumer(Lib3MFHandle libraryHandle, Lib3MF_ResourceDataGroup pResourceDataGroup, Lib3MF_Consumer pConsumer, Lib3MF_AccessRight * pTheAccessRight) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ResourceDataGroup_FindAccessRightByConsumer (pResourceDataGroup, pConsumer, pTheAccessRight); +} + + +Lib3MFResult CCall_lib3mf_resourcedatagroup_removeaccessright(Lib3MFHandle libraryHandle, Lib3MF_ResourceDataGroup pResourceDataGroup, Lib3MF_Consumer pConsumer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ResourceDataGroup_RemoveAccessRight (pResourceDataGroup, pConsumer); +} + + +Lib3MFResult CCall_lib3mf_keystore_addconsumer(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, const char * pConsumerID, const char * pKeyID, const char * pKeyValue, Lib3MF_Consumer * pConsumer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_AddConsumer (pKeyStore, pConsumerID, pKeyID, pKeyValue, pConsumer); +} + + +Lib3MFResult CCall_lib3mf_keystore_getconsumercount(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_uint64 * pCount) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_GetConsumerCount (pKeyStore, pCount); +} + + +Lib3MFResult CCall_lib3mf_keystore_getconsumer(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_uint64 nConsumerIndex, Lib3MF_Consumer * pConsumer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_GetConsumer (pKeyStore, nConsumerIndex, pConsumer); +} + + +Lib3MFResult CCall_lib3mf_keystore_removeconsumer(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_Consumer pConsumer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_RemoveConsumer (pKeyStore, pConsumer); +} + + +Lib3MFResult CCall_lib3mf_keystore_findconsumer(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, const char * pConsumerID, Lib3MF_Consumer * pConsumer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_FindConsumer (pKeyStore, pConsumerID, pConsumer); +} + + +Lib3MFResult CCall_lib3mf_keystore_getresourcedatagroupcount(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_uint64 * pCount) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_GetResourceDataGroupCount (pKeyStore, pCount); +} + + +Lib3MFResult CCall_lib3mf_keystore_addresourcedatagroup(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_ResourceDataGroup * pResourceDataGroup) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_AddResourceDataGroup (pKeyStore, pResourceDataGroup); +} + + +Lib3MFResult CCall_lib3mf_keystore_getresourcedatagroup(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_uint64 nResourceDataIndex, Lib3MF_ResourceDataGroup * pResourceDataGroup) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_GetResourceDataGroup (pKeyStore, nResourceDataIndex, pResourceDataGroup); +} + + +Lib3MFResult CCall_lib3mf_keystore_removeresourcedatagroup(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_ResourceDataGroup pResourceDataGroup) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_RemoveResourceDataGroup (pKeyStore, pResourceDataGroup); +} + + +Lib3MFResult CCall_lib3mf_keystore_findresourcedatagroup(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_PackagePart pPartPath, Lib3MF_ResourceDataGroup * pResourceDataGroup) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_FindResourceDataGroup (pKeyStore, pPartPath, pResourceDataGroup); +} + + +Lib3MFResult CCall_lib3mf_keystore_addresourcedata(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_ResourceDataGroup pResourceDataGroup, Lib3MF_PackagePart pPartPath, eLib3MFEncryptionAlgorithm eAlgorithm, eLib3MFCompression eCompression, Lib3MF_uint64 nAdditionalAuthenticationDataBufferSize, const Lib3MF_uint8 * pAdditionalAuthenticationDataBuffer, Lib3MF_ResourceData * pResourceData) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_AddResourceData (pKeyStore, pResourceDataGroup, pPartPath, eAlgorithm, eCompression, nAdditionalAuthenticationDataBufferSize, pAdditionalAuthenticationDataBuffer, pResourceData); +} + + +Lib3MFResult CCall_lib3mf_keystore_removeresourcedata(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_ResourceData pResourceData) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_RemoveResourceData (pKeyStore, pResourceData); +} + + +Lib3MFResult CCall_lib3mf_keystore_findresourcedata(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_PackagePart pResourcePath, Lib3MF_ResourceData * pResourceData) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_FindResourceData (pKeyStore, pResourcePath, pResourceData); +} + + +Lib3MFResult CCall_lib3mf_keystore_getresourcedatacount(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_uint64 * pCount) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_GetResourceDataCount (pKeyStore, pCount); +} + + +Lib3MFResult CCall_lib3mf_keystore_getresourcedata(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, Lib3MF_uint64 nResourceDataIndex, Lib3MF_ResourceData * pResourceData) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_GetResourceData (pKeyStore, nResourceDataIndex, pResourceData); +} + + +Lib3MFResult CCall_lib3mf_keystore_getuuid(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_GetUUID (pKeyStore, pHasUUID, nUUIDBufferSize, pUUIDNeededChars, pUUIDBuffer); +} + + +Lib3MFResult CCall_lib3mf_keystore_setuuid(Lib3MFHandle libraryHandle, Lib3MF_KeyStore pKeyStore, const char * pUUID) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_KeyStore_SetUUID (pKeyStore, pUUID); +} + + +Lib3MFResult CCall_lib3mf_model_rootmodelpart(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_PackagePart * pRootModelPart) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_RootModelPart (pModel, pRootModelPart); +} + + +Lib3MFResult CCall_lib3mf_model_findorcreatepackagepart(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pAbsolutePath, Lib3MF_PackagePart * pModelPart) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_FindOrCreatePackagePart (pModel, pAbsolutePath, pModelPart); +} + + +Lib3MFResult CCall_lib3mf_model_setunit(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, eLib3MFModelUnit eUnit) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_SetUnit (pModel, eUnit); +} + + +Lib3MFResult CCall_lib3mf_model_getunit(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, eLib3MFModelUnit * pUnit) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetUnit (pModel, pUnit); +} + + +Lib3MFResult CCall_lib3mf_model_getlanguage(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const Lib3MF_uint32 nLanguageBufferSize, Lib3MF_uint32* pLanguageNeededChars, char * pLanguageBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetLanguage (pModel, nLanguageBufferSize, pLanguageNeededChars, pLanguageBuffer); +} + + +Lib3MFResult CCall_lib3mf_model_setlanguage(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pLanguage) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_SetLanguage (pModel, pLanguage); +} + + +Lib3MFResult CCall_lib3mf_model_querywriter(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pWriterClass, Lib3MF_Writer * pWriterInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_QueryWriter (pModel, pWriterClass, pWriterInstance); +} + + +Lib3MFResult CCall_lib3mf_model_queryreader(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pReaderClass, Lib3MF_Reader * pReaderInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_QueryReader (pModel, pReaderClass, pReaderInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getresourcebyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_Resource * pResource) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetResourceByID (pModel, nUniqueResourceID, pResource); +} + + +Lib3MFResult CCall_lib3mf_model_gettexture2dbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_Texture2D * pTextureInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetTexture2DByID (pModel, nUniqueResourceID, pTextureInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getpropertytypebyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, eLib3MFPropertyType * pThePropertyType) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetPropertyTypeByID (pModel, nUniqueResourceID, pThePropertyType); +} + + +Lib3MFResult CCall_lib3mf_model_getbasematerialgroupbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetBaseMaterialGroupByID (pModel, nUniqueResourceID, pBaseMaterialGroupInstance); +} + + +Lib3MFResult CCall_lib3mf_model_gettexture2dgroupbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_Texture2DGroup * pTexture2DGroupInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetTexture2DGroupByID (pModel, nUniqueResourceID, pTexture2DGroupInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getcompositematerialsbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_CompositeMaterials * pCompositeMaterialsInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetCompositeMaterialsByID (pModel, nUniqueResourceID, pCompositeMaterialsInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getmultipropertygroupbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetMultiPropertyGroupByID (pModel, nUniqueResourceID, pMultiPropertyGroupInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getmeshobjectbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_MeshObject * pMeshObjectInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetMeshObjectByID (pModel, nUniqueResourceID, pMeshObjectInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getcomponentsobjectbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ComponentsObject * pComponentsObjectInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetComponentsObjectByID (pModel, nUniqueResourceID, pComponentsObjectInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getcolorgroupbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ColorGroup * pColorGroupInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetColorGroupByID (pModel, nUniqueResourceID, pColorGroupInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getslicestackbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_SliceStack * pSliceStacInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetSliceStackByID (pModel, nUniqueResourceID, pSliceStacInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getlevelsetbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_LevelSet * pLevelSetObjectInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetLevelSetByID (pModel, nUniqueResourceID, pLevelSetObjectInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getbuilduuid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetBuildUUID (pModel, pHasUUID, nUUIDBufferSize, pUUIDNeededChars, pUUIDBuffer); +} + + +Lib3MFResult CCall_lib3mf_model_setbuilduuid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pUUID) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_SetBuildUUID (pModel, pUUID); +} + + +Lib3MFResult CCall_lib3mf_model_getbuilditems(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_BuildItemIterator * pBuildItemIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetBuildItems (pModel, pBuildItemIterator); +} + + +Lib3MFResult CCall_lib3mf_model_getoutbox(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, sLib3MFBox * pOutbox) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetOutbox (pModel, pOutbox); +} + + +Lib3MFResult CCall_lib3mf_model_getresources(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_ResourceIterator * pResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetResources (pModel, pResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_getobjects(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_ObjectIterator * pResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetObjects (pModel, pResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_getmeshobjects(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_MeshObjectIterator * pResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetMeshObjects (pModel, pResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_getcomponentsobjects(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_ComponentsObjectIterator * pResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetComponentsObjects (pModel, pResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_gettexture2ds(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Texture2DIterator * pResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetTexture2Ds (pModel, pResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_getbasematerialgroups(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_BaseMaterialGroupIterator * pResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetBaseMaterialGroups (pModel, pResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_getcolorgroups(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_ColorGroupIterator * pResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetColorGroups (pModel, pResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_gettexture2dgroups(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Texture2DGroupIterator * pResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetTexture2DGroups (pModel, pResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_getcompositematerials(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_CompositeMaterialsIterator * pResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetCompositeMaterials (pModel, pResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_getmultipropertygroups(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_MultiPropertyGroupIterator * pResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetMultiPropertyGroups (pModel, pResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_getslicestacks(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_SliceStackIterator * pResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetSliceStacks (pModel, pResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_getimage3ds(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Image3DIterator * pResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetImage3Ds (pModel, pResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_mergetomodel(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Model * pMergedModelInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_MergeToModel (pModel, pMergedModelInstance); +} + + +Lib3MFResult CCall_lib3mf_model_mergefrommodel(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Model pModelInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_MergeFromModel (pModel, pModelInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addmeshobject(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_MeshObject * pMeshObjectInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddMeshObject (pModel, pMeshObjectInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addcomponentsobject(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_ComponentsObject * pComponentsObjectInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddComponentsObject (pModel, pComponentsObjectInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addslicestack(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_double dZBottom, Lib3MF_SliceStack * pSliceStackInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddSliceStack (pModel, dZBottom, pSliceStackInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addtexture2dfromattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Attachment pTextureAttachment, Lib3MF_Texture2D * pTexture2DInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddTexture2DFromAttachment (pModel, pTextureAttachment, pTexture2DInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addbasematerialgroup(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddBaseMaterialGroup (pModel, pBaseMaterialGroupInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addcolorgroup(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_ColorGroup * pColorGroupInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddColorGroup (pModel, pColorGroupInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addtexture2dgroup(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Texture2D pTexture2DInstance, Lib3MF_Texture2DGroup * pTexture2DGroupInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddTexture2DGroup (pModel, pTexture2DInstance, pTexture2DGroupInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addcompositematerials(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance, Lib3MF_CompositeMaterials * pCompositeMaterialsInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddCompositeMaterials (pModel, pBaseMaterialGroupInstance, pCompositeMaterialsInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addmultipropertygroup(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddMultiPropertyGroup (pModel, pMultiPropertyGroupInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addimagestack(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nColumnCount, Lib3MF_uint32 nRowCount, Lib3MF_uint32 nSheetCount, Lib3MF_ImageStack * pInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddImageStack (pModel, nColumnCount, nRowCount, nSheetCount, pInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getimagestackbyid(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ImageStack * pImageStackInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetImageStackByID (pModel, nUniqueResourceID, pImageStackInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addbuilditem(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Object pObject, const sLib3MFTransform * pTransform, Lib3MF_BuildItem * pBuildItemInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddBuildItem (pModel, pObject, pTransform, pBuildItemInstance); +} + + +Lib3MFResult CCall_lib3mf_model_removebuilditem(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_BuildItem pBuildItemInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_RemoveBuildItem (pModel, pBuildItemInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getmetadatagroup(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_MetaDataGroup * pTheMetaDataGroup) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetMetaDataGroup (pModel, pTheMetaDataGroup); +} + + +Lib3MFResult CCall_lib3mf_model_addattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pURI, const char * pRelationShipType, Lib3MF_Attachment * pAttachmentInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddAttachment (pModel, pURI, pRelationShipType, pAttachmentInstance); +} + + +Lib3MFResult CCall_lib3mf_model_removeattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Attachment pAttachmentInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_RemoveAttachment (pModel, pAttachmentInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 nIndex, Lib3MF_Attachment * pAttachmentInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetAttachment (pModel, nIndex, pAttachmentInstance); +} + + +Lib3MFResult CCall_lib3mf_model_findattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pURI, Lib3MF_Attachment * pAttachmentInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_FindAttachment (pModel, pURI, pAttachmentInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getattachmentcount(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_uint32 * pAttachmentCount) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetAttachmentCount (pModel, pAttachmentCount); +} + + +Lib3MFResult CCall_lib3mf_model_haspackagethumbnailattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, bool * pHasThumbnail) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_HasPackageThumbnailAttachment (pModel, pHasThumbnail); +} + + +Lib3MFResult CCall_lib3mf_model_createpackagethumbnailattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Attachment * pAttachment) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_CreatePackageThumbnailAttachment (pModel, pAttachment); +} + + +Lib3MFResult CCall_lib3mf_model_getpackagethumbnailattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Attachment * pAttachment) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetPackageThumbnailAttachment (pModel, pAttachment); +} + + +Lib3MFResult CCall_lib3mf_model_removepackagethumbnailattachment(Lib3MFHandle libraryHandle, Lib3MF_Model pModel) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_RemovePackageThumbnailAttachment (pModel); +} + + +Lib3MFResult CCall_lib3mf_model_addcustomcontenttype(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pExtension, const char * pContentType) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddCustomContentType (pModel, pExtension, pContentType); +} + + +Lib3MFResult CCall_lib3mf_model_removecustomcontenttype(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, const char * pExtension) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_RemoveCustomContentType (pModel, pExtension); +} + + +Lib3MFResult CCall_lib3mf_model_setrandomnumbercallback(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MFRandomNumberCallback pTheCallback, Lib3MF_pvoid pUserData) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_SetRandomNumberCallback (pModel, pTheCallback, pUserData); +} + + +Lib3MFResult CCall_lib3mf_model_getkeystore(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_KeyStore * pKeyStore) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetKeyStore (pModel, pKeyStore); +} + + +Lib3MFResult CCall_lib3mf_model_getfunctions(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_FunctionIterator * pTheResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetFunctions (pModel, pTheResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_addimplicitfunction(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_ImplicitFunction * pFunctionInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddImplicitFunction (pModel, pFunctionInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addfunctionfromimage3d(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Image3D pImage3DInstance, Lib3MF_FunctionFromImage3D * pFunctionInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddFunctionFromImage3D (pModel, pImage3DInstance, pFunctionInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addvolumedata(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_VolumeData * pVolumeDataInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddVolumeData (pModel, pVolumeDataInstance); +} + + +Lib3MFResult CCall_lib3mf_model_addlevelset(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_LevelSet * pLevelSetInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_AddLevelSet (pModel, pLevelSetInstance); +} + + +Lib3MFResult CCall_lib3mf_model_getlevelsets(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_LevelSetIterator * pResourceIterator) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_GetLevelSets (pModel, pResourceIterator); +} + + +Lib3MFResult CCall_lib3mf_model_removeresource(Lib3MFHandle libraryHandle, Lib3MF_Model pModel, Lib3MF_Resource pResource) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Model_RemoveResource (pModel, pResource); +} + + +Lib3MFResult CCall_lib3mf_getlibraryversion(Lib3MFHandle libraryHandle, Lib3MF_uint32 * pMajor, Lib3MF_uint32 * pMinor, Lib3MF_uint32 * pMicro) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_GetLibraryVersion (pMajor, pMinor, pMicro); +} + + +Lib3MFResult CCall_lib3mf_getprereleaseinformation(Lib3MFHandle libraryHandle, bool * pHasPrereleaseInfo, const Lib3MF_uint32 nPrereleaseInfoBufferSize, Lib3MF_uint32* pPrereleaseInfoNeededChars, char * pPrereleaseInfoBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_GetPrereleaseInformation (pHasPrereleaseInfo, nPrereleaseInfoBufferSize, pPrereleaseInfoNeededChars, pPrereleaseInfoBuffer); +} + + +Lib3MFResult CCall_lib3mf_getbuildinformation(Lib3MFHandle libraryHandle, bool * pHasBuildInfo, const Lib3MF_uint32 nBuildInformationBufferSize, Lib3MF_uint32* pBuildInformationNeededChars, char * pBuildInformationBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_GetBuildInformation (pHasBuildInfo, nBuildInformationBufferSize, pBuildInformationNeededChars, pBuildInformationBuffer); +} + + +Lib3MFResult CCall_lib3mf_getspecificationversion(Lib3MFHandle libraryHandle, const char * pSpecificationURL, bool * pIsSupported, Lib3MF_uint32 * pMajor, Lib3MF_uint32 * pMinor, Lib3MF_uint32 * pMicro) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_GetSpecificationVersion (pSpecificationURL, pIsSupported, pMajor, pMinor, pMicro); +} + + +Lib3MFResult CCall_lib3mf_createmodel(Lib3MFHandle libraryHandle, Lib3MF_Model * pModel) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_CreateModel (pModel); +} + + +Lib3MFResult CCall_lib3mf_release(Lib3MFHandle libraryHandle, Lib3MF_Base pInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Release (pInstance); +} + + +Lib3MFResult CCall_lib3mf_acquire(Lib3MFHandle libraryHandle, Lib3MF_Base pInstance) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_Acquire (pInstance); +} + + +Lib3MFResult CCall_lib3mf_setjournal(Lib3MFHandle libraryHandle, const char * pJournalPath) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_SetJournal (pJournalPath); +} + + +Lib3MFResult CCall_lib3mf_getlasterror(Lib3MFHandle libraryHandle, Lib3MF_Base pInstance, const Lib3MF_uint32 nLastErrorStringBufferSize, Lib3MF_uint32* pLastErrorStringNeededChars, char * pLastErrorStringBuffer, bool * pHasLastError) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_GetLastError (pInstance, nLastErrorStringBufferSize, pLastErrorStringNeededChars, pLastErrorStringBuffer, pHasLastError); +} + + +Lib3MFResult CCall_lib3mf_getsymbollookupmethod(Lib3MFHandle libraryHandle, Lib3MF_pvoid * pSymbolLookupMethod) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_GetSymbolLookupMethod (pSymbolLookupMethod); +} + + +Lib3MFResult CCall_lib3mf_retrieveprogressmessage(Lib3MFHandle libraryHandle, eLib3MFProgressIdentifier eTheProgressIdentifier, const Lib3MF_uint32 nProgressMessageBufferSize, Lib3MF_uint32* pProgressMessageNeededChars, char * pProgressMessageBuffer) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_RetrieveProgressMessage (eTheProgressIdentifier, nProgressMessageBufferSize, pProgressMessageNeededChars, pProgressMessageBuffer); +} + + +Lib3MFResult CCall_lib3mf_rgbatocolor(Lib3MFHandle libraryHandle, Lib3MF_uint8 nRed, Lib3MF_uint8 nGreen, Lib3MF_uint8 nBlue, Lib3MF_uint8 nAlpha, sLib3MFColor * pTheColor) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_RGBAToColor (nRed, nGreen, nBlue, nAlpha, pTheColor); +} + + +Lib3MFResult CCall_lib3mf_floatrgbatocolor(Lib3MFHandle libraryHandle, Lib3MF_single fRed, Lib3MF_single fGreen, Lib3MF_single fBlue, Lib3MF_single fAlpha, sLib3MFColor * pTheColor) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_FloatRGBAToColor (fRed, fGreen, fBlue, fAlpha, pTheColor); +} + + +Lib3MFResult CCall_lib3mf_colortorgba(Lib3MFHandle libraryHandle, const sLib3MFColor * pTheColor, Lib3MF_uint8 * pRed, Lib3MF_uint8 * pGreen, Lib3MF_uint8 * pBlue, Lib3MF_uint8 * pAlpha) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ColorToRGBA (pTheColor, pRed, pGreen, pBlue, pAlpha); +} + + +Lib3MFResult CCall_lib3mf_colortofloatrgba(Lib3MFHandle libraryHandle, const sLib3MFColor * pTheColor, Lib3MF_single * pRed, Lib3MF_single * pGreen, Lib3MF_single * pBlue, Lib3MF_single * pAlpha) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_ColorToFloatRGBA (pTheColor, pRed, pGreen, pBlue, pAlpha); +} + + +Lib3MFResult CCall_lib3mf_getidentitytransform(Lib3MFHandle libraryHandle, sLib3MFTransform * pTransform) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_GetIdentityTransform (pTransform); +} + + +Lib3MFResult CCall_lib3mf_getuniformscaletransform(Lib3MFHandle libraryHandle, Lib3MF_single fFactor, sLib3MFTransform * pTransform) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_GetUniformScaleTransform (fFactor, pTransform); +} + + +Lib3MFResult CCall_lib3mf_getscaletransform(Lib3MFHandle libraryHandle, Lib3MF_single fFactorX, Lib3MF_single fFactorY, Lib3MF_single fFactorZ, sLib3MFTransform * pTransform) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_GetScaleTransform (fFactorX, fFactorY, fFactorZ, pTransform); +} + + +Lib3MFResult CCall_lib3mf_gettranslationtransform(Lib3MFHandle libraryHandle, Lib3MF_single fVectorX, Lib3MF_single fVectorY, Lib3MF_single fVectorZ, sLib3MFTransform * pTransform) +{ + if (libraryHandle == 0) + return LIB3MF_ERROR_INVALIDCAST; + sLib3MFDynamicWrapperTable * wrapperTable = (sLib3MFDynamicWrapperTable *) libraryHandle; + return wrapperTable->m_GetTranslationTransform (fVectorX, fVectorY, fVectorZ, pTransform); +} + +*/ +import "C" + +import ( + "fmt" + "unsafe" + "runtime" +) + +type ref = C.Lib3MFHandle + + +// PropertyType represents a Lib3MF enum. +type PropertyType int + +const ( + PropertyType_NoPropertyType = 0 + PropertyType_BaseMaterial = 1 + PropertyType_TexCoord = 2 + PropertyType_Colors = 3 + PropertyType_Composite = 4 + PropertyType_Multi = 5 +) + +// SlicesMeshResolution represents a Lib3MF enum. +type SlicesMeshResolution int + +const ( + SlicesMeshResolution_Fullres = 0 + SlicesMeshResolution_Lowres = 1 +) + +// ModelUnit represents a Lib3MF enum. +type ModelUnit int + +const ( + ModelUnit_MicroMeter = 0 + ModelUnit_MilliMeter = 1 + ModelUnit_CentiMeter = 2 + ModelUnit_Inch = 3 + ModelUnit_Foot = 4 + ModelUnit_Meter = 5 +) + +// ObjectType represents a Lib3MF enum. +type ObjectType int + +const ( + ObjectType_Other = 0 + ObjectType_Model = 1 + ObjectType_Support = 2 + ObjectType_SolidSupport = 3 +) + +// TextureType represents a Lib3MF enum. +type TextureType int + +const ( + TextureType_Unknown = 0 + TextureType_PNG = 1 + TextureType_JPEG = 2 +) + +// TextureTileStyle represents a Lib3MF enum. +type TextureTileStyle int + +const ( + TextureTileStyle_Wrap = 0 + TextureTileStyle_Mirror = 1 + TextureTileStyle_Clamp = 2 + TextureTileStyle_NoTileStyle = 3 +) + +// TextureFilter represents a Lib3MF enum. +type TextureFilter int + +const ( + TextureFilter_Auto = 0 + TextureFilter_Linear = 1 + TextureFilter_Nearest = 2 +) + +// BeamLatticeCapMode represents a Lib3MF enum. +type BeamLatticeCapMode int + +const ( + BeamLatticeCapMode_Sphere = 0 + BeamLatticeCapMode_HemiSphere = 1 + BeamLatticeCapMode_Butt = 2 +) + +// BeamLatticeClipMode represents a Lib3MF enum. +type BeamLatticeClipMode int + +const ( + BeamLatticeClipMode_NoClipMode = 0 + BeamLatticeClipMode_Inside = 1 + BeamLatticeClipMode_Outside = 2 +) + +// BeamLatticeBallMode represents a Lib3MF enum. +type BeamLatticeBallMode int + +const ( + BeamLatticeBallMode_BeamLatticeBallModeNone = 0 + BeamLatticeBallMode_Mixed = 1 + BeamLatticeBallMode_All = 2 +) + +// ProgressIdentifier represents a Lib3MF enum. +type ProgressIdentifier int + +const ( + ProgressIdentifier_QUERYCANCELED = 0 + ProgressIdentifier_DONE = 1 + ProgressIdentifier_CLEANUP = 2 + ProgressIdentifier_READSTREAM = 3 + ProgressIdentifier_EXTRACTOPCPACKAGE = 4 + ProgressIdentifier_READNONROOTMODELS = 5 + ProgressIdentifier_READROOTMODEL = 6 + ProgressIdentifier_READRESOURCES = 7 + ProgressIdentifier_READMESH = 8 + ProgressIdentifier_READSLICES = 9 + ProgressIdentifier_READBUILD = 10 + ProgressIdentifier_READCUSTOMATTACHMENT = 11 + ProgressIdentifier_READTEXTURETACHMENTS = 12 + ProgressIdentifier_CREATEOPCPACKAGE = 13 + ProgressIdentifier_WRITEMODELSTOSTREAM = 14 + ProgressIdentifier_WRITEROOTMODEL = 15 + ProgressIdentifier_WRITENONROOTMODELS = 16 + ProgressIdentifier_WRITEATTACHMENTS = 17 + ProgressIdentifier_WRITECONTENTTYPES = 18 + ProgressIdentifier_WRITENOBJECTS = 19 + ProgressIdentifier_WRITENODES = 20 + ProgressIdentifier_WRITETRIANGLES = 21 + ProgressIdentifier_WRITESLICES = 22 + ProgressIdentifier_WRITEKEYSTORE = 23 +) + +// BlendMethod represents a Lib3MF enum. +type BlendMethod int + +const ( + BlendMethod_NoBlendMethod = 0 + BlendMethod_Mix = 1 + BlendMethod_Multiply = 2 +) + +// ChannelName represents a Lib3MF enum. +type ChannelName int + +const ( + ChannelName_Red = 0 + ChannelName_Green = 1 + ChannelName_Blue = 2 + ChannelName_Alpha = 3 +) + +// CompositionMethod represents a Lib3MF enum. +type CompositionMethod int + +const ( + CompositionMethod_WeightedSum = 0 + CompositionMethod_Multiply = 1 + CompositionMethod_Min = 2 + CompositionMethod_Max = 3 + CompositionMethod_Mask = 4 +) + +// CompositionSpace represents a Lib3MF enum. +type CompositionSpace int + +const ( + CompositionSpace_Raw = 0 + CompositionSpace_LinearColor = 1 +) + +// ImplicitNodeType represents a Lib3MF enum. +type ImplicitNodeType int + +const ( + ImplicitNodeType_Addition = 1 + ImplicitNodeType_Subtraction = 2 + ImplicitNodeType_Multiplication = 3 + ImplicitNodeType_Division = 4 + ImplicitNodeType_Constant = 5 + ImplicitNodeType_ConstVec = 6 + ImplicitNodeType_ConstMat = 7 + ImplicitNodeType_ComposeVector = 8 + ImplicitNodeType_DecomposeVector = 9 + ImplicitNodeType_ComposeMatrix = 10 + ImplicitNodeType_MatrixFromColumns = 11 + ImplicitNodeType_MatrixFromRows = 12 + ImplicitNodeType_Dot = 13 + ImplicitNodeType_Cross = 14 + ImplicitNodeType_MatVecMultiplication = 15 + ImplicitNodeType_Transpose = 16 + ImplicitNodeType_Inverse = 17 + ImplicitNodeType_Sinus = 18 + ImplicitNodeType_Cosinus = 19 + ImplicitNodeType_Tan = 20 + ImplicitNodeType_ArcSin = 21 + ImplicitNodeType_ArcCos = 22 + ImplicitNodeType_ArcTan = 23 + ImplicitNodeType_ArcTan2 = 24 + ImplicitNodeType_Min = 25 + ImplicitNodeType_Max = 26 + ImplicitNodeType_Abs = 27 + ImplicitNodeType_Fmod = 28 + ImplicitNodeType_Pow = 29 + ImplicitNodeType_Sqrt = 30 + ImplicitNodeType_Exp = 31 + ImplicitNodeType_Log = 32 + ImplicitNodeType_Log2 = 33 + ImplicitNodeType_Log10 = 34 + ImplicitNodeType_Select = 35 + ImplicitNodeType_Clamp = 36 + ImplicitNodeType_Sinh = 37 + ImplicitNodeType_Cosh = 38 + ImplicitNodeType_Tanh = 39 + ImplicitNodeType_Round = 40 + ImplicitNodeType_Ceil = 41 + ImplicitNodeType_Floor = 42 + ImplicitNodeType_Sign = 43 + ImplicitNodeType_Fract = 44 + ImplicitNodeType_FunctionCall = 45 + ImplicitNodeType_Mesh = 46 + ImplicitNodeType_Length = 47 + ImplicitNodeType_ConstResourceID = 48 + ImplicitNodeType_VectorFromScalar = 49 + ImplicitNodeType_UnsignedMesh = 50 + ImplicitNodeType_Mod = 51 +) + +// ImplicitPortType represents a Lib3MF enum. +type ImplicitPortType int + +const ( + ImplicitPortType_Scalar = 1 + ImplicitPortType_Vector = 2 + ImplicitPortType_Matrix = 3 + ImplicitPortType_ResourceID = 4 +) + +// ImplicitNodeConfiguration represents a Lib3MF enum. +type ImplicitNodeConfiguration int + +const ( + ImplicitNodeConfiguration_Default = 1 + ImplicitNodeConfiguration_ScalarToScalar = 2 + ImplicitNodeConfiguration_VectorToVector = 3 + ImplicitNodeConfiguration_MatrixToMatrix = 4 +) + +// EncryptionAlgorithm represents a Lib3MF enum. +type EncryptionAlgorithm int + +const ( + EncryptionAlgorithm_AES256_GCM = 1 +) + +// WrappingAlgorithm represents a Lib3MF enum. +type WrappingAlgorithm int + +const ( + WrappingAlgorithm_RSA_OAEP = 0 +) + +// MgfAlgorithm represents a Lib3MF enum. +type MgfAlgorithm int + +const ( + MgfAlgorithm_MGF1_SHA1 = 160 + MgfAlgorithm_MGF1_SHA224 = 224 + MgfAlgorithm_MGF1_SHA256 = 256 + MgfAlgorithm_MGF1_SHA384 = 384 + MgfAlgorithm_MGF1_SHA512 = 512 +) + +// DigestMethod represents a Lib3MF enum. +type DigestMethod int + +const ( + DigestMethod_SHA1 = 160 + DigestMethod_SHA256 = 256 +) + +// Compression represents a Lib3MF enum. +type Compression int + +const ( + Compression_NoCompression = 0 + Compression_Deflate = 1 +) + +// Triangle represents a Lib3MF struct. +type Triangle struct { + Indices[3] uint32 +} + +// TriangleProperties represents a Lib3MF struct. +type TriangleProperties struct { + ResourceID uint32 + PropertyIDs[3] uint32 +} + +// Position represents a Lib3MF struct. +type Position struct { + Coordinates[3] float32 +} + +// Position2D represents a Lib3MF struct. +type Position2D struct { + Coordinates[2] float32 +} + +// CompositeConstituent represents a Lib3MF struct. +type CompositeConstituent struct { + PropertyID uint32 + MixingRatio float64 +} + +// MultiPropertyLayer represents a Lib3MF struct. +type MultiPropertyLayer struct { + ResourceID uint32 + TheBlendMethod BlendMethod +} + +// Tex2Coord represents a Lib3MF struct. +type Tex2Coord struct { + U float64 + V float64 +} + +// Transform represents a Lib3MF struct. +type Transform struct { + Fields[4][3] float32 +} + +// Box represents a Lib3MF struct. +type Box struct { + MinCoordinate[3] float32 + MaxCoordinate[3] float32 +} + +// Color represents a Lib3MF struct. +type Color struct { + Red uint8 + Green uint8 + Blue uint8 + Alpha uint8 +} + +// Beam represents a Lib3MF struct. +type Beam struct { + Indices[2] uint32 + Radii[2] float64 + CapModes[2] BeamLatticeCapMode +} + +// Ball represents a Lib3MF struct. +type Ball struct { + Index uint32 + Radius float64 +} + +// Vector represents a Lib3MF struct. +type Vector struct { + Coordinates[3] float64 +} + +// Matrix4x4 represents a Lib3MF struct. +type Matrix4x4 struct { + Field[4][4] float64 +} + +// Error constants for Lib3MF. +const LIB3MF_ERROR_NOTIMPLEMENTED = 1; +const LIB3MF_ERROR_INVALIDPARAM = 2; +const LIB3MF_ERROR_INVALIDCAST = 3; +const LIB3MF_ERROR_BUFFERTOOSMALL = 4; +const LIB3MF_ERROR_GENERICEXCEPTION = 5; +const LIB3MF_ERROR_COULDNOTLOADLIBRARY = 6; +const LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT = 7; +const LIB3MF_ERROR_INCOMPATIBLEBINARYVERSION = 8; +const LIB3MF_ERROR_CALCULATIONABORTED = 10; +const LIB3MF_ERROR_SHOULDNOTBECALLED = 11; +const LIB3MF_ERROR_READERCLASSUNKNOWN = 100; +const LIB3MF_ERROR_WRITERCLASSUNKNOWN = 101; +const LIB3MF_ERROR_ITERATORINVALIDINDEX = 102; +const LIB3MF_ERROR_INVALIDMODELRESOURCE = 103; +const LIB3MF_ERROR_RESOURCENOTFOUND = 104; +const LIB3MF_ERROR_INVALIDMODEL = 105; +const LIB3MF_ERROR_INVALIDOBJECT = 106; +const LIB3MF_ERROR_INVALIDMESHOBJECT = 107; +const LIB3MF_ERROR_INVALIDCOMPONENTSOBJECT = 108; +const LIB3MF_ERROR_INVALIDCOMPONENT = 109; +const LIB3MF_ERROR_INVALIDBUILDITEM = 110; +const LIB3MF_ERROR_INVALIDBASEMATERIALGROUP = 111; +const LIB3MF_ERROR_INVALIDSLICESTACKRESOURCE = 112; +const LIB3MF_ERROR_INVALIDTEXTURERESOURCE = 113; +const LIB3MF_ERROR_INVALIDCOLORGROUP = 114; +const LIB3MF_ERROR_INVALIDTEXTURE2DGROUP = 115; +const LIB3MF_ERROR_INVALIDCOMPOSITEMATERIALS = 116; +const LIB3MF_ERROR_INVALIDMULTIPROPERTYGROUP = 117; +const LIB3MF_ERROR_INVALIDRESOURCEINDEX = 120; +const LIB3MF_ERROR_ATTACHMENTNOTFOUND = 121; +const LIB3MF_ERROR_FORBIDDENCYCLICREFERENCE = 130; +const LIB3MF_ERROR_INVALIDATTACHMENTSTREAM = 131; +const LIB3MF_ERROR_INVALIDPROPERTYCOUNT = 132; +const LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER = 140; +const LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT = 141; +const LIB3MF_ERROR_INVALIDRESOURCE = 142; +const LIB3MF_ERROR_INVALIDLEVELSET = 143; +const LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE = 2000; +const LIB3MF_ERROR_INVALIDKEYSTORE = 3000; +const LIB3MF_ERROR_INVALIDKEYSTORECONSUMER = 3001; +const LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND = 3002; +const LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND = 3003; +const LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED = 3004; +const LIB3MF_ERROR_INVALIDKEYSIZE = 3005; +const LIB3MF_ERROR_INCOMPATIBLEPORTTYPES = 4000; +const LIB3MF_ERROR_GRAPHISCYCLIC = 4001; +const LIB3MF_ERROR_INPUTNOTSET = 4002; +const LIB3MF_ERROR_INVALIDNODECONFIGURATION = 4003; + +// WrappedError is an error that wraps a Lib3MF error. +type WrappedError struct { + Code uint32 + Message string +} + +func (e *WrappedError) Error() string { + return fmt.Sprintf("lib3mf: %s (%d)", e.Message, e.Code) +} + +func errorMessage(errorcode uint32) string { + switch (errorcode) { + case LIB3MF_ERROR_NOTIMPLEMENTED: + return "functionality not implemented"; + case LIB3MF_ERROR_INVALIDPARAM: + return "an invalid parameter was passed"; + case LIB3MF_ERROR_INVALIDCAST: + return "a type cast failed"; + case LIB3MF_ERROR_BUFFERTOOSMALL: + return "a provided buffer is too small"; + case LIB3MF_ERROR_GENERICEXCEPTION: + return "a generic exception occurred"; + case LIB3MF_ERROR_COULDNOTLOADLIBRARY: + return "the library could not be loaded"; + case LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT: + return "a required exported symbol could not be found in the library"; + case LIB3MF_ERROR_INCOMPATIBLEBINARYVERSION: + return "the version of the binary interface does not match the bindings interface"; + case LIB3MF_ERROR_CALCULATIONABORTED: + return "a calculation has been aborted"; + case LIB3MF_ERROR_SHOULDNOTBECALLED: + return "functionality should not be called"; + case LIB3MF_ERROR_READERCLASSUNKNOWN: + return "the queried reader class is unknown"; + case LIB3MF_ERROR_WRITERCLASSUNKNOWN: + return "the queried writer class is unknown"; + case LIB3MF_ERROR_ITERATORINVALIDINDEX: + return "the current index of an iterator is invalid"; + case LIB3MF_ERROR_INVALIDMODELRESOURCE: + return "no Model Resource has been given"; + case LIB3MF_ERROR_RESOURCENOTFOUND: + return "Resource not found"; + case LIB3MF_ERROR_INVALIDMODEL: + return "A model is invalid"; + case LIB3MF_ERROR_INVALIDOBJECT: + return "An object is invalid"; + case LIB3MF_ERROR_INVALIDMESHOBJECT: + return "A mesh object is invalid"; + case LIB3MF_ERROR_INVALIDCOMPONENTSOBJECT: + return "A components object is invalid"; + case LIB3MF_ERROR_INVALIDCOMPONENT: + return "A component is invalid"; + case LIB3MF_ERROR_INVALIDBUILDITEM: + return "A build item is invalid"; + case LIB3MF_ERROR_INVALIDBASEMATERIALGROUP: + return "A basematerialgroup is invalid"; + case LIB3MF_ERROR_INVALIDSLICESTACKRESOURCE: + return "A slicestack resource is invalid"; + case LIB3MF_ERROR_INVALIDTEXTURERESOURCE: + return "A texture resource is invalid"; + case LIB3MF_ERROR_INVALIDCOLORGROUP: + return "A color group resource is invalid"; + case LIB3MF_ERROR_INVALIDTEXTURE2DGROUP: + return "A texture2d group resource is invalid"; + case LIB3MF_ERROR_INVALIDCOMPOSITEMATERIALS: + return "A composite materials resource is invalid"; + case LIB3MF_ERROR_INVALIDMULTIPROPERTYGROUP: + return "A MultiPropertyGroup resource is invalid"; + case LIB3MF_ERROR_INVALIDRESOURCEINDEX: + return "A resource index is invalid"; + case LIB3MF_ERROR_ATTACHMENTNOTFOUND: + return "Attachment not found"; + case LIB3MF_ERROR_FORBIDDENCYCLICREFERENCE: + return "A component references one of its ancestors"; + case LIB3MF_ERROR_INVALIDATTACHMENTSTREAM: + return "An attachment stream is invalid"; + case LIB3MF_ERROR_INVALIDPROPERTYCOUNT: + return "Invalid property count."; + case LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: + return "A progress identifier is unknown"; + case LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: + return "An element buffer exceeds its spec limit"; + case LIB3MF_ERROR_INVALIDRESOURCE: + return "A resource is invalid"; + case LIB3MF_ERROR_INVALIDLEVELSET: + return "A level set is invalid"; + case LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: + return "This object type is not valid for beamlattices"; + case LIB3MF_ERROR_INVALIDKEYSTORE: + return "The keystore object is invalid"; + case LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: + return "The consumer keystore object is invalid"; + case LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND: + return "A consumer has not been found"; + case LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: + return "A resource data has not been found"; + case LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: + return "A Key or Conentent encryption callback has not been registered"; + case LIB3MF_ERROR_INVALIDKEYSIZE: + return "The key size is invalid"; + case LIB3MF_ERROR_INCOMPATIBLEPORTTYPES: + return "Link could not be added, the port types are incompatible"; + case LIB3MF_ERROR_GRAPHISCYCLIC: + return "The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted."; + case LIB3MF_ERROR_INPUTNOTSET: + return "The input of a node is not set."; + case LIB3MF_ERROR_INVALIDNODECONFIGURATION: + return "The selected node configuration is not supported"; + default: + return "unknown"; + } +} + +func makeError(errorcode uint32) error { + return &WrappedError{errorcode, errorMessage(uint32(errorcode))} +} + +// ProgressCallbackFunc a callback function. +type ProgressCallbackFunc = func(abort *bool, progressValue float64, progressIdentifier ProgressIdentifier, userData uintptr) + +var progressCallbackFunc ProgressCallbackFunc + +//export progressCallback +func progressCallback(abort *C.bool, progressValue C.double, progressIdentifier C.eLib3MFProgressIdentifier, userData C.Lib3MF_pvoid) { + if progressCallbackFunc == nil { + return + } + progressCallbackFunc((*bool)(abort), float64(progressValue), ProgressIdentifier(progressIdentifier), uintptr(userData)) +} + +// WriteCallbackFunc callback to call for writing a data chunk. +type WriteCallbackFunc = func(byteData uint64, numBytes uint64, userData uintptr) + +var writeCallbackFunc WriteCallbackFunc + +//export writeCallback +func writeCallback(byteData C.uint64_t, numBytes C.uint64_t, userData C.Lib3MF_pvoid) { + if writeCallbackFunc == nil { + return + } + writeCallbackFunc(uint64(byteData), uint64(numBytes), uintptr(userData)) +} + +// ReadCallbackFunc callback to call for reading a data chunk. +type ReadCallbackFunc = func(byteData uint64, numBytes uint64, userData uintptr) + +var readCallbackFunc ReadCallbackFunc + +//export readCallback +func readCallback(byteData C.uint64_t, numBytes C.uint64_t, userData C.Lib3MF_pvoid) { + if readCallbackFunc == nil { + return + } + readCallbackFunc(uint64(byteData), uint64(numBytes), uintptr(userData)) +} + +// SeekCallbackFunc callback to call for seeking in the stream. +type SeekCallbackFunc = func(position uint64, userData uintptr) + +var seekCallbackFunc SeekCallbackFunc + +//export seekCallback +func seekCallback(position C.uint64_t, userData C.Lib3MF_pvoid) { + if seekCallbackFunc == nil { + return + } + seekCallbackFunc(uint64(position), uintptr(userData)) +} + +// RandomNumberCallbackFunc callback to generate random numbers. +type RandomNumberCallbackFunc = func(byteData uint64, numBytes uint64, userData uintptr, bytesWritten *uint64) + +var randomNumberCallbackFunc RandomNumberCallbackFunc //export randomNumberCallback func randomNumberCallback(byteData C.uint64_t, numBytes C.uint64_t, userData C.Lib3MF_pvoid, bytesWritten *C.uint64_t) { if randomNumberCallbackFunc == nil { return } - randomNumberCallbackFunc(uint64(byteData), uint64(numBytes), uintptr(userData), (*uint64)(bytesWritten)) + randomNumberCallbackFunc(uint64(byteData), uint64(numBytes), uintptr(userData), (*uint64)(bytesWritten)) +} + +// KeyWrappingCallbackFunc a callback used to wrap (encrypt) the content key available in keystore resource group. +type KeyWrappingCallbackFunc = func(kEKParams AccessRight, inBuffer []uint8, outBuffer []uint8, userData uintptr, status *uint64) + +var keyWrappingCallbackFunc KeyWrappingCallbackFunc + +//export keyWrappingCallback +func keyWrappingCallback(kEKParams C.Lib3MF_AccessRight, inBuffer *C.uint8_t, outBuffer *C.uint8_t, userData C.Lib3MF_pvoid, status *C.uint64_t) { + if keyWrappingCallbackFunc == nil { + return + } + keyWrappingCallbackFunc(, ([][]uint8)(unsafe.Pointer(&inBuffer[0])), ([][]uint8)(unsafe.Pointer(&outBuffer[0])), uintptr(userData), (*uint64)(status)) +} + +// ContentEncryptionCallbackFunc a callback to encrypt/decrypt content called on each resource encrypted. This might be called several times depending on content size. If Input is not available(either null or size is 0), clients must return the result of authenticated tag generation/validation. +type ContentEncryptionCallbackFunc = func(cEKParams ContentEncryptionParams, input []uint8, output []uint8, userData uintptr, status *uint64) + +var contentEncryptionCallbackFunc ContentEncryptionCallbackFunc + +//export contentEncryptionCallback +func contentEncryptionCallback(cEKParams C.Lib3MF_ContentEncryptionParams, input *C.uint8_t, output *C.uint8_t, userData C.Lib3MF_pvoid, status *C.uint64_t) { + if contentEncryptionCallbackFunc == nil { + return + } + contentEncryptionCallbackFunc(, ([][]uint8)(unsafe.Pointer(&input[0])), ([][]uint8)(unsafe.Pointer(&output[0])), uintptr(userData), (*uint64)(status)) +} + +// Wrapper represents the number wrapper +type Wrapper struct { + _ [0]func() // uncomparable; to make == not compile + LibraryHandle ref +} + +// Base represents a Lib3MF class. +type Base struct { + _ [0]func() // uncomparable; to make == not compile + Ref ref // identifies a C value, see ref type + wrapperRef Wrapper + gcPtr *ref // used to trigger the finalizer when the Value is not referenced any more +} + +// NewBase creates a new Base. +// The wrapped C pointer will be freed when the Go pointer is finalized, +// but one can release it manually calling Release. +func (wrapper Wrapper) NewBase(r ref) Base { + gcPtr := new(ref) + *gcPtr = r + runtime.SetFinalizer(gcPtr, wrapper.releaseC) + return Base{Ref: r, gcPtr: gcPtr, wrapperRef: wrapper} +} + +// Release releases the C pointer. +func (inst Base) Release() error { + err := inst.wrapperRef.Release(inst) + *inst.gcPtr = nil + return err +} + +// Equal reports whether inst and w refer to the same C pointer. +func (inst Base) Equal(w Base) bool { + return inst.Ref == w.Ref +} +// ClassTypeId get Class Type Id. +func (inst Base) ClassTypeId() (uint64, error) { + var classTypeId C.uint64_t + ret := C.CCall_lib3mf_base_classtypeid(inst.wrapperRef.LibraryHandle, inst.Ref, &classTypeId) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint64(classTypeId), nil +} + + +// Writer represents a Lib3MF class. +type Writer struct { + Base +} + +func (wrapper Wrapper) NewWriter(r ref) Writer { + return Writer{wrapper.NewBase(r)} +} + +// WriteToFile writes out the model as file. The file type is specified by the Model Writer class. +func (inst Writer) WriteToFile(filename string) error { + ret := C.CCall_lib3mf_writer_writetofile(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(filename)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetStreamSize retrieves the size of the full 3MF file stream. +func (inst Writer) GetStreamSize() (uint64, error) { + var streamSize C.uint64_t + ret := C.CCall_lib3mf_writer_getstreamsize(inst.wrapperRef.LibraryHandle, inst.Ref, &streamSize) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint64(streamSize), nil +} + +// WriteToBuffer writes out the 3MF file into a memory buffer. +func (inst Writer) WriteToBuffer(buffer []uint8) ([]uint8, error) { + var neededforbuffer C.uint64_t + ret := C.CCall_lib3mf_writer_writetobuffer(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforbuffer, nil) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + if len(buffer) < int(neededforbuffer) { + buffer = append(buffer, make([]uint8, int(neededforbuffer)-len(buffer))...) + } + ret = C.CCall_lib3mf_writer_writetobuffer(inst.wrapperRef.LibraryHandle, inst.Ref, neededforbuffer, nil, (*C.uint8_t)(unsafe.Pointer(&buffer[0]))) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + return buffer[:int(neededforbuffer)], nil +} + +// WriteToCallback writes out the model and passes the data to a provided callback function. The file type is specified by the Model Writer class. +func (inst Writer) WriteToCallback(theWriteCallback WriteCallbackFunc, theSeekCallback SeekCallbackFunc, userData uintptr) error { + ret := C.CCall_lib3mf_writer_writetocallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFWriteCallback)(unsafe.Pointer(C.Lib3MFWriteCallback_cgo)), (C.Lib3MFSeekCallback)(unsafe.Pointer(C.Lib3MFSeekCallback_cgo)), (C.Lib3MF_pvoid)(userData)) + if ret != 0 { + return makeError(uint32(ret)) + } + writeCallbackFunc = theWriteCallback + seekCallbackFunc = theSeekCallback + return nil +} + +// SetProgressCallback set the progress callback for calls to this writer. +func (inst Writer) SetProgressCallback(progressCallback ProgressCallbackFunc, userData uintptr) error { + ret := C.CCall_lib3mf_writer_setprogresscallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFProgressCallback)(unsafe.Pointer(C.Lib3MFProgressCallback_cgo)), (C.Lib3MF_pvoid)(userData)) + if ret != 0 { + return makeError(uint32(ret)) + } + progressCallbackFunc = progressCallback + return nil +} + +// GetDecimalPrecision returns the number of digits after the decimal point to be written in each vertex coordinate-value. +func (inst Writer) GetDecimalPrecision() (uint32, error) { + var decimalPrecision C.uint32_t + ret := C.CCall_lib3mf_writer_getdecimalprecision(inst.wrapperRef.LibraryHandle, inst.Ref, &decimalPrecision) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(decimalPrecision), nil +} + +// SetDecimalPrecision sets the number of digits after the decimal point to be written in each vertex coordinate-value. +func (inst Writer) SetDecimalPrecision(decimalPrecision uint32) error { + ret := C.CCall_lib3mf_writer_setdecimalprecision(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(decimalPrecision)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// SetStrictModeActive activates (deactivates) the strict mode of the reader. +func (inst Writer) SetStrictModeActive(strictModeActive bool) error { + ret := C.CCall_lib3mf_writer_setstrictmodeactive(inst.wrapperRef.LibraryHandle, inst.Ref, C.bool(strictModeActive)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetStrictModeActive queries whether the strict mode of the reader is active or not. +func (inst Writer) GetStrictModeActive() (bool, error) { + var strictModeActive C.bool + ret := C.CCall_lib3mf_writer_getstrictmodeactive(inst.wrapperRef.LibraryHandle, inst.Ref, &strictModeActive) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(strictModeActive), nil +} + +// GetWarning returns Warning and Error Information of the read process. +func (inst Writer) GetWarning(index uint32) (uint32, string, error) { + var errorCode C.uint32_t + var neededforwarning C.uint32_t + var filledinwarning C.uint32_t + ret := C.CCall_lib3mf_writer_getwarning(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &errorCode, 0, &neededforwarning, nil) + if ret != 0 { + return 0, "", makeError(uint32(ret)) + } + bufferSizewarning := neededforwarning + bufferwarning := make([]byte, bufferSizewarning) + ret = C.CCall_lib3mf_writer_getwarning(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &errorCode, bufferSizewarning, &filledinwarning, (*C.char)(unsafe.Pointer(&bufferwarning[0]))) + if ret != 0 { + return 0, "", makeError(uint32(ret)) + } + return uint32(errorCode), string(bufferwarning[:(filledinwarning-1)]), nil +} + +// GetWarningCount returns Warning and Error Count of the read process. +func (inst Writer) GetWarningCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_writer_getwarningcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + +// AddKeyWrappingCallback registers a callback to deal with data key encryption/decryption from keystore. +func (inst Writer) AddKeyWrappingCallback(consumerID string, theCallback KeyWrappingCallbackFunc, userData uintptr) error { + ret := C.CCall_lib3mf_writer_addkeywrappingcallback(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(consumerID)[0])), (C.Lib3MFKeyWrappingCallback)(unsafe.Pointer(C.Lib3MFKeyWrappingCallback_cgo)), (C.Lib3MF_pvoid)(userData)) + if ret != 0 { + return makeError(uint32(ret)) + } + keyWrappingCallbackFunc = theCallback + return nil +} + +// SetContentEncryptionCallback registers a callback to deal with encryption of content. +func (inst Writer) SetContentEncryptionCallback(theCallback ContentEncryptionCallbackFunc, userData uintptr) error { + ret := C.CCall_lib3mf_writer_setcontentencryptioncallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFContentEncryptionCallback)(unsafe.Pointer(C.Lib3MFContentEncryptionCallback_cgo)), (C.Lib3MF_pvoid)(userData)) + if ret != 0 { + return makeError(uint32(ret)) + } + contentEncryptionCallbackFunc = theCallback + return nil +} + + +// Reader represents a Lib3MF class. +type Reader struct { + Base +} + +func (wrapper Wrapper) NewReader(r ref) Reader { + return Reader{wrapper.NewBase(r)} +} + +// ReadFromFile reads a model from a file. The file type is specified by the Model Reader class. +func (inst Reader) ReadFromFile(filename string) error { + ret := C.CCall_lib3mf_reader_readfromfile(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(filename)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// ReadFromBuffer reads a model from a memory buffer. +func (inst Reader) ReadFromBuffer(buffer []uint8) error { + ret := C.CCall_lib3mf_reader_readfrombuffer(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(buffer)), (*C.uint8_t)(unsafe.Pointer(&buffer[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// ReadFromCallback reads a model and from the data provided by a callback function. +func (inst Reader) ReadFromCallback(theReadCallback ReadCallbackFunc, streamSize uint64, theSeekCallback SeekCallbackFunc, userData uintptr) error { + ret := C.CCall_lib3mf_reader_readfromcallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFReadCallback)(unsafe.Pointer(C.Lib3MFReadCallback_cgo)), C.uint64_t(streamSize), (C.Lib3MFSeekCallback)(unsafe.Pointer(C.Lib3MFSeekCallback_cgo)), (C.Lib3MF_pvoid)(userData)) + if ret != 0 { + return makeError(uint32(ret)) + } + readCallbackFunc = theReadCallback + seekCallbackFunc = theSeekCallback + return nil +} + +// SetProgressCallback set the progress callback for calls to this writer. +func (inst Reader) SetProgressCallback(progressCallback ProgressCallbackFunc, userData uintptr) error { + ret := C.CCall_lib3mf_reader_setprogresscallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFProgressCallback)(unsafe.Pointer(C.Lib3MFProgressCallback_cgo)), (C.Lib3MF_pvoid)(userData)) + if ret != 0 { + return makeError(uint32(ret)) + } + progressCallbackFunc = progressCallback + return nil +} + +// AddRelationToRead adds a relationship type which shall be read as attachment in memory while loading. +func (inst Reader) AddRelationToRead(relationShipType string) error { + ret := C.CCall_lib3mf_reader_addrelationtoread(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(relationShipType)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// RemoveRelationToRead removes a relationship type which shall be read as attachment in memory while loading. +func (inst Reader) RemoveRelationToRead(relationShipType string) error { + ret := C.CCall_lib3mf_reader_removerelationtoread(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(relationShipType)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// SetStrictModeActive activates (deactivates) the strict mode of the reader. +func (inst Reader) SetStrictModeActive(strictModeActive bool) error { + ret := C.CCall_lib3mf_reader_setstrictmodeactive(inst.wrapperRef.LibraryHandle, inst.Ref, C.bool(strictModeActive)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetStrictModeActive queries whether the strict mode of the reader is active or not. +func (inst Reader) GetStrictModeActive() (bool, error) { + var strictModeActive C.bool + ret := C.CCall_lib3mf_reader_getstrictmodeactive(inst.wrapperRef.LibraryHandle, inst.Ref, &strictModeActive) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(strictModeActive), nil +} + +// GetWarning returns Warning and Error Information of the read process. +func (inst Reader) GetWarning(index uint32) (uint32, string, error) { + var errorCode C.uint32_t + var neededforwarning C.uint32_t + var filledinwarning C.uint32_t + ret := C.CCall_lib3mf_reader_getwarning(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &errorCode, 0, &neededforwarning, nil) + if ret != 0 { + return 0, "", makeError(uint32(ret)) + } + bufferSizewarning := neededforwarning + bufferwarning := make([]byte, bufferSizewarning) + ret = C.CCall_lib3mf_reader_getwarning(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &errorCode, bufferSizewarning, &filledinwarning, (*C.char)(unsafe.Pointer(&bufferwarning[0]))) + if ret != 0 { + return 0, "", makeError(uint32(ret)) + } + return uint32(errorCode), string(bufferwarning[:(filledinwarning-1)]), nil +} + +// GetWarningCount returns Warning and Error Count of the read process. +func (inst Reader) GetWarningCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_reader_getwarningcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + +// AddKeyWrappingCallback registers a callback to deal with key wrapping mechanism from keystore. +func (inst Reader) AddKeyWrappingCallback(consumerID string, theCallback KeyWrappingCallbackFunc, userData uintptr) error { + ret := C.CCall_lib3mf_reader_addkeywrappingcallback(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(consumerID)[0])), (C.Lib3MFKeyWrappingCallback)(unsafe.Pointer(C.Lib3MFKeyWrappingCallback_cgo)), (C.Lib3MF_pvoid)(userData)) + if ret != 0 { + return makeError(uint32(ret)) + } + keyWrappingCallbackFunc = theCallback + return nil +} + +// SetContentEncryptionCallback registers a callback to deal with encryption of content. +func (inst Reader) SetContentEncryptionCallback(theCallback ContentEncryptionCallbackFunc, userData uintptr) error { + ret := C.CCall_lib3mf_reader_setcontentencryptioncallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFContentEncryptionCallback)(unsafe.Pointer(C.Lib3MFContentEncryptionCallback_cgo)), (C.Lib3MF_pvoid)(userData)) + if ret != 0 { + return makeError(uint32(ret)) + } + contentEncryptionCallbackFunc = theCallback + return nil +} + + +// PackagePart represents a Lib3MF class. +type PackagePart struct { + Base +} + +func (wrapper Wrapper) NewPackagePart(r ref) PackagePart { + return PackagePart{wrapper.NewBase(r)} +} + +// GetPath returns the absolute path of this PackagePart. +func (inst PackagePart) GetPath() (string, error) { + var neededforpath C.uint32_t + var filledinpath C.uint32_t + ret := C.CCall_lib3mf_packagepart_getpath(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpath, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizepath := neededforpath + bufferpath := make([]byte, bufferSizepath) + ret = C.CCall_lib3mf_packagepart_getpath(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizepath, &filledinpath, (*C.char)(unsafe.Pointer(&bufferpath[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(bufferpath[:(filledinpath-1)]), nil +} + +// SetPath sets the absolute path of this PackagePart. +func (inst PackagePart) SetPath(path string) error { + ret := C.CCall_lib3mf_packagepart_setpath(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(path)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + + +// Resource represents a Lib3MF class. +type Resource struct { + Base +} + +func (wrapper Wrapper) NewResource(r ref) Resource { + return Resource{wrapper.NewBase(r)} +} + +// GetResourceID retrieves the unique id of this resource within a package. This function will be removed in a later release in favor of GetUniqueResourceID. +func (inst Resource) GetResourceID() (uint32, error) { + var uniqueResourceID C.uint32_t + ret := C.CCall_lib3mf_resource_getresourceid(inst.wrapperRef.LibraryHandle, inst.Ref, &uniqueResourceID) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(uniqueResourceID), nil +} + +// GetUniqueResourceID retrieves the unique id of this resource within a package. +func (inst Resource) GetUniqueResourceID() (uint32, error) { + var uniqueResourceID C.uint32_t + ret := C.CCall_lib3mf_resource_getuniqueresourceid(inst.wrapperRef.LibraryHandle, inst.Ref, &uniqueResourceID) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(uniqueResourceID), nil +} + +// PackagePart returns the PackagePart within which this resource resides. +func (inst Resource) PackagePart() (PackagePart, error) { + var packagePart ref + ret := C.CCall_lib3mf_resource_packagepart(inst.wrapperRef.LibraryHandle, inst.Ref, &packagePart) + if ret != 0 { + return PackagePart{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewPackagePart(packagePart), nil +} + +// SetPackagePart sets the new PackagePart within which this resource resides. +func (inst Resource) SetPackagePart(packagePart PackagePart) error { + ret := C.CCall_lib3mf_resource_setpackagepart(inst.wrapperRef.LibraryHandle, inst.Ref, packagePart.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetModelResourceID retrieves the id of this resource within a model. +func (inst Resource) GetModelResourceID() (uint32, error) { + var modelResourceId C.uint32_t + ret := C.CCall_lib3mf_resource_getmodelresourceid(inst.wrapperRef.LibraryHandle, inst.Ref, &modelResourceId) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(modelResourceId), nil +} + + +// ResourceIterator represents a Lib3MF class. +type ResourceIterator struct { + Base +} + +func (wrapper Wrapper) NewResourceIterator(r ref) ResourceIterator { + return ResourceIterator{wrapper.NewBase(r)} +} + +// MoveNext iterates to the next resource in the list. +func (inst ResourceIterator) MoveNext() (bool, error) { + var hasNext C.bool + ret := C.CCall_lib3mf_resourceiterator_movenext(inst.wrapperRef.LibraryHandle, inst.Ref, &hasNext) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(hasNext), nil +} + +// MovePrevious iterates to the previous resource in the list. +func (inst ResourceIterator) MovePrevious() (bool, error) { + var hasPrevious C.bool + ret := C.CCall_lib3mf_resourceiterator_moveprevious(inst.wrapperRef.LibraryHandle, inst.Ref, &hasPrevious) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(hasPrevious), nil +} + +// GetCurrent returns the resource the iterator points at. +func (inst ResourceIterator) GetCurrent() (Resource, error) { + var resource ref + ret := C.CCall_lib3mf_resourceiterator_getcurrent(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return Resource{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewResource(resource), nil +} + +// Clone creates a new resource iterator with the same resource list. +func (inst ResourceIterator) Clone() (ResourceIterator, error) { + var outResourceIterator ref + ret := C.CCall_lib3mf_resourceiterator_clone(inst.wrapperRef.LibraryHandle, inst.Ref, &outResourceIterator) + if ret != 0 { + return ResourceIterator{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewResourceIterator(outResourceIterator), nil +} + +// Count returns the number of resoucres the iterator captures. +func (inst ResourceIterator) Count() (uint64, error) { + var count C.uint64_t + ret := C.CCall_lib3mf_resourceiterator_count(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint64(count), nil +} + + +// SliceStackIterator represents a Lib3MF class. +type SliceStackIterator struct { + ResourceIterator +} + +func (wrapper Wrapper) NewSliceStackIterator(r ref) SliceStackIterator { + return SliceStackIterator{wrapper.NewResourceIterator(r)} +} + +// GetCurrentSliceStack returns the SliceStack the iterator points at. +func (inst SliceStackIterator) GetCurrentSliceStack() (SliceStack, error) { + var resource ref + ret := C.CCall_lib3mf_slicestackiterator_getcurrentslicestack(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return SliceStack{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewSliceStack(resource), nil +} + + +// ObjectIterator represents a Lib3MF class. +type ObjectIterator struct { + ResourceIterator +} + +func (wrapper Wrapper) NewObjectIterator(r ref) ObjectIterator { + return ObjectIterator{wrapper.NewResourceIterator(r)} +} + +// GetCurrentObject returns the Object the iterator points at. +func (inst ObjectIterator) GetCurrentObject() (Object, error) { + var resource ref + ret := C.CCall_lib3mf_objectiterator_getcurrentobject(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return Object{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewObject(resource), nil +} + + +// MeshObjectIterator represents a Lib3MF class. +type MeshObjectIterator struct { + ResourceIterator +} + +func (wrapper Wrapper) NewMeshObjectIterator(r ref) MeshObjectIterator { + return MeshObjectIterator{wrapper.NewResourceIterator(r)} +} + +// GetCurrentMeshObject returns the MeshObject the iterator points at. +func (inst MeshObjectIterator) GetCurrentMeshObject() (MeshObject, error) { + var resource ref + ret := C.CCall_lib3mf_meshobjectiterator_getcurrentmeshobject(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return MeshObject{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewMeshObject(resource), nil +} + + +// ComponentsObjectIterator represents a Lib3MF class. +type ComponentsObjectIterator struct { + ResourceIterator +} + +func (wrapper Wrapper) NewComponentsObjectIterator(r ref) ComponentsObjectIterator { + return ComponentsObjectIterator{wrapper.NewResourceIterator(r)} +} + +// GetCurrentComponentsObject returns the ComponentsObject the iterator points at. +func (inst ComponentsObjectIterator) GetCurrentComponentsObject() (ComponentsObject, error) { + var resource ref + ret := C.CCall_lib3mf_componentsobjectiterator_getcurrentcomponentsobject(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return ComponentsObject{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewComponentsObject(resource), nil +} + + +// Texture2DIterator represents a Lib3MF class. +type Texture2DIterator struct { + ResourceIterator +} + +func (wrapper Wrapper) NewTexture2DIterator(r ref) Texture2DIterator { + return Texture2DIterator{wrapper.NewResourceIterator(r)} +} + +// GetCurrentTexture2D returns the Texture2D the iterator points at. +func (inst Texture2DIterator) GetCurrentTexture2D() (Texture2D, error) { + var resource ref + ret := C.CCall_lib3mf_texture2diterator_getcurrenttexture2d(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return Texture2D{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewTexture2D(resource), nil +} + + +// BaseMaterialGroupIterator represents a Lib3MF class. +type BaseMaterialGroupIterator struct { + ResourceIterator +} + +func (wrapper Wrapper) NewBaseMaterialGroupIterator(r ref) BaseMaterialGroupIterator { + return BaseMaterialGroupIterator{wrapper.NewResourceIterator(r)} +} + +// GetCurrentBaseMaterialGroup returns the MaterialGroup the iterator points at. +func (inst BaseMaterialGroupIterator) GetCurrentBaseMaterialGroup() (BaseMaterialGroup, error) { + var resource ref + ret := C.CCall_lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return BaseMaterialGroup{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewBaseMaterialGroup(resource), nil +} + + +// ColorGroupIterator represents a Lib3MF class. +type ColorGroupIterator struct { + ResourceIterator +} + +func (wrapper Wrapper) NewColorGroupIterator(r ref) ColorGroupIterator { + return ColorGroupIterator{wrapper.NewResourceIterator(r)} +} + +// GetCurrentColorGroup returns the ColorGroup the iterator points at. +func (inst ColorGroupIterator) GetCurrentColorGroup() (ColorGroup, error) { + var resource ref + ret := C.CCall_lib3mf_colorgroupiterator_getcurrentcolorgroup(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return ColorGroup{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewColorGroup(resource), nil +} + + +// Texture2DGroupIterator represents a Lib3MF class. +type Texture2DGroupIterator struct { + ResourceIterator +} + +func (wrapper Wrapper) NewTexture2DGroupIterator(r ref) Texture2DGroupIterator { + return Texture2DGroupIterator{wrapper.NewResourceIterator(r)} +} + +// GetCurrentTexture2DGroup returns the Texture2DGroup the iterator points at. +func (inst Texture2DGroupIterator) GetCurrentTexture2DGroup() (Texture2DGroup, error) { + var resource ref + ret := C.CCall_lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return Texture2DGroup{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewTexture2DGroup(resource), nil +} + + +// CompositeMaterialsIterator represents a Lib3MF class. +type CompositeMaterialsIterator struct { + ResourceIterator +} + +func (wrapper Wrapper) NewCompositeMaterialsIterator(r ref) CompositeMaterialsIterator { + return CompositeMaterialsIterator{wrapper.NewResourceIterator(r)} +} + +// GetCurrentCompositeMaterials returns the CompositeMaterials the iterator points at. +func (inst CompositeMaterialsIterator) GetCurrentCompositeMaterials() (CompositeMaterials, error) { + var resource ref + ret := C.CCall_lib3mf_compositematerialsiterator_getcurrentcompositematerials(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return CompositeMaterials{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewCompositeMaterials(resource), nil +} + + +// MultiPropertyGroupIterator represents a Lib3MF class. +type MultiPropertyGroupIterator struct { + ResourceIterator +} + +func (wrapper Wrapper) NewMultiPropertyGroupIterator(r ref) MultiPropertyGroupIterator { + return MultiPropertyGroupIterator{wrapper.NewResourceIterator(r)} +} + +// GetCurrentMultiPropertyGroup returns the MultiPropertyGroup the iterator points at. +func (inst MultiPropertyGroupIterator) GetCurrentMultiPropertyGroup() (MultiPropertyGroup, error) { + var resource ref + ret := C.CCall_lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return MultiPropertyGroup{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewMultiPropertyGroup(resource), nil +} + + +// Image3DIterator represents a Lib3MF class. +type Image3DIterator struct { + ResourceIterator +} + +func (wrapper Wrapper) NewImage3DIterator(r ref) Image3DIterator { + return Image3DIterator{wrapper.NewResourceIterator(r)} +} + +// GetCurrentImage3D returns the Image3D the iterator points at. +func (inst Image3DIterator) GetCurrentImage3D() (Image3D, error) { + var resource ref + ret := C.CCall_lib3mf_image3diterator_getcurrentimage3d(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return Image3D{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewImage3D(resource), nil +} + + +// FunctionIterator represents a Lib3MF class. +type FunctionIterator struct { + ResourceIterator +} + +func (wrapper Wrapper) NewFunctionIterator(r ref) FunctionIterator { + return FunctionIterator{wrapper.NewResourceIterator(r)} +} + +// GetCurrentFunction returns the Function the iterator points at. +func (inst FunctionIterator) GetCurrentFunction() (Function, error) { + var resource ref + ret := C.CCall_lib3mf_functioniterator_getcurrentfunction(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return Function{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewFunction(resource), nil +} + + +// LevelSetIterator represents a Lib3MF class. +type LevelSetIterator struct { + ResourceIterator +} + +func (wrapper Wrapper) NewLevelSetIterator(r ref) LevelSetIterator { + return LevelSetIterator{wrapper.NewResourceIterator(r)} +} + +// GetCurrentLevelSet returns the LevelSet the iterator points at. +func (inst LevelSetIterator) GetCurrentLevelSet() (LevelSet, error) { + var resource ref + ret := C.CCall_lib3mf_levelsetiterator_getcurrentlevelset(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) + if ret != 0 { + return LevelSet{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewLevelSet(resource), nil +} + + +// MetaData represents a Lib3MF class. +type MetaData struct { + Base +} + +func (wrapper Wrapper) NewMetaData(r ref) MetaData { + return MetaData{wrapper.NewBase(r)} +} + +// GetNameSpace returns the namespace URL of the metadata. +func (inst MetaData) GetNameSpace() (string, error) { + var neededfornameSpace C.uint32_t + var filledinnameSpace C.uint32_t + ret := C.CCall_lib3mf_metadata_getnamespace(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededfornameSpace, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizenameSpace := neededfornameSpace + buffernameSpace := make([]byte, bufferSizenameSpace) + ret = C.CCall_lib3mf_metadata_getnamespace(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizenameSpace, &filledinnameSpace, (*C.char)(unsafe.Pointer(&buffernameSpace[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(buffernameSpace[:(filledinnameSpace-1)]), nil +} + +// SetNameSpace sets a new namespace URL of the metadata. +func (inst MetaData) SetNameSpace(nameSpace string) error { + ret := C.CCall_lib3mf_metadata_setnamespace(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(nameSpace)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetName returns the name of a metadata. +func (inst MetaData) GetName() (string, error) { + var neededforname C.uint32_t + var filledinname C.uint32_t + ret := C.CCall_lib3mf_metadata_getname(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforname, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizename := neededforname + buffername := make([]byte, bufferSizename) + ret = C.CCall_lib3mf_metadata_getname(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizename, &filledinname, (*C.char)(unsafe.Pointer(&buffername[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(buffername[:(filledinname-1)]), nil +} + +// SetName sets a new name of a metadata. +func (inst MetaData) SetName(name string) error { + ret := C.CCall_lib3mf_metadata_setname(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(name)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetKey returns the (namespace+name) of a metadata. +func (inst MetaData) GetKey() (string, error) { + var neededforkey C.uint32_t + var filledinkey C.uint32_t + ret := C.CCall_lib3mf_metadata_getkey(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforkey, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizekey := neededforkey + bufferkey := make([]byte, bufferSizekey) + ret = C.CCall_lib3mf_metadata_getkey(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizekey, &filledinkey, (*C.char)(unsafe.Pointer(&bufferkey[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(bufferkey[:(filledinkey-1)]), nil +} + +// GetMustPreserve returns, whether a metadata must be preserved. +func (inst MetaData) GetMustPreserve() (bool, error) { + var mustPreserve C.bool + ret := C.CCall_lib3mf_metadata_getmustpreserve(inst.wrapperRef.LibraryHandle, inst.Ref, &mustPreserve) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(mustPreserve), nil +} + +// SetMustPreserve sets whether a metadata must be preserved. +func (inst MetaData) SetMustPreserve(mustPreserve bool) error { + ret := C.CCall_lib3mf_metadata_setmustpreserve(inst.wrapperRef.LibraryHandle, inst.Ref, C.bool(mustPreserve)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetType returns the type of a metadata. +func (inst MetaData) GetType() (string, error) { + var neededfor_type C.uint32_t + var filledin_type C.uint32_t + ret := C.CCall_lib3mf_metadata_gettype(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededfor_type, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSize_type := neededfor_type + buffer_type := make([]byte, bufferSize_type) + ret = C.CCall_lib3mf_metadata_gettype(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSize_type, &filledin_type, (*C.char)(unsafe.Pointer(&buffer_type[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(buffer_type[:(filledin_type-1)]), nil +} + +// SetType sets a new type of a metadata. This must be a simple XML type. +func (inst MetaData) SetType(_type string) error { + ret := C.CCall_lib3mf_metadata_settype(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(_type)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetValue returns the value of the metadata. +func (inst MetaData) GetValue() (string, error) { + var neededforvalue C.uint32_t + var filledinvalue C.uint32_t + ret := C.CCall_lib3mf_metadata_getvalue(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforvalue, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizevalue := neededforvalue + buffervalue := make([]byte, bufferSizevalue) + ret = C.CCall_lib3mf_metadata_getvalue(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizevalue, &filledinvalue, (*C.char)(unsafe.Pointer(&buffervalue[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(buffervalue[:(filledinvalue-1)]), nil +} + +// SetValue sets a new value of the metadata. +func (inst MetaData) SetValue(value string) error { + ret := C.CCall_lib3mf_metadata_setvalue(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(value)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + + +// MetaDataGroup represents a Lib3MF class. +type MetaDataGroup struct { + Base +} + +func (wrapper Wrapper) NewMetaDataGroup(r ref) MetaDataGroup { + return MetaDataGroup{wrapper.NewBase(r)} +} + +// GetMetaDataCount returns the number of metadata in this metadatagroup. +func (inst MetaDataGroup) GetMetaDataCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_metadatagroup_getmetadatacount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + +// GetMetaData returns a metadata value within this metadatagroup. +func (inst MetaDataGroup) GetMetaData(index uint32) (MetaData, error) { + var metaData ref + ret := C.CCall_lib3mf_metadatagroup_getmetadata(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &metaData) + if ret != 0 { + return MetaData{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewMetaData(metaData), nil +} + +// GetMetaDataByKey returns a metadata value within this metadatagroup. +func (inst MetaDataGroup) GetMetaDataByKey(nameSpace string, name string) (MetaData, error) { + var metaData ref + ret := C.CCall_lib3mf_metadatagroup_getmetadatabykey(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(nameSpace)[0])), (*C.char)(unsafe.Pointer(&[]byte(name)[0])), &metaData) + if ret != 0 { + return MetaData{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewMetaData(metaData), nil +} + +// RemoveMetaDataByIndex removes metadata by index from the model. +func (inst MetaDataGroup) RemoveMetaDataByIndex(index uint32) error { + ret := C.CCall_lib3mf_metadatagroup_removemetadatabyindex(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// RemoveMetaData removes metadata from the model. +func (inst MetaDataGroup) RemoveMetaData(theMetaData MetaData) error { + ret := C.CCall_lib3mf_metadatagroup_removemetadata(inst.wrapperRef.LibraryHandle, inst.Ref, theMetaData.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// AddMetaData adds a new metadata to this metadatagroup. +func (inst MetaDataGroup) AddMetaData(nameSpace string, name string, value string, _type string, mustPreserve bool) (MetaData, error) { + var metaData ref + ret := C.CCall_lib3mf_metadatagroup_addmetadata(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(nameSpace)[0])), (*C.char)(unsafe.Pointer(&[]byte(name)[0])), (*C.char)(unsafe.Pointer(&[]byte(value)[0])), (*C.char)(unsafe.Pointer(&[]byte(_type)[0])), C.bool(mustPreserve), &metaData) + if ret != 0 { + return MetaData{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewMetaData(metaData), nil +} + + +// Object represents a Lib3MF class. +type Object struct { + Resource +} + +func (wrapper Wrapper) NewObject(r ref) Object { + return Object{wrapper.NewResource(r)} +} + +// GetType retrieves an object's type. +func (inst Object) GetType() (ObjectType, error) { + var objectType C.eLib3MFObjectType + ret := C.CCall_lib3mf_object_gettype(inst.wrapperRef.LibraryHandle, inst.Ref, &objectType) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return ObjectType(objectType), nil +} + +// SetType sets an object's type. +func (inst Object) SetType(objectType ObjectType) error { + ret := C.CCall_lib3mf_object_settype(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFObjectType(objectType)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetName retrieves an object's name. +func (inst Object) GetName() (string, error) { + var neededforname C.uint32_t + var filledinname C.uint32_t + ret := C.CCall_lib3mf_object_getname(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforname, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizename := neededforname + buffername := make([]byte, bufferSizename) + ret = C.CCall_lib3mf_object_getname(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizename, &filledinname, (*C.char)(unsafe.Pointer(&buffername[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(buffername[:(filledinname-1)]), nil +} + +// SetName sets an object's name string. +func (inst Object) SetName(name string) error { + ret := C.CCall_lib3mf_object_setname(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(name)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetPartNumber retrieves an object's part number. +func (inst Object) GetPartNumber() (string, error) { + var neededforpartNumber C.uint32_t + var filledinpartNumber C.uint32_t + ret := C.CCall_lib3mf_object_getpartnumber(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpartNumber, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizepartNumber := neededforpartNumber + bufferpartNumber := make([]byte, bufferSizepartNumber) + ret = C.CCall_lib3mf_object_getpartnumber(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizepartNumber, &filledinpartNumber, (*C.char)(unsafe.Pointer(&bufferpartNumber[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(bufferpartNumber[:(filledinpartNumber-1)]), nil +} + +// SetPartNumber sets an objects partnumber string. +func (inst Object) SetPartNumber(partNumber string) error { + ret := C.CCall_lib3mf_object_setpartnumber(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(partNumber)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// IsMeshObject retrieves, if an object is a mesh object. +func (inst Object) IsMeshObject() (bool, error) { + var isMeshObject C.bool + ret := C.CCall_lib3mf_object_ismeshobject(inst.wrapperRef.LibraryHandle, inst.Ref, &isMeshObject) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(isMeshObject), nil +} + +// IsComponentsObject retrieves, if an object is a components object. +func (inst Object) IsComponentsObject() (bool, error) { + var isComponentsObject C.bool + ret := C.CCall_lib3mf_object_iscomponentsobject(inst.wrapperRef.LibraryHandle, inst.Ref, &isComponentsObject) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(isComponentsObject), nil +} + +// IsLevelSetObject retrieves, if an object is a level set object. +func (inst Object) IsLevelSetObject() (bool, error) { + var isLevelSetObject C.bool + ret := C.CCall_lib3mf_object_islevelsetobject(inst.wrapperRef.LibraryHandle, inst.Ref, &isLevelSetObject) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(isLevelSetObject), nil +} + +// IsValid retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. +func (inst Object) IsValid() (bool, error) { + var isValid C.bool + ret := C.CCall_lib3mf_object_isvalid(inst.wrapperRef.LibraryHandle, inst.Ref, &isValid) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(isValid), nil +} + +// SetAttachmentAsThumbnail use an existing attachment as thumbnail for this object. +func (inst Object) SetAttachmentAsThumbnail(attachment Attachment) error { + ret := C.CCall_lib3mf_object_setattachmentasthumbnail(inst.wrapperRef.LibraryHandle, inst.Ref, attachment.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetThumbnailAttachment get the attachment containing the object thumbnail. +func (inst Object) GetThumbnailAttachment() (*Attachment, error) { + var attachment ref + ret := C.CCall_lib3mf_object_getthumbnailattachment(inst.wrapperRef.LibraryHandle, inst.Ref, &attachment) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + var _attachmentPtr *Attachment + if attachment != nil { + _attachmentPtrVal := inst.wrapperRef.NewAttachment(attachment) + _attachmentPtr = &_attachmentPtrVal + } + return _attachmentPtr, nil +} + +// ClearThumbnailAttachment clears the attachment. The attachment instance is not removed from the package. +func (inst Object) ClearThumbnailAttachment() error { + ret := C.CCall_lib3mf_object_clearthumbnailattachment(inst.wrapperRef.LibraryHandle, inst.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetOutbox returns the outbox of a build item. +func (inst Object) GetOutbox() (Box, error) { + var outbox C.sLib3MFBox + ret := C.CCall_lib3mf_object_getoutbox(inst.wrapperRef.LibraryHandle, inst.Ref, &outbox) + if ret != 0 { + return Box{}, makeError(uint32(ret)) + } + return *(*Box)(unsafe.Pointer(&outbox)), nil +} + +// GetUUID retrieves an object's uuid string (see production extension specification). +func (inst Object) GetUUID() (bool, string, error) { + var hasUUID C.bool + var neededforuUID C.uint32_t + var filledinuUID C.uint32_t + ret := C.CCall_lib3mf_object_getuuid(inst.wrapperRef.LibraryHandle, inst.Ref, &hasUUID, 0, &neededforuUID, nil) + if ret != 0 { + return false, "", makeError(uint32(ret)) + } + bufferSizeuUID := neededforuUID + bufferuUID := make([]byte, bufferSizeuUID) + ret = C.CCall_lib3mf_object_getuuid(inst.wrapperRef.LibraryHandle, inst.Ref, &hasUUID, bufferSizeuUID, &filledinuUID, (*C.char)(unsafe.Pointer(&bufferuUID[0]))) + if ret != 0 { + return false, "", makeError(uint32(ret)) + } + return bool(hasUUID), string(bufferuUID[:(filledinuUID-1)]), nil +} + +// SetUUID sets a build object's uuid string (see production extension specification). +func (inst Object) SetUUID(uUID string) error { + ret := C.CCall_lib3mf_object_setuuid(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(uUID)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetMetaDataGroup returns the metadatagroup of this object. +func (inst Object) GetMetaDataGroup() (MetaDataGroup, error) { + var metaDataGroup ref + ret := C.CCall_lib3mf_object_getmetadatagroup(inst.wrapperRef.LibraryHandle, inst.Ref, &metaDataGroup) + if ret != 0 { + return MetaDataGroup{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewMetaDataGroup(metaDataGroup), nil +} + +// SetSlicesMeshResolution set the meshresolution of the mesh object. +func (inst Object) SetSlicesMeshResolution(meshResolution SlicesMeshResolution) error { + ret := C.CCall_lib3mf_object_setslicesmeshresolution(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFSlicesMeshResolution(meshResolution)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetSlicesMeshResolution get the meshresolution of the mesh object. +func (inst Object) GetSlicesMeshResolution() (SlicesMeshResolution, error) { + var meshResolution C.eLib3MFSlicesMeshResolution + ret := C.CCall_lib3mf_object_getslicesmeshresolution(inst.wrapperRef.LibraryHandle, inst.Ref, &meshResolution) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return SlicesMeshResolution(meshResolution), nil +} + +// HasSlices returns whether the Object has a slice stack. If Recursive is true, also checks whether any references object has a slice stack. +func (inst Object) HasSlices(recursive bool) (bool, error) { + var hasSlices C.bool + ret := C.CCall_lib3mf_object_hasslices(inst.wrapperRef.LibraryHandle, inst.Ref, C.bool(recursive), &hasSlices) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(hasSlices), nil +} + +// ClearSliceStack unlinks the attached slicestack from this object. If no slice stack is attached, do noting. +func (inst Object) ClearSliceStack() error { + ret := C.CCall_lib3mf_object_clearslicestack(inst.wrapperRef.LibraryHandle, inst.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetSliceStack get the Slicestack attached to the object. +func (inst Object) GetSliceStack() (SliceStack, error) { + var sliceStackInstance ref + ret := C.CCall_lib3mf_object_getslicestack(inst.wrapperRef.LibraryHandle, inst.Ref, &sliceStackInstance) + if ret != 0 { + return SliceStack{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewSliceStack(sliceStackInstance), nil +} + +// AssignSliceStack assigns a slicestack to the object. +func (inst Object) AssignSliceStack(sliceStackInstance SliceStack) error { + ret := C.CCall_lib3mf_object_assignslicestack(inst.wrapperRef.LibraryHandle, inst.Ref, sliceStackInstance.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + + +// MeshObject represents a Lib3MF class. +type MeshObject struct { + Object +} + +func (wrapper Wrapper) NewMeshObject(r ref) MeshObject { + return MeshObject{wrapper.NewObject(r)} +} + +// GetVertexCount returns the vertex count of a mesh object. +func (inst MeshObject) GetVertexCount() (uint32, error) { + var vertexCount C.uint32_t + ret := C.CCall_lib3mf_meshobject_getvertexcount(inst.wrapperRef.LibraryHandle, inst.Ref, &vertexCount) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(vertexCount), nil +} + +// GetTriangleCount returns the triangle count of a mesh object. +func (inst MeshObject) GetTriangleCount() (uint32, error) { + var vertexCount C.uint32_t + ret := C.CCall_lib3mf_meshobject_gettrianglecount(inst.wrapperRef.LibraryHandle, inst.Ref, &vertexCount) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(vertexCount), nil +} + +// GetVertex returns the vertex count of a mesh object. +func (inst MeshObject) GetVertex(index uint32) (Position, error) { + var coordinates C.sLib3MFPosition + ret := C.CCall_lib3mf_meshobject_getvertex(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &coordinates) + if ret != 0 { + return Position{}, makeError(uint32(ret)) + } + return *(*Position)(unsafe.Pointer(&coordinates)), nil +} + +// SetVertex sets the coordinates of a single vertex of a mesh object. +func (inst MeshObject) SetVertex(index uint32, coordinates Position) error { + ret := C.CCall_lib3mf_meshobject_setvertex(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), (*C.sLib3MFPosition)(unsafe.Pointer(&coordinates))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// AddVertex adds a single vertex to a mesh object. +func (inst MeshObject) AddVertex(coordinates Position) (uint32, error) { + var newIndex C.uint32_t + ret := C.CCall_lib3mf_meshobject_addvertex(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFPosition)(unsafe.Pointer(&coordinates)), &newIndex) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(newIndex), nil +} + +// GetVertices obtains all vertex positions of a mesh object. +func (inst MeshObject) GetVertices(vertices []Position) ([]Position, error) { + var neededforvertices C.uint64_t + ret := C.CCall_lib3mf_meshobject_getvertices(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforvertices, nil) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + if len(vertices) < int(neededforvertices) { + vertices = append(vertices, make([]Position, int(neededforvertices)-len(vertices))...) + } + ret = C.CCall_lib3mf_meshobject_getvertices(inst.wrapperRef.LibraryHandle, inst.Ref, neededforvertices, nil, (*C.sLib3MFPosition)(unsafe.Pointer(&vertices[0]))) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + return vertices[:int(neededforvertices)], nil +} + +// GetTriangle returns indices of a single triangle of a mesh object. +func (inst MeshObject) GetTriangle(index uint32) (Triangle, error) { + var indices C.sLib3MFTriangle + ret := C.CCall_lib3mf_meshobject_gettriangle(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &indices) + if ret != 0 { + return Triangle{}, makeError(uint32(ret)) + } + return *(*Triangle)(unsafe.Pointer(&indices)), nil +} + +// SetTriangle sets the indices of a single triangle of a mesh object. +func (inst MeshObject) SetTriangle(index uint32, indices Triangle) error { + ret := C.CCall_lib3mf_meshobject_settriangle(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), (*C.sLib3MFTriangle)(unsafe.Pointer(&indices))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// AddTriangle adds a single triangle to a mesh object. +func (inst MeshObject) AddTriangle(indices Triangle) (uint32, error) { + var newIndex C.uint32_t + ret := C.CCall_lib3mf_meshobject_addtriangle(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFTriangle)(unsafe.Pointer(&indices)), &newIndex) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(newIndex), nil +} + +// GetTriangleIndices get all triangles of a mesh object. +func (inst MeshObject) GetTriangleIndices(indices []Triangle) ([]Triangle, error) { + var neededforindices C.uint64_t + ret := C.CCall_lib3mf_meshobject_gettriangleindices(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforindices, nil) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + if len(indices) < int(neededforindices) { + indices = append(indices, make([]Triangle, int(neededforindices)-len(indices))...) + } + ret = C.CCall_lib3mf_meshobject_gettriangleindices(inst.wrapperRef.LibraryHandle, inst.Ref, neededforindices, nil, (*C.sLib3MFTriangle)(unsafe.Pointer(&indices[0]))) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + return indices[:int(neededforindices)], nil +} + +// SetObjectLevelProperty sets the property at the object-level of the mesh object. +func (inst MeshObject) SetObjectLevelProperty(uniqueResourceID uint32, propertyID uint32) error { + ret := C.CCall_lib3mf_meshobject_setobjectlevelproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(uniqueResourceID), C.uint32_t(propertyID)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetObjectLevelProperty gets the property at the object-level of the mesh object. +func (inst MeshObject) GetObjectLevelProperty() (uint32, uint32, bool, error) { + var uniqueResourceID C.uint32_t + var propertyID C.uint32_t + var hasObjectLevelProperty C.bool + ret := C.CCall_lib3mf_meshobject_getobjectlevelproperty(inst.wrapperRef.LibraryHandle, inst.Ref, &uniqueResourceID, &propertyID, &hasObjectLevelProperty) + if ret != 0 { + return 0, 0, false, makeError(uint32(ret)) + } + return uint32(uniqueResourceID), uint32(propertyID), bool(hasObjectLevelProperty), nil +} + +// SetTriangleProperties sets the properties of a single triangle of a mesh object. +func (inst MeshObject) SetTriangleProperties(index uint32, properties TriangleProperties) error { + ret := C.CCall_lib3mf_meshobject_settriangleproperties(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), (*C.sLib3MFTriangleProperties)(unsafe.Pointer(&properties))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetTriangleProperties gets the properties of a single triangle of a mesh object. +func (inst MeshObject) GetTriangleProperties(index uint32) (TriangleProperties, error) { + var property C.sLib3MFTriangleProperties + ret := C.CCall_lib3mf_meshobject_gettriangleproperties(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &property) + if ret != 0 { + return TriangleProperties{}, makeError(uint32(ret)) + } + return *(*TriangleProperties)(unsafe.Pointer(&property)), nil +} + +// SetAllTriangleProperties sets the properties of all triangles of a mesh object. Sets the object level property to the first entry of the passed triangle properties, if not yet specified. +func (inst MeshObject) SetAllTriangleProperties(propertiesArray []TriangleProperties) error { + ret := C.CCall_lib3mf_meshobject_setalltriangleproperties(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(propertiesArray)), (*C.sLib3MFTriangleProperties)(unsafe.Pointer(&propertiesArray[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetAllTriangleProperties gets the properties of all triangles of a mesh object. +func (inst MeshObject) GetAllTriangleProperties(propertiesArray []TriangleProperties) ([]TriangleProperties, error) { + var neededforpropertiesArray C.uint64_t + ret := C.CCall_lib3mf_meshobject_getalltriangleproperties(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpropertiesArray, nil) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + if len(propertiesArray) < int(neededforpropertiesArray) { + propertiesArray = append(propertiesArray, make([]TriangleProperties, int(neededforpropertiesArray)-len(propertiesArray))...) + } + ret = C.CCall_lib3mf_meshobject_getalltriangleproperties(inst.wrapperRef.LibraryHandle, inst.Ref, neededforpropertiesArray, nil, (*C.sLib3MFTriangleProperties)(unsafe.Pointer(&propertiesArray[0]))) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + return propertiesArray[:int(neededforpropertiesArray)], nil +} + +// ClearAllProperties clears all properties of this mesh object (triangle and object-level). +func (inst MeshObject) ClearAllProperties() error { + ret := C.CCall_lib3mf_meshobject_clearallproperties(inst.wrapperRef.LibraryHandle, inst.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// SetGeometry set all triangles of a mesh object. +func (inst MeshObject) SetGeometry(vertices []Position, indices []Triangle) error { + ret := C.CCall_lib3mf_meshobject_setgeometry(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(vertices)), (*C.sLib3MFPosition)(unsafe.Pointer(&vertices[0])), C.uint64_t(len(indices)), (*C.sLib3MFTriangle)(unsafe.Pointer(&indices[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// IsManifoldAndOriented retrieves, if an object describes a topologically oriented and manifold mesh, according to the core spec. +func (inst MeshObject) IsManifoldAndOriented() (bool, error) { + var isManifoldAndOriented C.bool + ret := C.CCall_lib3mf_meshobject_ismanifoldandoriented(inst.wrapperRef.LibraryHandle, inst.Ref, &isManifoldAndOriented) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(isManifoldAndOriented), nil +} + +// BeamLattice retrieves the BeamLattice within this MeshObject. +func (inst MeshObject) BeamLattice() (BeamLattice, error) { + var theBeamLattice ref + ret := C.CCall_lib3mf_meshobject_beamlattice(inst.wrapperRef.LibraryHandle, inst.Ref, &theBeamLattice) + if ret != 0 { + return BeamLattice{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewBeamLattice(theBeamLattice), nil +} + +// GetVolumeData retrieves the VolumeData of this MeshObject. +func (inst MeshObject) GetVolumeData() (*VolumeData, error) { + var theVolumeData ref + ret := C.CCall_lib3mf_meshobject_getvolumedata(inst.wrapperRef.LibraryHandle, inst.Ref, &theVolumeData) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + var _theVolumeDataPtr *VolumeData + if theVolumeData != nil { + _theVolumeDataPtrVal := inst.wrapperRef.NewVolumeData(theVolumeData) + _theVolumeDataPtr = &_theVolumeDataPtrVal + } + return _theVolumeDataPtr, nil +} + +// SetVolumeData sets the VolumeData of this MeshObject. +func (inst MeshObject) SetVolumeData(theVolumeData VolumeData) error { + ret := C.CCall_lib3mf_meshobject_setvolumedata(inst.wrapperRef.LibraryHandle, inst.Ref, theVolumeData.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + + +// LevelSet represents a Lib3MF class. +type LevelSet struct { + Object +} + +func (wrapper Wrapper) NewLevelSet(r ref) LevelSet { + return LevelSet{wrapper.NewObject(r)} +} + +// GetFunction returns the function that is used as boundary shape. +func (inst LevelSet) GetFunction() (*Function, error) { + var theFunction ref + ret := C.CCall_lib3mf_levelset_getfunction(inst.wrapperRef.LibraryHandle, inst.Ref, &theFunction) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + var _theFunctionPtr *Function + if theFunction != nil { + _theFunctionPtrVal := inst.wrapperRef.NewFunction(theFunction) + _theFunctionPtr = &_theFunctionPtrVal + } + return _theFunctionPtr, nil +} + +// SetFunction sets the function to use as boundary shape. +func (inst LevelSet) SetFunction(theFunction Function) error { + ret := C.CCall_lib3mf_levelset_setfunction(inst.wrapperRef.LibraryHandle, inst.Ref, theFunction.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetTransform returns the transformation matrix into the coordinate system of the referenced Function. +func (inst LevelSet) GetTransform() (Transform, error) { + var transform C.sLib3MFTransform + ret := C.CCall_lib3mf_levelset_gettransform(inst.wrapperRef.LibraryHandle, inst.Ref, &transform) + if ret != 0 { + return Transform{}, makeError(uint32(ret)) + } + return *(*Transform)(unsafe.Pointer(&transform)), nil +} + +// SetTransform sets the transformation matrix into the coordinate system of the referenced Function. +func (inst LevelSet) SetTransform(transform Transform) error { + ret := C.CCall_lib3mf_levelset_settransform(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFTransform)(unsafe.Pointer(&transform))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetChannelName returns the name of the function output channel to use. +func (inst LevelSet) GetChannelName() (string, error) { + var neededforchannelName C.uint32_t + var filledinchannelName C.uint32_t + ret := C.CCall_lib3mf_levelset_getchannelname(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforchannelName, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizechannelName := neededforchannelName + bufferchannelName := make([]byte, bufferSizechannelName) + ret = C.CCall_lib3mf_levelset_getchannelname(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizechannelName, &filledinchannelName, (*C.char)(unsafe.Pointer(&bufferchannelName[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(bufferchannelName[:(filledinchannelName-1)]), nil +} + +// SetChannelName sets the name of the function output channel to use. +func (inst LevelSet) SetChannelName(channelName string) error { + ret := C.CCall_lib3mf_levelset_setchannelname(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(channelName)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// SetMinFeatureSize sets the minimal feature size as a hint for the function evaluator. +func (inst LevelSet) SetMinFeatureSize(minFeatureSize float64) error { + ret := C.CCall_lib3mf_levelset_setminfeaturesize(inst.wrapperRef.LibraryHandle, inst.Ref, C.double(minFeatureSize)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetMinFeatureSize returns the minimal feature size as a hint for the function evaluator. +func (inst LevelSet) GetMinFeatureSize() (float64, error) { + var minFeatureSize C.double + ret := C.CCall_lib3mf_levelset_getminfeaturesize(inst.wrapperRef.LibraryHandle, inst.Ref, &minFeatureSize) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return float64(minFeatureSize), nil +} + +// SetFallBackValue sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +func (inst LevelSet) SetFallBackValue(fallBackValue float64) error { + ret := C.CCall_lib3mf_levelset_setfallbackvalue(inst.wrapperRef.LibraryHandle, inst.Ref, C.double(fallBackValue)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetFallBackValue returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +func (inst LevelSet) GetFallBackValue() (float64, error) { + var fallBackValue C.double + ret := C.CCall_lib3mf_levelset_getfallbackvalue(inst.wrapperRef.LibraryHandle, inst.Ref, &fallBackValue) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return float64(fallBackValue), nil +} + +// SetMeshBBoxOnly if set only the bounding box of the mesh is intersected with the boundary. +func (inst LevelSet) SetMeshBBoxOnly(meshBBoxOnly bool) error { + ret := C.CCall_lib3mf_levelset_setmeshbboxonly(inst.wrapperRef.LibraryHandle, inst.Ref, C.bool(meshBBoxOnly)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetMeshBBoxOnly if set only the bounding box of the mesh is intersected with the boundary. +func (inst LevelSet) GetMeshBBoxOnly() (bool, error) { + var meshBBoxOnly C.bool + ret := C.CCall_lib3mf_levelset_getmeshbboxonly(inst.wrapperRef.LibraryHandle, inst.Ref, &meshBBoxOnly) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(meshBBoxOnly), nil +} + +// SetMesh sets the mesh to use as evaluation domain. +func (inst LevelSet) SetMesh(theMesh MeshObject) error { + ret := C.CCall_lib3mf_levelset_setmesh(inst.wrapperRef.LibraryHandle, inst.Ref, theMesh.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetMesh returns the mesh that is used as evaluation domain. +func (inst LevelSet) GetMesh() (*MeshObject, error) { + var theMesh ref + ret := C.CCall_lib3mf_levelset_getmesh(inst.wrapperRef.LibraryHandle, inst.Ref, &theMesh) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + var _theMeshPtr *MeshObject + if theMesh != nil { + _theMeshPtrVal := inst.wrapperRef.NewMeshObject(theMesh) + _theMeshPtr = &_theMeshPtrVal + } + return _theMeshPtr, nil +} + +// GetVolumeData retrieves the VolumeData this Object. +func (inst LevelSet) GetVolumeData() (*VolumeData, error) { + var theVolumeData ref + ret := C.CCall_lib3mf_levelset_getvolumedata(inst.wrapperRef.LibraryHandle, inst.Ref, &theVolumeData) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + var _theVolumeDataPtr *VolumeData + if theVolumeData != nil { + _theVolumeDataPtrVal := inst.wrapperRef.NewVolumeData(theVolumeData) + _theVolumeDataPtr = &_theVolumeDataPtrVal + } + return _theVolumeDataPtr, nil +} + +// SetVolumeData sets the VolumeData of this LevelSet. +func (inst LevelSet) SetVolumeData(theVolumeData VolumeData) error { + ret := C.CCall_lib3mf_levelset_setvolumedata(inst.wrapperRef.LibraryHandle, inst.Ref, theVolumeData.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + + +// BeamLattice represents a Lib3MF class. +type BeamLattice struct { + Base +} + +func (wrapper Wrapper) NewBeamLattice(r ref) BeamLattice { + return BeamLattice{wrapper.NewBase(r)} +} + +// GetMinLength returns the minimal length of beams for the beamlattice. +func (inst BeamLattice) GetMinLength() (float64, error) { + var minLength C.double + ret := C.CCall_lib3mf_beamlattice_getminlength(inst.wrapperRef.LibraryHandle, inst.Ref, &minLength) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return float64(minLength), nil +} + +// SetMinLength sets the minimal length of beams for the beamlattice. +func (inst BeamLattice) SetMinLength(minLength float64) error { + ret := C.CCall_lib3mf_beamlattice_setminlength(inst.wrapperRef.LibraryHandle, inst.Ref, C.double(minLength)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetClipping returns the clipping mode and the clipping-mesh for the beamlattice of this mesh. +func (inst BeamLattice) GetClipping() (BeamLatticeClipMode, uint32, error) { + var clipMode C.eLib3MFBeamLatticeClipMode + var uniqueResourceID C.uint32_t + ret := C.CCall_lib3mf_beamlattice_getclipping(inst.wrapperRef.LibraryHandle, inst.Ref, &clipMode, &uniqueResourceID) + if ret != 0 { + return 0, 0, makeError(uint32(ret)) + } + return BeamLatticeClipMode(clipMode), uint32(uniqueResourceID), nil +} + +// SetClipping sets the clipping mode and the clipping-mesh for the beamlattice of this mesh. +func (inst BeamLattice) SetClipping(clipMode BeamLatticeClipMode, uniqueResourceID uint32) error { + ret := C.CCall_lib3mf_beamlattice_setclipping(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFBeamLatticeClipMode(clipMode), C.uint32_t(uniqueResourceID)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetRepresentation returns the representation-mesh for the beamlattice of this mesh. +func (inst BeamLattice) GetRepresentation() (bool, uint32, error) { + var hasRepresentation C.bool + var uniqueResourceID C.uint32_t + ret := C.CCall_lib3mf_beamlattice_getrepresentation(inst.wrapperRef.LibraryHandle, inst.Ref, &hasRepresentation, &uniqueResourceID) + if ret != 0 { + return false, 0, makeError(uint32(ret)) + } + return bool(hasRepresentation), uint32(uniqueResourceID), nil +} + +// SetRepresentation sets the representation-mesh for the beamlattice of this mesh. +func (inst BeamLattice) SetRepresentation(uniqueResourceID uint32) error { + ret := C.CCall_lib3mf_beamlattice_setrepresentation(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(uniqueResourceID)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetBallOptions returns the ball mode and the default ball radius for the beamlattice of this mesh. +func (inst BeamLattice) GetBallOptions() (BeamLatticeBallMode, float64, error) { + var ballMode C.eLib3MFBeamLatticeBallMode + var ballRadius C.double + ret := C.CCall_lib3mf_beamlattice_getballoptions(inst.wrapperRef.LibraryHandle, inst.Ref, &ballMode, &ballRadius) + if ret != 0 { + return 0, 0, makeError(uint32(ret)) + } + return BeamLatticeBallMode(ballMode), float64(ballRadius), nil +} + +// SetBallOptions sets the ball mode and thedefault ball radius for the beamlattice. +func (inst BeamLattice) SetBallOptions(ballMode BeamLatticeBallMode, ballRadius float64) error { + ret := C.CCall_lib3mf_beamlattice_setballoptions(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFBeamLatticeBallMode(ballMode), C.double(ballRadius)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetBeamCount returns the beam count of a mesh object. +func (inst BeamLattice) GetBeamCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_beamlattice_getbeamcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + +// GetBeam returns indices, radii and capmodes of a single beam of a mesh object. +func (inst BeamLattice) GetBeam(index uint32) (Beam, error) { + var beamInfo C.sLib3MFBeam + ret := C.CCall_lib3mf_beamlattice_getbeam(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &beamInfo) + if ret != 0 { + return Beam{}, makeError(uint32(ret)) + } + return *(*Beam)(unsafe.Pointer(&beamInfo)), nil +} + +// AddBeam adds a single beam to a mesh object. +func (inst BeamLattice) AddBeam(beamInfo Beam) (uint32, error) { + var index C.uint32_t + ret := C.CCall_lib3mf_beamlattice_addbeam(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFBeam)(unsafe.Pointer(&beamInfo)), &index) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(index), nil +} + +// SetBeam sets the indices, radii and capmodes of a single beam of a mesh object. +func (inst BeamLattice) SetBeam(index uint32, beamInfo Beam) error { + ret := C.CCall_lib3mf_beamlattice_setbeam(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), (*C.sLib3MFBeam)(unsafe.Pointer(&beamInfo))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// SetBeams sets all beam indices, radii and capmodes of a mesh object. +func (inst BeamLattice) SetBeams(beamInfo []Beam) error { + ret := C.CCall_lib3mf_beamlattice_setbeams(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(beamInfo)), (*C.sLib3MFBeam)(unsafe.Pointer(&beamInfo[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetBeams obtains all beam indices, radii and capmodes of a mesh object. +func (inst BeamLattice) GetBeams(beamInfo []Beam) ([]Beam, error) { + var neededforbeamInfo C.uint64_t + ret := C.CCall_lib3mf_beamlattice_getbeams(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforbeamInfo, nil) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + if len(beamInfo) < int(neededforbeamInfo) { + beamInfo = append(beamInfo, make([]Beam, int(neededforbeamInfo)-len(beamInfo))...) + } + ret = C.CCall_lib3mf_beamlattice_getbeams(inst.wrapperRef.LibraryHandle, inst.Ref, neededforbeamInfo, nil, (*C.sLib3MFBeam)(unsafe.Pointer(&beamInfo[0]))) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + return beamInfo[:int(neededforbeamInfo)], nil +} + +// GetBallCount returns the ball count of a mesh object. +func (inst BeamLattice) GetBallCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_beamlattice_getballcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + +// GetBall returns index and radius of a single ball of a mesh object. +func (inst BeamLattice) GetBall(index uint32) (Ball, error) { + var ballInfo C.sLib3MFBall + ret := C.CCall_lib3mf_beamlattice_getball(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &ballInfo) + if ret != 0 { + return Ball{}, makeError(uint32(ret)) + } + return *(*Ball)(unsafe.Pointer(&ballInfo)), nil +} + +// AddBall adds a single ball to a mesh object. +func (inst BeamLattice) AddBall(ballInfo Ball) (uint32, error) { + var index C.uint32_t + ret := C.CCall_lib3mf_beamlattice_addball(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFBall)(unsafe.Pointer(&ballInfo)), &index) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(index), nil +} + +// SetBall sets the index and radius of a single ball of a mesh object. +func (inst BeamLattice) SetBall(index uint32, ballInfo Ball) error { + ret := C.CCall_lib3mf_beamlattice_setball(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), (*C.sLib3MFBall)(unsafe.Pointer(&ballInfo))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// SetBalls sets all ball indices and radii of a mesh object. +func (inst BeamLattice) SetBalls(ballInfo []Ball) error { + ret := C.CCall_lib3mf_beamlattice_setballs(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(ballInfo)), (*C.sLib3MFBall)(unsafe.Pointer(&ballInfo[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetBalls obtains all ball indices and radii of a mesh object. +func (inst BeamLattice) GetBalls(ballInfo []Ball) ([]Ball, error) { + var neededforballInfo C.uint64_t + ret := C.CCall_lib3mf_beamlattice_getballs(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforballInfo, nil) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + if len(ballInfo) < int(neededforballInfo) { + ballInfo = append(ballInfo, make([]Ball, int(neededforballInfo)-len(ballInfo))...) + } + ret = C.CCall_lib3mf_beamlattice_getballs(inst.wrapperRef.LibraryHandle, inst.Ref, neededforballInfo, nil, (*C.sLib3MFBall)(unsafe.Pointer(&ballInfo[0]))) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + return ballInfo[:int(neededforballInfo)], nil +} + +// GetBeamSetCount returns the number of beamsets of a mesh object. +func (inst BeamLattice) GetBeamSetCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_beamlattice_getbeamsetcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + +// AddBeamSet adds an empty beamset to a mesh object. +func (inst BeamLattice) AddBeamSet() (BeamSet, error) { + var beamSet ref + ret := C.CCall_lib3mf_beamlattice_addbeamset(inst.wrapperRef.LibraryHandle, inst.Ref, &beamSet) + if ret != 0 { + return BeamSet{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewBeamSet(beamSet), nil +} + +// GetBeamSet returns a beamset of a mesh object. +func (inst BeamLattice) GetBeamSet(index uint32) (BeamSet, error) { + var beamSet ref + ret := C.CCall_lib3mf_beamlattice_getbeamset(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &beamSet) + if ret != 0 { + return BeamSet{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewBeamSet(beamSet), nil +} + + +// FunctionReference represents a Lib3MF class. +type FunctionReference struct { + Base +} + +func (wrapper Wrapper) NewFunctionReference(r ref) FunctionReference { + return FunctionReference{wrapper.NewBase(r)} +} + +// GetFunctionResourceID returns the UniqueResourceID of the Function. Only functions with a 'pos'-input are allowed. +func (inst FunctionReference) GetFunctionResourceID() (uint32, error) { + var uniqueResourceID C.uint32_t + ret := C.CCall_lib3mf_functionreference_getfunctionresourceid(inst.wrapperRef.LibraryHandle, inst.Ref, &uniqueResourceID) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(uniqueResourceID), nil +} + +// SetFunctionResourceID sets the UniqueResourceID to refer to. +func (inst FunctionReference) SetFunctionResourceID(uniqueResourceID uint32) error { + ret := C.CCall_lib3mf_functionreference_setfunctionresourceid(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(uniqueResourceID)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetTransform returns the transformation matrix into the coordinate system of the referenced Function. +func (inst FunctionReference) GetTransform() (Transform, error) { + var transform C.sLib3MFTransform + ret := C.CCall_lib3mf_functionreference_gettransform(inst.wrapperRef.LibraryHandle, inst.Ref, &transform) + if ret != 0 { + return Transform{}, makeError(uint32(ret)) + } + return *(*Transform)(unsafe.Pointer(&transform)), nil +} + +// SetTransform sets the transformation matrix into the coordinate system of the referenced Function. +func (inst FunctionReference) SetTransform(transform Transform) error { + ret := C.CCall_lib3mf_functionreference_settransform(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFTransform)(unsafe.Pointer(&transform))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetChannelName returns the name of the function output channel to use. +func (inst FunctionReference) GetChannelName() (string, error) { + var neededforchannelName C.uint32_t + var filledinchannelName C.uint32_t + ret := C.CCall_lib3mf_functionreference_getchannelname(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforchannelName, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizechannelName := neededforchannelName + bufferchannelName := make([]byte, bufferSizechannelName) + ret = C.CCall_lib3mf_functionreference_getchannelname(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizechannelName, &filledinchannelName, (*C.char)(unsafe.Pointer(&bufferchannelName[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(bufferchannelName[:(filledinchannelName-1)]), nil +} + +// SetChannelName sets the name of the function output channel to use. +func (inst FunctionReference) SetChannelName(channelName string) error { + ret := C.CCall_lib3mf_functionreference_setchannelname(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(channelName)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// SetMinFeatureSize sets the minimal feature size as a hint for the function evaluator. +func (inst FunctionReference) SetMinFeatureSize(minFeatureSize float64) error { + ret := C.CCall_lib3mf_functionreference_setminfeaturesize(inst.wrapperRef.LibraryHandle, inst.Ref, C.double(minFeatureSize)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetMinFeatureSize returns the minimal feature size as a hint for the function evaluator. +func (inst FunctionReference) GetMinFeatureSize() (float64, error) { + var minFeatureSize C.double + ret := C.CCall_lib3mf_functionreference_getminfeaturesize(inst.wrapperRef.LibraryHandle, inst.Ref, &minFeatureSize) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return float64(minFeatureSize), nil +} + +// SetFallBackValue sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +func (inst FunctionReference) SetFallBackValue(fallBackValue float64) error { + ret := C.CCall_lib3mf_functionreference_setfallbackvalue(inst.wrapperRef.LibraryHandle, inst.Ref, C.double(fallBackValue)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetFallBackValue returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +func (inst FunctionReference) GetFallBackValue() (float64, error) { + var fallBackValue C.double + ret := C.CCall_lib3mf_functionreference_getfallbackvalue(inst.wrapperRef.LibraryHandle, inst.Ref, &fallBackValue) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return float64(fallBackValue), nil +} + + +// VolumeDataColor represents a Lib3MF class. +type VolumeDataColor struct { + FunctionReference +} + +func (wrapper Wrapper) NewVolumeDataColor(r ref) VolumeDataColor { + return VolumeDataColor{wrapper.NewFunctionReference(r)} +} + + +// MaterialMapping represents a Lib3MF class. +type MaterialMapping struct { + FunctionReference +} + +func (wrapper Wrapper) NewMaterialMapping(r ref) MaterialMapping { + return MaterialMapping{wrapper.NewFunctionReference(r)} +} + + +// VolumeDataComposite represents a Lib3MF class. +type VolumeDataComposite struct { + Base +} + +func (wrapper Wrapper) NewVolumeDataComposite(r ref) VolumeDataComposite { + return VolumeDataComposite{wrapper.NewBase(r)} +} + +// GetBaseMaterialGroup returns the BaseMaterialGroup used within this volume data item. +func (inst VolumeDataComposite) GetBaseMaterialGroup() (BaseMaterialGroup, error) { + var baseMaterialGroupInstance ref + ret := C.CCall_lib3mf_volumedatacomposite_getbasematerialgroup(inst.wrapperRef.LibraryHandle, inst.Ref, &baseMaterialGroupInstance) + if ret != 0 { + return BaseMaterialGroup{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewBaseMaterialGroup(baseMaterialGroupInstance), nil +} + +// SetBaseMaterialGroup sets the BaseMaterialGroup to use within this volume data item. +func (inst VolumeDataComposite) SetBaseMaterialGroup(baseMaterialGroupInstance BaseMaterialGroup) error { + ret := C.CCall_lib3mf_volumedatacomposite_setbasematerialgroup(inst.wrapperRef.LibraryHandle, inst.Ref, baseMaterialGroupInstance.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetMaterialMappingCount returns the number of material mappings of this VolumeDataComposite element. +func (inst VolumeDataComposite) GetMaterialMappingCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_volumedatacomposite_getmaterialmappingcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + +// GetMaterialMapping returns MaterialMappting with given index. +func (inst VolumeDataComposite) GetMaterialMapping(index uint32) (MaterialMapping, error) { + var theMaterialMapping ref + ret := C.CCall_lib3mf_volumedatacomposite_getmaterialmapping(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &theMaterialMapping) + if ret != 0 { + return MaterialMapping{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewMaterialMapping(theMaterialMapping), nil +} + +// AddMaterialMapping adds a the MaterialMapping. +func (inst VolumeDataComposite) AddMaterialMapping(transform Transform) (MaterialMapping, error) { + var theMaterialMapping ref + ret := C.CCall_lib3mf_volumedatacomposite_addmaterialmapping(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFTransform)(unsafe.Pointer(&transform)), &theMaterialMapping) + if ret != 0 { + return MaterialMapping{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewMaterialMapping(theMaterialMapping), nil +} + +// RemoveMaterialMapping removes the MaterialMapping with given index. +func (inst VolumeDataComposite) RemoveMaterialMapping(index uint32) error { + ret := C.CCall_lib3mf_volumedatacomposite_removematerialmapping(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + + +// VolumeDataProperty represents a Lib3MF class. +type VolumeDataProperty struct { + FunctionReference +} + +func (wrapper Wrapper) NewVolumeDataProperty(r ref) VolumeDataProperty { + return VolumeDataProperty{wrapper.NewFunctionReference(r)} +} + +// GetName gets the qualified name of this property. +func (inst VolumeDataProperty) GetName() (string, error) { + var neededforpropertyName C.uint32_t + var filledinpropertyName C.uint32_t + ret := C.CCall_lib3mf_volumedataproperty_getname(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpropertyName, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizepropertyName := neededforpropertyName + bufferpropertyName := make([]byte, bufferSizepropertyName) + ret = C.CCall_lib3mf_volumedataproperty_getname(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizepropertyName, &filledinpropertyName, (*C.char)(unsafe.Pointer(&bufferpropertyName[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(bufferpropertyName[:(filledinpropertyName-1)]), nil +} + +// SetIsRequired sets whether this property is required to process this 3MF document instance. +func (inst VolumeDataProperty) SetIsRequired(isRequired bool) error { + ret := C.CCall_lib3mf_volumedataproperty_setisrequired(inst.wrapperRef.LibraryHandle, inst.Ref, C.bool(isRequired)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// IsRequired returns whether this property is required to process this 3MF document instance. +func (inst VolumeDataProperty) IsRequired() (bool, error) { + var isRequired C.bool + ret := C.CCall_lib3mf_volumedataproperty_isrequired(inst.wrapperRef.LibraryHandle, inst.Ref, &isRequired) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(isRequired), nil +} + + +// VolumeData represents a Lib3MF class. +type VolumeData struct { + Resource +} + +func (wrapper Wrapper) NewVolumeData(r ref) VolumeData { + return VolumeData{wrapper.NewResource(r)} +} + +// GetComposite returns the VolumeDataComposite of this VolumeData instance. +func (inst VolumeData) GetComposite() (*VolumeDataComposite, error) { + var theCompositeData ref + ret := C.CCall_lib3mf_volumedata_getcomposite(inst.wrapperRef.LibraryHandle, inst.Ref, &theCompositeData) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + var _theCompositeDataPtr *VolumeDataComposite + if theCompositeData != nil { + _theCompositeDataPtrVal := inst.wrapperRef.NewVolumeDataComposite(theCompositeData) + _theCompositeDataPtr = &_theCompositeDataPtrVal + } + return _theCompositeDataPtr, nil +} + +// CreateNewComposite creates a new VolumeDataComposite for this VolumeData instance. +func (inst VolumeData) CreateNewComposite() (VolumeDataComposite, error) { + var theCompositeData ref + ret := C.CCall_lib3mf_volumedata_createnewcomposite(inst.wrapperRef.LibraryHandle, inst.Ref, &theCompositeData) + if ret != 0 { + return VolumeDataComposite{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewVolumeDataComposite(theCompositeData), nil +} + +// RemoveComposite removes the VolumeDataComposite of this VolumeData instance. +func (inst VolumeData) RemoveComposite() error { + ret := C.CCall_lib3mf_volumedata_removecomposite(inst.wrapperRef.LibraryHandle, inst.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetColor returns the VolumeDataColor of this VolumeData instance. +func (inst VolumeData) GetColor() (*VolumeDataColor, error) { + var theColorData ref + ret := C.CCall_lib3mf_volumedata_getcolor(inst.wrapperRef.LibraryHandle, inst.Ref, &theColorData) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + var _theColorDataPtr *VolumeDataColor + if theColorData != nil { + _theColorDataPtrVal := inst.wrapperRef.NewVolumeDataColor(theColorData) + _theColorDataPtr = &_theColorDataPtrVal + } + return _theColorDataPtr, nil +} + +// CreateNewColor creates a new VolumeDataColor for this VolumeData instance. +func (inst VolumeData) CreateNewColor(theFunction Function) (VolumeDataColor, error) { + var theColorData ref + ret := C.CCall_lib3mf_volumedata_createnewcolor(inst.wrapperRef.LibraryHandle, inst.Ref, theFunction.Ref, &theColorData) + if ret != 0 { + return VolumeDataColor{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewVolumeDataColor(theColorData), nil +} + +// RemoveColor removes the VolumeDataColor of this VolumeData instance. +func (inst VolumeData) RemoveColor() error { + ret := C.CCall_lib3mf_volumedata_removecolor(inst.wrapperRef.LibraryHandle, inst.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetPropertyCount returns the number of VolumeDataProperty. +func (inst VolumeData) GetPropertyCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_volumedata_getpropertycount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + +// GetProperty returns the VolumeDataProperty at a given Index. +func (inst VolumeData) GetProperty(index uint32) (VolumeDataProperty, error) { + var theVolumeDataProperty ref + ret := C.CCall_lib3mf_volumedata_getproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &theVolumeDataProperty) + if ret != 0 { + return VolumeDataProperty{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewVolumeDataProperty(theVolumeDataProperty), nil +} + +// AddPropertyFromFunction adds a new VolumeDataProperty from a Function. +func (inst VolumeData) AddPropertyFromFunction(name string, theFunction Function) (VolumeDataProperty, error) { + var theVolumeDataProperty ref + ret := C.CCall_lib3mf_volumedata_addpropertyfromfunction(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(name)[0])), theFunction.Ref, &theVolumeDataProperty) + if ret != 0 { + return VolumeDataProperty{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewVolumeDataProperty(theVolumeDataProperty), nil +} + +// RemoveProperty removes the VolumeDataProperty with a given index. +func (inst VolumeData) RemoveProperty(index uint32) error { + ret := C.CCall_lib3mf_volumedata_removeproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + + +// Component represents a Lib3MF class. +type Component struct { + Base +} + +func (wrapper Wrapper) NewComponent(r ref) Component { + return Component{wrapper.NewBase(r)} +} + +// GetObjectResource returns the Resource Instance of the component. +func (inst Component) GetObjectResource() (Object, error) { + var objectResource ref + ret := C.CCall_lib3mf_component_getobjectresource(inst.wrapperRef.LibraryHandle, inst.Ref, &objectResource) + if ret != 0 { + return Object{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewObject(objectResource), nil +} + +// GetObjectResourceID returns the UniqueResourceID of the component. +func (inst Component) GetObjectResourceID() (uint32, error) { + var uniqueResourceID C.uint32_t + ret := C.CCall_lib3mf_component_getobjectresourceid(inst.wrapperRef.LibraryHandle, inst.Ref, &uniqueResourceID) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(uniqueResourceID), nil +} + +// GetUUID returns, whether a component has a UUID and, if true, the component's UUID. +func (inst Component) GetUUID() (bool, string, error) { + var hasUUID C.bool + var neededforuUID C.uint32_t + var filledinuUID C.uint32_t + ret := C.CCall_lib3mf_component_getuuid(inst.wrapperRef.LibraryHandle, inst.Ref, &hasUUID, 0, &neededforuUID, nil) + if ret != 0 { + return false, "", makeError(uint32(ret)) + } + bufferSizeuUID := neededforuUID + bufferuUID := make([]byte, bufferSizeuUID) + ret = C.CCall_lib3mf_component_getuuid(inst.wrapperRef.LibraryHandle, inst.Ref, &hasUUID, bufferSizeuUID, &filledinuUID, (*C.char)(unsafe.Pointer(&bufferuUID[0]))) + if ret != 0 { + return false, "", makeError(uint32(ret)) + } + return bool(hasUUID), string(bufferuUID[:(filledinuUID-1)]), nil +} + +// SetUUID sets the component's UUID. +func (inst Component) SetUUID(uUID string) error { + ret := C.CCall_lib3mf_component_setuuid(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(uUID)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// HasTransform returns, if the component has a different transformation than the identity matrix. +func (inst Component) HasTransform() (bool, error) { + var hasTransform C.bool + ret := C.CCall_lib3mf_component_hastransform(inst.wrapperRef.LibraryHandle, inst.Ref, &hasTransform) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(hasTransform), nil +} + +// GetTransform returns the transformation matrix of the component. +func (inst Component) GetTransform() (Transform, error) { + var transform C.sLib3MFTransform + ret := C.CCall_lib3mf_component_gettransform(inst.wrapperRef.LibraryHandle, inst.Ref, &transform) + if ret != 0 { + return Transform{}, makeError(uint32(ret)) + } + return *(*Transform)(unsafe.Pointer(&transform)), nil +} + +// SetTransform sets the transformation matrix of the component. +func (inst Component) SetTransform(transform Transform) error { + ret := C.CCall_lib3mf_component_settransform(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFTransform)(unsafe.Pointer(&transform))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + + +// ComponentsObject represents a Lib3MF class. +type ComponentsObject struct { + Object +} + +func (wrapper Wrapper) NewComponentsObject(r ref) ComponentsObject { + return ComponentsObject{wrapper.NewObject(r)} +} + +// AddComponent adds a new component to a components object. +func (inst ComponentsObject) AddComponent(objectResource Object, transform Transform) (Component, error) { + var componentInstance ref + ret := C.CCall_lib3mf_componentsobject_addcomponent(inst.wrapperRef.LibraryHandle, inst.Ref, objectResource.Ref, (*C.sLib3MFTransform)(unsafe.Pointer(&transform)), &componentInstance) + if ret != 0 { + return Component{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewComponent(componentInstance), nil +} + +// GetComponent retrieves a component from a component object. +func (inst ComponentsObject) GetComponent(index uint32) (Component, error) { + var componentInstance ref + ret := C.CCall_lib3mf_componentsobject_getcomponent(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &componentInstance) + if ret != 0 { + return Component{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewComponent(componentInstance), nil +} + +// GetComponentCount retrieves a component count of a component object. +func (inst ComponentsObject) GetComponentCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_componentsobject_getcomponentcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + + +// BeamSet represents a Lib3MF class. +type BeamSet struct { + Base +} + +func (wrapper Wrapper) NewBeamSet(r ref) BeamSet { + return BeamSet{wrapper.NewBase(r)} +} + +// SetName sets a beamset's name string. +func (inst BeamSet) SetName(name string) error { + ret := C.CCall_lib3mf_beamset_setname(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(name)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetName retrieves a beamset's name string. +func (inst BeamSet) GetName() (string, error) { + var neededforname C.uint32_t + var filledinname C.uint32_t + ret := C.CCall_lib3mf_beamset_getname(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforname, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizename := neededforname + buffername := make([]byte, bufferSizename) + ret = C.CCall_lib3mf_beamset_getname(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizename, &filledinname, (*C.char)(unsafe.Pointer(&buffername[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(buffername[:(filledinname-1)]), nil +} + +// SetIdentifier sets a beamset's identifier string. +func (inst BeamSet) SetIdentifier(identifier string) error { + ret := C.CCall_lib3mf_beamset_setidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetIdentifier retrieves a beamset's identifier string. +func (inst BeamSet) GetIdentifier() (string, error) { + var neededforidentifier C.uint32_t + var filledinidentifier C.uint32_t + ret := C.CCall_lib3mf_beamset_getidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforidentifier, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizeidentifier := neededforidentifier + bufferidentifier := make([]byte, bufferSizeidentifier) + ret = C.CCall_lib3mf_beamset_getidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizeidentifier, &filledinidentifier, (*C.char)(unsafe.Pointer(&bufferidentifier[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(bufferidentifier[:(filledinidentifier-1)]), nil +} + +// GetReferenceCount retrieves the reference count of a beamset. +func (inst BeamSet) GetReferenceCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_beamset_getreferencecount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + +// SetReferences sets the references of a beamset. +func (inst BeamSet) SetReferences(references []uint32) error { + ret := C.CCall_lib3mf_beamset_setreferences(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(references)), (*C.uint32_t)(unsafe.Pointer(&references[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetReferences retrieves the references of a beamset. +func (inst BeamSet) GetReferences(references []uint32) ([]uint32, error) { + var neededforreferences C.uint64_t + ret := C.CCall_lib3mf_beamset_getreferences(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforreferences, nil) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + if len(references) < int(neededforreferences) { + references = append(references, make([]uint32, int(neededforreferences)-len(references))...) + } + ret = C.CCall_lib3mf_beamset_getreferences(inst.wrapperRef.LibraryHandle, inst.Ref, neededforreferences, nil, (*C.uint32_t)(unsafe.Pointer(&references[0]))) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + return references[:int(neededforreferences)], nil +} + +// GetBallReferenceCount retrieves the ball reference count of a beamset. +func (inst BeamSet) GetBallReferenceCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_beamset_getballreferencecount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + +// SetBallReferences sets the ball references of a beamset. +func (inst BeamSet) SetBallReferences(ballReferences []uint32) error { + ret := C.CCall_lib3mf_beamset_setballreferences(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(ballReferences)), (*C.uint32_t)(unsafe.Pointer(&ballReferences[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetBallReferences retrieves the ball references of a beamset. +func (inst BeamSet) GetBallReferences(ballReferences []uint32) ([]uint32, error) { + var neededforballReferences C.uint64_t + ret := C.CCall_lib3mf_beamset_getballreferences(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforballReferences, nil) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + if len(ballReferences) < int(neededforballReferences) { + ballReferences = append(ballReferences, make([]uint32, int(neededforballReferences)-len(ballReferences))...) + } + ret = C.CCall_lib3mf_beamset_getballreferences(inst.wrapperRef.LibraryHandle, inst.Ref, neededforballReferences, nil, (*C.uint32_t)(unsafe.Pointer(&ballReferences[0]))) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + return ballReferences[:int(neededforballReferences)], nil +} + + +// BaseMaterialGroup represents a Lib3MF class. +type BaseMaterialGroup struct { + Resource +} + +func (wrapper Wrapper) NewBaseMaterialGroup(r ref) BaseMaterialGroup { + return BaseMaterialGroup{wrapper.NewResource(r)} +} + +// GetCount retrieves the count of base materials in the material group. +func (inst BaseMaterialGroup) GetCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_basematerialgroup_getcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + +// GetAllPropertyIDs returns all the PropertyIDs of all materials in this group. +func (inst BaseMaterialGroup) GetAllPropertyIDs(propertyIDs []uint32) ([]uint32, error) { + var neededforpropertyIDs C.uint64_t + ret := C.CCall_lib3mf_basematerialgroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpropertyIDs, nil) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + if len(propertyIDs) < int(neededforpropertyIDs) { + propertyIDs = append(propertyIDs, make([]uint32, int(neededforpropertyIDs)-len(propertyIDs))...) + } + ret = C.CCall_lib3mf_basematerialgroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, neededforpropertyIDs, nil, (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + return propertyIDs[:int(neededforpropertyIDs)], nil +} + +// AddMaterial adds a new material to the material group. +func (inst BaseMaterialGroup) AddMaterial(name string, displayColor Color) (uint32, error) { + var propertyID C.uint32_t + ret := C.CCall_lib3mf_basematerialgroup_addmaterial(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(name)[0])), (*C.sLib3MFColor)(unsafe.Pointer(&displayColor)), &propertyID) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(propertyID), nil +} + +// RemoveMaterial removes a material from the material group. +func (inst BaseMaterialGroup) RemoveMaterial(propertyID uint32) error { + ret := C.CCall_lib3mf_basematerialgroup_removematerial(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetName returns the base material's name. +func (inst BaseMaterialGroup) GetName(propertyID uint32) (string, error) { + var neededforname C.uint32_t + var filledinname C.uint32_t + ret := C.CCall_lib3mf_basematerialgroup_getname(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), 0, &neededforname, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizename := neededforname + buffername := make([]byte, bufferSizename) + ret = C.CCall_lib3mf_basematerialgroup_getname(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), bufferSizename, &filledinname, (*C.char)(unsafe.Pointer(&buffername[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(buffername[:(filledinname-1)]), nil +} + +// SetName sets a base material's name. +func (inst BaseMaterialGroup) SetName(propertyID uint32, name string) error { + ret := C.CCall_lib3mf_basematerialgroup_setname(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), (*C.char)(unsafe.Pointer(&[]byte(name)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// SetDisplayColor sets a base material's display color. +func (inst BaseMaterialGroup) SetDisplayColor(propertyID uint32, theColor Color) error { + ret := C.CCall_lib3mf_basematerialgroup_setdisplaycolor(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), (*C.sLib3MFColor)(unsafe.Pointer(&theColor))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetDisplayColor returns a base material's display color. +func (inst BaseMaterialGroup) GetDisplayColor(propertyID uint32) (Color, error) { + var theColor C.sLib3MFColor + ret := C.CCall_lib3mf_basematerialgroup_getdisplaycolor(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), &theColor) + if ret != 0 { + return Color{}, makeError(uint32(ret)) + } + return *(*Color)(unsafe.Pointer(&theColor)), nil +} + + +// ColorGroup represents a Lib3MF class. +type ColorGroup struct { + Resource +} + +func (wrapper Wrapper) NewColorGroup(r ref) ColorGroup { + return ColorGroup{wrapper.NewResource(r)} +} + +// GetCount retrieves the count of base materials in this Color Group. +func (inst ColorGroup) GetCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_colorgroup_getcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + +// GetAllPropertyIDs returns all the PropertyIDs of all colors within this group. +func (inst ColorGroup) GetAllPropertyIDs(propertyIDs []uint32) ([]uint32, error) { + var neededforpropertyIDs C.uint64_t + ret := C.CCall_lib3mf_colorgroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpropertyIDs, nil) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + if len(propertyIDs) < int(neededforpropertyIDs) { + propertyIDs = append(propertyIDs, make([]uint32, int(neededforpropertyIDs)-len(propertyIDs))...) + } + ret = C.CCall_lib3mf_colorgroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, neededforpropertyIDs, nil, (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + return propertyIDs[:int(neededforpropertyIDs)], nil +} + +// AddColor adds a new value. +func (inst ColorGroup) AddColor(theColor Color) (uint32, error) { + var propertyID C.uint32_t + ret := C.CCall_lib3mf_colorgroup_addcolor(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFColor)(unsafe.Pointer(&theColor)), &propertyID) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(propertyID), nil +} + +// RemoveColor removes a color from the color group. +func (inst ColorGroup) RemoveColor(propertyID uint32) error { + ret := C.CCall_lib3mf_colorgroup_removecolor(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// SetColor sets a color value. +func (inst ColorGroup) SetColor(propertyID uint32, theColor Color) error { + ret := C.CCall_lib3mf_colorgroup_setcolor(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), (*C.sLib3MFColor)(unsafe.Pointer(&theColor))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetColor sets a color value. +func (inst ColorGroup) GetColor(propertyID uint32) (Color, error) { + var theColor C.sLib3MFColor + ret := C.CCall_lib3mf_colorgroup_getcolor(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), &theColor) + if ret != 0 { + return Color{}, makeError(uint32(ret)) + } + return *(*Color)(unsafe.Pointer(&theColor)), nil +} + + +// Texture2DGroup represents a Lib3MF class. +type Texture2DGroup struct { + Resource +} + +func (wrapper Wrapper) NewTexture2DGroup(r ref) Texture2DGroup { + return Texture2DGroup{wrapper.NewResource(r)} +} + +// GetCount retrieves the count of tex2coords in the Texture2DGroup. +func (inst Texture2DGroup) GetCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_texture2dgroup_getcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(count), nil +} + +// GetAllPropertyIDs returns all the PropertyIDs of all tex2coords in this Texture2DGroup. +func (inst Texture2DGroup) GetAllPropertyIDs(propertyIDs []uint32) ([]uint32, error) { + var neededforpropertyIDs C.uint64_t + ret := C.CCall_lib3mf_texture2dgroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpropertyIDs, nil) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + if len(propertyIDs) < int(neededforpropertyIDs) { + propertyIDs = append(propertyIDs, make([]uint32, int(neededforpropertyIDs)-len(propertyIDs))...) + } + ret = C.CCall_lib3mf_texture2dgroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, neededforpropertyIDs, nil, (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + return propertyIDs[:int(neededforpropertyIDs)], nil +} + +// AddTex2Coord adds a new tex2coord to the Texture2DGroup. +func (inst Texture2DGroup) AddTex2Coord(uVCoordinate Tex2Coord) (uint32, error) { + var propertyID C.uint32_t + ret := C.CCall_lib3mf_texture2dgroup_addtex2coord(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFTex2Coord)(unsafe.Pointer(&uVCoordinate)), &propertyID) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return uint32(propertyID), nil } -// KeyWrappingCallbackFunc a callback used to wrap (encrypt) the content key available in keystore resource group. -type KeyWrappingCallbackFunc = func(kEKParams AccessRight, inBuffer []uint8, outBuffer []uint8, userData uintptr, status *uint64) - -var keyWrappingCallbackFunc KeyWrappingCallbackFunc - -//export keyWrappingCallback -func keyWrappingCallback(kEKParams C.Lib3MF_AccessRight, inBuffer *C.uint8_t, outBuffer *C.uint8_t, userData C.Lib3MF_pvoid, status *C.uint64_t) { - if keyWrappingCallbackFunc == nil { - return +// GetTex2Coord obtains a tex2coord to the Texture2DGroup. +func (inst Texture2DGroup) GetTex2Coord(propertyID uint32) (Tex2Coord, error) { + var uVCoordinate C.sLib3MFTex2Coord + ret := C.CCall_lib3mf_texture2dgroup_gettex2coord(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), &uVCoordinate) + if ret != 0 { + return Tex2Coord{}, makeError(uint32(ret)) } - keyWrappingCallbackFunc(, ([][]uint8)(unsafe.Pointer(&inBuffer[0])), ([][]uint8)(unsafe.Pointer(&outBuffer[0])), uintptr(userData), (*uint64)(status)) + return *(*Tex2Coord)(unsafe.Pointer(&uVCoordinate)), nil } -// ContentEncryptionCallbackFunc a callback to encrypt/decrypt content called on each resource encrypted. This might be called several times depending on content size. If Input is not available(either null or size is 0), clients must return the result of authenticated tag generation/validation. -type ContentEncryptionCallbackFunc = func(cEKParams ContentEncryptionParams, input []uint8, output []uint8, userData uintptr, status *uint64) - -var contentEncryptionCallbackFunc ContentEncryptionCallbackFunc - -//export contentEncryptionCallback -func contentEncryptionCallback(cEKParams C.Lib3MF_ContentEncryptionParams, input *C.uint8_t, output *C.uint8_t, userData C.Lib3MF_pvoid, status *C.uint64_t) { - if contentEncryptionCallbackFunc == nil { - return +// RemoveTex2Coord removes a tex2coords from the Texture2DGroup. +func (inst Texture2DGroup) RemoveTex2Coord(propertyID uint32) error { + ret := C.CCall_lib3mf_texture2dgroup_removetex2coord(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID)) + if ret != 0 { + return makeError(uint32(ret)) } - contentEncryptionCallbackFunc(, ([][]uint8)(unsafe.Pointer(&input[0])), ([][]uint8)(unsafe.Pointer(&output[0])), uintptr(userData), (*uint64)(status)) + return nil } -// Wrapper represents the number wrapper -type Wrapper struct { - _ [0]func() // uncomparable; to make == not compile - LibraryHandle ref +// GetTexture2D obtains the texture2D instance of this group. +func (inst Texture2DGroup) GetTexture2D() (Texture2D, error) { + var texture2DInstance ref + ret := C.CCall_lib3mf_texture2dgroup_gettexture2d(inst.wrapperRef.LibraryHandle, inst.Ref, &texture2DInstance) + if ret != 0 { + return Texture2D{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewTexture2D(texture2DInstance), nil } -// Base represents a Lib3MF class. -type Base struct { - _ [0]func() // uncomparable; to make == not compile - Ref ref // identifies a C value, see ref type - wrapperRef Wrapper - gcPtr *ref // used to trigger the finalizer when the Value is not referenced any more -} -// NewBase creates a new Base. -// The wrapped C pointer will be freed when the Go pointer is finalized, -// but one can release it manually calling Release. -func (wrapper Wrapper) NewBase(r ref) Base { - gcPtr := new(ref) - *gcPtr = r - runtime.SetFinalizer(gcPtr, wrapper.releaseC) - return Base{Ref: r, gcPtr: gcPtr, wrapperRef: wrapper} +// CompositeMaterials represents a Lib3MF class. +type CompositeMaterials struct { + Resource } -// Release releases the C pointer. -func (inst Base) Release() error { - err := inst.wrapperRef.Release(inst) - *inst.gcPtr = nil - return err +func (wrapper Wrapper) NewCompositeMaterials(r ref) CompositeMaterials { + return CompositeMaterials{wrapper.NewResource(r)} } -// Equal reports whether inst and w refer to the same C pointer. -func (inst Base) Equal(w Base) bool { - return inst.Ref == w.Ref -} -// ClassTypeId get Class Type Id. -func (inst Base) ClassTypeId() (uint64, error) { - var classTypeId C.uint64_t - ret := C.CCall_lib3mf_base_classtypeid(inst.wrapperRef.LibraryHandle, inst.Ref, &classTypeId) +// GetCount retrieves the count of Composite-s in the CompositeMaterials. +func (inst CompositeMaterials) GetCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_compositematerials_getcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) if ret != 0 { return 0, makeError(uint32(ret)) } - return uint64(classTypeId), nil + return uint32(count), nil } - -// Writer represents a Lib3MF class. -type Writer struct { - Base +// GetAllPropertyIDs returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials. +func (inst CompositeMaterials) GetAllPropertyIDs(propertyIDs []uint32) ([]uint32, error) { + var neededforpropertyIDs C.uint64_t + ret := C.CCall_lib3mf_compositematerials_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpropertyIDs, nil) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + if len(propertyIDs) < int(neededforpropertyIDs) { + propertyIDs = append(propertyIDs, make([]uint32, int(neededforpropertyIDs)-len(propertyIDs))...) + } + ret = C.CCall_lib3mf_compositematerials_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, neededforpropertyIDs, nil, (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + return propertyIDs[:int(neededforpropertyIDs)], nil } -func (wrapper Wrapper) NewWriter(r ref) Writer { - return Writer{wrapper.NewBase(r)} +// GetBaseMaterialGroup obtains the BaseMaterialGroup instance of this CompositeMaterials. +func (inst CompositeMaterials) GetBaseMaterialGroup() (BaseMaterialGroup, error) { + var baseMaterialGroupInstance ref + ret := C.CCall_lib3mf_compositematerials_getbasematerialgroup(inst.wrapperRef.LibraryHandle, inst.Ref, &baseMaterialGroupInstance) + if ret != 0 { + return BaseMaterialGroup{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewBaseMaterialGroup(baseMaterialGroupInstance), nil } -// WriteToFile writes out the model as file. The file type is specified by the Model Writer class. -func (inst Writer) WriteToFile(filename string) error { - ret := C.CCall_lib3mf_writer_writetofile(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(filename)[0]))) +// AddComposite adds a new Composite-Mixing Values to the CompositeMaterials. +func (inst CompositeMaterials) AddComposite(composite []CompositeConstituent) (uint32, error) { + var propertyID C.uint32_t + ret := C.CCall_lib3mf_compositematerials_addcomposite(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(composite)), (*C.sLib3MFCompositeConstituent)(unsafe.Pointer(&composite[0])), &propertyID) if ret != 0 { - return makeError(uint32(ret)) + return 0, makeError(uint32(ret)) } - return nil + return uint32(propertyID), nil } -// GetStreamSize retrieves the size of the full 3MF file stream. -func (inst Writer) GetStreamSize() (uint64, error) { - var streamSize C.uint64_t - ret := C.CCall_lib3mf_writer_getstreamsize(inst.wrapperRef.LibraryHandle, inst.Ref, &streamSize) +// RemoveComposite removes a Composite-Maxing Ratio from the CompositeMaterials. +func (inst CompositeMaterials) RemoveComposite(propertyID uint32) error { + ret := C.CCall_lib3mf_compositematerials_removecomposite(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID)) if ret != 0 { - return 0, makeError(uint32(ret)) + return makeError(uint32(ret)) } - return uint64(streamSize), nil + return nil } -// WriteToBuffer writes out the 3MF file into a memory buffer. -func (inst Writer) WriteToBuffer(buffer []uint8) ([]uint8, error) { - var neededforbuffer C.uint64_t - ret := C.CCall_lib3mf_writer_writetobuffer(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforbuffer, nil) +// GetComposite obtains a Composite-Maxing Ratio of this CompositeMaterials. +func (inst CompositeMaterials) GetComposite(propertyID uint32, composite []CompositeConstituent) ([]CompositeConstituent, error) { + var neededforcomposite C.uint64_t + ret := C.CCall_lib3mf_compositematerials_getcomposite(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), 0, &neededforcomposite, nil) if ret != 0 { return nil, makeError(uint32(ret)) } - if len(buffer) < int(neededforbuffer) { - buffer = append(buffer, make([]uint8, int(neededforbuffer)-len(buffer))...) + if len(composite) < int(neededforcomposite) { + composite = append(composite, make([]CompositeConstituent, int(neededforcomposite)-len(composite))...) } - ret = C.CCall_lib3mf_writer_writetobuffer(inst.wrapperRef.LibraryHandle, inst.Ref, neededforbuffer, nil, (*C.uint8_t)(unsafe.Pointer(&buffer[0]))) + ret = C.CCall_lib3mf_compositematerials_getcomposite(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), neededforcomposite, nil, (*C.sLib3MFCompositeConstituent)(unsafe.Pointer(&composite[0]))) if ret != 0 { return nil, makeError(uint32(ret)) } - return buffer[:int(neededforbuffer)], nil + return composite[:int(neededforcomposite)], nil } -// WriteToCallback writes out the model and passes the data to a provided callback function. The file type is specified by the Model Writer class. -func (inst Writer) WriteToCallback(theWriteCallback WriteCallbackFunc, theSeekCallback SeekCallbackFunc, userData uintptr) error { - ret := C.CCall_lib3mf_writer_writetocallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFWriteCallback)(unsafe.Pointer(C.Lib3MFWriteCallback_cgo)), (C.Lib3MFSeekCallback)(unsafe.Pointer(C.Lib3MFSeekCallback_cgo)), (C.Lib3MF_pvoid)(userData)) + +// MultiPropertyGroup represents a Lib3MF class. +type MultiPropertyGroup struct { + Resource +} + +func (wrapper Wrapper) NewMultiPropertyGroup(r ref) MultiPropertyGroup { + return MultiPropertyGroup{wrapper.NewResource(r)} +} + +// GetCount retrieves the count of MultiProperty-s in the MultiPropertyGroup. +func (inst MultiPropertyGroup) GetCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_multipropertygroup_getcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) if ret != 0 { - return makeError(uint32(ret)) + return 0, makeError(uint32(ret)) } - writeCallbackFunc = theWriteCallback - seekCallbackFunc = theSeekCallback - return nil + return uint32(count), nil } -// SetProgressCallback set the progress callback for calls to this writer. -func (inst Writer) SetProgressCallback(progressCallback ProgressCallbackFunc, userData uintptr) error { - ret := C.CCall_lib3mf_writer_setprogresscallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFProgressCallback)(unsafe.Pointer(C.Lib3MFProgressCallback_cgo)), (C.Lib3MF_pvoid)(userData)) +// GetAllPropertyIDs returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup. +func (inst MultiPropertyGroup) GetAllPropertyIDs(propertyIDs []uint32) ([]uint32, error) { + var neededforpropertyIDs C.uint64_t + ret := C.CCall_lib3mf_multipropertygroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpropertyIDs, nil) if ret != 0 { - return makeError(uint32(ret)) + return nil, makeError(uint32(ret)) } - progressCallbackFunc = progressCallback - return nil + if len(propertyIDs) < int(neededforpropertyIDs) { + propertyIDs = append(propertyIDs, make([]uint32, int(neededforpropertyIDs)-len(propertyIDs))...) + } + ret = C.CCall_lib3mf_multipropertygroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, neededforpropertyIDs, nil, (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) + if ret != 0 { + return nil, makeError(uint32(ret)) + } + return propertyIDs[:int(neededforpropertyIDs)], nil } -// GetDecimalPrecision returns the number of digits after the decimal point to be written in each vertex coordinate-value. -func (inst Writer) GetDecimalPrecision() (uint32, error) { - var decimalPrecision C.uint32_t - ret := C.CCall_lib3mf_writer_getdecimalprecision(inst.wrapperRef.LibraryHandle, inst.Ref, &decimalPrecision) +// AddMultiProperty adds a new MultiProperty to the MultiPropertyGroup. +func (inst MultiPropertyGroup) AddMultiProperty(propertyIDs []uint32) (uint32, error) { + var propertyID C.uint32_t + ret := C.CCall_lib3mf_multipropertygroup_addmultiproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(propertyIDs)), (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0])), &propertyID) if ret != 0 { return 0, makeError(uint32(ret)) } - return uint32(decimalPrecision), nil + return uint32(propertyID), nil } -// SetDecimalPrecision sets the number of digits after the decimal point to be written in each vertex coordinate-value. -func (inst Writer) SetDecimalPrecision(decimalPrecision uint32) error { - ret := C.CCall_lib3mf_writer_setdecimalprecision(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(decimalPrecision)) +// SetMultiProperty sets the PropertyIDs of a MultiProperty. +func (inst MultiPropertyGroup) SetMultiProperty(propertyID uint32, propertyIDs []uint32) error { + ret := C.CCall_lib3mf_multipropertygroup_setmultiproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), C.uint64_t(len(propertyIDs)), (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) if ret != 0 { return makeError(uint32(ret)) } return nil } -// SetStrictModeActive activates (deactivates) the strict mode of the reader. -func (inst Writer) SetStrictModeActive(strictModeActive bool) error { - ret := C.CCall_lib3mf_writer_setstrictmodeactive(inst.wrapperRef.LibraryHandle, inst.Ref, C.bool(strictModeActive)) +// GetMultiProperty obtains the PropertyIDs of a MultiProperty. +func (inst MultiPropertyGroup) GetMultiProperty(propertyID uint32, propertyIDs []uint32) ([]uint32, error) { + var neededforpropertyIDs C.uint64_t + ret := C.CCall_lib3mf_multipropertygroup_getmultiproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), 0, &neededforpropertyIDs, nil) if ret != 0 { - return makeError(uint32(ret)) + return nil, makeError(uint32(ret)) } - return nil -} - -// GetStrictModeActive queries whether the strict mode of the reader is active or not. -func (inst Writer) GetStrictModeActive() (bool, error) { - var strictModeActive C.bool - ret := C.CCall_lib3mf_writer_getstrictmodeactive(inst.wrapperRef.LibraryHandle, inst.Ref, &strictModeActive) + if len(propertyIDs) < int(neededforpropertyIDs) { + propertyIDs = append(propertyIDs, make([]uint32, int(neededforpropertyIDs)-len(propertyIDs))...) + } + ret = C.CCall_lib3mf_multipropertygroup_getmultiproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), neededforpropertyIDs, nil, (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) if ret != 0 { - return false, makeError(uint32(ret)) + return nil, makeError(uint32(ret)) } - return bool(strictModeActive), nil + return propertyIDs[:int(neededforpropertyIDs)], nil } -// GetWarning returns Warning and Error Information of the read process. -func (inst Writer) GetWarning(index uint32) (uint32, string, error) { - var errorCode C.uint32_t - var neededforwarning C.uint32_t - var filledinwarning C.uint32_t - ret := C.CCall_lib3mf_writer_getwarning(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &errorCode, 0, &neededforwarning, nil) +// RemoveMultiProperty removes a MultiProperty from this MultiPropertyGroup. +func (inst MultiPropertyGroup) RemoveMultiProperty(propertyID uint32) error { + ret := C.CCall_lib3mf_multipropertygroup_removemultiproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID)) if ret != 0 { - return 0, "", makeError(uint32(ret)) + return makeError(uint32(ret)) } - bufferSizewarning := neededforwarning - bufferwarning := make([]byte, bufferSizewarning) - ret = C.CCall_lib3mf_writer_getwarning(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &errorCode, bufferSizewarning, &filledinwarning, (*C.char)(unsafe.Pointer(&bufferwarning[0]))) + return nil +} + +// GetLayerCount retrieves the number of layers of this MultiPropertyGroup. +func (inst MultiPropertyGroup) GetLayerCount() (uint32, error) { + var count C.uint32_t + ret := C.CCall_lib3mf_multipropertygroup_getlayercount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) if ret != 0 { - return 0, "", makeError(uint32(ret)) + return 0, makeError(uint32(ret)) } - return uint32(errorCode), string(bufferwarning[:(filledinwarning-1)]), nil + return uint32(count), nil } -// GetWarningCount returns Warning and Error Count of the read process. -func (inst Writer) GetWarningCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_writer_getwarningcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// AddLayer adds a MultiPropertyLayer to this MultiPropertyGroup. +func (inst MultiPropertyGroup) AddLayer(theLayer MultiPropertyLayer) (uint32, error) { + var layerIndex C.uint32_t + ret := C.CCall_lib3mf_multipropertygroup_addlayer(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFMultiPropertyLayer)(unsafe.Pointer(&theLayer)), &layerIndex) if ret != 0 { return 0, makeError(uint32(ret)) } - return uint32(count), nil + return uint32(layerIndex), nil } -// AddKeyWrappingCallback registers a callback to deal with data key encryption/decryption from keystore. -func (inst Writer) AddKeyWrappingCallback(consumerID string, theCallback KeyWrappingCallbackFunc, userData uintptr) error { - ret := C.CCall_lib3mf_writer_addkeywrappingcallback(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(consumerID)[0])), (C.Lib3MFKeyWrappingCallback)(unsafe.Pointer(C.Lib3MFKeyWrappingCallback_cgo)), (C.Lib3MF_pvoid)(userData)) +// GetLayer obtains a MultiPropertyLayer of this MultiPropertyGroup. +func (inst MultiPropertyGroup) GetLayer(layerIndex uint32) (MultiPropertyLayer, error) { + var theLayer C.sLib3MFMultiPropertyLayer + ret := C.CCall_lib3mf_multipropertygroup_getlayer(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(layerIndex), &theLayer) if ret != 0 { - return makeError(uint32(ret)) + return MultiPropertyLayer{}, makeError(uint32(ret)) } - keyWrappingCallbackFunc = theCallback - return nil + return *(*MultiPropertyLayer)(unsafe.Pointer(&theLayer)), nil } -// SetContentEncryptionCallback registers a callback to deal with encryption of content. -func (inst Writer) SetContentEncryptionCallback(theCallback ContentEncryptionCallbackFunc, userData uintptr) error { - ret := C.CCall_lib3mf_writer_setcontentencryptioncallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFContentEncryptionCallback)(unsafe.Pointer(C.Lib3MFContentEncryptionCallback_cgo)), (C.Lib3MF_pvoid)(userData)) +// RemoveLayer removes a MultiPropertyLayer from this MultiPropertyGroup. +func (inst MultiPropertyGroup) RemoveLayer(layerIndex uint32) error { + ret := C.CCall_lib3mf_multipropertygroup_removelayer(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(layerIndex)) if ret != 0 { return makeError(uint32(ret)) } - contentEncryptionCallbackFunc = theCallback return nil } -// Reader represents a Lib3MF class. -type Reader struct { - Base +// Image3D represents a Lib3MF class. +type Image3D struct { + Resource } -func (wrapper Wrapper) NewReader(r ref) Reader { - return Reader{wrapper.NewBase(r)} +func (wrapper Wrapper) NewImage3D(r ref) Image3D { + return Image3D{wrapper.NewResource(r)} } -// ReadFromFile reads a model from a file. The file type is specified by the Model Reader class. -func (inst Reader) ReadFromFile(filename string) error { - ret := C.CCall_lib3mf_reader_readfromfile(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(filename)[0]))) +// GetName returns the name of this Image3D. +func (inst Image3D) GetName() (string, error) { + var neededforname C.uint32_t + var filledinname C.uint32_t + ret := C.CCall_lib3mf_image3d_getname(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforname, nil) if ret != 0 { - return makeError(uint32(ret)) + return "", makeError(uint32(ret)) } - return nil + bufferSizename := neededforname + buffername := make([]byte, bufferSizename) + ret = C.CCall_lib3mf_image3d_getname(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizename, &filledinname, (*C.char)(unsafe.Pointer(&buffername[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(buffername[:(filledinname-1)]), nil } -// ReadFromBuffer reads a model from a memory buffer. -func (inst Reader) ReadFromBuffer(buffer []uint8) error { - ret := C.CCall_lib3mf_reader_readfrombuffer(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(buffer)), (*C.uint8_t)(unsafe.Pointer(&buffer[0]))) +// SetName sets a new name of this Image3D. +func (inst Image3D) SetName(name string) error { + ret := C.CCall_lib3mf_image3d_setname(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(name)[0]))) if ret != 0 { return makeError(uint32(ret)) } return nil } -// ReadFromCallback reads a model and from the data provided by a callback function. -func (inst Reader) ReadFromCallback(theReadCallback ReadCallbackFunc, streamSize uint64, theSeekCallback SeekCallbackFunc, userData uintptr) error { - ret := C.CCall_lib3mf_reader_readfromcallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFReadCallback)(unsafe.Pointer(C.Lib3MFReadCallback_cgo)), C.uint64_t(streamSize), (C.Lib3MFSeekCallback)(unsafe.Pointer(C.Lib3MFSeekCallback_cgo)), (C.Lib3MF_pvoid)(userData)) +// IsImageStack retrieves, if this Image3D is a ImageStack. +func (inst Image3D) IsImageStack() (bool, error) { + var isImageStack C.bool + ret := C.CCall_lib3mf_image3d_isimagestack(inst.wrapperRef.LibraryHandle, inst.Ref, &isImageStack) if ret != 0 { - return makeError(uint32(ret)) + return false, makeError(uint32(ret)) } - readCallbackFunc = theReadCallback - seekCallbackFunc = theSeekCallback - return nil + return bool(isImageStack), nil } -// SetProgressCallback set the progress callback for calls to this writer. -func (inst Reader) SetProgressCallback(progressCallback ProgressCallbackFunc, userData uintptr) error { - ret := C.CCall_lib3mf_reader_setprogresscallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFProgressCallback)(unsafe.Pointer(C.Lib3MFProgressCallback_cgo)), (C.Lib3MF_pvoid)(userData)) + +// ImageStack represents a Lib3MF class. +type ImageStack struct { + Image3D +} + +func (wrapper Wrapper) NewImageStack(r ref) ImageStack { + return ImageStack{wrapper.NewImage3D(r)} +} + +// GetRowCount retrieves the number of rows in each image of this image3d. +func (inst ImageStack) GetRowCount() (uint32, error) { + var rowCount C.uint32_t + ret := C.CCall_lib3mf_imagestack_getrowcount(inst.wrapperRef.LibraryHandle, inst.Ref, &rowCount) if ret != 0 { - return makeError(uint32(ret)) + return 0, makeError(uint32(ret)) } - progressCallbackFunc = progressCallback - return nil + return uint32(rowCount), nil } -// AddRelationToRead adds a relationship type which shall be read as attachment in memory while loading. -func (inst Reader) AddRelationToRead(relationShipType string) error { - ret := C.CCall_lib3mf_reader_addrelationtoread(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(relationShipType)[0]))) +// SetRowCount sets the number of rows in each image of this image3d. +func (inst ImageStack) SetRowCount(rowCount uint32) error { + ret := C.CCall_lib3mf_imagestack_setrowcount(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(rowCount)) if ret != 0 { return makeError(uint32(ret)) } return nil } -// RemoveRelationToRead removes a relationship type which shall be read as attachment in memory while loading. -func (inst Reader) RemoveRelationToRead(relationShipType string) error { - ret := C.CCall_lib3mf_reader_removerelationtoread(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(relationShipType)[0]))) +// GetColumnCount retrieves the number of columns in each image of this image3d. +func (inst ImageStack) GetColumnCount() (uint32, error) { + var columnCount C.uint32_t + ret := C.CCall_lib3mf_imagestack_getcolumncount(inst.wrapperRef.LibraryHandle, inst.Ref, &columnCount) if ret != 0 { - return makeError(uint32(ret)) + return 0, makeError(uint32(ret)) } - return nil + return uint32(columnCount), nil } -// SetStrictModeActive activates (deactivates) the strict mode of the reader. -func (inst Reader) SetStrictModeActive(strictModeActive bool) error { - ret := C.CCall_lib3mf_reader_setstrictmodeactive(inst.wrapperRef.LibraryHandle, inst.Ref, C.bool(strictModeActive)) +// SetColumnCount sets the number of columns in each image of this image3d. +func (inst ImageStack) SetColumnCount(columnCount uint32) error { + ret := C.CCall_lib3mf_imagestack_setcolumncount(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(columnCount)) if ret != 0 { return makeError(uint32(ret)) } return nil } -// GetStrictModeActive queries whether the strict mode of the reader is active or not. -func (inst Reader) GetStrictModeActive() (bool, error) { - var strictModeActive C.bool - ret := C.CCall_lib3mf_reader_getstrictmodeactive(inst.wrapperRef.LibraryHandle, inst.Ref, &strictModeActive) +// GetSheetCount retrieves the number of images in the stack. +func (inst ImageStack) GetSheetCount() (uint32, error) { + var sheetCount C.uint32_t + ret := C.CCall_lib3mf_imagestack_getsheetcount(inst.wrapperRef.LibraryHandle, inst.Ref, &sheetCount) if ret != 0 { - return false, makeError(uint32(ret)) + return 0, makeError(uint32(ret)) } - return bool(strictModeActive), nil + return uint32(sheetCount), nil } -// GetWarning returns Warning and Error Information of the read process. -func (inst Reader) GetWarning(index uint32) (uint32, string, error) { - var errorCode C.uint32_t - var neededforwarning C.uint32_t - var filledinwarning C.uint32_t - ret := C.CCall_lib3mf_reader_getwarning(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &errorCode, 0, &neededforwarning, nil) +// GetSheet retrieves a sheet of the stack. Raises an error if sheet is not set. +func (inst ImageStack) GetSheet(index uint32) (Attachment, error) { + var sheet ref + ret := C.CCall_lib3mf_imagestack_getsheet(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &sheet) if ret != 0 { - return 0, "", makeError(uint32(ret)) + return Attachment{}, makeError(uint32(ret)) } - bufferSizewarning := neededforwarning - bufferwarning := make([]byte, bufferSizewarning) - ret = C.CCall_lib3mf_reader_getwarning(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &errorCode, bufferSizewarning, &filledinwarning, (*C.char)(unsafe.Pointer(&bufferwarning[0]))) + return inst.wrapperRef.NewAttachment(sheet), nil +} + +// SetSheet sets a sheet to an existing attachment. +func (inst ImageStack) SetSheet(index uint32, sheet Attachment) error { + ret := C.CCall_lib3mf_imagestack_setsheet(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), sheet.Ref) if ret != 0 { - return 0, "", makeError(uint32(ret)) + return makeError(uint32(ret)) } - return uint32(errorCode), string(bufferwarning[:(filledinwarning-1)]), nil + return nil } -// GetWarningCount returns Warning and Error Count of the read process. -func (inst Reader) GetWarningCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_reader_getwarningcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// CreateEmptySheet creates a new sheet attachment with empty data. +func (inst ImageStack) CreateEmptySheet(index uint32, path string) (Attachment, error) { + var sheet ref + ret := C.CCall_lib3mf_imagestack_createemptysheet(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), (*C.char)(unsafe.Pointer(&[]byte(path)[0])), &sheet) if ret != 0 { - return 0, makeError(uint32(ret)) + return Attachment{}, makeError(uint32(ret)) } - return uint32(count), nil + return inst.wrapperRef.NewAttachment(sheet), nil } -// AddKeyWrappingCallback registers a callback to deal with key wrapping mechanism from keystore. -func (inst Reader) AddKeyWrappingCallback(consumerID string, theCallback KeyWrappingCallbackFunc, userData uintptr) error { - ret := C.CCall_lib3mf_reader_addkeywrappingcallback(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(consumerID)[0])), (C.Lib3MFKeyWrappingCallback)(unsafe.Pointer(C.Lib3MFKeyWrappingCallback_cgo)), (C.Lib3MF_pvoid)(userData)) +// CreateSheetFromBuffer creates a new sheet attachment from a memory buffer. +func (inst ImageStack) CreateSheetFromBuffer(index uint32, path string, data []uint8) (Attachment, error) { + var sheet ref + ret := C.CCall_lib3mf_imagestack_createsheetfrombuffer(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), (*C.char)(unsafe.Pointer(&[]byte(path)[0])), C.uint64_t(len(data)), (*C.uint8_t)(unsafe.Pointer(&data[0])), &sheet) if ret != 0 { - return makeError(uint32(ret)) + return Attachment{}, makeError(uint32(ret)) } - keyWrappingCallbackFunc = theCallback - return nil + return inst.wrapperRef.NewAttachment(sheet), nil } -// SetContentEncryptionCallback registers a callback to deal with encryption of content. -func (inst Reader) SetContentEncryptionCallback(theCallback ContentEncryptionCallbackFunc, userData uintptr) error { - ret := C.CCall_lib3mf_reader_setcontentencryptioncallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFContentEncryptionCallback)(unsafe.Pointer(C.Lib3MFContentEncryptionCallback_cgo)), (C.Lib3MF_pvoid)(userData)) +// CreateSheetFromFile creates a new sheet attachment from a file on disk. +func (inst ImageStack) CreateSheetFromFile(index uint32, path string, fileName string) (Attachment, error) { + var sheet ref + ret := C.CCall_lib3mf_imagestack_createsheetfromfile(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), (*C.char)(unsafe.Pointer(&[]byte(path)[0])), (*C.char)(unsafe.Pointer(&[]byte(fileName)[0])), &sheet) if ret != 0 { - return makeError(uint32(ret)) + return Attachment{}, makeError(uint32(ret)) } - contentEncryptionCallbackFunc = theCallback - return nil + return inst.wrapperRef.NewAttachment(sheet), nil } -// PackagePart represents a Lib3MF class. -type PackagePart struct { +// Attachment represents a Lib3MF class. +type Attachment struct { Base } -func (wrapper Wrapper) NewPackagePart(r ref) PackagePart { - return PackagePart{wrapper.NewBase(r)} +func (wrapper Wrapper) NewAttachment(r ref) Attachment { + return Attachment{wrapper.NewBase(r)} } -// GetPath returns the absolute path of this PackagePart. -func (inst PackagePart) GetPath() (string, error) { +// GetPath retrieves an attachment's package path. This function will be removed in a later release. +func (inst Attachment) GetPath() (string, error) { var neededforpath C.uint32_t var filledinpath C.uint32_t - ret := C.CCall_lib3mf_packagepart_getpath(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpath, nil) + ret := C.CCall_lib3mf_attachment_getpath(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpath, nil) if ret != 0 { return "", makeError(uint32(ret)) } bufferSizepath := neededforpath bufferpath := make([]byte, bufferSizepath) - ret = C.CCall_lib3mf_packagepart_getpath(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizepath, &filledinpath, (*C.char)(unsafe.Pointer(&bufferpath[0]))) + ret = C.CCall_lib3mf_attachment_getpath(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizepath, &filledinpath, (*C.char)(unsafe.Pointer(&bufferpath[0]))) if ret != 0 { return "", makeError(uint32(ret)) } return string(bufferpath[:(filledinpath-1)]), nil } -// SetPath sets the absolute path of this PackagePart. -func (inst PackagePart) SetPath(path string) error { - ret := C.CCall_lib3mf_packagepart_setpath(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(path)[0]))) +// SetPath sets an attachment's package path. This function will be removed in a later release. +func (inst Attachment) SetPath(path string) error { + ret := C.CCall_lib3mf_attachment_setpath(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(path)[0]))) if ret != 0 { return makeError(uint32(ret)) } return nil } - -// Resource represents a Lib3MF class. -type Resource struct { - Base -} - -func (wrapper Wrapper) NewResource(r ref) Resource { - return Resource{wrapper.NewBase(r)} -} - -// GetResourceID retrieves the unique id of this resource within a package. This function will be removed in a later release in favor of GetUniqueResourceID. -func (inst Resource) GetResourceID() (uint32, error) { - var uniqueResourceID C.uint32_t - ret := C.CCall_lib3mf_resource_getresourceid(inst.wrapperRef.LibraryHandle, inst.Ref, &uniqueResourceID) +// PackagePart returns the PackagePart that is this attachment. +func (inst Attachment) PackagePart() (PackagePart, error) { + var packagePart ref + ret := C.CCall_lib3mf_attachment_packagepart(inst.wrapperRef.LibraryHandle, inst.Ref, &packagePart) if ret != 0 { - return 0, makeError(uint32(ret)) + return PackagePart{}, makeError(uint32(ret)) } - return uint32(uniqueResourceID), nil + return inst.wrapperRef.NewPackagePart(packagePart), nil } -// GetUniqueResourceID retrieves the unique id of this resource within a package. -func (inst Resource) GetUniqueResourceID() (uint32, error) { - var uniqueResourceID C.uint32_t - ret := C.CCall_lib3mf_resource_getuniqueresourceid(inst.wrapperRef.LibraryHandle, inst.Ref, &uniqueResourceID) +// GetRelationShipType retrieves an attachment's relationship type. +func (inst Attachment) GetRelationShipType() (string, error) { + var neededforpath C.uint32_t + var filledinpath C.uint32_t + ret := C.CCall_lib3mf_attachment_getrelationshiptype(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpath, nil) if ret != 0 { - return 0, makeError(uint32(ret)) + return "", makeError(uint32(ret)) } - return uint32(uniqueResourceID), nil -} - -// PackagePart returns the PackagePart within which this resource resides. -func (inst Resource) PackagePart() (PackagePart, error) { - var packagePart ref - ret := C.CCall_lib3mf_resource_packagepart(inst.wrapperRef.LibraryHandle, inst.Ref, &packagePart) + bufferSizepath := neededforpath + bufferpath := make([]byte, bufferSizepath) + ret = C.CCall_lib3mf_attachment_getrelationshiptype(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizepath, &filledinpath, (*C.char)(unsafe.Pointer(&bufferpath[0]))) if ret != 0 { - return PackagePart{}, makeError(uint32(ret)) + return "", makeError(uint32(ret)) } - return inst.wrapperRef.NewPackagePart(packagePart), nil + return string(bufferpath[:(filledinpath-1)]), nil } -// SetPackagePart sets the new PackagePart within which this resource resides. -func (inst Resource) SetPackagePart(packagePart PackagePart) error { - ret := C.CCall_lib3mf_resource_setpackagepart(inst.wrapperRef.LibraryHandle, inst.Ref, packagePart.Ref) +// SetRelationShipType sets an attachment's relationship type. +func (inst Attachment) SetRelationShipType(path string) error { + ret := C.CCall_lib3mf_attachment_setrelationshiptype(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(path)[0]))) if ret != 0 { return makeError(uint32(ret)) } return nil } -// GetModelResourceID retrieves the id of this resource within a model. -func (inst Resource) GetModelResourceID() (uint32, error) { - var modelResourceId C.uint32_t - ret := C.CCall_lib3mf_resource_getmodelresourceid(inst.wrapperRef.LibraryHandle, inst.Ref, &modelResourceId) +// WriteToFile writes out the attachment as file. +func (inst Attachment) WriteToFile(fileName string) error { + ret := C.CCall_lib3mf_attachment_writetofile(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(fileName)[0]))) if ret != 0 { - return 0, makeError(uint32(ret)) + return makeError(uint32(ret)) } - return uint32(modelResourceId), nil -} - - -// ResourceIterator represents a Lib3MF class. -type ResourceIterator struct { - Base + return nil } -func (wrapper Wrapper) NewResourceIterator(r ref) ResourceIterator { - return ResourceIterator{wrapper.NewBase(r)} +// ReadFromFile reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +func (inst Attachment) ReadFromFile(fileName string) error { + ret := C.CCall_lib3mf_attachment_readfromfile(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(fileName)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil } -// MoveNext iterates to the next resource in the list. -func (inst ResourceIterator) MoveNext() (bool, error) { - var hasNext C.bool - ret := C.CCall_lib3mf_resourceiterator_movenext(inst.wrapperRef.LibraryHandle, inst.Ref, &hasNext) +// ReadFromCallback reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +func (inst Attachment) ReadFromCallback(theReadCallback ReadCallbackFunc, streamSize uint64, theSeekCallback SeekCallbackFunc, userData uintptr) error { + ret := C.CCall_lib3mf_attachment_readfromcallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFReadCallback)(unsafe.Pointer(C.Lib3MFReadCallback_cgo)), C.uint64_t(streamSize), (C.Lib3MFSeekCallback)(unsafe.Pointer(C.Lib3MFSeekCallback_cgo)), (C.Lib3MF_pvoid)(userData)) if ret != 0 { - return false, makeError(uint32(ret)) + return makeError(uint32(ret)) } - return bool(hasNext), nil + readCallbackFunc = theReadCallback + seekCallbackFunc = theSeekCallback + return nil } -// MovePrevious iterates to the previous resource in the list. -func (inst ResourceIterator) MovePrevious() (bool, error) { - var hasPrevious C.bool - ret := C.CCall_lib3mf_resourceiterator_moveprevious(inst.wrapperRef.LibraryHandle, inst.Ref, &hasPrevious) +// GetStreamSize retrieves the size of the attachment stream. +func (inst Attachment) GetStreamSize() (uint64, error) { + var streamSize C.uint64_t + ret := C.CCall_lib3mf_attachment_getstreamsize(inst.wrapperRef.LibraryHandle, inst.Ref, &streamSize) if ret != 0 { - return false, makeError(uint32(ret)) + return 0, makeError(uint32(ret)) } - return bool(hasPrevious), nil + return uint64(streamSize), nil } -// GetCurrent returns the resource the iterator points at. -func (inst ResourceIterator) GetCurrent() (Resource, error) { - var resource ref - ret := C.CCall_lib3mf_resourceiterator_getcurrent(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) +// WriteToBuffer writes out the attachment into a buffer. +func (inst Attachment) WriteToBuffer(buffer []uint8) ([]uint8, error) { + var neededforbuffer C.uint64_t + ret := C.CCall_lib3mf_attachment_writetobuffer(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforbuffer, nil) if ret != 0 { - return Resource{}, makeError(uint32(ret)) + return nil, makeError(uint32(ret)) } - return inst.wrapperRef.NewResource(resource), nil -} - -// Clone creates a new resource iterator with the same resource list. -func (inst ResourceIterator) Clone() (ResourceIterator, error) { - var outResourceIterator ref - ret := C.CCall_lib3mf_resourceiterator_clone(inst.wrapperRef.LibraryHandle, inst.Ref, &outResourceIterator) + if len(buffer) < int(neededforbuffer) { + buffer = append(buffer, make([]uint8, int(neededforbuffer)-len(buffer))...) + } + ret = C.CCall_lib3mf_attachment_writetobuffer(inst.wrapperRef.LibraryHandle, inst.Ref, neededforbuffer, nil, (*C.uint8_t)(unsafe.Pointer(&buffer[0]))) if ret != 0 { - return ResourceIterator{}, makeError(uint32(ret)) + return nil, makeError(uint32(ret)) } - return inst.wrapperRef.NewResourceIterator(outResourceIterator), nil + return buffer[:int(neededforbuffer)], nil } -// Count returns the number of resoucres the iterator captures. -func (inst ResourceIterator) Count() (uint64, error) { - var count C.uint64_t - ret := C.CCall_lib3mf_resourceiterator_count(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// ReadFromBuffer reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +func (inst Attachment) ReadFromBuffer(buffer []uint8) error { + ret := C.CCall_lib3mf_attachment_readfrombuffer(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(buffer)), (*C.uint8_t)(unsafe.Pointer(&buffer[0]))) if ret != 0 { - return 0, makeError(uint32(ret)) + return makeError(uint32(ret)) } - return uint64(count), nil + return nil } -// SliceStackIterator represents a Lib3MF class. -type SliceStackIterator struct { - ResourceIterator +// Texture2D represents a Lib3MF class. +type Texture2D struct { + Resource } -func (wrapper Wrapper) NewSliceStackIterator(r ref) SliceStackIterator { - return SliceStackIterator{wrapper.NewResourceIterator(r)} +func (wrapper Wrapper) NewTexture2D(r ref) Texture2D { + return Texture2D{wrapper.NewResource(r)} } -// GetCurrentSliceStack returns the SliceStack the iterator points at. -func (inst SliceStackIterator) GetCurrentSliceStack() (SliceStack, error) { - var resource ref - ret := C.CCall_lib3mf_slicestackiterator_getcurrentslicestack(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) +// GetAttachment retrieves the attachment located at the path of the texture. +func (inst Texture2D) GetAttachment() (Attachment, error) { + var attachment ref + ret := C.CCall_lib3mf_texture2d_getattachment(inst.wrapperRef.LibraryHandle, inst.Ref, &attachment) if ret != 0 { - return SliceStack{}, makeError(uint32(ret)) + return Attachment{}, makeError(uint32(ret)) } - return inst.wrapperRef.NewSliceStack(resource), nil -} - - -// ObjectIterator represents a Lib3MF class. -type ObjectIterator struct { - ResourceIterator -} - -func (wrapper Wrapper) NewObjectIterator(r ref) ObjectIterator { - return ObjectIterator{wrapper.NewResourceIterator(r)} + return inst.wrapperRef.NewAttachment(attachment), nil } -// GetCurrentObject returns the Object the iterator points at. -func (inst ObjectIterator) GetCurrentObject() (Object, error) { - var resource ref - ret := C.CCall_lib3mf_objectiterator_getcurrentobject(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) +// SetAttachment sets the texture's package path to the path of the attachment. +func (inst Texture2D) SetAttachment(attachment Attachment) error { + ret := C.CCall_lib3mf_texture2d_setattachment(inst.wrapperRef.LibraryHandle, inst.Ref, attachment.Ref) if ret != 0 { - return Object{}, makeError(uint32(ret)) + return makeError(uint32(ret)) } - return inst.wrapperRef.NewObject(resource), nil + return nil } - -// MeshObjectIterator represents a Lib3MF class. -type MeshObjectIterator struct { - ResourceIterator +// GetContentType retrieves a texture's content type. +func (inst Texture2D) GetContentType() (TextureType, error) { + var contentType C.eLib3MFTextureType + ret := C.CCall_lib3mf_texture2d_getcontenttype(inst.wrapperRef.LibraryHandle, inst.Ref, &contentType) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return TextureType(contentType), nil } -func (wrapper Wrapper) NewMeshObjectIterator(r ref) MeshObjectIterator { - return MeshObjectIterator{wrapper.NewResourceIterator(r)} +// SetContentType retrieves a texture's content type. +func (inst Texture2D) SetContentType(contentType TextureType) error { + ret := C.CCall_lib3mf_texture2d_setcontenttype(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFTextureType(contentType)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil } -// GetCurrentMeshObject returns the MeshObject the iterator points at. -func (inst MeshObjectIterator) GetCurrentMeshObject() (MeshObject, error) { - var resource ref - ret := C.CCall_lib3mf_meshobjectiterator_getcurrentmeshobject(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) +// GetTileStyleUV retrieves a texture's tilestyle type. +func (inst Texture2D) GetTileStyleUV() (TextureTileStyle, TextureTileStyle, error) { + var tileStyleU C.eLib3MFTextureTileStyle + var tileStyleV C.eLib3MFTextureTileStyle + ret := C.CCall_lib3mf_texture2d_gettilestyleuv(inst.wrapperRef.LibraryHandle, inst.Ref, &tileStyleU, &tileStyleV) if ret != 0 { - return MeshObject{}, makeError(uint32(ret)) + return 0, 0, makeError(uint32(ret)) } - return inst.wrapperRef.NewMeshObject(resource), nil + return TextureTileStyle(tileStyleU), TextureTileStyle(tileStyleV), nil } - -// ComponentsObjectIterator represents a Lib3MF class. -type ComponentsObjectIterator struct { - ResourceIterator +// SetTileStyleUV sets a texture's tilestyle type. +func (inst Texture2D) SetTileStyleUV(tileStyleU TextureTileStyle, tileStyleV TextureTileStyle) error { + ret := C.CCall_lib3mf_texture2d_settilestyleuv(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFTextureTileStyle(tileStyleU), C.eLib3MFTextureTileStyle(tileStyleV)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil } -func (wrapper Wrapper) NewComponentsObjectIterator(r ref) ComponentsObjectIterator { - return ComponentsObjectIterator{wrapper.NewResourceIterator(r)} +// GetFilter retrieves a texture's filter type. +func (inst Texture2D) GetFilter() (TextureFilter, error) { + var filter C.eLib3MFTextureFilter + ret := C.CCall_lib3mf_texture2d_getfilter(inst.wrapperRef.LibraryHandle, inst.Ref, &filter) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return TextureFilter(filter), nil } -// GetCurrentComponentsObject returns the ComponentsObject the iterator points at. -func (inst ComponentsObjectIterator) GetCurrentComponentsObject() (ComponentsObject, error) { - var resource ref - ret := C.CCall_lib3mf_componentsobjectiterator_getcurrentcomponentsobject(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) +// SetFilter sets a texture's filter type. +func (inst Texture2D) SetFilter(filter TextureFilter) error { + ret := C.CCall_lib3mf_texture2d_setfilter(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFTextureFilter(filter)) if ret != 0 { - return ComponentsObject{}, makeError(uint32(ret)) + return makeError(uint32(ret)) } - return inst.wrapperRef.NewComponentsObject(resource), nil + return nil } -// Texture2DIterator represents a Lib3MF class. -type Texture2DIterator struct { - ResourceIterator +// ImplicitPort represents a Lib3MF class. +type ImplicitPort struct { + Base } -func (wrapper Wrapper) NewTexture2DIterator(r ref) Texture2DIterator { - return Texture2DIterator{wrapper.NewResourceIterator(r)} +func (wrapper Wrapper) NewImplicitPort(r ref) ImplicitPort { + return ImplicitPort{wrapper.NewBase(r)} } -// GetCurrentTexture2D returns the Texture2D the iterator points at. -func (inst Texture2DIterator) GetCurrentTexture2D() (Texture2D, error) { - var resource ref - ret := C.CCall_lib3mf_texture2diterator_getcurrenttexture2d(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) +// GetIdentifier retrieves the identifier of the port. +func (inst ImplicitPort) GetIdentifier() (string, error) { + var neededforidentifier C.uint32_t + var filledinidentifier C.uint32_t + ret := C.CCall_lib3mf_implicitport_getidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforidentifier, nil) if ret != 0 { - return Texture2D{}, makeError(uint32(ret)) + return "", makeError(uint32(ret)) } - return inst.wrapperRef.NewTexture2D(resource), nil + bufferSizeidentifier := neededforidentifier + bufferidentifier := make([]byte, bufferSizeidentifier) + ret = C.CCall_lib3mf_implicitport_getidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizeidentifier, &filledinidentifier, (*C.char)(unsafe.Pointer(&bufferidentifier[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(bufferidentifier[:(filledinidentifier-1)]), nil } - -// BaseMaterialGroupIterator represents a Lib3MF class. -type BaseMaterialGroupIterator struct { - ResourceIterator +// SetIdentifier sets the identifier of the port. +func (inst ImplicitPort) SetIdentifier(identifier string) error { + ret := C.CCall_lib3mf_implicitport_setidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0]))) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil } -func (wrapper Wrapper) NewBaseMaterialGroupIterator(r ref) BaseMaterialGroupIterator { - return BaseMaterialGroupIterator{wrapper.NewResourceIterator(r)} +// GetDisplayName retrieves the display name of the port. +func (inst ImplicitPort) GetDisplayName() (string, error) { + var neededfordisplayName C.uint32_t + var filledindisplayName C.uint32_t + ret := C.CCall_lib3mf_implicitport_getdisplayname(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededfordisplayName, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizedisplayName := neededfordisplayName + bufferdisplayName := make([]byte, bufferSizedisplayName) + ret = C.CCall_lib3mf_implicitport_getdisplayname(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizedisplayName, &filledindisplayName, (*C.char)(unsafe.Pointer(&bufferdisplayName[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(bufferdisplayName[:(filledindisplayName-1)]), nil } -// GetCurrentBaseMaterialGroup returns the MaterialGroup the iterator points at. -func (inst BaseMaterialGroupIterator) GetCurrentBaseMaterialGroup() (BaseMaterialGroup, error) { - var resource ref - ret := C.CCall_lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) +// SetDisplayName sets the display name of the port. +func (inst ImplicitPort) SetDisplayName(displayName string) error { + ret := C.CCall_lib3mf_implicitport_setdisplayname(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(displayName)[0]))) if ret != 0 { - return BaseMaterialGroup{}, makeError(uint32(ret)) + return makeError(uint32(ret)) } - return inst.wrapperRef.NewBaseMaterialGroup(resource), nil + return nil } +// SetType sets the type of the port. +func (inst ImplicitPort) SetType(implicitPortType ImplicitPortType) error { + ret := C.CCall_lib3mf_implicitport_settype(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFImplicitPortType(implicitPortType)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} -// ColorGroupIterator represents a Lib3MF class. -type ColorGroupIterator struct { - ResourceIterator +// GetType retrieves the type of the port. +func (inst ImplicitPort) GetType() (ImplicitPortType, error) { + var implicitPortType C.eLib3MFImplicitPortType + ret := C.CCall_lib3mf_implicitport_gettype(inst.wrapperRef.LibraryHandle, inst.Ref, &implicitPortType) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return ImplicitPortType(implicitPortType), nil } -func (wrapper Wrapper) NewColorGroupIterator(r ref) ColorGroupIterator { - return ColorGroupIterator{wrapper.NewResourceIterator(r)} +// GetReference retrieves the reference of the port, only used for input ports. +func (inst ImplicitPort) GetReference() (string, error) { + var neededforreference C.uint32_t + var filledinreference C.uint32_t + ret := C.CCall_lib3mf_implicitport_getreference(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforreference, nil) + if ret != 0 { + return "", makeError(uint32(ret)) + } + bufferSizereference := neededforreference + bufferreference := make([]byte, bufferSizereference) + ret = C.CCall_lib3mf_implicitport_getreference(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizereference, &filledinreference, (*C.char)(unsafe.Pointer(&bufferreference[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(bufferreference[:(filledinreference-1)]), nil } -// GetCurrentColorGroup returns the ColorGroup the iterator points at. -func (inst ColorGroupIterator) GetCurrentColorGroup() (ColorGroup, error) { - var resource ref - ret := C.CCall_lib3mf_colorgroupiterator_getcurrentcolorgroup(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) +// SetReference sets the reference of the port, only used for input ports. +func (inst ImplicitPort) SetReference(reference string) error { + ret := C.CCall_lib3mf_implicitport_setreference(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(reference)[0]))) if ret != 0 { - return ColorGroup{}, makeError(uint32(ret)) + return makeError(uint32(ret)) } - return inst.wrapperRef.NewColorGroup(resource), nil + return nil } -// Texture2DGroupIterator represents a Lib3MF class. -type Texture2DGroupIterator struct { - ResourceIterator +// Iterator represents a Lib3MF class. +type Iterator struct { + Base } -func (wrapper Wrapper) NewTexture2DGroupIterator(r ref) Texture2DGroupIterator { - return Texture2DGroupIterator{wrapper.NewResourceIterator(r)} +func (wrapper Wrapper) NewIterator(r ref) Iterator { + return Iterator{wrapper.NewBase(r)} } -// GetCurrentTexture2DGroup returns the Texture2DGroup the iterator points at. -func (inst Texture2DGroupIterator) GetCurrentTexture2DGroup() (Texture2DGroup, error) { - var resource ref - ret := C.CCall_lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) +// MoveNext iterates to the next item in the list. +func (inst Iterator) MoveNext() (bool, error) { + var hasNext C.bool + ret := C.CCall_lib3mf_iterator_movenext(inst.wrapperRef.LibraryHandle, inst.Ref, &hasNext) if ret != 0 { - return Texture2DGroup{}, makeError(uint32(ret)) + return false, makeError(uint32(ret)) } - return inst.wrapperRef.NewTexture2DGroup(resource), nil -} - - -// CompositeMaterialsIterator represents a Lib3MF class. -type CompositeMaterialsIterator struct { - ResourceIterator + return bool(hasNext), nil } -func (wrapper Wrapper) NewCompositeMaterialsIterator(r ref) CompositeMaterialsIterator { - return CompositeMaterialsIterator{wrapper.NewResourceIterator(r)} +// MovePrevious iterates to the previous item in the list. +func (inst Iterator) MovePrevious() (bool, error) { + var hasPrevious C.bool + ret := C.CCall_lib3mf_iterator_moveprevious(inst.wrapperRef.LibraryHandle, inst.Ref, &hasPrevious) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(hasPrevious), nil } -// GetCurrentCompositeMaterials returns the CompositeMaterials the iterator points at. -func (inst CompositeMaterialsIterator) GetCurrentCompositeMaterials() (CompositeMaterials, error) { - var resource ref - ret := C.CCall_lib3mf_compositematerialsiterator_getcurrentcompositematerials(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) +// Count returns the number of items the iterator captures. +func (inst Iterator) Count() (uint64, error) { + var count C.uint64_t + ret := C.CCall_lib3mf_iterator_count(inst.wrapperRef.LibraryHandle, inst.Ref, &count) if ret != 0 { - return CompositeMaterials{}, makeError(uint32(ret)) + return 0, makeError(uint32(ret)) } - return inst.wrapperRef.NewCompositeMaterials(resource), nil + return uint64(count), nil } -// MultiPropertyGroupIterator represents a Lib3MF class. -type MultiPropertyGroupIterator struct { - ResourceIterator +// ImplicitPortIterator represents a Lib3MF class. +type ImplicitPortIterator struct { + Iterator } -func (wrapper Wrapper) NewMultiPropertyGroupIterator(r ref) MultiPropertyGroupIterator { - return MultiPropertyGroupIterator{wrapper.NewResourceIterator(r)} +func (wrapper Wrapper) NewImplicitPortIterator(r ref) ImplicitPortIterator { + return ImplicitPortIterator{wrapper.NewIterator(r)} } -// GetCurrentMultiPropertyGroup returns the MultiPropertyGroup the iterator points at. -func (inst MultiPropertyGroupIterator) GetCurrentMultiPropertyGroup() (MultiPropertyGroup, error) { - var resource ref - ret := C.CCall_lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) +// GetCurrent returns the current element. +func (inst ImplicitPortIterator) GetCurrent() (ImplicitPort, error) { + var port ref + ret := C.CCall_lib3mf_implicitportiterator_getcurrent(inst.wrapperRef.LibraryHandle, inst.Ref, &port) if ret != 0 { - return MultiPropertyGroup{}, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return inst.wrapperRef.NewMultiPropertyGroup(resource), nil + return inst.wrapperRef.NewImplicitPort(port), nil } -// MetaData represents a Lib3MF class. -type MetaData struct { +// ImplicitNode represents a Lib3MF class. +type ImplicitNode struct { Base } -func (wrapper Wrapper) NewMetaData(r ref) MetaData { - return MetaData{wrapper.NewBase(r)} +func (wrapper Wrapper) NewImplicitNode(r ref) ImplicitNode { + return ImplicitNode{wrapper.NewBase(r)} } -// GetNameSpace returns the namespace URL of the metadata. -func (inst MetaData) GetNameSpace() (string, error) { - var neededfornameSpace C.uint32_t - var filledinnameSpace C.uint32_t - ret := C.CCall_lib3mf_metadata_getnamespace(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededfornameSpace, nil) +// GetIdentifier retrieves the identifier of the node. +func (inst ImplicitNode) GetIdentifier() (string, error) { + var neededforidentifier C.uint32_t + var filledinidentifier C.uint32_t + ret := C.CCall_lib3mf_implicitnode_getidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforidentifier, nil) if ret != 0 { return "", makeError(uint32(ret)) } - bufferSizenameSpace := neededfornameSpace - buffernameSpace := make([]byte, bufferSizenameSpace) - ret = C.CCall_lib3mf_metadata_getnamespace(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizenameSpace, &filledinnameSpace, (*C.char)(unsafe.Pointer(&buffernameSpace[0]))) + bufferSizeidentifier := neededforidentifier + bufferidentifier := make([]byte, bufferSizeidentifier) + ret = C.CCall_lib3mf_implicitnode_getidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizeidentifier, &filledinidentifier, (*C.char)(unsafe.Pointer(&bufferidentifier[0]))) if ret != 0 { return "", makeError(uint32(ret)) } - return string(buffernameSpace[:(filledinnameSpace-1)]), nil + return string(bufferidentifier[:(filledinidentifier-1)]), nil } -// SetNameSpace sets a new namespace URL of the metadata. -func (inst MetaData) SetNameSpace(nameSpace string) error { - ret := C.CCall_lib3mf_metadata_setnamespace(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(nameSpace)[0]))) +// SetIdentifier sets the identifier of the node. +func (inst ImplicitNode) SetIdentifier(identifier string) error { + ret := C.CCall_lib3mf_implicitnode_setidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0]))) if ret != 0 { return makeError(uint32(ret)) } return nil } -// GetName returns the name of a metadata. -func (inst MetaData) GetName() (string, error) { - var neededforname C.uint32_t - var filledinname C.uint32_t - ret := C.CCall_lib3mf_metadata_getname(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforname, nil) +// GetDisplayName retrieves the display name of the node. +func (inst ImplicitNode) GetDisplayName() (string, error) { + var neededfordisplayName C.uint32_t + var filledindisplayName C.uint32_t + ret := C.CCall_lib3mf_implicitnode_getdisplayname(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededfordisplayName, nil) if ret != 0 { return "", makeError(uint32(ret)) } - bufferSizename := neededforname - buffername := make([]byte, bufferSizename) - ret = C.CCall_lib3mf_metadata_getname(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizename, &filledinname, (*C.char)(unsafe.Pointer(&buffername[0]))) + bufferSizedisplayName := neededfordisplayName + bufferdisplayName := make([]byte, bufferSizedisplayName) + ret = C.CCall_lib3mf_implicitnode_getdisplayname(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizedisplayName, &filledindisplayName, (*C.char)(unsafe.Pointer(&bufferdisplayName[0]))) if ret != 0 { return "", makeError(uint32(ret)) } - return string(buffername[:(filledinname-1)]), nil + return string(bufferdisplayName[:(filledindisplayName-1)]), nil } -// SetName sets a new name of a metadata. -func (inst MetaData) SetName(name string) error { - ret := C.CCall_lib3mf_metadata_setname(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(name)[0]))) +// SetDisplayName sets the display name of the node. +func (inst ImplicitNode) SetDisplayName(displayName string) error { + ret := C.CCall_lib3mf_implicitnode_setdisplayname(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(displayName)[0]))) if ret != 0 { return makeError(uint32(ret)) } return nil } -// GetKey returns the (namespace+name) of a metadata. -func (inst MetaData) GetKey() (string, error) { - var neededforkey C.uint32_t - var filledinkey C.uint32_t - ret := C.CCall_lib3mf_metadata_getkey(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforkey, nil) +// GetTag retrieves the tag of the node. +func (inst ImplicitNode) GetTag() (string, error) { + var neededfortag C.uint32_t + var filledintag C.uint32_t + ret := C.CCall_lib3mf_implicitnode_gettag(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededfortag, nil) if ret != 0 { return "", makeError(uint32(ret)) } - bufferSizekey := neededforkey - bufferkey := make([]byte, bufferSizekey) - ret = C.CCall_lib3mf_metadata_getkey(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizekey, &filledinkey, (*C.char)(unsafe.Pointer(&bufferkey[0]))) + bufferSizetag := neededfortag + buffertag := make([]byte, bufferSizetag) + ret = C.CCall_lib3mf_implicitnode_gettag(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizetag, &filledintag, (*C.char)(unsafe.Pointer(&buffertag[0]))) if ret != 0 { return "", makeError(uint32(ret)) } - return string(bufferkey[:(filledinkey-1)]), nil + return string(buffertag[:(filledintag-1)]), nil } -// GetMustPreserve returns, whether a metadata must be preserved. -func (inst MetaData) GetMustPreserve() (bool, error) { - var mustPreserve C.bool - ret := C.CCall_lib3mf_metadata_getmustpreserve(inst.wrapperRef.LibraryHandle, inst.Ref, &mustPreserve) +// SetTag sets the tag of the node. +func (inst ImplicitNode) SetTag(tag string) error { + ret := C.CCall_lib3mf_implicitnode_settag(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(tag)[0]))) if ret != 0 { - return false, makeError(uint32(ret)) + return makeError(uint32(ret)) } - return bool(mustPreserve), nil + return nil } -// SetMustPreserve sets whether a metadata must be preserved. -func (inst MetaData) SetMustPreserve(mustPreserve bool) error { - ret := C.CCall_lib3mf_metadata_setmustpreserve(inst.wrapperRef.LibraryHandle, inst.Ref, C.bool(mustPreserve)) +// GetNodeType retrieves the type of the node. +func (inst ImplicitNode) GetNodeType() (ImplicitNodeType, error) { + var _type C.eLib3MFImplicitNodeType + ret := C.CCall_lib3mf_implicitnode_getnodetype(inst.wrapperRef.LibraryHandle, inst.Ref, &_type) if ret != 0 { - return makeError(uint32(ret)) + return 0, makeError(uint32(ret)) } - return nil + return ImplicitNodeType(_type), nil } -// GetType returns the type of a metadata. -func (inst MetaData) GetType() (string, error) { - var neededfor_type C.uint32_t - var filledin_type C.uint32_t - ret := C.CCall_lib3mf_metadata_gettype(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededfor_type, nil) +// AddInput add an input. +func (inst ImplicitNode) AddInput(identifier string, displayName string) (ImplicitPort, error) { + var port ref + ret := C.CCall_lib3mf_implicitnode_addinput(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), &port) if ret != 0 { - return "", makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - bufferSize_type := neededfor_type - buffer_type := make([]byte, bufferSize_type) - ret = C.CCall_lib3mf_metadata_gettype(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSize_type, &filledin_type, (*C.char)(unsafe.Pointer(&buffer_type[0]))) + return inst.wrapperRef.NewImplicitPort(port), nil +} + +// GetInputs retrieves the inputs. +func (inst ImplicitNode) GetInputs() (ImplicitPortIterator, error) { + var iterator ref + ret := C.CCall_lib3mf_implicitnode_getinputs(inst.wrapperRef.LibraryHandle, inst.Ref, &iterator) if ret != 0 { - return "", makeError(uint32(ret)) + return ImplicitPortIterator{}, makeError(uint32(ret)) } - return string(buffer_type[:(filledin_type-1)]), nil + return inst.wrapperRef.NewImplicitPortIterator(iterator), nil } -// SetType sets a new type of a metadata. This must be a simple XML type. -func (inst MetaData) SetType(_type string) error { - ret := C.CCall_lib3mf_metadata_settype(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(_type)[0]))) +// AddOutput add an output. +func (inst ImplicitNode) AddOutput(identifier string, displayName string) (ImplicitPort, error) { + var port ref + ret := C.CCall_lib3mf_implicitnode_addoutput(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), &port) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(port), nil } -// GetValue returns the value of the metadata. -func (inst MetaData) GetValue() (string, error) { - var neededforvalue C.uint32_t - var filledinvalue C.uint32_t - ret := C.CCall_lib3mf_metadata_getvalue(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforvalue, nil) +// GetOutputs retrieves the outputs. +func (inst ImplicitNode) GetOutputs() (ImplicitPortIterator, error) { + var iterator ref + ret := C.CCall_lib3mf_implicitnode_getoutputs(inst.wrapperRef.LibraryHandle, inst.Ref, &iterator) if ret != 0 { - return "", makeError(uint32(ret)) + return ImplicitPortIterator{}, makeError(uint32(ret)) } - bufferSizevalue := neededforvalue - buffervalue := make([]byte, bufferSizevalue) - ret = C.CCall_lib3mf_metadata_getvalue(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizevalue, &filledinvalue, (*C.char)(unsafe.Pointer(&buffervalue[0]))) + return inst.wrapperRef.NewImplicitPortIterator(iterator), nil +} + +// FindInput retrieves an input. +func (inst ImplicitNode) FindInput(identifier string) (*ImplicitPort, error) { + var input ref + ret := C.CCall_lib3mf_implicitnode_findinput(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), &input) if ret != 0 { - return "", makeError(uint32(ret)) + return nil, makeError(uint32(ret)) } - return string(buffervalue[:(filledinvalue-1)]), nil + var _inputPtr *ImplicitPort + if input != nil { + _inputPtrVal := inst.wrapperRef.NewImplicitPort(input) + _inputPtr = &_inputPtrVal + } + return _inputPtr, nil } -// SetValue sets a new value of the metadata. -func (inst MetaData) SetValue(value string) error { - ret := C.CCall_lib3mf_metadata_setvalue(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(value)[0]))) +// FindOutput retrieves an output. +func (inst ImplicitNode) FindOutput(identifier string) (*ImplicitPort, error) { + var output ref + ret := C.CCall_lib3mf_implicitnode_findoutput(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), &output) if ret != 0 { - return makeError(uint32(ret)) + return nil, makeError(uint32(ret)) } - return nil + var _outputPtr *ImplicitPort + if output != nil { + _outputPtrVal := inst.wrapperRef.NewImplicitPort(output) + _outputPtr = &_outputPtrVal + } + return _outputPtr, nil +} + +// AreTypesValid checks if the types of the input and output ports are valid for the node type. +func (inst ImplicitNode) AreTypesValid() (bool, error) { + var valid C.bool + ret := C.CCall_lib3mf_implicitnode_aretypesvalid(inst.wrapperRef.LibraryHandle, inst.Ref, &valid) + if ret != 0 { + return false, makeError(uint32(ret)) + } + return bool(valid), nil } -// MetaDataGroup represents a Lib3MF class. -type MetaDataGroup struct { - Base +// OneInputNode represents a Lib3MF class. +type OneInputNode struct { + ImplicitNode } -func (wrapper Wrapper) NewMetaDataGroup(r ref) MetaDataGroup { - return MetaDataGroup{wrapper.NewBase(r)} +func (wrapper Wrapper) NewOneInputNode(r ref) OneInputNode { + return OneInputNode{wrapper.NewImplicitNode(r)} } -// GetMetaDataCount returns the number of metadata in this metadatagroup. -func (inst MetaDataGroup) GetMetaDataCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_metadatagroup_getmetadatacount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// GetInputA retrieves the input. +func (inst OneInputNode) GetInputA() (ImplicitPort, error) { + var input ref + ret := C.CCall_lib3mf_oneinputnode_getinputa(inst.wrapperRef.LibraryHandle, inst.Ref, &input) if ret != 0 { - return 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return uint32(count), nil + return inst.wrapperRef.NewImplicitPort(input), nil } -// GetMetaData returns a metadata value within this metadatagroup. -func (inst MetaDataGroup) GetMetaData(index uint32) (MetaData, error) { - var metaData ref - ret := C.CCall_lib3mf_metadatagroup_getmetadata(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &metaData) +// GetOutputResult retrieves the output. +func (inst OneInputNode) GetOutputResult() (ImplicitPort, error) { + var result ref + ret := C.CCall_lib3mf_oneinputnode_getoutputresult(inst.wrapperRef.LibraryHandle, inst.Ref, &result) if ret != 0 { - return MetaData{}, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return inst.wrapperRef.NewMetaData(metaData), nil + return inst.wrapperRef.NewImplicitPort(result), nil } -// GetMetaDataByKey returns a metadata value within this metadatagroup. -func (inst MetaDataGroup) GetMetaDataByKey(nameSpace string, name string) (MetaData, error) { - var metaData ref - ret := C.CCall_lib3mf_metadatagroup_getmetadatabykey(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(nameSpace)[0])), (*C.char)(unsafe.Pointer(&[]byte(name)[0])), &metaData) - if ret != 0 { - return MetaData{}, makeError(uint32(ret)) - } - return inst.wrapperRef.NewMetaData(metaData), nil + +// SinNode represents a Lib3MF class. +type SinNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewSinNode(r ref) SinNode { + return SinNode{wrapper.NewOneInputNode(r)} +} + + +// CosNode represents a Lib3MF class. +type CosNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewCosNode(r ref) CosNode { + return CosNode{wrapper.NewOneInputNode(r)} +} + + +// TanNode represents a Lib3MF class. +type TanNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewTanNode(r ref) TanNode { + return TanNode{wrapper.NewOneInputNode(r)} +} + + +// ArcSinNode represents a Lib3MF class. +type ArcSinNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewArcSinNode(r ref) ArcSinNode { + return ArcSinNode{wrapper.NewOneInputNode(r)} +} + + +// ArcCosNode represents a Lib3MF class. +type ArcCosNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewArcCosNode(r ref) ArcCosNode { + return ArcCosNode{wrapper.NewOneInputNode(r)} +} + + +// ArcTanNode represents a Lib3MF class. +type ArcTanNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewArcTanNode(r ref) ArcTanNode { + return ArcTanNode{wrapper.NewOneInputNode(r)} +} + + +// SinhNode represents a Lib3MF class. +type SinhNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewSinhNode(r ref) SinhNode { + return SinhNode{wrapper.NewOneInputNode(r)} +} + + +// CoshNode represents a Lib3MF class. +type CoshNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewCoshNode(r ref) CoshNode { + return CoshNode{wrapper.NewOneInputNode(r)} +} + + +// TanhNode represents a Lib3MF class. +type TanhNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewTanhNode(r ref) TanhNode { + return TanhNode{wrapper.NewOneInputNode(r)} +} + + +// RoundNode represents a Lib3MF class. +type RoundNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewRoundNode(r ref) RoundNode { + return RoundNode{wrapper.NewOneInputNode(r)} +} + + +// CeilNode represents a Lib3MF class. +type CeilNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewCeilNode(r ref) CeilNode { + return CeilNode{wrapper.NewOneInputNode(r)} +} + + +// FloorNode represents a Lib3MF class. +type FloorNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewFloorNode(r ref) FloorNode { + return FloorNode{wrapper.NewOneInputNode(r)} +} + + +// SignNode represents a Lib3MF class. +type SignNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewSignNode(r ref) SignNode { + return SignNode{wrapper.NewOneInputNode(r)} +} + + +// FractNode represents a Lib3MF class. +type FractNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewFractNode(r ref) FractNode { + return FractNode{wrapper.NewOneInputNode(r)} +} + + +// AbsNode represents a Lib3MF class. +type AbsNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewAbsNode(r ref) AbsNode { + return AbsNode{wrapper.NewOneInputNode(r)} +} + + +// ExpNode represents a Lib3MF class. +type ExpNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewExpNode(r ref) ExpNode { + return ExpNode{wrapper.NewOneInputNode(r)} +} + + +// LogNode represents a Lib3MF class. +type LogNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewLogNode(r ref) LogNode { + return LogNode{wrapper.NewOneInputNode(r)} +} + + +// Log2Node represents a Lib3MF class. +type Log2Node struct { + OneInputNode +} + +func (wrapper Wrapper) NewLog2Node(r ref) Log2Node { + return Log2Node{wrapper.NewOneInputNode(r)} +} + + +// Log10Node represents a Lib3MF class. +type Log10Node struct { + OneInputNode +} + +func (wrapper Wrapper) NewLog10Node(r ref) Log10Node { + return Log10Node{wrapper.NewOneInputNode(r)} +} + + +// LengthNode represents a Lib3MF class. +type LengthNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewLengthNode(r ref) LengthNode { + return LengthNode{wrapper.NewOneInputNode(r)} +} + + +// TransposeNode represents a Lib3MF class. +type TransposeNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewTransposeNode(r ref) TransposeNode { + return TransposeNode{wrapper.NewOneInputNode(r)} +} + + +// InverseNode represents a Lib3MF class. +type InverseNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewInverseNode(r ref) InverseNode { + return InverseNode{wrapper.NewOneInputNode(r)} +} + + +// SqrtNode represents a Lib3MF class. +type SqrtNode struct { + OneInputNode +} + +func (wrapper Wrapper) NewSqrtNode(r ref) SqrtNode { + return SqrtNode{wrapper.NewOneInputNode(r)} +} + + +// ResourceIdNode represents a Lib3MF class. +type ResourceIdNode struct { + ImplicitNode +} + +func (wrapper Wrapper) NewResourceIdNode(r ref) ResourceIdNode { + return ResourceIdNode{wrapper.NewImplicitNode(r)} } -// RemoveMetaDataByIndex removes metadata by index from the model. -func (inst MetaDataGroup) RemoveMetaDataByIndex(index uint32) error { - ret := C.CCall_lib3mf_metadatagroup_removemetadatabyindex(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index)) +// SetResource sets the Resource that the resourceid attribute of the node will point to. +func (inst ResourceIdNode) SetResource(resource Resource) error { + ret := C.CCall_lib3mf_resourceidnode_setresource(inst.wrapperRef.LibraryHandle, inst.Ref, resource.Ref) if ret != 0 { return makeError(uint32(ret)) } return nil } -// RemoveMetaData removes metadata from the model. -func (inst MetaDataGroup) RemoveMetaData(theMetaData MetaData) error { - ret := C.CCall_lib3mf_metadatagroup_removemetadata(inst.wrapperRef.LibraryHandle, inst.Ref, theMetaData.Ref) +// GetResource retrieves the resource of the node. +func (inst ResourceIdNode) GetResource() (Resource, error) { + var resource ref + ret := C.CCall_lib3mf_resourceidnode_getresource(inst.wrapperRef.LibraryHandle, inst.Ref, &resource) if ret != 0 { - return makeError(uint32(ret)) + return Resource{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewResource(resource), nil } -// AddMetaData adds a new metadata to this metadatagroup. -func (inst MetaDataGroup) AddMetaData(nameSpace string, name string, value string, _type string, mustPreserve bool) (MetaData, error) { - var metaData ref - ret := C.CCall_lib3mf_metadatagroup_addmetadata(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(nameSpace)[0])), (*C.char)(unsafe.Pointer(&[]byte(name)[0])), (*C.char)(unsafe.Pointer(&[]byte(value)[0])), (*C.char)(unsafe.Pointer(&[]byte(_type)[0])), C.bool(mustPreserve), &metaData) +// GetOutputValue retrieves the output. +func (inst ResourceIdNode) GetOutputValue() (ImplicitPort, error) { + var value ref + ret := C.CCall_lib3mf_resourceidnode_getoutputvalue(inst.wrapperRef.LibraryHandle, inst.Ref, &value) if ret != 0 { - return MetaData{}, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return inst.wrapperRef.NewMetaData(metaData), nil + return inst.wrapperRef.NewImplicitPort(value), nil } -// Object represents a Lib3MF class. -type Object struct { - Resource +// TwoInputNode represents a Lib3MF class. +type TwoInputNode struct { + OneInputNode } -func (wrapper Wrapper) NewObject(r ref) Object { - return Object{wrapper.NewResource(r)} +func (wrapper Wrapper) NewTwoInputNode(r ref) TwoInputNode { + return TwoInputNode{wrapper.NewOneInputNode(r)} } -// GetType retrieves an object's type. -func (inst Object) GetType() (ObjectType, error) { - var objectType C.eLib3MFObjectType - ret := C.CCall_lib3mf_object_gettype(inst.wrapperRef.LibraryHandle, inst.Ref, &objectType) +// GetInputB retrieves the second input. +func (inst TwoInputNode) GetInputB() (ImplicitPort, error) { + var b ref + ret := C.CCall_lib3mf_twoinputnode_getinputb(inst.wrapperRef.LibraryHandle, inst.Ref, &b) if ret != 0 { - return 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return ObjectType(objectType), nil + return inst.wrapperRef.NewImplicitPort(b), nil } -// SetType sets an object's type. -func (inst Object) SetType(objectType ObjectType) error { - ret := C.CCall_lib3mf_object_settype(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFObjectType(objectType)) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil -} -// GetName retrieves an object's name. -func (inst Object) GetName() (string, error) { - var neededforname C.uint32_t - var filledinname C.uint32_t - ret := C.CCall_lib3mf_object_getname(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforname, nil) - if ret != 0 { - return "", makeError(uint32(ret)) - } - bufferSizename := neededforname - buffername := make([]byte, bufferSizename) - ret = C.CCall_lib3mf_object_getname(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizename, &filledinname, (*C.char)(unsafe.Pointer(&buffername[0]))) - if ret != 0 { - return "", makeError(uint32(ret)) - } - return string(buffername[:(filledinname-1)]), nil +// AdditionNode represents a Lib3MF class. +type AdditionNode struct { + TwoInputNode } -// SetName sets an object's name string. -func (inst Object) SetName(name string) error { - ret := C.CCall_lib3mf_object_setname(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(name)[0]))) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil +func (wrapper Wrapper) NewAdditionNode(r ref) AdditionNode { + return AdditionNode{wrapper.NewTwoInputNode(r)} } -// GetPartNumber retrieves an object's part number. -func (inst Object) GetPartNumber() (string, error) { - var neededforpartNumber C.uint32_t - var filledinpartNumber C.uint32_t - ret := C.CCall_lib3mf_object_getpartnumber(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpartNumber, nil) - if ret != 0 { - return "", makeError(uint32(ret)) - } - bufferSizepartNumber := neededforpartNumber - bufferpartNumber := make([]byte, bufferSizepartNumber) - ret = C.CCall_lib3mf_object_getpartnumber(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizepartNumber, &filledinpartNumber, (*C.char)(unsafe.Pointer(&bufferpartNumber[0]))) - if ret != 0 { - return "", makeError(uint32(ret)) - } - return string(bufferpartNumber[:(filledinpartNumber-1)]), nil + +// SubtractionNode represents a Lib3MF class. +type SubtractionNode struct { + TwoInputNode } -// SetPartNumber sets an objects partnumber string. -func (inst Object) SetPartNumber(partNumber string) error { - ret := C.CCall_lib3mf_object_setpartnumber(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(partNumber)[0]))) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil +func (wrapper Wrapper) NewSubtractionNode(r ref) SubtractionNode { + return SubtractionNode{wrapper.NewTwoInputNode(r)} } -// IsMeshObject retrieves, if an object is a mesh object. -func (inst Object) IsMeshObject() (bool, error) { - var isMeshObject C.bool - ret := C.CCall_lib3mf_object_ismeshobject(inst.wrapperRef.LibraryHandle, inst.Ref, &isMeshObject) - if ret != 0 { - return false, makeError(uint32(ret)) - } - return bool(isMeshObject), nil + +// MultiplicationNode represents a Lib3MF class. +type MultiplicationNode struct { + TwoInputNode } -// IsComponentsObject retrieves, if an object is a components object. -func (inst Object) IsComponentsObject() (bool, error) { - var isComponentsObject C.bool - ret := C.CCall_lib3mf_object_iscomponentsobject(inst.wrapperRef.LibraryHandle, inst.Ref, &isComponentsObject) - if ret != 0 { - return false, makeError(uint32(ret)) - } - return bool(isComponentsObject), nil +func (wrapper Wrapper) NewMultiplicationNode(r ref) MultiplicationNode { + return MultiplicationNode{wrapper.NewTwoInputNode(r)} } -// IsValid retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. -func (inst Object) IsValid() (bool, error) { - var isValid C.bool - ret := C.CCall_lib3mf_object_isvalid(inst.wrapperRef.LibraryHandle, inst.Ref, &isValid) - if ret != 0 { - return false, makeError(uint32(ret)) - } - return bool(isValid), nil + +// DivisionNode represents a Lib3MF class. +type DivisionNode struct { + TwoInputNode } -// SetAttachmentAsThumbnail use an existing attachment as thumbnail for this object. -func (inst Object) SetAttachmentAsThumbnail(attachment Attachment) error { - ret := C.CCall_lib3mf_object_setattachmentasthumbnail(inst.wrapperRef.LibraryHandle, inst.Ref, attachment.Ref) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil +func (wrapper Wrapper) NewDivisionNode(r ref) DivisionNode { + return DivisionNode{wrapper.NewTwoInputNode(r)} } -// GetThumbnailAttachment get the attachment containing the object thumbnail. -func (inst Object) GetThumbnailAttachment() (*Attachment, error) { - var attachment ref - ret := C.CCall_lib3mf_object_getthumbnailattachment(inst.wrapperRef.LibraryHandle, inst.Ref, &attachment) - if ret != 0 { - return nil, makeError(uint32(ret)) - } - var _attachmentPtr *Attachment - if attachment != nil { - _attachmentPtrVal := inst.wrapperRef.NewAttachment(attachment) - _attachmentPtr = &_attachmentPtrVal - } - return _attachmentPtr, nil + +// DotNode represents a Lib3MF class. +type DotNode struct { + TwoInputNode } -// ClearThumbnailAttachment clears the attachment. The attachment instance is not removed from the package. -func (inst Object) ClearThumbnailAttachment() error { - ret := C.CCall_lib3mf_object_clearthumbnailattachment(inst.wrapperRef.LibraryHandle, inst.Ref) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil +func (wrapper Wrapper) NewDotNode(r ref) DotNode { + return DotNode{wrapper.NewTwoInputNode(r)} } -// GetOutbox returns the outbox of a build item. -func (inst Object) GetOutbox() (Box, error) { - var outbox C.sLib3MFBox - ret := C.CCall_lib3mf_object_getoutbox(inst.wrapperRef.LibraryHandle, inst.Ref, &outbox) - if ret != 0 { - return Box{}, makeError(uint32(ret)) - } - return *(*Box)(unsafe.Pointer(&outbox)), nil + +// CrossNode represents a Lib3MF class. +type CrossNode struct { + TwoInputNode } -// GetUUID retrieves an object's uuid string (see production extension specification). -func (inst Object) GetUUID() (bool, string, error) { - var hasUUID C.bool - var neededforuUID C.uint32_t - var filledinuUID C.uint32_t - ret := C.CCall_lib3mf_object_getuuid(inst.wrapperRef.LibraryHandle, inst.Ref, &hasUUID, 0, &neededforuUID, nil) - if ret != 0 { - return false, "", makeError(uint32(ret)) - } - bufferSizeuUID := neededforuUID - bufferuUID := make([]byte, bufferSizeuUID) - ret = C.CCall_lib3mf_object_getuuid(inst.wrapperRef.LibraryHandle, inst.Ref, &hasUUID, bufferSizeuUID, &filledinuUID, (*C.char)(unsafe.Pointer(&bufferuUID[0]))) - if ret != 0 { - return false, "", makeError(uint32(ret)) - } - return bool(hasUUID), string(bufferuUID[:(filledinuUID-1)]), nil +func (wrapper Wrapper) NewCrossNode(r ref) CrossNode { + return CrossNode{wrapper.NewTwoInputNode(r)} } -// SetUUID sets a build object's uuid string (see production extension specification). -func (inst Object) SetUUID(uUID string) error { - ret := C.CCall_lib3mf_object_setuuid(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(uUID)[0]))) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil + +// ArcTan2Node represents a Lib3MF class. +type ArcTan2Node struct { + TwoInputNode } -// GetMetaDataGroup returns the metadatagroup of this object. -func (inst Object) GetMetaDataGroup() (MetaDataGroup, error) { - var metaDataGroup ref - ret := C.CCall_lib3mf_object_getmetadatagroup(inst.wrapperRef.LibraryHandle, inst.Ref, &metaDataGroup) - if ret != 0 { - return MetaDataGroup{}, makeError(uint32(ret)) - } - return inst.wrapperRef.NewMetaDataGroup(metaDataGroup), nil +func (wrapper Wrapper) NewArcTan2Node(r ref) ArcTan2Node { + return ArcTan2Node{wrapper.NewTwoInputNode(r)} } -// SetSlicesMeshResolution set the meshresolution of the mesh object. -func (inst Object) SetSlicesMeshResolution(meshResolution SlicesMeshResolution) error { - ret := C.CCall_lib3mf_object_setslicesmeshresolution(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFSlicesMeshResolution(meshResolution)) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil + +// MatVecMultiplicationNode represents a Lib3MF class. +type MatVecMultiplicationNode struct { + TwoInputNode } -// GetSlicesMeshResolution get the meshresolution of the mesh object. -func (inst Object) GetSlicesMeshResolution() (SlicesMeshResolution, error) { - var meshResolution C.eLib3MFSlicesMeshResolution - ret := C.CCall_lib3mf_object_getslicesmeshresolution(inst.wrapperRef.LibraryHandle, inst.Ref, &meshResolution) - if ret != 0 { - return 0, makeError(uint32(ret)) - } - return SlicesMeshResolution(meshResolution), nil +func (wrapper Wrapper) NewMatVecMultiplicationNode(r ref) MatVecMultiplicationNode { + return MatVecMultiplicationNode{wrapper.NewTwoInputNode(r)} } -// HasSlices returns whether the Object has a slice stack. If Recursive is true, also checks whether any references object has a slice stack. -func (inst Object) HasSlices(recursive bool) (bool, error) { - var hasSlices C.bool - ret := C.CCall_lib3mf_object_hasslices(inst.wrapperRef.LibraryHandle, inst.Ref, C.bool(recursive), &hasSlices) - if ret != 0 { - return false, makeError(uint32(ret)) - } - return bool(hasSlices), nil + +// MinNode represents a Lib3MF class. +type MinNode struct { + TwoInputNode } -// ClearSliceStack unlinks the attached slicestack from this object. If no slice stack is attached, do noting. -func (inst Object) ClearSliceStack() error { - ret := C.CCall_lib3mf_object_clearslicestack(inst.wrapperRef.LibraryHandle, inst.Ref) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil +func (wrapper Wrapper) NewMinNode(r ref) MinNode { + return MinNode{wrapper.NewTwoInputNode(r)} } -// GetSliceStack get the Slicestack attached to the object. -func (inst Object) GetSliceStack() (SliceStack, error) { - var sliceStackInstance ref - ret := C.CCall_lib3mf_object_getslicestack(inst.wrapperRef.LibraryHandle, inst.Ref, &sliceStackInstance) - if ret != 0 { - return SliceStack{}, makeError(uint32(ret)) - } - return inst.wrapperRef.NewSliceStack(sliceStackInstance), nil + +// MaxNode represents a Lib3MF class. +type MaxNode struct { + TwoInputNode } -// AssignSliceStack assigns a slicestack to the object. -func (inst Object) AssignSliceStack(sliceStackInstance SliceStack) error { - ret := C.CCall_lib3mf_object_assignslicestack(inst.wrapperRef.LibraryHandle, inst.Ref, sliceStackInstance.Ref) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil +func (wrapper Wrapper) NewMaxNode(r ref) MaxNode { + return MaxNode{wrapper.NewTwoInputNode(r)} } -// MeshObject represents a Lib3MF class. -type MeshObject struct { - Object +// FmodNode represents a Lib3MF class. +type FmodNode struct { + TwoInputNode } -func (wrapper Wrapper) NewMeshObject(r ref) MeshObject { - return MeshObject{wrapper.NewObject(r)} +func (wrapper Wrapper) NewFmodNode(r ref) FmodNode { + return FmodNode{wrapper.NewTwoInputNode(r)} } -// GetVertexCount returns the vertex count of a mesh object. -func (inst MeshObject) GetVertexCount() (uint32, error) { - var vertexCount C.uint32_t - ret := C.CCall_lib3mf_meshobject_getvertexcount(inst.wrapperRef.LibraryHandle, inst.Ref, &vertexCount) - if ret != 0 { - return 0, makeError(uint32(ret)) - } - return uint32(vertexCount), nil -} -// GetTriangleCount returns the triangle count of a mesh object. -func (inst MeshObject) GetTriangleCount() (uint32, error) { - var vertexCount C.uint32_t - ret := C.CCall_lib3mf_meshobject_gettrianglecount(inst.wrapperRef.LibraryHandle, inst.Ref, &vertexCount) - if ret != 0 { - return 0, makeError(uint32(ret)) - } - return uint32(vertexCount), nil +// ModNode represents a Lib3MF class. +type ModNode struct { + TwoInputNode } -// GetVertex returns the vertex count of a mesh object. -func (inst MeshObject) GetVertex(index uint32) (Position, error) { - var coordinates C.sLib3MFPosition - ret := C.CCall_lib3mf_meshobject_getvertex(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &coordinates) - if ret != 0 { - return Position{}, makeError(uint32(ret)) - } - return *(*Position)(unsafe.Pointer(&coordinates)), nil +func (wrapper Wrapper) NewModNode(r ref) ModNode { + return ModNode{wrapper.NewTwoInputNode(r)} } -// SetVertex sets the coordinates of a single vertex of a mesh object. -func (inst MeshObject) SetVertex(index uint32, coordinates Position) error { - ret := C.CCall_lib3mf_meshobject_setvertex(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), (*C.sLib3MFPosition)(unsafe.Pointer(&coordinates))) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil + +// PowNode represents a Lib3MF class. +type PowNode struct { + TwoInputNode } -// AddVertex adds a single vertex to a mesh object. -func (inst MeshObject) AddVertex(coordinates Position) (uint32, error) { - var newIndex C.uint32_t - ret := C.CCall_lib3mf_meshobject_addvertex(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFPosition)(unsafe.Pointer(&coordinates)), &newIndex) - if ret != 0 { - return 0, makeError(uint32(ret)) - } - return uint32(newIndex), nil +func (wrapper Wrapper) NewPowNode(r ref) PowNode { + return PowNode{wrapper.NewTwoInputNode(r)} } -// GetVertices obtains all vertex positions of a mesh object. -func (inst MeshObject) GetVertices(vertices []Position) ([]Position, error) { - var neededforvertices C.uint64_t - ret := C.CCall_lib3mf_meshobject_getvertices(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforvertices, nil) - if ret != 0 { - return nil, makeError(uint32(ret)) - } - if len(vertices) < int(neededforvertices) { - vertices = append(vertices, make([]Position, int(neededforvertices)-len(vertices))...) - } - ret = C.CCall_lib3mf_meshobject_getvertices(inst.wrapperRef.LibraryHandle, inst.Ref, neededforvertices, nil, (*C.sLib3MFPosition)(unsafe.Pointer(&vertices[0]))) - if ret != 0 { - return nil, makeError(uint32(ret)) - } - return vertices[:int(neededforvertices)], nil + +// SelectNode represents a Lib3MF class. +type SelectNode struct { + OneInputNode } -// GetTriangle returns indices of a single triangle of a mesh object. -func (inst MeshObject) GetTriangle(index uint32) (Triangle, error) { - var indices C.sLib3MFTriangle - ret := C.CCall_lib3mf_meshobject_gettriangle(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &indices) - if ret != 0 { - return Triangle{}, makeError(uint32(ret)) - } - return *(*Triangle)(unsafe.Pointer(&indices)), nil +func (wrapper Wrapper) NewSelectNode(r ref) SelectNode { + return SelectNode{wrapper.NewOneInputNode(r)} } -// SetTriangle sets the indices of a single triangle of a mesh object. -func (inst MeshObject) SetTriangle(index uint32, indices Triangle) error { - ret := C.CCall_lib3mf_meshobject_settriangle(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), (*C.sLib3MFTriangle)(unsafe.Pointer(&indices))) +// GetInputB retrieves the second input. +func (inst SelectNode) GetInputB() (ImplicitPort, error) { + var b ref + ret := C.CCall_lib3mf_selectnode_getinputb(inst.wrapperRef.LibraryHandle, inst.Ref, &b) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(b), nil } -// AddTriangle adds a single triangle to a mesh object. -func (inst MeshObject) AddTriangle(indices Triangle) (uint32, error) { - var newIndex C.uint32_t - ret := C.CCall_lib3mf_meshobject_addtriangle(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFTriangle)(unsafe.Pointer(&indices)), &newIndex) +// GetInputC retrieves the third input. +func (inst SelectNode) GetInputC() (ImplicitPort, error) { + var c ref + ret := C.CCall_lib3mf_selectnode_getinputc(inst.wrapperRef.LibraryHandle, inst.Ref, &c) if ret != 0 { - return 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return uint32(newIndex), nil + return inst.wrapperRef.NewImplicitPort(c), nil } -// GetTriangleIndices get all triangles of a mesh object. -func (inst MeshObject) GetTriangleIndices(indices []Triangle) ([]Triangle, error) { - var neededforindices C.uint64_t - ret := C.CCall_lib3mf_meshobject_gettriangleindices(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforindices, nil) - if ret != 0 { - return nil, makeError(uint32(ret)) - } - if len(indices) < int(neededforindices) { - indices = append(indices, make([]Triangle, int(neededforindices)-len(indices))...) - } - ret = C.CCall_lib3mf_meshobject_gettriangleindices(inst.wrapperRef.LibraryHandle, inst.Ref, neededforindices, nil, (*C.sLib3MFTriangle)(unsafe.Pointer(&indices[0]))) +// GetInputD retrieves the fourth input. +func (inst SelectNode) GetInputD() (ImplicitPort, error) { + var d ref + ret := C.CCall_lib3mf_selectnode_getinputd(inst.wrapperRef.LibraryHandle, inst.Ref, &d) if ret != 0 { - return nil, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return indices[:int(neededforindices)], nil + return inst.wrapperRef.NewImplicitPort(d), nil } -// SetObjectLevelProperty sets the property at the object-level of the mesh object. -func (inst MeshObject) SetObjectLevelProperty(uniqueResourceID uint32, propertyID uint32) error { - ret := C.CCall_lib3mf_meshobject_setobjectlevelproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(uniqueResourceID), C.uint32_t(propertyID)) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil + +// ClampNode represents a Lib3MF class. +type ClampNode struct { + OneInputNode } -// GetObjectLevelProperty gets the property at the object-level of the mesh object. -func (inst MeshObject) GetObjectLevelProperty() (uint32, uint32, bool, error) { - var uniqueResourceID C.uint32_t - var propertyID C.uint32_t - var hasObjectLevelProperty C.bool - ret := C.CCall_lib3mf_meshobject_getobjectlevelproperty(inst.wrapperRef.LibraryHandle, inst.Ref, &uniqueResourceID, &propertyID, &hasObjectLevelProperty) - if ret != 0 { - return 0, 0, false, makeError(uint32(ret)) - } - return uint32(uniqueResourceID), uint32(propertyID), bool(hasObjectLevelProperty), nil +func (wrapper Wrapper) NewClampNode(r ref) ClampNode { + return ClampNode{wrapper.NewOneInputNode(r)} } -// SetTriangleProperties sets the properties of a single triangle of a mesh object. -func (inst MeshObject) SetTriangleProperties(index uint32, properties TriangleProperties) error { - ret := C.CCall_lib3mf_meshobject_settriangleproperties(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), (*C.sLib3MFTriangleProperties)(unsafe.Pointer(&properties))) +// GetInputMin retrieves the input for the lower limit. +func (inst ClampNode) GetInputMin() (ImplicitPort, error) { + var min ref + ret := C.CCall_lib3mf_clampnode_getinputmin(inst.wrapperRef.LibraryHandle, inst.Ref, &min) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(min), nil } -// GetTriangleProperties gets the properties of a single triangle of a mesh object. -func (inst MeshObject) GetTriangleProperties(index uint32) (TriangleProperties, error) { - var property C.sLib3MFTriangleProperties - ret := C.CCall_lib3mf_meshobject_gettriangleproperties(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &property) +// GetInputMax retrieves the input for the upper limit. +func (inst ClampNode) GetInputMax() (ImplicitPort, error) { + var max ref + ret := C.CCall_lib3mf_clampnode_getinputmax(inst.wrapperRef.LibraryHandle, inst.Ref, &max) if ret != 0 { - return TriangleProperties{}, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return *(*TriangleProperties)(unsafe.Pointer(&property)), nil + return inst.wrapperRef.NewImplicitPort(max), nil } -// SetAllTriangleProperties sets the properties of all triangles of a mesh object. Sets the object level property to the first entry of the passed triangle properties, if not yet specified. -func (inst MeshObject) SetAllTriangleProperties(propertiesArray []TriangleProperties) error { - ret := C.CCall_lib3mf_meshobject_setalltriangleproperties(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(propertiesArray)), (*C.sLib3MFTriangleProperties)(unsafe.Pointer(&propertiesArray[0]))) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil + +// ComposeVectorNode represents a Lib3MF class. +type ComposeVectorNode struct { + ImplicitNode } -// GetAllTriangleProperties gets the properties of all triangles of a mesh object. -func (inst MeshObject) GetAllTriangleProperties(propertiesArray []TriangleProperties) ([]TriangleProperties, error) { - var neededforpropertiesArray C.uint64_t - ret := C.CCall_lib3mf_meshobject_getalltriangleproperties(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpropertiesArray, nil) - if ret != 0 { - return nil, makeError(uint32(ret)) - } - if len(propertiesArray) < int(neededforpropertiesArray) { - propertiesArray = append(propertiesArray, make([]TriangleProperties, int(neededforpropertiesArray)-len(propertiesArray))...) - } - ret = C.CCall_lib3mf_meshobject_getalltriangleproperties(inst.wrapperRef.LibraryHandle, inst.Ref, neededforpropertiesArray, nil, (*C.sLib3MFTriangleProperties)(unsafe.Pointer(&propertiesArray[0]))) - if ret != 0 { - return nil, makeError(uint32(ret)) - } - return propertiesArray[:int(neededforpropertiesArray)], nil +func (wrapper Wrapper) NewComposeVectorNode(r ref) ComposeVectorNode { + return ComposeVectorNode{wrapper.NewImplicitNode(r)} } -// ClearAllProperties clears all properties of this mesh object (triangle and object-level). -func (inst MeshObject) ClearAllProperties() error { - ret := C.CCall_lib3mf_meshobject_clearallproperties(inst.wrapperRef.LibraryHandle, inst.Ref) +// GetInputX retrieves the input for the x component. +func (inst ComposeVectorNode) GetInputX() (ImplicitPort, error) { + var x ref + ret := C.CCall_lib3mf_composevectornode_getinputx(inst.wrapperRef.LibraryHandle, inst.Ref, &x) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(x), nil } -// SetGeometry set all triangles of a mesh object. -func (inst MeshObject) SetGeometry(vertices []Position, indices []Triangle) error { - ret := C.CCall_lib3mf_meshobject_setgeometry(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(vertices)), (*C.sLib3MFPosition)(unsafe.Pointer(&vertices[0])), C.uint64_t(len(indices)), (*C.sLib3MFTriangle)(unsafe.Pointer(&indices[0]))) +// GetInputY retrieves the input for the y component. +func (inst ComposeVectorNode) GetInputY() (ImplicitPort, error) { + var y ref + ret := C.CCall_lib3mf_composevectornode_getinputy(inst.wrapperRef.LibraryHandle, inst.Ref, &y) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(y), nil } -// IsManifoldAndOriented retrieves, if an object describes a topologically oriented and manifold mesh, according to the core spec. -func (inst MeshObject) IsManifoldAndOriented() (bool, error) { - var isManifoldAndOriented C.bool - ret := C.CCall_lib3mf_meshobject_ismanifoldandoriented(inst.wrapperRef.LibraryHandle, inst.Ref, &isManifoldAndOriented) +// GetInputZ retrieves the input for the z component. +func (inst ComposeVectorNode) GetInputZ() (ImplicitPort, error) { + var z ref + ret := C.CCall_lib3mf_composevectornode_getinputz(inst.wrapperRef.LibraryHandle, inst.Ref, &z) if ret != 0 { - return false, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return bool(isManifoldAndOriented), nil + return inst.wrapperRef.NewImplicitPort(z), nil } -// BeamLattice retrieves the BeamLattice within this MeshObject. -func (inst MeshObject) BeamLattice() (BeamLattice, error) { - var theBeamLattice ref - ret := C.CCall_lib3mf_meshobject_beamlattice(inst.wrapperRef.LibraryHandle, inst.Ref, &theBeamLattice) +// GetOutputResult retrieves the output. +func (inst ComposeVectorNode) GetOutputResult() (ImplicitPort, error) { + var result ref + ret := C.CCall_lib3mf_composevectornode_getoutputresult(inst.wrapperRef.LibraryHandle, inst.Ref, &result) if ret != 0 { - return BeamLattice{}, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return inst.wrapperRef.NewBeamLattice(theBeamLattice), nil + return inst.wrapperRef.NewImplicitPort(result), nil } -// BeamLattice represents a Lib3MF class. -type BeamLattice struct { - Base +// VectorFromScalarNode represents a Lib3MF class. +type VectorFromScalarNode struct { + OneInputNode } -func (wrapper Wrapper) NewBeamLattice(r ref) BeamLattice { - return BeamLattice{wrapper.NewBase(r)} +func (wrapper Wrapper) NewVectorFromScalarNode(r ref) VectorFromScalarNode { + return VectorFromScalarNode{wrapper.NewOneInputNode(r)} } -// GetMinLength returns the minimal length of beams for the beamlattice. -func (inst BeamLattice) GetMinLength() (float64, error) { - var minLength C.double - ret := C.CCall_lib3mf_beamlattice_getminlength(inst.wrapperRef.LibraryHandle, inst.Ref, &minLength) - if ret != 0 { - return 0, makeError(uint32(ret)) - } - return float64(minLength), nil + +// DecomposeVectorNode represents a Lib3MF class. +type DecomposeVectorNode struct { + ImplicitNode } -// SetMinLength sets the minimal length of beams for the beamlattice. -func (inst BeamLattice) SetMinLength(minLength float64) error { - ret := C.CCall_lib3mf_beamlattice_setminlength(inst.wrapperRef.LibraryHandle, inst.Ref, C.double(minLength)) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil +func (wrapper Wrapper) NewDecomposeVectorNode(r ref) DecomposeVectorNode { + return DecomposeVectorNode{wrapper.NewImplicitNode(r)} } -// GetClipping returns the clipping mode and the clipping-mesh for the beamlattice of this mesh. -func (inst BeamLattice) GetClipping() (BeamLatticeClipMode, uint32, error) { - var clipMode C.eLib3MFBeamLatticeClipMode - var uniqueResourceID C.uint32_t - ret := C.CCall_lib3mf_beamlattice_getclipping(inst.wrapperRef.LibraryHandle, inst.Ref, &clipMode, &uniqueResourceID) +// GetInputA retrieves the input. +func (inst DecomposeVectorNode) GetInputA() (ImplicitPort, error) { + var a ref + ret := C.CCall_lib3mf_decomposevectornode_getinputa(inst.wrapperRef.LibraryHandle, inst.Ref, &a) if ret != 0 { - return 0, 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return BeamLatticeClipMode(clipMode), uint32(uniqueResourceID), nil + return inst.wrapperRef.NewImplicitPort(a), nil } -// SetClipping sets the clipping mode and the clipping-mesh for the beamlattice of this mesh. -func (inst BeamLattice) SetClipping(clipMode BeamLatticeClipMode, uniqueResourceID uint32) error { - ret := C.CCall_lib3mf_beamlattice_setclipping(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFBeamLatticeClipMode(clipMode), C.uint32_t(uniqueResourceID)) +// GetOutputX retrieves the output for the x component. +func (inst DecomposeVectorNode) GetOutputX() (ImplicitPort, error) { + var x ref + ret := C.CCall_lib3mf_decomposevectornode_getoutputx(inst.wrapperRef.LibraryHandle, inst.Ref, &x) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(x), nil } -// GetRepresentation returns the representation-mesh for the beamlattice of this mesh. -func (inst BeamLattice) GetRepresentation() (bool, uint32, error) { - var hasRepresentation C.bool - var uniqueResourceID C.uint32_t - ret := C.CCall_lib3mf_beamlattice_getrepresentation(inst.wrapperRef.LibraryHandle, inst.Ref, &hasRepresentation, &uniqueResourceID) +// GetOutputY retrieves the output for the y component. +func (inst DecomposeVectorNode) GetOutputY() (ImplicitPort, error) { + var y ref + ret := C.CCall_lib3mf_decomposevectornode_getoutputy(inst.wrapperRef.LibraryHandle, inst.Ref, &y) if ret != 0 { - return false, 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return bool(hasRepresentation), uint32(uniqueResourceID), nil + return inst.wrapperRef.NewImplicitPort(y), nil } -// SetRepresentation sets the representation-mesh for the beamlattice of this mesh. -func (inst BeamLattice) SetRepresentation(uniqueResourceID uint32) error { - ret := C.CCall_lib3mf_beamlattice_setrepresentation(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(uniqueResourceID)) +// GetOutputZ retrieves the output for the z component. +func (inst DecomposeVectorNode) GetOutputZ() (ImplicitPort, error) { + var z ref + ret := C.CCall_lib3mf_decomposevectornode_getoutputz(inst.wrapperRef.LibraryHandle, inst.Ref, &z) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(z), nil } -// GetBallOptions returns the ball mode and the default ball radius for the beamlattice of this mesh. -func (inst BeamLattice) GetBallOptions() (BeamLatticeBallMode, float64, error) { - var ballMode C.eLib3MFBeamLatticeBallMode - var ballRadius C.double - ret := C.CCall_lib3mf_beamlattice_getballoptions(inst.wrapperRef.LibraryHandle, inst.Ref, &ballMode, &ballRadius) - if ret != 0 { - return 0, 0, makeError(uint32(ret)) - } - return BeamLatticeBallMode(ballMode), float64(ballRadius), nil + +// ComposeMatrixNode represents a Lib3MF class. +type ComposeMatrixNode struct { + ImplicitNode } -// SetBallOptions sets the ball mode and thedefault ball radius for the beamlattice. -func (inst BeamLattice) SetBallOptions(ballMode BeamLatticeBallMode, ballRadius float64) error { - ret := C.CCall_lib3mf_beamlattice_setballoptions(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFBeamLatticeBallMode(ballMode), C.double(ballRadius)) - if ret != 0 { - return makeError(uint32(ret)) - } - return nil +func (wrapper Wrapper) NewComposeMatrixNode(r ref) ComposeMatrixNode { + return ComposeMatrixNode{wrapper.NewImplicitNode(r)} } -// GetBeamCount returns the beam count of a mesh object. -func (inst BeamLattice) GetBeamCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_beamlattice_getbeamcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// GetInputM00 retrieves the input for the element 0 0. +func (inst ComposeMatrixNode) GetInputM00() (ImplicitPort, error) { + var m00 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm00(inst.wrapperRef.LibraryHandle, inst.Ref, &m00) if ret != 0 { - return 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return uint32(count), nil + return inst.wrapperRef.NewImplicitPort(m00), nil } -// GetBeam returns indices, radii and capmodes of a single beam of a mesh object. -func (inst BeamLattice) GetBeam(index uint32) (Beam, error) { - var beamInfo C.sLib3MFBeam - ret := C.CCall_lib3mf_beamlattice_getbeam(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &beamInfo) +// GetInputM01 retrieves the input for the element 0 1. +func (inst ComposeMatrixNode) GetInputM01() (ImplicitPort, error) { + var m01 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm01(inst.wrapperRef.LibraryHandle, inst.Ref, &m01) if ret != 0 { - return Beam{}, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return *(*Beam)(unsafe.Pointer(&beamInfo)), nil + return inst.wrapperRef.NewImplicitPort(m01), nil } -// AddBeam adds a single beam to a mesh object. -func (inst BeamLattice) AddBeam(beamInfo Beam) (uint32, error) { - var index C.uint32_t - ret := C.CCall_lib3mf_beamlattice_addbeam(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFBeam)(unsafe.Pointer(&beamInfo)), &index) +// GetInputM02 retrieves the input for the element 0 2. +func (inst ComposeMatrixNode) GetInputM02() (ImplicitPort, error) { + var m02 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm02(inst.wrapperRef.LibraryHandle, inst.Ref, &m02) if ret != 0 { - return 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return uint32(index), nil + return inst.wrapperRef.NewImplicitPort(m02), nil } -// SetBeam sets the indices, radii and capmodes of a single beam of a mesh object. -func (inst BeamLattice) SetBeam(index uint32, beamInfo Beam) error { - ret := C.CCall_lib3mf_beamlattice_setbeam(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), (*C.sLib3MFBeam)(unsafe.Pointer(&beamInfo))) +// GetInputM03 retrieves the input for the element 0 3. +func (inst ComposeMatrixNode) GetInputM03() (ImplicitPort, error) { + var m03 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm03(inst.wrapperRef.LibraryHandle, inst.Ref, &m03) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(m03), nil } -// SetBeams sets all beam indices, radii and capmodes of a mesh object. -func (inst BeamLattice) SetBeams(beamInfo []Beam) error { - ret := C.CCall_lib3mf_beamlattice_setbeams(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(beamInfo)), (*C.sLib3MFBeam)(unsafe.Pointer(&beamInfo[0]))) +// GetInputM10 retrieves the input for the element 1 0. +func (inst ComposeMatrixNode) GetInputM10() (ImplicitPort, error) { + var m10 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm10(inst.wrapperRef.LibraryHandle, inst.Ref, &m10) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(m10), nil } -// GetBeams obtains all beam indices, radii and capmodes of a mesh object. -func (inst BeamLattice) GetBeams(beamInfo []Beam) ([]Beam, error) { - var neededforbeamInfo C.uint64_t - ret := C.CCall_lib3mf_beamlattice_getbeams(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforbeamInfo, nil) +// GetInputM11 retrieves the input for the element 1 1. +func (inst ComposeMatrixNode) GetInputM11() (ImplicitPort, error) { + var m11 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm11(inst.wrapperRef.LibraryHandle, inst.Ref, &m11) if ret != 0 { - return nil, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - if len(beamInfo) < int(neededforbeamInfo) { - beamInfo = append(beamInfo, make([]Beam, int(neededforbeamInfo)-len(beamInfo))...) - } - ret = C.CCall_lib3mf_beamlattice_getbeams(inst.wrapperRef.LibraryHandle, inst.Ref, neededforbeamInfo, nil, (*C.sLib3MFBeam)(unsafe.Pointer(&beamInfo[0]))) + return inst.wrapperRef.NewImplicitPort(m11), nil +} + +// GetInputM12 retrieves the input for the element 1 2. +func (inst ComposeMatrixNode) GetInputM12() (ImplicitPort, error) { + var m12 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm12(inst.wrapperRef.LibraryHandle, inst.Ref, &m12) if ret != 0 { - return nil, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return beamInfo[:int(neededforbeamInfo)], nil + return inst.wrapperRef.NewImplicitPort(m12), nil } -// GetBallCount returns the ball count of a mesh object. -func (inst BeamLattice) GetBallCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_beamlattice_getballcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// GetInputM13 retrieves the input for the element 1 3. +func (inst ComposeMatrixNode) GetInputM13() (ImplicitPort, error) { + var m13 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm13(inst.wrapperRef.LibraryHandle, inst.Ref, &m13) if ret != 0 { - return 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return uint32(count), nil + return inst.wrapperRef.NewImplicitPort(m13), nil } -// GetBall returns index and radius of a single ball of a mesh object. -func (inst BeamLattice) GetBall(index uint32) (Ball, error) { - var ballInfo C.sLib3MFBall - ret := C.CCall_lib3mf_beamlattice_getball(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &ballInfo) +// GetInputM20 retrieves the input for the element 2 0. +func (inst ComposeMatrixNode) GetInputM20() (ImplicitPort, error) { + var m20 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm20(inst.wrapperRef.LibraryHandle, inst.Ref, &m20) if ret != 0 { - return Ball{}, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return *(*Ball)(unsafe.Pointer(&ballInfo)), nil + return inst.wrapperRef.NewImplicitPort(m20), nil } -// AddBall adds a single ball to a mesh object. -func (inst BeamLattice) AddBall(ballInfo Ball) (uint32, error) { - var index C.uint32_t - ret := C.CCall_lib3mf_beamlattice_addball(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFBall)(unsafe.Pointer(&ballInfo)), &index) +// GetInputM21 retrieves the input for the element 2 1. +func (inst ComposeMatrixNode) GetInputM21() (ImplicitPort, error) { + var m21 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm21(inst.wrapperRef.LibraryHandle, inst.Ref, &m21) if ret != 0 { - return 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return uint32(index), nil + return inst.wrapperRef.NewImplicitPort(m21), nil } -// SetBall sets the index and radius of a single ball of a mesh object. -func (inst BeamLattice) SetBall(index uint32, ballInfo Ball) error { - ret := C.CCall_lib3mf_beamlattice_setball(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), (*C.sLib3MFBall)(unsafe.Pointer(&ballInfo))) +// GetInputM22 retrieves the input for the element 2 2. +func (inst ComposeMatrixNode) GetInputM22() (ImplicitPort, error) { + var m22 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm22(inst.wrapperRef.LibraryHandle, inst.Ref, &m22) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(m22), nil } -// SetBalls sets all ball indices and radii of a mesh object. -func (inst BeamLattice) SetBalls(ballInfo []Ball) error { - ret := C.CCall_lib3mf_beamlattice_setballs(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(ballInfo)), (*C.sLib3MFBall)(unsafe.Pointer(&ballInfo[0]))) +// GetInputM23 retrieves the input for the element 2 3. +func (inst ComposeMatrixNode) GetInputM23() (ImplicitPort, error) { + var m23 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm23(inst.wrapperRef.LibraryHandle, inst.Ref, &m23) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(m23), nil } -// GetBalls obtains all ball indices and radii of a mesh object. -func (inst BeamLattice) GetBalls(ballInfo []Ball) ([]Ball, error) { - var neededforballInfo C.uint64_t - ret := C.CCall_lib3mf_beamlattice_getballs(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforballInfo, nil) +// GetInputM30 retrieves the input for the element 3 0. +func (inst ComposeMatrixNode) GetInputM30() (ImplicitPort, error) { + var m30 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm30(inst.wrapperRef.LibraryHandle, inst.Ref, &m30) if ret != 0 { - return nil, makeError(uint32(ret)) - } - if len(ballInfo) < int(neededforballInfo) { - ballInfo = append(ballInfo, make([]Ball, int(neededforballInfo)-len(ballInfo))...) + return ImplicitPort{}, makeError(uint32(ret)) } - ret = C.CCall_lib3mf_beamlattice_getballs(inst.wrapperRef.LibraryHandle, inst.Ref, neededforballInfo, nil, (*C.sLib3MFBall)(unsafe.Pointer(&ballInfo[0]))) + return inst.wrapperRef.NewImplicitPort(m30), nil +} + +// GetInputM31 retrieves the input for the element 3 1. +func (inst ComposeMatrixNode) GetInputM31() (ImplicitPort, error) { + var m31 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm31(inst.wrapperRef.LibraryHandle, inst.Ref, &m31) if ret != 0 { - return nil, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return ballInfo[:int(neededforballInfo)], nil + return inst.wrapperRef.NewImplicitPort(m31), nil } -// GetBeamSetCount returns the number of beamsets of a mesh object. -func (inst BeamLattice) GetBeamSetCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_beamlattice_getbeamsetcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// GetInputM32 retrieves the input for the element 3 2. +func (inst ComposeMatrixNode) GetInputM32() (ImplicitPort, error) { + var m32 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm32(inst.wrapperRef.LibraryHandle, inst.Ref, &m32) if ret != 0 { - return 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return uint32(count), nil + return inst.wrapperRef.NewImplicitPort(m32), nil } -// AddBeamSet adds an empty beamset to a mesh object. -func (inst BeamLattice) AddBeamSet() (BeamSet, error) { - var beamSet ref - ret := C.CCall_lib3mf_beamlattice_addbeamset(inst.wrapperRef.LibraryHandle, inst.Ref, &beamSet) +// GetInputM33 retrieves the input for the element 3 3. +func (inst ComposeMatrixNode) GetInputM33() (ImplicitPort, error) { + var m33 ref + ret := C.CCall_lib3mf_composematrixnode_getinputm33(inst.wrapperRef.LibraryHandle, inst.Ref, &m33) if ret != 0 { - return BeamSet{}, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return inst.wrapperRef.NewBeamSet(beamSet), nil + return inst.wrapperRef.NewImplicitPort(m33), nil } -// GetBeamSet returns a beamset of a mesh object. -func (inst BeamLattice) GetBeamSet(index uint32) (BeamSet, error) { - var beamSet ref - ret := C.CCall_lib3mf_beamlattice_getbeamset(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &beamSet) +// GetOutputResult retrieves the output. +func (inst ComposeMatrixNode) GetOutputResult() (ImplicitPort, error) { + var result ref + ret := C.CCall_lib3mf_composematrixnode_getoutputresult(inst.wrapperRef.LibraryHandle, inst.Ref, &result) if ret != 0 { - return BeamSet{}, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return inst.wrapperRef.NewBeamSet(beamSet), nil + return inst.wrapperRef.NewImplicitPort(result), nil } -// Component represents a Lib3MF class. -type Component struct { - Base +// MatrixFromRowsNode represents a Lib3MF class. +type MatrixFromRowsNode struct { + ImplicitNode } -func (wrapper Wrapper) NewComponent(r ref) Component { - return Component{wrapper.NewBase(r)} +func (wrapper Wrapper) NewMatrixFromRowsNode(r ref) MatrixFromRowsNode { + return MatrixFromRowsNode{wrapper.NewImplicitNode(r)} } -// GetObjectResource returns the Resource Instance of the component. -func (inst Component) GetObjectResource() (Object, error) { - var objectResource ref - ret := C.CCall_lib3mf_component_getobjectresource(inst.wrapperRef.LibraryHandle, inst.Ref, &objectResource) +// GetInputA retrieves the input for the first row. +func (inst MatrixFromRowsNode) GetInputA() (ImplicitPort, error) { + var row0 ref + ret := C.CCall_lib3mf_matrixfromrowsnode_getinputa(inst.wrapperRef.LibraryHandle, inst.Ref, &row0) if ret != 0 { - return Object{}, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return inst.wrapperRef.NewObject(objectResource), nil + return inst.wrapperRef.NewImplicitPort(row0), nil } -// GetObjectResourceID returns the UniqueResourceID of the component. -func (inst Component) GetObjectResourceID() (uint32, error) { - var uniqueResourceID C.uint32_t - ret := C.CCall_lib3mf_component_getobjectresourceid(inst.wrapperRef.LibraryHandle, inst.Ref, &uniqueResourceID) +// GetInputB retrieves the input for the second row. +func (inst MatrixFromRowsNode) GetInputB() (ImplicitPort, error) { + var row1 ref + ret := C.CCall_lib3mf_matrixfromrowsnode_getinputb(inst.wrapperRef.LibraryHandle, inst.Ref, &row1) if ret != 0 { - return 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return uint32(uniqueResourceID), nil + return inst.wrapperRef.NewImplicitPort(row1), nil } -// GetUUID returns, whether a component has a UUID and, if true, the component's UUID. -func (inst Component) GetUUID() (bool, string, error) { - var hasUUID C.bool - var neededforuUID C.uint32_t - var filledinuUID C.uint32_t - ret := C.CCall_lib3mf_component_getuuid(inst.wrapperRef.LibraryHandle, inst.Ref, &hasUUID, 0, &neededforuUID, nil) +// GetInputC retrieves the input for the third row. +func (inst MatrixFromRowsNode) GetInputC() (ImplicitPort, error) { + var row2 ref + ret := C.CCall_lib3mf_matrixfromrowsnode_getinputc(inst.wrapperRef.LibraryHandle, inst.Ref, &row2) if ret != 0 { - return false, "", makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - bufferSizeuUID := neededforuUID - bufferuUID := make([]byte, bufferSizeuUID) - ret = C.CCall_lib3mf_component_getuuid(inst.wrapperRef.LibraryHandle, inst.Ref, &hasUUID, bufferSizeuUID, &filledinuUID, (*C.char)(unsafe.Pointer(&bufferuUID[0]))) + return inst.wrapperRef.NewImplicitPort(row2), nil +} + +// GetInputD retrieves the input for the fourth row. +func (inst MatrixFromRowsNode) GetInputD() (ImplicitPort, error) { + var row3 ref + ret := C.CCall_lib3mf_matrixfromrowsnode_getinputd(inst.wrapperRef.LibraryHandle, inst.Ref, &row3) if ret != 0 { - return false, "", makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return bool(hasUUID), string(bufferuUID[:(filledinuUID-1)]), nil + return inst.wrapperRef.NewImplicitPort(row3), nil } -// SetUUID sets the component's UUID. -func (inst Component) SetUUID(uUID string) error { - ret := C.CCall_lib3mf_component_setuuid(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(uUID)[0]))) +// GetOutputResult retrieves the output. +func (inst MatrixFromRowsNode) GetOutputResult() (ImplicitPort, error) { + var result ref + ret := C.CCall_lib3mf_matrixfromrowsnode_getoutputresult(inst.wrapperRef.LibraryHandle, inst.Ref, &result) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(result), nil } -// HasTransform returns, if the component has a different transformation than the identity matrix. -func (inst Component) HasTransform() (bool, error) { - var hasTransform C.bool - ret := C.CCall_lib3mf_component_hastransform(inst.wrapperRef.LibraryHandle, inst.Ref, &hasTransform) + +// MatrixFromColumnsNode represents a Lib3MF class. +type MatrixFromColumnsNode struct { + ImplicitNode +} + +func (wrapper Wrapper) NewMatrixFromColumnsNode(r ref) MatrixFromColumnsNode { + return MatrixFromColumnsNode{wrapper.NewImplicitNode(r)} +} + +// GetInputA retrieves the input for the first column. +func (inst MatrixFromColumnsNode) GetInputA() (ImplicitPort, error) { + var column0 ref + ret := C.CCall_lib3mf_matrixfromcolumnsnode_getinputa(inst.wrapperRef.LibraryHandle, inst.Ref, &column0) if ret != 0 { - return false, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return bool(hasTransform), nil + return inst.wrapperRef.NewImplicitPort(column0), nil } -// GetTransform returns the transformation matrix of the component. -func (inst Component) GetTransform() (Transform, error) { - var transform C.sLib3MFTransform - ret := C.CCall_lib3mf_component_gettransform(inst.wrapperRef.LibraryHandle, inst.Ref, &transform) +// GetInputB retrieves the input for the second column. +func (inst MatrixFromColumnsNode) GetInputB() (ImplicitPort, error) { + var column1 ref + ret := C.CCall_lib3mf_matrixfromcolumnsnode_getinputb(inst.wrapperRef.LibraryHandle, inst.Ref, &column1) if ret != 0 { - return Transform{}, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return *(*Transform)(unsafe.Pointer(&transform)), nil + return inst.wrapperRef.NewImplicitPort(column1), nil } -// SetTransform sets the transformation matrix of the component. -func (inst Component) SetTransform(transform Transform) error { - ret := C.CCall_lib3mf_component_settransform(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFTransform)(unsafe.Pointer(&transform))) +// GetInputC retrieves the input for the third column. +func (inst MatrixFromColumnsNode) GetInputC() (ImplicitPort, error) { + var column2 ref + ret := C.CCall_lib3mf_matrixfromcolumnsnode_getinputc(inst.wrapperRef.LibraryHandle, inst.Ref, &column2) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(column2), nil } +// GetInputD retrieves the input for the fourth column. +func (inst MatrixFromColumnsNode) GetInputD() (ImplicitPort, error) { + var column3 ref + ret := C.CCall_lib3mf_matrixfromcolumnsnode_getinputd(inst.wrapperRef.LibraryHandle, inst.Ref, &column3) + if ret != 0 { + return ImplicitPort{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewImplicitPort(column3), nil +} -// ComponentsObject represents a Lib3MF class. -type ComponentsObject struct { - Object +// GetOutputResult retrieves the output. +func (inst MatrixFromColumnsNode) GetOutputResult() (ImplicitPort, error) { + var result ref + ret := C.CCall_lib3mf_matrixfromcolumnsnode_getoutputresult(inst.wrapperRef.LibraryHandle, inst.Ref, &result) + if ret != 0 { + return ImplicitPort{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewImplicitPort(result), nil } -func (wrapper Wrapper) NewComponentsObject(r ref) ComponentsObject { - return ComponentsObject{wrapper.NewObject(r)} + +// ConstantNode represents a Lib3MF class. +type ConstantNode struct { + ImplicitNode } -// AddComponent adds a new component to a components object. -func (inst ComponentsObject) AddComponent(objectResource Object, transform Transform) (Component, error) { - var componentInstance ref - ret := C.CCall_lib3mf_componentsobject_addcomponent(inst.wrapperRef.LibraryHandle, inst.Ref, objectResource.Ref, (*C.sLib3MFTransform)(unsafe.Pointer(&transform)), &componentInstance) +func (wrapper Wrapper) NewConstantNode(r ref) ConstantNode { + return ConstantNode{wrapper.NewImplicitNode(r)} +} + +// SetConstant sets the constant value of the node. +func (inst ConstantNode) SetConstant(value float64) error { + ret := C.CCall_lib3mf_constantnode_setconstant(inst.wrapperRef.LibraryHandle, inst.Ref, C.double(value)) if ret != 0 { - return Component{}, makeError(uint32(ret)) + return makeError(uint32(ret)) } - return inst.wrapperRef.NewComponent(componentInstance), nil + return nil } -// GetComponent retrieves a component from a component object. -func (inst ComponentsObject) GetComponent(index uint32) (Component, error) { - var componentInstance ref - ret := C.CCall_lib3mf_componentsobject_getcomponent(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(index), &componentInstance) +// GetConstant retrieves the constant value of the node. +func (inst ConstantNode) GetConstant() (float64, error) { + var value C.double + ret := C.CCall_lib3mf_constantnode_getconstant(inst.wrapperRef.LibraryHandle, inst.Ref, &value) if ret != 0 { - return Component{}, makeError(uint32(ret)) + return 0, makeError(uint32(ret)) } - return inst.wrapperRef.NewComponent(componentInstance), nil + return float64(value), nil } -// GetComponentCount retrieves a component count of a component object. -func (inst ComponentsObject) GetComponentCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_componentsobject_getcomponentcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// GetOutputValue retrieves the output. +func (inst ConstantNode) GetOutputValue() (ImplicitPort, error) { + var value ref + ret := C.CCall_lib3mf_constantnode_getoutputvalue(inst.wrapperRef.LibraryHandle, inst.Ref, &value) if ret != 0 { - return 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return uint32(count), nil + return inst.wrapperRef.NewImplicitPort(value), nil } -// BeamSet represents a Lib3MF class. -type BeamSet struct { - Base +// ConstVecNode represents a Lib3MF class. +type ConstVecNode struct { + ImplicitNode } -func (wrapper Wrapper) NewBeamSet(r ref) BeamSet { - return BeamSet{wrapper.NewBase(r)} +func (wrapper Wrapper) NewConstVecNode(r ref) ConstVecNode { + return ConstVecNode{wrapper.NewImplicitNode(r)} } -// SetName sets a beamset's name string. -func (inst BeamSet) SetName(name string) error { - ret := C.CCall_lib3mf_beamset_setname(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(name)[0]))) +// SetVector sets the vector value of the node. +func (inst ConstVecNode) SetVector(value Vector) error { + ret := C.CCall_lib3mf_constvecnode_setvector(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFVector)(unsafe.Pointer(&value))) if ret != 0 { return makeError(uint32(ret)) } return nil } -// GetName retrieves a beamset's name string. -func (inst BeamSet) GetName() (string, error) { - var neededforname C.uint32_t - var filledinname C.uint32_t - ret := C.CCall_lib3mf_beamset_getname(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforname, nil) +// GetVector retrieves the vector value of the node. +func (inst ConstVecNode) GetVector() (Vector, error) { + var value C.sLib3MFVector + ret := C.CCall_lib3mf_constvecnode_getvector(inst.wrapperRef.LibraryHandle, inst.Ref, &value) if ret != 0 { - return "", makeError(uint32(ret)) + return Vector{}, makeError(uint32(ret)) } - bufferSizename := neededforname - buffername := make([]byte, bufferSizename) - ret = C.CCall_lib3mf_beamset_getname(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizename, &filledinname, (*C.char)(unsafe.Pointer(&buffername[0]))) + return *(*Vector)(unsafe.Pointer(&value)), nil +} + +// GetOutputVector retrieves the output. +func (inst ConstVecNode) GetOutputVector() (ImplicitPort, error) { + var vector ref + ret := C.CCall_lib3mf_constvecnode_getoutputvector(inst.wrapperRef.LibraryHandle, inst.Ref, &vector) if ret != 0 { - return "", makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return string(buffername[:(filledinname-1)]), nil + return inst.wrapperRef.NewImplicitPort(vector), nil } -// SetIdentifier sets a beamset's identifier string. -func (inst BeamSet) SetIdentifier(identifier string) error { - ret := C.CCall_lib3mf_beamset_setidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0]))) + +// ConstMatNode represents a Lib3MF class. +type ConstMatNode struct { + ImplicitNode +} + +func (wrapper Wrapper) NewConstMatNode(r ref) ConstMatNode { + return ConstMatNode{wrapper.NewImplicitNode(r)} +} + +// SetMatrix sets the matrix value of the node. +func (inst ConstMatNode) SetMatrix(value Matrix4x4) error { + ret := C.CCall_lib3mf_constmatnode_setmatrix(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFMatrix4x4)(unsafe.Pointer(&value))) if ret != 0 { return makeError(uint32(ret)) } return nil } -// GetIdentifier retrieves a beamset's identifier string. -func (inst BeamSet) GetIdentifier() (string, error) { - var neededforidentifier C.uint32_t - var filledinidentifier C.uint32_t - ret := C.CCall_lib3mf_beamset_getidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforidentifier, nil) - if ret != 0 { - return "", makeError(uint32(ret)) - } - bufferSizeidentifier := neededforidentifier - bufferidentifier := make([]byte, bufferSizeidentifier) - ret = C.CCall_lib3mf_beamset_getidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizeidentifier, &filledinidentifier, (*C.char)(unsafe.Pointer(&bufferidentifier[0]))) +// GetMatrix retrieves the matrix value of the node. +func (inst ConstMatNode) GetMatrix() (Matrix4x4, error) { + var value C.sLib3MFMatrix4x4 + ret := C.CCall_lib3mf_constmatnode_getmatrix(inst.wrapperRef.LibraryHandle, inst.Ref, &value) if ret != 0 { - return "", makeError(uint32(ret)) + return Matrix4x4{}, makeError(uint32(ret)) } - return string(bufferidentifier[:(filledinidentifier-1)]), nil + return *(*Matrix4x4)(unsafe.Pointer(&value)), nil } -// GetReferenceCount retrieves the reference count of a beamset. -func (inst BeamSet) GetReferenceCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_beamset_getreferencecount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// GetOutputMatrix retrieves the output. +func (inst ConstMatNode) GetOutputMatrix() (ImplicitPort, error) { + var matrix ref + ret := C.CCall_lib3mf_constmatnode_getoutputmatrix(inst.wrapperRef.LibraryHandle, inst.Ref, &matrix) if ret != 0 { - return 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return uint32(count), nil + return inst.wrapperRef.NewImplicitPort(matrix), nil } -// SetReferences sets the references of a beamset. -func (inst BeamSet) SetReferences(references []uint32) error { - ret := C.CCall_lib3mf_beamset_setreferences(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(references)), (*C.uint32_t)(unsafe.Pointer(&references[0]))) + +// MeshNode represents a Lib3MF class. +type MeshNode struct { + ImplicitNode +} + +func (wrapper Wrapper) NewMeshNode(r ref) MeshNode { + return MeshNode{wrapper.NewImplicitNode(r)} +} + +// GetInputMesh retrieves the input for the model resource id of the mesh. +func (inst MeshNode) GetInputMesh() (ImplicitPort, error) { + var mesh ref + ret := C.CCall_lib3mf_meshnode_getinputmesh(inst.wrapperRef.LibraryHandle, inst.Ref, &mesh) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(mesh), nil } -// GetReferences retrieves the references of a beamset. -func (inst BeamSet) GetReferences(references []uint32) ([]uint32, error) { - var neededforreferences C.uint64_t - ret := C.CCall_lib3mf_beamset_getreferences(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforreferences, nil) +// GetInputPos retrieves the input for the position. +func (inst MeshNode) GetInputPos() (ImplicitPort, error) { + var pos ref + ret := C.CCall_lib3mf_meshnode_getinputpos(inst.wrapperRef.LibraryHandle, inst.Ref, &pos) if ret != 0 { - return nil, makeError(uint32(ret)) - } - if len(references) < int(neededforreferences) { - references = append(references, make([]uint32, int(neededforreferences)-len(references))...) + return ImplicitPort{}, makeError(uint32(ret)) } - ret = C.CCall_lib3mf_beamset_getreferences(inst.wrapperRef.LibraryHandle, inst.Ref, neededforreferences, nil, (*C.uint32_t)(unsafe.Pointer(&references[0]))) + return inst.wrapperRef.NewImplicitPort(pos), nil +} + +// GetOutputDistance retrieves the output. +func (inst MeshNode) GetOutputDistance() (ImplicitPort, error) { + var distance ref + ret := C.CCall_lib3mf_meshnode_getoutputdistance(inst.wrapperRef.LibraryHandle, inst.Ref, &distance) if ret != 0 { - return nil, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return references[:int(neededforreferences)], nil + return inst.wrapperRef.NewImplicitPort(distance), nil } -// GetBallReferenceCount retrieves the ball reference count of a beamset. -func (inst BeamSet) GetBallReferenceCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_beamset_getballreferencecount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) + +// UnsignedMeshNode represents a Lib3MF class. +type UnsignedMeshNode struct { + ImplicitNode +} + +func (wrapper Wrapper) NewUnsignedMeshNode(r ref) UnsignedMeshNode { + return UnsignedMeshNode{wrapper.NewImplicitNode(r)} +} + +// GetInputMesh retrieves the input for the model resource id of the mesh. +func (inst UnsignedMeshNode) GetInputMesh() (ImplicitPort, error) { + var mesh ref + ret := C.CCall_lib3mf_unsignedmeshnode_getinputmesh(inst.wrapperRef.LibraryHandle, inst.Ref, &mesh) if ret != 0 { - return 0, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return uint32(count), nil + return inst.wrapperRef.NewImplicitPort(mesh), nil } -// SetBallReferences sets the ball references of a beamset. -func (inst BeamSet) SetBallReferences(ballReferences []uint32) error { - ret := C.CCall_lib3mf_beamset_setballreferences(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(ballReferences)), (*C.uint32_t)(unsafe.Pointer(&ballReferences[0]))) +// GetInputPos retrieves the input for the position. +func (inst UnsignedMeshNode) GetInputPos() (ImplicitPort, error) { + var pos ref + ret := C.CCall_lib3mf_unsignedmeshnode_getinputpos(inst.wrapperRef.LibraryHandle, inst.Ref, &pos) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(pos), nil } -// GetBallReferences retrieves the ball references of a beamset. -func (inst BeamSet) GetBallReferences(ballReferences []uint32) ([]uint32, error) { - var neededforballReferences C.uint64_t - ret := C.CCall_lib3mf_beamset_getballreferences(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforballReferences, nil) +// GetOutputDistance retrieves the output. +func (inst UnsignedMeshNode) GetOutputDistance() (ImplicitPort, error) { + var distance ref + ret := C.CCall_lib3mf_unsignedmeshnode_getoutputdistance(inst.wrapperRef.LibraryHandle, inst.Ref, &distance) if ret != 0 { - return nil, makeError(uint32(ret)) - } - if len(ballReferences) < int(neededforballReferences) { - ballReferences = append(ballReferences, make([]uint32, int(neededforballReferences)-len(ballReferences))...) + return ImplicitPort{}, makeError(uint32(ret)) } - ret = C.CCall_lib3mf_beamset_getballreferences(inst.wrapperRef.LibraryHandle, inst.Ref, neededforballReferences, nil, (*C.uint32_t)(unsafe.Pointer(&ballReferences[0]))) + return inst.wrapperRef.NewImplicitPort(distance), nil +} + + +// FunctionCallNode represents a Lib3MF class. +type FunctionCallNode struct { + ImplicitNode +} + +func (wrapper Wrapper) NewFunctionCallNode(r ref) FunctionCallNode { + return FunctionCallNode{wrapper.NewImplicitNode(r)} +} + +// GetInputFunctionID retrieves the input for the function id. +func (inst FunctionCallNode) GetInputFunctionID() (ImplicitPort, error) { + var function ref + ret := C.CCall_lib3mf_functioncallnode_getinputfunctionid(inst.wrapperRef.LibraryHandle, inst.Ref, &function) if ret != 0 { - return nil, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return ballReferences[:int(neededforballReferences)], nil + return inst.wrapperRef.NewImplicitPort(function), nil } -// BaseMaterialGroup represents a Lib3MF class. -type BaseMaterialGroup struct { - Resource +// NodeIterator represents a Lib3MF class. +type NodeIterator struct { + Iterator } -func (wrapper Wrapper) NewBaseMaterialGroup(r ref) BaseMaterialGroup { - return BaseMaterialGroup{wrapper.NewResource(r)} +func (wrapper Wrapper) NewNodeIterator(r ref) NodeIterator { + return NodeIterator{wrapper.NewIterator(r)} } -// GetCount retrieves the count of base materials in the material group. -func (inst BaseMaterialGroup) GetCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_basematerialgroup_getcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// GetCurrent returns the current element. +func (inst NodeIterator) GetCurrent() (ImplicitNode, error) { + var node ref + ret := C.CCall_lib3mf_nodeiterator_getcurrent(inst.wrapperRef.LibraryHandle, inst.Ref, &node) + if ret != 0 { + return ImplicitNode{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewImplicitNode(node), nil +} + + +// Function represents a Lib3MF class. +type Function struct { + Resource +} + +func (wrapper Wrapper) NewFunction(r ref) Function { + return Function{wrapper.NewResource(r)} +} + +// GetDisplayName retrieves the display name of the function. +func (inst Function) GetDisplayName() (string, error) { + var neededfordisplayName C.uint32_t + var filledindisplayName C.uint32_t + ret := C.CCall_lib3mf_function_getdisplayname(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededfordisplayName, nil) if ret != 0 { - return 0, makeError(uint32(ret)) + return "", makeError(uint32(ret)) } - return uint32(count), nil + bufferSizedisplayName := neededfordisplayName + bufferdisplayName := make([]byte, bufferSizedisplayName) + ret = C.CCall_lib3mf_function_getdisplayname(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizedisplayName, &filledindisplayName, (*C.char)(unsafe.Pointer(&bufferdisplayName[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(bufferdisplayName[:(filledindisplayName-1)]), nil } -// GetAllPropertyIDs returns all the PropertyIDs of all materials in this group. -func (inst BaseMaterialGroup) GetAllPropertyIDs(propertyIDs []uint32) ([]uint32, error) { - var neededforpropertyIDs C.uint64_t - ret := C.CCall_lib3mf_basematerialgroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpropertyIDs, nil) +// SetDisplayName sets the display name of the function. +func (inst Function) SetDisplayName(displayName string) error { + ret := C.CCall_lib3mf_function_setdisplayname(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(displayName)[0]))) if ret != 0 { - return nil, makeError(uint32(ret)) - } - if len(propertyIDs) < int(neededforpropertyIDs) { - propertyIDs = append(propertyIDs, make([]uint32, int(neededforpropertyIDs)-len(propertyIDs))...) + return makeError(uint32(ret)) } - ret = C.CCall_lib3mf_basematerialgroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, neededforpropertyIDs, nil, (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) + return nil +} + +// AddInput add an input. +func (inst Function) AddInput(identifier string, displayName string, _type ImplicitPortType) (ImplicitPort, error) { + var port ref + ret := C.CCall_lib3mf_function_addinput(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), C.eLib3MFImplicitPortType(_type), &port) if ret != 0 { - return nil, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return propertyIDs[:int(neededforpropertyIDs)], nil + return inst.wrapperRef.NewImplicitPort(port), nil } -// AddMaterial adds a new material to the material group. -func (inst BaseMaterialGroup) AddMaterial(name string, displayColor Color) (uint32, error) { - var propertyID C.uint32_t - ret := C.CCall_lib3mf_basematerialgroup_addmaterial(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(name)[0])), (*C.sLib3MFColor)(unsafe.Pointer(&displayColor)), &propertyID) +// GetInputs retrieves the inputs. +func (inst Function) GetInputs() (ImplicitPortIterator, error) { + var iterator ref + ret := C.CCall_lib3mf_function_getinputs(inst.wrapperRef.LibraryHandle, inst.Ref, &iterator) if ret != 0 { - return 0, makeError(uint32(ret)) + return ImplicitPortIterator{}, makeError(uint32(ret)) } - return uint32(propertyID), nil + return inst.wrapperRef.NewImplicitPortIterator(iterator), nil } -// RemoveMaterial removes a material from the material group. -func (inst BaseMaterialGroup) RemoveMaterial(propertyID uint32) error { - ret := C.CCall_lib3mf_basematerialgroup_removematerial(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID)) +// RemoveInput removes an input. +func (inst Function) RemoveInput(input ImplicitPort) error { + ret := C.CCall_lib3mf_function_removeinput(inst.wrapperRef.LibraryHandle, inst.Ref, input.Ref) if ret != 0 { return makeError(uint32(ret)) } return nil } -// GetName returns the base material's name. -func (inst BaseMaterialGroup) GetName(propertyID uint32) (string, error) { - var neededforname C.uint32_t - var filledinname C.uint32_t - ret := C.CCall_lib3mf_basematerialgroup_getname(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), 0, &neededforname, nil) +// AddOutput add an output. +func (inst Function) AddOutput(identifier string, displayName string, _type ImplicitPortType) (ImplicitPort, error) { + var port ref + ret := C.CCall_lib3mf_function_addoutput(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), C.eLib3MFImplicitPortType(_type), &port) if ret != 0 { - return "", makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - bufferSizename := neededforname - buffername := make([]byte, bufferSizename) - ret = C.CCall_lib3mf_basematerialgroup_getname(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), bufferSizename, &filledinname, (*C.char)(unsafe.Pointer(&buffername[0]))) + return inst.wrapperRef.NewImplicitPort(port), nil +} + +// GetOutputs retrieves the outputs. +func (inst Function) GetOutputs() (ImplicitPortIterator, error) { + var iterator ref + ret := C.CCall_lib3mf_function_getoutputs(inst.wrapperRef.LibraryHandle, inst.Ref, &iterator) if ret != 0 { - return "", makeError(uint32(ret)) + return ImplicitPortIterator{}, makeError(uint32(ret)) } - return string(buffername[:(filledinname-1)]), nil + return inst.wrapperRef.NewImplicitPortIterator(iterator), nil } -// SetName sets a base material's name. -func (inst BaseMaterialGroup) SetName(propertyID uint32, name string) error { - ret := C.CCall_lib3mf_basematerialgroup_setname(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), (*C.char)(unsafe.Pointer(&[]byte(name)[0]))) +// RemoveOutput removes an output. +func (inst Function) RemoveOutput(output ImplicitPort) error { + ret := C.CCall_lib3mf_function_removeoutput(inst.wrapperRef.LibraryHandle, inst.Ref, output.Ref) if ret != 0 { return makeError(uint32(ret)) } return nil } -// SetDisplayColor sets a base material's display color. -func (inst BaseMaterialGroup) SetDisplayColor(propertyID uint32, theColor Color) error { - ret := C.CCall_lib3mf_basematerialgroup_setdisplaycolor(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), (*C.sLib3MFColor)(unsafe.Pointer(&theColor))) +// FindInput retrieves an input. +func (inst Function) FindInput(identifier string) (ImplicitPort, error) { + var input ref + ret := C.CCall_lib3mf_function_findinput(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), &input) if ret != 0 { - return makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewImplicitPort(input), nil } -// GetDisplayColor returns a base material's display color. -func (inst BaseMaterialGroup) GetDisplayColor(propertyID uint32) (Color, error) { - var theColor C.sLib3MFColor - ret := C.CCall_lib3mf_basematerialgroup_getdisplaycolor(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), &theColor) +// FindOutput retrieves an output. +func (inst Function) FindOutput(identifier string) (ImplicitPort, error) { + var output ref + ret := C.CCall_lib3mf_function_findoutput(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), &output) if ret != 0 { - return Color{}, makeError(uint32(ret)) + return ImplicitPort{}, makeError(uint32(ret)) } - return *(*Color)(unsafe.Pointer(&theColor)), nil + return inst.wrapperRef.NewImplicitPort(output), nil } -// ColorGroup represents a Lib3MF class. -type ColorGroup struct { - Resource +// ImplicitFunction represents a Lib3MF class. +type ImplicitFunction struct { + Function } -func (wrapper Wrapper) NewColorGroup(r ref) ColorGroup { - return ColorGroup{wrapper.NewResource(r)} +func (wrapper Wrapper) NewImplicitFunction(r ref) ImplicitFunction { + return ImplicitFunction{wrapper.NewFunction(r)} } -// GetCount retrieves the count of base materials in this Color Group. -func (inst ColorGroup) GetCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_colorgroup_getcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// GetIdentifier retrieves the identifier of the function. +func (inst ImplicitFunction) GetIdentifier() (string, error) { + var neededforidentifier C.uint32_t + var filledinidentifier C.uint32_t + ret := C.CCall_lib3mf_implicitfunction_getidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforidentifier, nil) if ret != 0 { - return 0, makeError(uint32(ret)) + return "", makeError(uint32(ret)) } - return uint32(count), nil + bufferSizeidentifier := neededforidentifier + bufferidentifier := make([]byte, bufferSizeidentifier) + ret = C.CCall_lib3mf_implicitfunction_getidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizeidentifier, &filledinidentifier, (*C.char)(unsafe.Pointer(&bufferidentifier[0]))) + if ret != 0 { + return "", makeError(uint32(ret)) + } + return string(bufferidentifier[:(filledinidentifier-1)]), nil } -// GetAllPropertyIDs returns all the PropertyIDs of all colors within this group. -func (inst ColorGroup) GetAllPropertyIDs(propertyIDs []uint32) ([]uint32, error) { - var neededforpropertyIDs C.uint64_t - ret := C.CCall_lib3mf_colorgroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpropertyIDs, nil) +// SetIdentifier sets the identifier of the function. +func (inst ImplicitFunction) SetIdentifier(identifier string) error { + ret := C.CCall_lib3mf_implicitfunction_setidentifier(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0]))) if ret != 0 { - return nil, makeError(uint32(ret)) - } - if len(propertyIDs) < int(neededforpropertyIDs) { - propertyIDs = append(propertyIDs, make([]uint32, int(neededforpropertyIDs)-len(propertyIDs))...) + return makeError(uint32(ret)) } - ret = C.CCall_lib3mf_colorgroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, neededforpropertyIDs, nil, (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) + return nil +} + +// AddNode add a node. +func (inst ImplicitFunction) AddNode(nodeType ImplicitNodeType, identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (ImplicitNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addnode(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFImplicitNodeType(nodeType), (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return nil, makeError(uint32(ret)) + return ImplicitNode{}, makeError(uint32(ret)) } - return propertyIDs[:int(neededforpropertyIDs)], nil + return inst.wrapperRef.NewImplicitNode(node), nil } -// AddColor adds a new value. -func (inst ColorGroup) AddColor(theColor Color) (uint32, error) { - var propertyID C.uint32_t - ret := C.CCall_lib3mf_colorgroup_addcolor(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFColor)(unsafe.Pointer(&theColor)), &propertyID) +// AddSinNode add a SinNode. +func (inst ImplicitFunction) AddSinNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (SinNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addsinnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return 0, makeError(uint32(ret)) + return SinNode{}, makeError(uint32(ret)) } - return uint32(propertyID), nil + return inst.wrapperRef.NewSinNode(node), nil } -// RemoveColor removes a color from the color group. -func (inst ColorGroup) RemoveColor(propertyID uint32) error { - ret := C.CCall_lib3mf_colorgroup_removecolor(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID)) +// AddCosNode add a CosNode. +func (inst ImplicitFunction) AddCosNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (CosNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addcosnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return makeError(uint32(ret)) + return CosNode{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewCosNode(node), nil } -// SetColor sets a color value. -func (inst ColorGroup) SetColor(propertyID uint32, theColor Color) error { - ret := C.CCall_lib3mf_colorgroup_setcolor(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), (*C.sLib3MFColor)(unsafe.Pointer(&theColor))) +// AddTanNode add a TanNode. +func (inst ImplicitFunction) AddTanNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (TanNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addtannode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return makeError(uint32(ret)) + return TanNode{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewTanNode(node), nil } -// GetColor sets a color value. -func (inst ColorGroup) GetColor(propertyID uint32) (Color, error) { - var theColor C.sLib3MFColor - ret := C.CCall_lib3mf_colorgroup_getcolor(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), &theColor) +// AddArcSinNode add a ArcSinNode. +func (inst ImplicitFunction) AddArcSinNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (ArcSinNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addarcsinnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return Color{}, makeError(uint32(ret)) + return ArcSinNode{}, makeError(uint32(ret)) } - return *(*Color)(unsafe.Pointer(&theColor)), nil + return inst.wrapperRef.NewArcSinNode(node), nil } - -// Texture2DGroup represents a Lib3MF class. -type Texture2DGroup struct { - Resource +// AddArcCosNode add a ArcCosNode. +func (inst ImplicitFunction) AddArcCosNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (ArcCosNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addarccosnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) + if ret != 0 { + return ArcCosNode{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewArcCosNode(node), nil } -func (wrapper Wrapper) NewTexture2DGroup(r ref) Texture2DGroup { - return Texture2DGroup{wrapper.NewResource(r)} +// AddArcTan2Node add a ArcTan2Node. +func (inst ImplicitFunction) AddArcTan2Node(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (ArcTan2Node, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addarctan2node(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) + if ret != 0 { + return ArcTan2Node{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewArcTan2Node(node), nil } -// GetCount retrieves the count of tex2coords in the Texture2DGroup. -func (inst Texture2DGroup) GetCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_texture2dgroup_getcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// AddSinhNode add a SinhNode. +func (inst ImplicitFunction) AddSinhNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (SinhNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addsinhnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return 0, makeError(uint32(ret)) + return SinhNode{}, makeError(uint32(ret)) } - return uint32(count), nil + return inst.wrapperRef.NewSinhNode(node), nil } -// GetAllPropertyIDs returns all the PropertyIDs of all tex2coords in this Texture2DGroup. -func (inst Texture2DGroup) GetAllPropertyIDs(propertyIDs []uint32) ([]uint32, error) { - var neededforpropertyIDs C.uint64_t - ret := C.CCall_lib3mf_texture2dgroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpropertyIDs, nil) +// AddCoshNode add a CoshNode. +func (inst ImplicitFunction) AddCoshNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (CoshNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addcoshnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return nil, makeError(uint32(ret)) - } - if len(propertyIDs) < int(neededforpropertyIDs) { - propertyIDs = append(propertyIDs, make([]uint32, int(neededforpropertyIDs)-len(propertyIDs))...) + return CoshNode{}, makeError(uint32(ret)) } - ret = C.CCall_lib3mf_texture2dgroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, neededforpropertyIDs, nil, (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) + return inst.wrapperRef.NewCoshNode(node), nil +} + +// AddTanhNode add a TanhNode. +func (inst ImplicitFunction) AddTanhNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (TanhNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addtanhnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return nil, makeError(uint32(ret)) + return TanhNode{}, makeError(uint32(ret)) } - return propertyIDs[:int(neededforpropertyIDs)], nil + return inst.wrapperRef.NewTanhNode(node), nil } -// AddTex2Coord adds a new tex2coord to the Texture2DGroup. -func (inst Texture2DGroup) AddTex2Coord(uVCoordinate Tex2Coord) (uint32, error) { - var propertyID C.uint32_t - ret := C.CCall_lib3mf_texture2dgroup_addtex2coord(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFTex2Coord)(unsafe.Pointer(&uVCoordinate)), &propertyID) +// AddRoundNode add a RoundNode. +func (inst ImplicitFunction) AddRoundNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (RoundNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addroundnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return 0, makeError(uint32(ret)) + return RoundNode{}, makeError(uint32(ret)) } - return uint32(propertyID), nil + return inst.wrapperRef.NewRoundNode(node), nil } -// GetTex2Coord obtains a tex2coord to the Texture2DGroup. -func (inst Texture2DGroup) GetTex2Coord(propertyID uint32) (Tex2Coord, error) { - var uVCoordinate C.sLib3MFTex2Coord - ret := C.CCall_lib3mf_texture2dgroup_gettex2coord(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), &uVCoordinate) +// AddCeilNode add a CeilNode. +func (inst ImplicitFunction) AddCeilNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (CeilNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addceilnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return Tex2Coord{}, makeError(uint32(ret)) + return CeilNode{}, makeError(uint32(ret)) } - return *(*Tex2Coord)(unsafe.Pointer(&uVCoordinate)), nil + return inst.wrapperRef.NewCeilNode(node), nil } -// RemoveTex2Coord removes a tex2coords from the Texture2DGroup. -func (inst Texture2DGroup) RemoveTex2Coord(propertyID uint32) error { - ret := C.CCall_lib3mf_texture2dgroup_removetex2coord(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID)) +// AddFloorNode add a FloorNode. +func (inst ImplicitFunction) AddFloorNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (FloorNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addfloornode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return makeError(uint32(ret)) + return FloorNode{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewFloorNode(node), nil } -// GetTexture2D obtains the texture2D instance of this group. -func (inst Texture2DGroup) GetTexture2D() (Texture2D, error) { - var texture2DInstance ref - ret := C.CCall_lib3mf_texture2dgroup_gettexture2d(inst.wrapperRef.LibraryHandle, inst.Ref, &texture2DInstance) +// AddSignNode add a SignNode. +func (inst ImplicitFunction) AddSignNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (SignNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addsignnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return Texture2D{}, makeError(uint32(ret)) + return SignNode{}, makeError(uint32(ret)) } - return inst.wrapperRef.NewTexture2D(texture2DInstance), nil + return inst.wrapperRef.NewSignNode(node), nil } - -// CompositeMaterials represents a Lib3MF class. -type CompositeMaterials struct { - Resource +// AddFractNode add a FractNode. +func (inst ImplicitFunction) AddFractNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (FractNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addfractnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) + if ret != 0 { + return FractNode{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewFractNode(node), nil } -func (wrapper Wrapper) NewCompositeMaterials(r ref) CompositeMaterials { - return CompositeMaterials{wrapper.NewResource(r)} +// AddAbsNode add a AbsNode. +func (inst ImplicitFunction) AddAbsNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (AbsNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addabsnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) + if ret != 0 { + return AbsNode{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewAbsNode(node), nil } -// GetCount retrieves the count of Composite-s in the CompositeMaterials. -func (inst CompositeMaterials) GetCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_compositematerials_getcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// AddExpNode add a ExpNode. +func (inst ImplicitFunction) AddExpNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (ExpNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addexpnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return 0, makeError(uint32(ret)) + return ExpNode{}, makeError(uint32(ret)) } - return uint32(count), nil + return inst.wrapperRef.NewExpNode(node), nil } -// GetAllPropertyIDs returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials. -func (inst CompositeMaterials) GetAllPropertyIDs(propertyIDs []uint32) ([]uint32, error) { - var neededforpropertyIDs C.uint64_t - ret := C.CCall_lib3mf_compositematerials_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpropertyIDs, nil) +// AddLogNode add a LogNode. +func (inst ImplicitFunction) AddLogNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (LogNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addlognode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return nil, makeError(uint32(ret)) - } - if len(propertyIDs) < int(neededforpropertyIDs) { - propertyIDs = append(propertyIDs, make([]uint32, int(neededforpropertyIDs)-len(propertyIDs))...) + return LogNode{}, makeError(uint32(ret)) } - ret = C.CCall_lib3mf_compositematerials_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, neededforpropertyIDs, nil, (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) + return inst.wrapperRef.NewLogNode(node), nil +} + +// AddLog2Node add a Log2Node. +func (inst ImplicitFunction) AddLog2Node(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (Log2Node, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addlog2node(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return nil, makeError(uint32(ret)) + return Log2Node{}, makeError(uint32(ret)) } - return propertyIDs[:int(neededforpropertyIDs)], nil + return inst.wrapperRef.NewLog2Node(node), nil } -// GetBaseMaterialGroup obtains the BaseMaterialGroup instance of this CompositeMaterials. -func (inst CompositeMaterials) GetBaseMaterialGroup() (BaseMaterialGroup, error) { - var baseMaterialGroupInstance ref - ret := C.CCall_lib3mf_compositematerials_getbasematerialgroup(inst.wrapperRef.LibraryHandle, inst.Ref, &baseMaterialGroupInstance) +// AddLog10Node add a Log10Node. +func (inst ImplicitFunction) AddLog10Node(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (Log10Node, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addlog10node(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return BaseMaterialGroup{}, makeError(uint32(ret)) + return Log10Node{}, makeError(uint32(ret)) } - return inst.wrapperRef.NewBaseMaterialGroup(baseMaterialGroupInstance), nil + return inst.wrapperRef.NewLog10Node(node), nil } -// AddComposite adds a new Composite-Mixing Values to the CompositeMaterials. -func (inst CompositeMaterials) AddComposite(composite []CompositeConstituent) (uint32, error) { - var propertyID C.uint32_t - ret := C.CCall_lib3mf_compositematerials_addcomposite(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(composite)), (*C.sLib3MFCompositeConstituent)(unsafe.Pointer(&composite[0])), &propertyID) +// AddLengthNode add a LengthNode. +func (inst ImplicitFunction) AddLengthNode(identifier string, displayName string, tag string) (LengthNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addlengthnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return 0, makeError(uint32(ret)) + return LengthNode{}, makeError(uint32(ret)) } - return uint32(propertyID), nil + return inst.wrapperRef.NewLengthNode(node), nil } -// RemoveComposite removes a Composite-Maxing Ratio from the CompositeMaterials. -func (inst CompositeMaterials) RemoveComposite(propertyID uint32) error { - ret := C.CCall_lib3mf_compositematerials_removecomposite(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID)) +// AddTransposeNode add a TransposeNode. +func (inst ImplicitFunction) AddTransposeNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (TransposeNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addtransposenode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return makeError(uint32(ret)) + return TransposeNode{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewTransposeNode(node), nil } -// GetComposite obtains a Composite-Maxing Ratio of this CompositeMaterials. -func (inst CompositeMaterials) GetComposite(propertyID uint32, composite []CompositeConstituent) ([]CompositeConstituent, error) { - var neededforcomposite C.uint64_t - ret := C.CCall_lib3mf_compositematerials_getcomposite(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), 0, &neededforcomposite, nil) +// InverseNode add a InverseNode. +func (inst ImplicitFunction) InverseNode(identifier string, displayName string, tag string) (InverseNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_inversenode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return nil, makeError(uint32(ret)) + return InverseNode{}, makeError(uint32(ret)) } - if len(composite) < int(neededforcomposite) { - composite = append(composite, make([]CompositeConstituent, int(neededforcomposite)-len(composite))...) - } - ret = C.CCall_lib3mf_compositematerials_getcomposite(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), neededforcomposite, nil, (*C.sLib3MFCompositeConstituent)(unsafe.Pointer(&composite[0]))) + return inst.wrapperRef.NewInverseNode(node), nil +} + +// AddSqrtNode add a SqrtNode. +func (inst ImplicitFunction) AddSqrtNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (SqrtNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addsqrtnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return nil, makeError(uint32(ret)) + return SqrtNode{}, makeError(uint32(ret)) } - return composite[:int(neededforcomposite)], nil + return inst.wrapperRef.NewSqrtNode(node), nil } - -// MultiPropertyGroup represents a Lib3MF class. -type MultiPropertyGroup struct { - Resource +// AddResourceIdNode add a ResourceIdNode. +func (inst ImplicitFunction) AddResourceIdNode(identifier string, displayName string, tag string) (ResourceIdNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addresourceidnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) + if ret != 0 { + return ResourceIdNode{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewResourceIdNode(node), nil } -func (wrapper Wrapper) NewMultiPropertyGroup(r ref) MultiPropertyGroup { - return MultiPropertyGroup{wrapper.NewResource(r)} +// AddAdditionNode add an AdditionNode. +func (inst ImplicitFunction) AddAdditionNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (AdditionNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addadditionnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) + if ret != 0 { + return AdditionNode{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewAdditionNode(node), nil } -// GetCount retrieves the count of MultiProperty-s in the MultiPropertyGroup. -func (inst MultiPropertyGroup) GetCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_multipropertygroup_getcount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// AddSubtractionNode add a SubtractionNode. +func (inst ImplicitFunction) AddSubtractionNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (SubtractionNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addsubtractionnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return 0, makeError(uint32(ret)) + return SubtractionNode{}, makeError(uint32(ret)) } - return uint32(count), nil + return inst.wrapperRef.NewSubtractionNode(node), nil } -// GetAllPropertyIDs returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup. -func (inst MultiPropertyGroup) GetAllPropertyIDs(propertyIDs []uint32) ([]uint32, error) { - var neededforpropertyIDs C.uint64_t - ret := C.CCall_lib3mf_multipropertygroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpropertyIDs, nil) +// AddMultiplicationNode add a MultiplicationNode. +func (inst ImplicitFunction) AddMultiplicationNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (MultiplicationNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addmultiplicationnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return nil, makeError(uint32(ret)) + return MultiplicationNode{}, makeError(uint32(ret)) } - if len(propertyIDs) < int(neededforpropertyIDs) { - propertyIDs = append(propertyIDs, make([]uint32, int(neededforpropertyIDs)-len(propertyIDs))...) + return inst.wrapperRef.NewMultiplicationNode(node), nil +} + +// AddDivisionNode add a DivisionNode. +func (inst ImplicitFunction) AddDivisionNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (DivisionNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_adddivisionnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) + if ret != 0 { + return DivisionNode{}, makeError(uint32(ret)) } - ret = C.CCall_lib3mf_multipropertygroup_getallpropertyids(inst.wrapperRef.LibraryHandle, inst.Ref, neededforpropertyIDs, nil, (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) + return inst.wrapperRef.NewDivisionNode(node), nil +} + +// AddDotNode add a DotNode. +func (inst ImplicitFunction) AddDotNode(identifier string, displayName string, tag string) (DotNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_adddotnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return nil, makeError(uint32(ret)) + return DotNode{}, makeError(uint32(ret)) } - return propertyIDs[:int(neededforpropertyIDs)], nil + return inst.wrapperRef.NewDotNode(node), nil } -// AddMultiProperty adds a new MultiProperty to the MultiPropertyGroup. -func (inst MultiPropertyGroup) AddMultiProperty(propertyIDs []uint32) (uint32, error) { - var propertyID C.uint32_t - ret := C.CCall_lib3mf_multipropertygroup_addmultiproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(propertyIDs)), (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0])), &propertyID) +// AddCrossNode add a CrossNode. +func (inst ImplicitFunction) AddCrossNode(identifier string, displayName string, tag string) (CrossNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addcrossnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return 0, makeError(uint32(ret)) + return CrossNode{}, makeError(uint32(ret)) } - return uint32(propertyID), nil + return inst.wrapperRef.NewCrossNode(node), nil } -// SetMultiProperty sets the PropertyIDs of a MultiProperty. -func (inst MultiPropertyGroup) SetMultiProperty(propertyID uint32, propertyIDs []uint32) error { - ret := C.CCall_lib3mf_multipropertygroup_setmultiproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), C.uint64_t(len(propertyIDs)), (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) +// AddMatVecMultiplicationNode add a MatVecMultiplicationNode. +func (inst ImplicitFunction) AddMatVecMultiplicationNode(identifier string, displayName string, tag string) (MatVecMultiplicationNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addmatvecmultiplicationnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return makeError(uint32(ret)) + return MatVecMultiplicationNode{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewMatVecMultiplicationNode(node), nil } -// GetMultiProperty obtains the PropertyIDs of a MultiProperty. -func (inst MultiPropertyGroup) GetMultiProperty(propertyID uint32, propertyIDs []uint32) ([]uint32, error) { - var neededforpropertyIDs C.uint64_t - ret := C.CCall_lib3mf_multipropertygroup_getmultiproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), 0, &neededforpropertyIDs, nil) +// AddMinNode add a MinNode. +func (inst ImplicitFunction) AddMinNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (MinNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addminnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return nil, makeError(uint32(ret)) + return MinNode{}, makeError(uint32(ret)) } - if len(propertyIDs) < int(neededforpropertyIDs) { - propertyIDs = append(propertyIDs, make([]uint32, int(neededforpropertyIDs)-len(propertyIDs))...) + return inst.wrapperRef.NewMinNode(node), nil +} + +// AddMaxNode add a MaxNode. +func (inst ImplicitFunction) AddMaxNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (MaxNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addmaxnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) + if ret != 0 { + return MaxNode{}, makeError(uint32(ret)) } - ret = C.CCall_lib3mf_multipropertygroup_getmultiproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID), neededforpropertyIDs, nil, (*C.uint32_t)(unsafe.Pointer(&propertyIDs[0]))) + return inst.wrapperRef.NewMaxNode(node), nil +} + +// AddFmodNode add a FmodNode. +func (inst ImplicitFunction) AddFmodNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (FmodNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addfmodnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return nil, makeError(uint32(ret)) + return FmodNode{}, makeError(uint32(ret)) } - return propertyIDs[:int(neededforpropertyIDs)], nil + return inst.wrapperRef.NewFmodNode(node), nil } -// RemoveMultiProperty removes a MultiProperty from this MultiPropertyGroup. -func (inst MultiPropertyGroup) RemoveMultiProperty(propertyID uint32) error { - ret := C.CCall_lib3mf_multipropertygroup_removemultiproperty(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(propertyID)) +// AddPowNode add a PowNode. +func (inst ImplicitFunction) AddPowNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (PowNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addpownode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return makeError(uint32(ret)) + return PowNode{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewPowNode(node), nil } -// GetLayerCount retrieves the number of layers of this MultiPropertyGroup. -func (inst MultiPropertyGroup) GetLayerCount() (uint32, error) { - var count C.uint32_t - ret := C.CCall_lib3mf_multipropertygroup_getlayercount(inst.wrapperRef.LibraryHandle, inst.Ref, &count) +// AddSelectNode add a SelectNode. +func (inst ImplicitFunction) AddSelectNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (SelectNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addselectnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return 0, makeError(uint32(ret)) + return SelectNode{}, makeError(uint32(ret)) } - return uint32(count), nil + return inst.wrapperRef.NewSelectNode(node), nil } -// AddLayer adds a MultiPropertyLayer to this MultiPropertyGroup. -func (inst MultiPropertyGroup) AddLayer(theLayer MultiPropertyLayer) (uint32, error) { - var layerIndex C.uint32_t - ret := C.CCall_lib3mf_multipropertygroup_addlayer(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.sLib3MFMultiPropertyLayer)(unsafe.Pointer(&theLayer)), &layerIndex) +// AddClampNode add a ClampNode. +func (inst ImplicitFunction) AddClampNode(identifier string, configuration ImplicitNodeConfiguration, displayName string, tag string) (ClampNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addclampnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), C.eLib3MFImplicitNodeConfiguration(configuration), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return 0, makeError(uint32(ret)) + return ClampNode{}, makeError(uint32(ret)) } - return uint32(layerIndex), nil + return inst.wrapperRef.NewClampNode(node), nil } -// GetLayer obtains a MultiPropertyLayer of this MultiPropertyGroup. -func (inst MultiPropertyGroup) GetLayer(layerIndex uint32) (MultiPropertyLayer, error) { - var theLayer C.sLib3MFMultiPropertyLayer - ret := C.CCall_lib3mf_multipropertygroup_getlayer(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(layerIndex), &theLayer) +// AddComposeVectorNode add a ComposeVectorNode. +func (inst ImplicitFunction) AddComposeVectorNode(identifier string, displayName string, tag string) (ComposeVectorNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addcomposevectornode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return MultiPropertyLayer{}, makeError(uint32(ret)) + return ComposeVectorNode{}, makeError(uint32(ret)) } - return *(*MultiPropertyLayer)(unsafe.Pointer(&theLayer)), nil + return inst.wrapperRef.NewComposeVectorNode(node), nil } -// RemoveLayer removes a MultiPropertyLayer from this MultiPropertyGroup. -func (inst MultiPropertyGroup) RemoveLayer(layerIndex uint32) error { - ret := C.CCall_lib3mf_multipropertygroup_removelayer(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(layerIndex)) +// AddVectorFromScalarNode add a VectorFromScalar. +func (inst ImplicitFunction) AddVectorFromScalarNode(identifier string, displayName string, tag string) (VectorFromScalarNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addvectorfromscalarnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return makeError(uint32(ret)) + return VectorFromScalarNode{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewVectorFromScalarNode(node), nil } +// AddDecomposeVectorNode add a DecomposeVectorNode. +func (inst ImplicitFunction) AddDecomposeVectorNode(identifier string, displayName string, tag string) (DecomposeVectorNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_adddecomposevectornode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) + if ret != 0 { + return DecomposeVectorNode{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewDecomposeVectorNode(node), nil +} -// Attachment represents a Lib3MF class. -type Attachment struct { - Base +// AddComposeMatrixNode add a ComposeMatrixNode. +func (inst ImplicitFunction) AddComposeMatrixNode(identifier string, displayName string, tag string) (ComposeMatrixNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addcomposematrixnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) + if ret != 0 { + return ComposeMatrixNode{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewComposeMatrixNode(node), nil } -func (wrapper Wrapper) NewAttachment(r ref) Attachment { - return Attachment{wrapper.NewBase(r)} +// AddMatrixFromRowsNode add a MatrixFromRowsNode. +func (inst ImplicitFunction) AddMatrixFromRowsNode(identifier string, displayName string, tag string) (MatrixFromRowsNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addmatrixfromrowsnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) + if ret != 0 { + return MatrixFromRowsNode{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewMatrixFromRowsNode(node), nil } -// GetPath retrieves an attachment's package path. This function will be removed in a later release. -func (inst Attachment) GetPath() (string, error) { - var neededforpath C.uint32_t - var filledinpath C.uint32_t - ret := C.CCall_lib3mf_attachment_getpath(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpath, nil) +// AddMatrixFromColumnsNode add a MatrixFromColumnsNode. +func (inst ImplicitFunction) AddMatrixFromColumnsNode(identifier string, displayName string, tag string) (MatrixFromColumnsNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addmatrixfromcolumnsnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return "", makeError(uint32(ret)) + return MatrixFromColumnsNode{}, makeError(uint32(ret)) } - bufferSizepath := neededforpath - bufferpath := make([]byte, bufferSizepath) - ret = C.CCall_lib3mf_attachment_getpath(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizepath, &filledinpath, (*C.char)(unsafe.Pointer(&bufferpath[0]))) + return inst.wrapperRef.NewMatrixFromColumnsNode(node), nil +} + +// AddConstantNode add a ConstantNode. +func (inst ImplicitFunction) AddConstantNode(identifier string, displayName string, tag string) (ConstantNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addconstantnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return "", makeError(uint32(ret)) + return ConstantNode{}, makeError(uint32(ret)) } - return string(bufferpath[:(filledinpath-1)]), nil + return inst.wrapperRef.NewConstantNode(node), nil } -// SetPath sets an attachment's package path. This function will be removed in a later release. -func (inst Attachment) SetPath(path string) error { - ret := C.CCall_lib3mf_attachment_setpath(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(path)[0]))) +// AddConstVecNode add a ConstVecNode. +func (inst ImplicitFunction) AddConstVecNode(identifier string, displayName string, tag string) (ConstVecNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addconstvecnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return makeError(uint32(ret)) + return ConstVecNode{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewConstVecNode(node), nil } -// PackagePart returns the PackagePart that is this attachment. -func (inst Attachment) PackagePart() (PackagePart, error) { - var packagePart ref - ret := C.CCall_lib3mf_attachment_packagepart(inst.wrapperRef.LibraryHandle, inst.Ref, &packagePart) +// AddConstMatNode add a ConstMatNode. +func (inst ImplicitFunction) AddConstMatNode(identifier string, displayName string, tag string) (ConstMatNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addconstmatnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return PackagePart{}, makeError(uint32(ret)) + return ConstMatNode{}, makeError(uint32(ret)) } - return inst.wrapperRef.NewPackagePart(packagePart), nil + return inst.wrapperRef.NewConstMatNode(node), nil } -// GetRelationShipType retrieves an attachment's relationship type. -func (inst Attachment) GetRelationShipType() (string, error) { - var neededforpath C.uint32_t - var filledinpath C.uint32_t - ret := C.CCall_lib3mf_attachment_getrelationshiptype(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforpath, nil) +// AddMeshNode add a MeshNode. +func (inst ImplicitFunction) AddMeshNode(identifier string, displayName string, tag string) (MeshNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addmeshnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return "", makeError(uint32(ret)) + return MeshNode{}, makeError(uint32(ret)) } - bufferSizepath := neededforpath - bufferpath := make([]byte, bufferSizepath) - ret = C.CCall_lib3mf_attachment_getrelationshiptype(inst.wrapperRef.LibraryHandle, inst.Ref, bufferSizepath, &filledinpath, (*C.char)(unsafe.Pointer(&bufferpath[0]))) + return inst.wrapperRef.NewMeshNode(node), nil +} + +// AddUnsignedMeshNode add a UnsignedMeshNode. +func (inst ImplicitFunction) AddUnsignedMeshNode(identifier string, displayName string, tag string) (UnsignedMeshNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addunsignedmeshnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return "", makeError(uint32(ret)) + return UnsignedMeshNode{}, makeError(uint32(ret)) } - return string(bufferpath[:(filledinpath-1)]), nil + return inst.wrapperRef.NewUnsignedMeshNode(node), nil } -// SetRelationShipType sets an attachment's relationship type. -func (inst Attachment) SetRelationShipType(path string) error { - ret := C.CCall_lib3mf_attachment_setrelationshiptype(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(path)[0]))) +// AddFunctionCallNode add a FunctionCallNode. +func (inst ImplicitFunction) AddFunctionCallNode(identifier string, displayName string, tag string) (FunctionCallNode, error) { + var node ref + ret := C.CCall_lib3mf_implicitfunction_addfunctioncallnode(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(identifier)[0])), (*C.char)(unsafe.Pointer(&[]byte(displayName)[0])), (*C.char)(unsafe.Pointer(&[]byte(tag)[0])), &node) if ret != 0 { - return makeError(uint32(ret)) + return FunctionCallNode{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewFunctionCallNode(node), nil } -// WriteToFile writes out the attachment as file. -func (inst Attachment) WriteToFile(fileName string) error { - ret := C.CCall_lib3mf_attachment_writetofile(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(fileName)[0]))) +// GetNodes retrieves the nodes. +func (inst ImplicitFunction) GetNodes() (NodeIterator, error) { + var iterator ref + ret := C.CCall_lib3mf_implicitfunction_getnodes(inst.wrapperRef.LibraryHandle, inst.Ref, &iterator) if ret != 0 { - return makeError(uint32(ret)) + return NodeIterator{}, makeError(uint32(ret)) } - return nil + return inst.wrapperRef.NewNodeIterator(iterator), nil } -// ReadFromFile reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. -func (inst Attachment) ReadFromFile(fileName string) error { - ret := C.CCall_lib3mf_attachment_readfromfile(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(fileName)[0]))) +// RemoveNode removes a node. +func (inst ImplicitFunction) RemoveNode(node ImplicitNode) error { + ret := C.CCall_lib3mf_implicitfunction_removenode(inst.wrapperRef.LibraryHandle, inst.Ref, node.Ref) if ret != 0 { return makeError(uint32(ret)) } return nil } -// ReadFromCallback reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. -func (inst Attachment) ReadFromCallback(theReadCallback ReadCallbackFunc, streamSize uint64, theSeekCallback SeekCallbackFunc, userData uintptr) error { - ret := C.CCall_lib3mf_attachment_readfromcallback(inst.wrapperRef.LibraryHandle, inst.Ref, (C.Lib3MFReadCallback)(unsafe.Pointer(C.Lib3MFReadCallback_cgo)), C.uint64_t(streamSize), (C.Lib3MFSeekCallback)(unsafe.Pointer(C.Lib3MFSeekCallback_cgo)), (C.Lib3MF_pvoid)(userData)) +// AddLink add a link. +func (inst ImplicitFunction) AddLink(source ImplicitPort, target ImplicitPort) error { + ret := C.CCall_lib3mf_implicitfunction_addlink(inst.wrapperRef.LibraryHandle, inst.Ref, source.Ref, target.Ref) if ret != 0 { return makeError(uint32(ret)) } - readCallbackFunc = theReadCallback - seekCallbackFunc = theSeekCallback return nil } -// GetStreamSize retrieves the size of the attachment stream. -func (inst Attachment) GetStreamSize() (uint64, error) { - var streamSize C.uint64_t - ret := C.CCall_lib3mf_attachment_getstreamsize(inst.wrapperRef.LibraryHandle, inst.Ref, &streamSize) +// AddLinkByNames add a link. +func (inst ImplicitFunction) AddLinkByNames(source string, target string) error { + ret := C.CCall_lib3mf_implicitfunction_addlinkbynames(inst.wrapperRef.LibraryHandle, inst.Ref, (*C.char)(unsafe.Pointer(&[]byte(source)[0])), (*C.char)(unsafe.Pointer(&[]byte(target)[0]))) if ret != 0 { - return 0, makeError(uint32(ret)) + return makeError(uint32(ret)) } - return uint64(streamSize), nil + return nil } -// WriteToBuffer writes out the attachment into a buffer. -func (inst Attachment) WriteToBuffer(buffer []uint8) ([]uint8, error) { - var neededforbuffer C.uint64_t - ret := C.CCall_lib3mf_attachment_writetobuffer(inst.wrapperRef.LibraryHandle, inst.Ref, 0, &neededforbuffer, nil) +// Clear clears the function. +func (inst ImplicitFunction) Clear() error { + ret := C.CCall_lib3mf_implicitfunction_clear(inst.wrapperRef.LibraryHandle, inst.Ref) if ret != 0 { - return nil, makeError(uint32(ret)) - } - if len(buffer) < int(neededforbuffer) { - buffer = append(buffer, make([]uint8, int(neededforbuffer)-len(buffer))...) - } - ret = C.CCall_lib3mf_attachment_writetobuffer(inst.wrapperRef.LibraryHandle, inst.Ref, neededforbuffer, nil, (*C.uint8_t)(unsafe.Pointer(&buffer[0]))) - if ret != 0 { - return nil, makeError(uint32(ret)) + return makeError(uint32(ret)) } - return buffer[:int(neededforbuffer)], nil + return nil } -// ReadFromBuffer reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). -func (inst Attachment) ReadFromBuffer(buffer []uint8) error { - ret := C.CCall_lib3mf_attachment_readfrombuffer(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint64_t(len(buffer)), (*C.uint8_t)(unsafe.Pointer(&buffer[0]))) +// SortNodesTopologically sorts the nodes topologically. +func (inst ImplicitFunction) SortNodesTopologically() error { + ret := C.CCall_lib3mf_implicitfunction_sortnodestopologically(inst.wrapperRef.LibraryHandle, inst.Ref) if ret != 0 { return makeError(uint32(ret)) } @@ -6287,86 +11702,106 @@ func (inst Attachment) ReadFromBuffer(buffer []uint8) error { } -// Texture2D represents a Lib3MF class. -type Texture2D struct { - Resource +// FunctionFromImage3D represents a Lib3MF class. +type FunctionFromImage3D struct { + Function } -func (wrapper Wrapper) NewTexture2D(r ref) Texture2D { - return Texture2D{wrapper.NewResource(r)} +func (wrapper Wrapper) NewFunctionFromImage3D(r ref) FunctionFromImage3D { + return FunctionFromImage3D{wrapper.NewFunction(r)} } -// GetAttachment retrieves the attachment located at the path of the texture. -func (inst Texture2D) GetAttachment() (Attachment, error) { - var attachment ref - ret := C.CCall_lib3mf_texture2d_getattachment(inst.wrapperRef.LibraryHandle, inst.Ref, &attachment) +// GetImage3D returns the selected 3D image. +func (inst FunctionFromImage3D) GetImage3D() (Image3D, error) { + var image3D ref + ret := C.CCall_lib3mf_functionfromimage3d_getimage3d(inst.wrapperRef.LibraryHandle, inst.Ref, &image3D) if ret != 0 { - return Attachment{}, makeError(uint32(ret)) + return Image3D{}, makeError(uint32(ret)) } - return inst.wrapperRef.NewAttachment(attachment), nil + return inst.wrapperRef.NewImage3D(image3D), nil } -// SetAttachment sets the texture's package path to the path of the attachment. -func (inst Texture2D) SetAttachment(attachment Attachment) error { - ret := C.CCall_lib3mf_texture2d_setattachment(inst.wrapperRef.LibraryHandle, inst.Ref, attachment.Ref) +// SetImage3D sets the 3D image of the selector. +func (inst FunctionFromImage3D) SetImage3D(image3D Image3D) error { + ret := C.CCall_lib3mf_functionfromimage3d_setimage3d(inst.wrapperRef.LibraryHandle, inst.Ref, image3D.Ref) if ret != 0 { return makeError(uint32(ret)) } return nil } -// GetContentType retrieves a texture's content type. -func (inst Texture2D) GetContentType() (TextureType, error) { - var contentType C.eLib3MFTextureType - ret := C.CCall_lib3mf_texture2d_getcontenttype(inst.wrapperRef.LibraryHandle, inst.Ref, &contentType) +// SetFilter sets the texture filter of the selector. +func (inst FunctionFromImage3D) SetFilter(filter TextureFilter) error { + ret := C.CCall_lib3mf_functionfromimage3d_setfilter(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFTextureFilter(filter)) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + +// GetFilter returns the texture filter of the selector. +func (inst FunctionFromImage3D) GetFilter() (TextureFilter, error) { + var filter C.eLib3MFTextureFilter + ret := C.CCall_lib3mf_functionfromimage3d_getfilter(inst.wrapperRef.LibraryHandle, inst.Ref, &filter) if ret != 0 { return 0, makeError(uint32(ret)) } - return TextureType(contentType), nil + return TextureFilter(filter), nil } -// SetContentType retrieves a texture's content type. -func (inst Texture2D) SetContentType(contentType TextureType) error { - ret := C.CCall_lib3mf_texture2d_setcontenttype(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFTextureType(contentType)) +// SetTileStyles sets the tile styles of the selector. +func (inst FunctionFromImage3D) SetTileStyles(tileStyleU TextureTileStyle, tileStyleV TextureTileStyle, tileStyleW TextureTileStyle) error { + ret := C.CCall_lib3mf_functionfromimage3d_settilestyles(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFTextureTileStyle(tileStyleU), C.eLib3MFTextureTileStyle(tileStyleV), C.eLib3MFTextureTileStyle(tileStyleW)) if ret != 0 { return makeError(uint32(ret)) } return nil } -// GetTileStyleUV retrieves a texture's tilestyle type. -func (inst Texture2D) GetTileStyleUV() (TextureTileStyle, TextureTileStyle, error) { +// GetTileStyles retrieves the tile styles of the selector. +func (inst FunctionFromImage3D) GetTileStyles() (TextureTileStyle, TextureTileStyle, TextureTileStyle, error) { var tileStyleU C.eLib3MFTextureTileStyle var tileStyleV C.eLib3MFTextureTileStyle - ret := C.CCall_lib3mf_texture2d_gettilestyleuv(inst.wrapperRef.LibraryHandle, inst.Ref, &tileStyleU, &tileStyleV) + var tileStyleW C.eLib3MFTextureTileStyle + ret := C.CCall_lib3mf_functionfromimage3d_gettilestyles(inst.wrapperRef.LibraryHandle, inst.Ref, &tileStyleU, &tileStyleV, &tileStyleW) if ret != 0 { - return 0, 0, makeError(uint32(ret)) + return 0, 0, 0, makeError(uint32(ret)) } - return TextureTileStyle(tileStyleU), TextureTileStyle(tileStyleV), nil + return TextureTileStyle(tileStyleU), TextureTileStyle(tileStyleV), TextureTileStyle(tileStyleW), nil } -// SetTileStyleUV sets a texture's tilestyle type. -func (inst Texture2D) SetTileStyleUV(tileStyleU TextureTileStyle, tileStyleV TextureTileStyle) error { - ret := C.CCall_lib3mf_texture2d_settilestyleuv(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFTextureTileStyle(tileStyleU), C.eLib3MFTextureTileStyle(tileStyleV)) +// GetOffset returns the offset value for the pixel values in the Image3D. +func (inst FunctionFromImage3D) GetOffset() (float64, error) { + var offset C.double + ret := C.CCall_lib3mf_functionfromimage3d_getoffset(inst.wrapperRef.LibraryHandle, inst.Ref, &offset) + if ret != 0 { + return 0, makeError(uint32(ret)) + } + return float64(offset), nil +} + +// SetOffset sets the offset value for the pixel values in the Image3D. +func (inst FunctionFromImage3D) SetOffset(offset float64) error { + ret := C.CCall_lib3mf_functionfromimage3d_setoffset(inst.wrapperRef.LibraryHandle, inst.Ref, C.double(offset)) if ret != 0 { return makeError(uint32(ret)) } return nil } -// GetFilter retrieves a texture's filter type. -func (inst Texture2D) GetFilter() (TextureFilter, error) { - var filter C.eLib3MFTextureFilter - ret := C.CCall_lib3mf_texture2d_getfilter(inst.wrapperRef.LibraryHandle, inst.Ref, &filter) +// GetScale returns the scale value for the pixel values in the Image3D. +func (inst FunctionFromImage3D) GetScale() (float64, error) { + var scale C.double + ret := C.CCall_lib3mf_functionfromimage3d_getscale(inst.wrapperRef.LibraryHandle, inst.Ref, &scale) if ret != 0 { return 0, makeError(uint32(ret)) } - return TextureFilter(filter), nil + return float64(scale), nil } -// SetFilter sets a texture's filter type. -func (inst Texture2D) SetFilter(filter TextureFilter) error { - ret := C.CCall_lib3mf_texture2d_setfilter(inst.wrapperRef.LibraryHandle, inst.Ref, C.eLib3MFTextureFilter(filter)) +// SetScale sets the scale value for the pixel values in the Image3D. +func (inst FunctionFromImage3D) SetScale(scale float64) error { + ret := C.CCall_lib3mf_functionfromimage3d_setscale(inst.wrapperRef.LibraryHandle, inst.Ref, C.double(scale)) if ret != 0 { return makeError(uint32(ret)) } @@ -7548,6 +12983,16 @@ func (inst Model) GetSliceStackByID(uniqueResourceID uint32) (SliceStack, error) return inst.wrapperRef.NewSliceStack(sliceStacInstance), nil } +// GetLevelSetByID finds a level set object by its UniqueResourceID. +func (inst Model) GetLevelSetByID(uniqueResourceID uint32) (LevelSet, error) { + var levelSetObjectInstance ref + ret := C.CCall_lib3mf_model_getlevelsetbyid(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(uniqueResourceID), &levelSetObjectInstance) + if ret != 0 { + return LevelSet{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewLevelSet(levelSetObjectInstance), nil +} + // GetBuildUUID returns, whether a build has a UUID and, if true, the build's UUID. func (inst Model) GetBuildUUID() (bool, string, error) { var hasUUID C.bool @@ -7705,6 +13150,16 @@ func (inst Model) GetSliceStacks() (SliceStackIterator, error) { return inst.wrapperRef.NewSliceStackIterator(resourceIterator), nil } +// GetImage3Ds creates a resource iterator instance with all image3d resources. +func (inst Model) GetImage3Ds() (Image3DIterator, error) { + var resourceIterator ref + ret := C.CCall_lib3mf_model_getimage3ds(inst.wrapperRef.LibraryHandle, inst.Ref, &resourceIterator) + if ret != 0 { + return Image3DIterator{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewImage3DIterator(resourceIterator), nil +} + // MergeToModel merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. func (inst Model) MergeToModel() (Model, error) { var mergedModelInstance ref @@ -7715,6 +13170,15 @@ func (inst Model) MergeToModel() (Model, error) { return inst.wrapperRef.NewModel(mergedModelInstance), nil } +// MergeFromModel merges the given model into this model. +func (inst Model) MergeFromModel(modelInstance Model) error { + ret := C.CCall_lib3mf_model_mergefrommodel(inst.wrapperRef.LibraryHandle, inst.Ref, modelInstance.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + // AddMeshObject adds an empty mesh object to the model. func (inst Model) AddMeshObject() (MeshObject, error) { var meshObjectInstance ref @@ -7805,6 +13269,26 @@ func (inst Model) AddMultiPropertyGroup() (MultiPropertyGroup, error) { return inst.wrapperRef.NewMultiPropertyGroup(multiPropertyGroupInstance), nil } +// AddImageStack creates a new 3D Image Resource. +func (inst Model) AddImageStack(columnCount uint32, rowCount uint32, sheetCount uint32) (ImageStack, error) { + var instance ref + ret := C.CCall_lib3mf_model_addimagestack(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(columnCount), C.uint32_t(rowCount), C.uint32_t(sheetCount), &instance) + if ret != 0 { + return ImageStack{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewImageStack(instance), nil +} + +// GetImageStackByID finds an ImageStack object by its UniqueResourceID. +func (inst Model) GetImageStackByID(uniqueResourceID uint32) (ImageStack, error) { + var imageStackInstance ref + ret := C.CCall_lib3mf_model_getimagestackbyid(inst.wrapperRef.LibraryHandle, inst.Ref, C.uint32_t(uniqueResourceID), &imageStackInstance) + if ret != 0 { + return ImageStack{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewImageStack(imageStackInstance), nil +} + // AddBuildItem adds a build item to the model. func (inst Model) AddBuildItem(object Object, transform Transform) (BuildItem, error) { var buildItemInstance ref @@ -7965,6 +13449,75 @@ func (inst Model) GetKeyStore() (KeyStore, error) { return inst.wrapperRef.NewKeyStore(keyStore), nil } +// GetFunctions creates a resource iterator for all functions. +func (inst Model) GetFunctions() (FunctionIterator, error) { + var theResourceIterator ref + ret := C.CCall_lib3mf_model_getfunctions(inst.wrapperRef.LibraryHandle, inst.Ref, &theResourceIterator) + if ret != 0 { + return FunctionIterator{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewFunctionIterator(theResourceIterator), nil +} + +// AddImplicitFunction adds a function described by nodes to the model. +func (inst Model) AddImplicitFunction() (ImplicitFunction, error) { + var functionInstance ref + ret := C.CCall_lib3mf_model_addimplicitfunction(inst.wrapperRef.LibraryHandle, inst.Ref, &functionInstance) + if ret != 0 { + return ImplicitFunction{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewImplicitFunction(functionInstance), nil +} + +// AddFunctionFromImage3D adds a function defined by an image3d to the model. +func (inst Model) AddFunctionFromImage3D(image3DInstance Image3D) (FunctionFromImage3D, error) { + var functionInstance ref + ret := C.CCall_lib3mf_model_addfunctionfromimage3d(inst.wrapperRef.LibraryHandle, inst.Ref, image3DInstance.Ref, &functionInstance) + if ret != 0 { + return FunctionFromImage3D{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewFunctionFromImage3D(functionInstance), nil +} + +// AddVolumeData adds a volume data resource to the model. +func (inst Model) AddVolumeData() (VolumeData, error) { + var volumeDataInstance ref + ret := C.CCall_lib3mf_model_addvolumedata(inst.wrapperRef.LibraryHandle, inst.Ref, &volumeDataInstance) + if ret != 0 { + return VolumeData{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewVolumeData(volumeDataInstance), nil +} + +// AddLevelSet adds an empty boundary shape object to the model. +func (inst Model) AddLevelSet() (LevelSet, error) { + var levelSetInstance ref + ret := C.CCall_lib3mf_model_addlevelset(inst.wrapperRef.LibraryHandle, inst.Ref, &levelSetInstance) + if ret != 0 { + return LevelSet{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewLevelSet(levelSetInstance), nil +} + +// GetLevelSets creates a resource iterator instance with all boundary shape resources. +func (inst Model) GetLevelSets() (LevelSetIterator, error) { + var resourceIterator ref + ret := C.CCall_lib3mf_model_getlevelsets(inst.wrapperRef.LibraryHandle, inst.Ref, &resourceIterator) + if ret != 0 { + return LevelSetIterator{}, makeError(uint32(ret)) + } + return inst.wrapperRef.NewLevelSetIterator(resourceIterator), nil +} + +// RemoveResource removes a resource from the model. +func (inst Model) RemoveResource(resource Resource) error { + ret := C.CCall_lib3mf_model_removeresource(inst.wrapperRef.LibraryHandle, inst.Ref, resource.Ref) + if ret != 0 { + return makeError(uint32(ret)) + } + return nil +} + // GetLibraryVersion retrieves the binary version of this library. func (wrapper Wrapper) GetLibraryVersion() (uint32, uint32, uint32, error) { @@ -8204,7 +13757,7 @@ func (wrapper Wrapper) releaseC(r *ref) error { func (wrapper Wrapper) CheckBinaryVersion() error { var nBindingMajor uint32 = 2; - var nBindingMinor uint32 = 3; + var nBindingMinor uint32 = 4; nMajor, nMinor, _, err := wrapper.GetLibraryVersion() if err != nil { return err; diff --git a/Autogenerated/Bindings/Go/lib3mf_dynamic.cc b/Autogenerated/Bindings/Go/lib3mf_dynamic.cc index e1cec341d..2bef1bdf1 100644 --- a/Autogenerated/Bindings/Go/lib3mf_dynamic.cc +++ b/Autogenerated/Bindings/Go/lib3mf_dynamic.cc @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated plain C Header file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -96,6 +96,9 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup = NULL; pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials = NULL; pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup = NULL; + pWrapperTable->m_Image3DIterator_GetCurrentImage3D = NULL; + pWrapperTable->m_FunctionIterator_GetCurrentFunction = NULL; + pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet = NULL; pWrapperTable->m_MetaData_GetNameSpace = NULL; pWrapperTable->m_MetaData_SetNameSpace = NULL; pWrapperTable->m_MetaData_GetName = NULL; @@ -121,6 +124,7 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Object_SetPartNumber = NULL; pWrapperTable->m_Object_IsMeshObject = NULL; pWrapperTable->m_Object_IsComponentsObject = NULL; + pWrapperTable->m_Object_IsLevelSetObject = NULL; pWrapperTable->m_Object_IsValid = NULL; pWrapperTable->m_Object_SetAttachmentAsThumbnail = NULL; pWrapperTable->m_Object_GetThumbnailAttachment = NULL; @@ -155,6 +159,24 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_MeshObject_SetGeometry = NULL; pWrapperTable->m_MeshObject_IsManifoldAndOriented = NULL; pWrapperTable->m_MeshObject_BeamLattice = NULL; + pWrapperTable->m_MeshObject_GetVolumeData = NULL; + pWrapperTable->m_MeshObject_SetVolumeData = NULL; + pWrapperTable->m_LevelSet_GetFunction = NULL; + pWrapperTable->m_LevelSet_SetFunction = NULL; + pWrapperTable->m_LevelSet_GetTransform = NULL; + pWrapperTable->m_LevelSet_SetTransform = NULL; + pWrapperTable->m_LevelSet_GetChannelName = NULL; + pWrapperTable->m_LevelSet_SetChannelName = NULL; + pWrapperTable->m_LevelSet_SetMinFeatureSize = NULL; + pWrapperTable->m_LevelSet_GetMinFeatureSize = NULL; + pWrapperTable->m_LevelSet_SetFallBackValue = NULL; + pWrapperTable->m_LevelSet_GetFallBackValue = NULL; + pWrapperTable->m_LevelSet_SetMeshBBoxOnly = NULL; + pWrapperTable->m_LevelSet_GetMeshBBoxOnly = NULL; + pWrapperTable->m_LevelSet_SetMesh = NULL; + pWrapperTable->m_LevelSet_GetMesh = NULL; + pWrapperTable->m_LevelSet_GetVolumeData = NULL; + pWrapperTable->m_LevelSet_SetVolumeData = NULL; pWrapperTable->m_BeamLattice_GetMinLength = NULL; pWrapperTable->m_BeamLattice_SetMinLength = NULL; pWrapperTable->m_BeamLattice_GetClipping = NULL; @@ -178,6 +200,35 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_BeamLattice_GetBeamSetCount = NULL; pWrapperTable->m_BeamLattice_AddBeamSet = NULL; pWrapperTable->m_BeamLattice_GetBeamSet = NULL; + pWrapperTable->m_FunctionReference_GetFunctionResourceID = NULL; + pWrapperTable->m_FunctionReference_SetFunctionResourceID = NULL; + pWrapperTable->m_FunctionReference_GetTransform = NULL; + pWrapperTable->m_FunctionReference_SetTransform = NULL; + pWrapperTable->m_FunctionReference_GetChannelName = NULL; + pWrapperTable->m_FunctionReference_SetChannelName = NULL; + pWrapperTable->m_FunctionReference_SetMinFeatureSize = NULL; + pWrapperTable->m_FunctionReference_GetMinFeatureSize = NULL; + pWrapperTable->m_FunctionReference_SetFallBackValue = NULL; + pWrapperTable->m_FunctionReference_GetFallBackValue = NULL; + pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup = NULL; + pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup = NULL; + pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount = NULL; + pWrapperTable->m_VolumeDataComposite_GetMaterialMapping = NULL; + pWrapperTable->m_VolumeDataComposite_AddMaterialMapping = NULL; + pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping = NULL; + pWrapperTable->m_VolumeDataProperty_GetName = NULL; + pWrapperTable->m_VolumeDataProperty_SetIsRequired = NULL; + pWrapperTable->m_VolumeDataProperty_IsRequired = NULL; + pWrapperTable->m_VolumeData_GetComposite = NULL; + pWrapperTable->m_VolumeData_CreateNewComposite = NULL; + pWrapperTable->m_VolumeData_RemoveComposite = NULL; + pWrapperTable->m_VolumeData_GetColor = NULL; + pWrapperTable->m_VolumeData_CreateNewColor = NULL; + pWrapperTable->m_VolumeData_RemoveColor = NULL; + pWrapperTable->m_VolumeData_GetPropertyCount = NULL; + pWrapperTable->m_VolumeData_GetProperty = NULL; + pWrapperTable->m_VolumeData_AddPropertyFromFunction = NULL; + pWrapperTable->m_VolumeData_RemoveProperty = NULL; pWrapperTable->m_Component_GetObjectResource = NULL; pWrapperTable->m_Component_GetObjectResourceID = NULL; pWrapperTable->m_Component_GetUUID = NULL; @@ -234,6 +285,19 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_MultiPropertyGroup_AddLayer = NULL; pWrapperTable->m_MultiPropertyGroup_GetLayer = NULL; pWrapperTable->m_MultiPropertyGroup_RemoveLayer = NULL; + pWrapperTable->m_Image3D_GetName = NULL; + pWrapperTable->m_Image3D_SetName = NULL; + pWrapperTable->m_Image3D_IsImageStack = NULL; + pWrapperTable->m_ImageStack_GetRowCount = NULL; + pWrapperTable->m_ImageStack_SetRowCount = NULL; + pWrapperTable->m_ImageStack_GetColumnCount = NULL; + pWrapperTable->m_ImageStack_SetColumnCount = NULL; + pWrapperTable->m_ImageStack_GetSheetCount = NULL; + pWrapperTable->m_ImageStack_GetSheet = NULL; + pWrapperTable->m_ImageStack_SetSheet = NULL; + pWrapperTable->m_ImageStack_CreateEmptySheet = NULL; + pWrapperTable->m_ImageStack_CreateSheetFromBuffer = NULL; + pWrapperTable->m_ImageStack_CreateSheetFromFile = NULL; pWrapperTable->m_Attachment_GetPath = NULL; pWrapperTable->m_Attachment_SetPath = NULL; pWrapperTable->m_Attachment_PackagePart = NULL; @@ -253,6 +317,173 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Texture2D_SetTileStyleUV = NULL; pWrapperTable->m_Texture2D_GetFilter = NULL; pWrapperTable->m_Texture2D_SetFilter = NULL; + pWrapperTable->m_ImplicitPort_GetIdentifier = NULL; + pWrapperTable->m_ImplicitPort_SetIdentifier = NULL; + pWrapperTable->m_ImplicitPort_GetDisplayName = NULL; + pWrapperTable->m_ImplicitPort_SetDisplayName = NULL; + pWrapperTable->m_ImplicitPort_SetType = NULL; + pWrapperTable->m_ImplicitPort_GetType = NULL; + pWrapperTable->m_ImplicitPort_GetReference = NULL; + pWrapperTable->m_ImplicitPort_SetReference = NULL; + pWrapperTable->m_Iterator_MoveNext = NULL; + pWrapperTable->m_Iterator_MovePrevious = NULL; + pWrapperTable->m_Iterator_Count = NULL; + pWrapperTable->m_ImplicitPortIterator_GetCurrent = NULL; + pWrapperTable->m_ImplicitNode_GetIdentifier = NULL; + pWrapperTable->m_ImplicitNode_SetIdentifier = NULL; + pWrapperTable->m_ImplicitNode_GetDisplayName = NULL; + pWrapperTable->m_ImplicitNode_SetDisplayName = NULL; + pWrapperTable->m_ImplicitNode_GetTag = NULL; + pWrapperTable->m_ImplicitNode_SetTag = NULL; + pWrapperTable->m_ImplicitNode_GetNodeType = NULL; + pWrapperTable->m_ImplicitNode_AddInput = NULL; + pWrapperTable->m_ImplicitNode_GetInputs = NULL; + pWrapperTable->m_ImplicitNode_AddOutput = NULL; + pWrapperTable->m_ImplicitNode_GetOutputs = NULL; + pWrapperTable->m_ImplicitNode_FindInput = NULL; + pWrapperTable->m_ImplicitNode_FindOutput = NULL; + pWrapperTable->m_ImplicitNode_AreTypesValid = NULL; + pWrapperTable->m_OneInputNode_GetInputA = NULL; + pWrapperTable->m_OneInputNode_GetOutputResult = NULL; + pWrapperTable->m_ResourceIdNode_SetResource = NULL; + pWrapperTable->m_ResourceIdNode_GetResource = NULL; + pWrapperTable->m_ResourceIdNode_GetOutputValue = NULL; + pWrapperTable->m_TwoInputNode_GetInputB = NULL; + pWrapperTable->m_SelectNode_GetInputB = NULL; + pWrapperTable->m_SelectNode_GetInputC = NULL; + pWrapperTable->m_SelectNode_GetInputD = NULL; + pWrapperTable->m_ClampNode_GetInputMin = NULL; + pWrapperTable->m_ClampNode_GetInputMax = NULL; + pWrapperTable->m_ComposeVectorNode_GetInputX = NULL; + pWrapperTable->m_ComposeVectorNode_GetInputY = NULL; + pWrapperTable->m_ComposeVectorNode_GetInputZ = NULL; + pWrapperTable->m_ComposeVectorNode_GetOutputResult = NULL; + pWrapperTable->m_DecomposeVectorNode_GetInputA = NULL; + pWrapperTable->m_DecomposeVectorNode_GetOutputX = NULL; + pWrapperTable->m_DecomposeVectorNode_GetOutputY = NULL; + pWrapperTable->m_DecomposeVectorNode_GetOutputZ = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM00 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM01 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM02 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM03 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM10 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM11 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM12 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM13 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM20 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM21 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM22 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM23 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM30 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM31 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM32 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM33 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetOutputResult = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetInputA = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetInputB = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetInputC = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetInputD = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetOutputResult = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetInputA = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetInputB = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetInputC = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetInputD = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult = NULL; + pWrapperTable->m_ConstantNode_SetConstant = NULL; + pWrapperTable->m_ConstantNode_GetConstant = NULL; + pWrapperTable->m_ConstantNode_GetOutputValue = NULL; + pWrapperTable->m_ConstVecNode_SetVector = NULL; + pWrapperTable->m_ConstVecNode_GetVector = NULL; + pWrapperTable->m_ConstVecNode_GetOutputVector = NULL; + pWrapperTable->m_ConstMatNode_SetMatrix = NULL; + pWrapperTable->m_ConstMatNode_GetMatrix = NULL; + pWrapperTable->m_ConstMatNode_GetOutputMatrix = NULL; + pWrapperTable->m_MeshNode_GetInputMesh = NULL; + pWrapperTable->m_MeshNode_GetInputPos = NULL; + pWrapperTable->m_MeshNode_GetOutputDistance = NULL; + pWrapperTable->m_UnsignedMeshNode_GetInputMesh = NULL; + pWrapperTable->m_UnsignedMeshNode_GetInputPos = NULL; + pWrapperTable->m_UnsignedMeshNode_GetOutputDistance = NULL; + pWrapperTable->m_FunctionCallNode_GetInputFunctionID = NULL; + pWrapperTable->m_NodeIterator_GetCurrent = NULL; + pWrapperTable->m_Function_GetDisplayName = NULL; + pWrapperTable->m_Function_SetDisplayName = NULL; + pWrapperTable->m_Function_AddInput = NULL; + pWrapperTable->m_Function_GetInputs = NULL; + pWrapperTable->m_Function_RemoveInput = NULL; + pWrapperTable->m_Function_AddOutput = NULL; + pWrapperTable->m_Function_GetOutputs = NULL; + pWrapperTable->m_Function_RemoveOutput = NULL; + pWrapperTable->m_Function_FindInput = NULL; + pWrapperTable->m_Function_FindOutput = NULL; + pWrapperTable->m_ImplicitFunction_GetIdentifier = NULL; + pWrapperTable->m_ImplicitFunction_SetIdentifier = NULL; + pWrapperTable->m_ImplicitFunction_AddNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSinNode = NULL; + pWrapperTable->m_ImplicitFunction_AddCosNode = NULL; + pWrapperTable->m_ImplicitFunction_AddTanNode = NULL; + pWrapperTable->m_ImplicitFunction_AddArcSinNode = NULL; + pWrapperTable->m_ImplicitFunction_AddArcCosNode = NULL; + pWrapperTable->m_ImplicitFunction_AddArcTan2Node = NULL; + pWrapperTable->m_ImplicitFunction_AddSinhNode = NULL; + pWrapperTable->m_ImplicitFunction_AddCoshNode = NULL; + pWrapperTable->m_ImplicitFunction_AddTanhNode = NULL; + pWrapperTable->m_ImplicitFunction_AddRoundNode = NULL; + pWrapperTable->m_ImplicitFunction_AddCeilNode = NULL; + pWrapperTable->m_ImplicitFunction_AddFloorNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSignNode = NULL; + pWrapperTable->m_ImplicitFunction_AddFractNode = NULL; + pWrapperTable->m_ImplicitFunction_AddAbsNode = NULL; + pWrapperTable->m_ImplicitFunction_AddExpNode = NULL; + pWrapperTable->m_ImplicitFunction_AddLogNode = NULL; + pWrapperTable->m_ImplicitFunction_AddLog2Node = NULL; + pWrapperTable->m_ImplicitFunction_AddLog10Node = NULL; + pWrapperTable->m_ImplicitFunction_AddLengthNode = NULL; + pWrapperTable->m_ImplicitFunction_AddTransposeNode = NULL; + pWrapperTable->m_ImplicitFunction_InverseNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSqrtNode = NULL; + pWrapperTable->m_ImplicitFunction_AddResourceIdNode = NULL; + pWrapperTable->m_ImplicitFunction_AddAdditionNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSubtractionNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMultiplicationNode = NULL; + pWrapperTable->m_ImplicitFunction_AddDivisionNode = NULL; + pWrapperTable->m_ImplicitFunction_AddDotNode = NULL; + pWrapperTable->m_ImplicitFunction_AddCrossNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMinNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMaxNode = NULL; + pWrapperTable->m_ImplicitFunction_AddFmodNode = NULL; + pWrapperTable->m_ImplicitFunction_AddPowNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSelectNode = NULL; + pWrapperTable->m_ImplicitFunction_AddClampNode = NULL; + pWrapperTable->m_ImplicitFunction_AddComposeVectorNode = NULL; + pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode = NULL; + pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode = NULL; + pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode = NULL; + pWrapperTable->m_ImplicitFunction_AddConstantNode = NULL; + pWrapperTable->m_ImplicitFunction_AddConstVecNode = NULL; + pWrapperTable->m_ImplicitFunction_AddConstMatNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMeshNode = NULL; + pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode = NULL; + pWrapperTable->m_ImplicitFunction_AddFunctionCallNode = NULL; + pWrapperTable->m_ImplicitFunction_GetNodes = NULL; + pWrapperTable->m_ImplicitFunction_RemoveNode = NULL; + pWrapperTable->m_ImplicitFunction_AddLink = NULL; + pWrapperTable->m_ImplicitFunction_AddLinkByNames = NULL; + pWrapperTable->m_ImplicitFunction_Clear = NULL; + pWrapperTable->m_ImplicitFunction_SortNodesTopologically = NULL; + pWrapperTable->m_FunctionFromImage3D_GetImage3D = NULL; + pWrapperTable->m_FunctionFromImage3D_SetImage3D = NULL; + pWrapperTable->m_FunctionFromImage3D_SetFilter = NULL; + pWrapperTable->m_FunctionFromImage3D_GetFilter = NULL; + pWrapperTable->m_FunctionFromImage3D_SetTileStyles = NULL; + pWrapperTable->m_FunctionFromImage3D_GetTileStyles = NULL; + pWrapperTable->m_FunctionFromImage3D_GetOffset = NULL; + pWrapperTable->m_FunctionFromImage3D_SetOffset = NULL; + pWrapperTable->m_FunctionFromImage3D_GetScale = NULL; + pWrapperTable->m_FunctionFromImage3D_SetScale = NULL; pWrapperTable->m_BuildItem_GetObjectResource = NULL; pWrapperTable->m_BuildItem_GetUUID = NULL; pWrapperTable->m_BuildItem_SetUUID = NULL; @@ -347,6 +578,7 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Model_GetComponentsObjectByID = NULL; pWrapperTable->m_Model_GetColorGroupByID = NULL; pWrapperTable->m_Model_GetSliceStackByID = NULL; + pWrapperTable->m_Model_GetLevelSetByID = NULL; pWrapperTable->m_Model_GetBuildUUID = NULL; pWrapperTable->m_Model_SetBuildUUID = NULL; pWrapperTable->m_Model_GetBuildItems = NULL; @@ -362,7 +594,9 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Model_GetCompositeMaterials = NULL; pWrapperTable->m_Model_GetMultiPropertyGroups = NULL; pWrapperTable->m_Model_GetSliceStacks = NULL; + pWrapperTable->m_Model_GetImage3Ds = NULL; pWrapperTable->m_Model_MergeToModel = NULL; + pWrapperTable->m_Model_MergeFromModel = NULL; pWrapperTable->m_Model_AddMeshObject = NULL; pWrapperTable->m_Model_AddComponentsObject = NULL; pWrapperTable->m_Model_AddSliceStack = NULL; @@ -372,6 +606,8 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Model_AddTexture2DGroup = NULL; pWrapperTable->m_Model_AddCompositeMaterials = NULL; pWrapperTable->m_Model_AddMultiPropertyGroup = NULL; + pWrapperTable->m_Model_AddImageStack = NULL; + pWrapperTable->m_Model_GetImageStackByID = NULL; pWrapperTable->m_Model_AddBuildItem = NULL; pWrapperTable->m_Model_RemoveBuildItem = NULL; pWrapperTable->m_Model_GetMetaDataGroup = NULL; @@ -388,6 +624,13 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Model_RemoveCustomContentType = NULL; pWrapperTable->m_Model_SetRandomNumberCallback = NULL; pWrapperTable->m_Model_GetKeyStore = NULL; + pWrapperTable->m_Model_GetFunctions = NULL; + pWrapperTable->m_Model_AddImplicitFunction = NULL; + pWrapperTable->m_Model_AddFunctionFromImage3D = NULL; + pWrapperTable->m_Model_AddVolumeData = NULL; + pWrapperTable->m_Model_AddLevelSet = NULL; + pWrapperTable->m_Model_GetLevelSets = NULL; + pWrapperTable->m_Model_RemoveResource = NULL; pWrapperTable->m_GetLibraryVersion = NULL; pWrapperTable->m_GetPrereleaseInformation = NULL; pWrapperTable->m_GetBuildInformation = NULL; @@ -893,6 +1136,33 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Image3DIterator_GetCurrentImage3D = (PLib3MFImage3DIterator_GetCurrentImage3DPtr) GetProcAddress(hLibrary, "lib3mf_image3diterator_getcurrentimage3d"); + #else // _WIN32 + pWrapperTable->m_Image3DIterator_GetCurrentImage3D = (PLib3MFImage3DIterator_GetCurrentImage3DPtr) dlsym(hLibrary, "lib3mf_image3diterator_getcurrentimage3d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3DIterator_GetCurrentImage3D == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionIterator_GetCurrentFunction = (PLib3MFFunctionIterator_GetCurrentFunctionPtr) GetProcAddress(hLibrary, "lib3mf_functioniterator_getcurrentfunction"); + #else // _WIN32 + pWrapperTable->m_FunctionIterator_GetCurrentFunction = (PLib3MFFunctionIterator_GetCurrentFunctionPtr) dlsym(hLibrary, "lib3mf_functioniterator_getcurrentfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionIterator_GetCurrentFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet = (PLib3MFLevelSetIterator_GetCurrentLevelSetPtr) GetProcAddress(hLibrary, "lib3mf_levelsetiterator_getcurrentlevelset"); + #else // _WIN32 + pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet = (PLib3MFLevelSetIterator_GetCurrentLevelSetPtr) dlsym(hLibrary, "lib3mf_levelsetiterator_getcurrentlevelset"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_MetaData_GetNameSpace = (PLib3MFMetaData_GetNameSpacePtr) GetProcAddress(hLibrary, "lib3mf_metadata_getnamespace"); #else // _WIN32 @@ -1118,6 +1388,15 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Object_IsComponentsObject == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Object_IsLevelSetObject = (PLib3MFObject_IsLevelSetObjectPtr) GetProcAddress(hLibrary, "lib3mf_object_islevelsetobject"); + #else // _WIN32 + pWrapperTable->m_Object_IsLevelSetObject = (PLib3MFObject_IsLevelSetObjectPtr) dlsym(hLibrary, "lib3mf_object_islevelsetobject"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_IsLevelSetObject == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Object_IsValid = (PLib3MFObject_IsValidPtr) GetProcAddress(hLibrary, "lib3mf_object_isvalid"); #else // _WIN32 @@ -1424,6 +1703,168 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_MeshObject_BeamLattice == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_MeshObject_GetVolumeData = (PLib3MFMeshObject_GetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getvolumedata"); + #else // _WIN32 + pWrapperTable->m_MeshObject_GetVolumeData = (PLib3MFMeshObject_GetVolumeDataPtr) dlsym(hLibrary, "lib3mf_meshobject_getvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_GetVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_SetVolumeData = (PLib3MFMeshObject_SetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_setvolumedata"); + #else // _WIN32 + pWrapperTable->m_MeshObject_SetVolumeData = (PLib3MFMeshObject_SetVolumeDataPtr) dlsym(hLibrary, "lib3mf_meshobject_setvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_SetVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetFunction = (PLib3MFLevelSet_GetFunctionPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getfunction"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetFunction = (PLib3MFLevelSet_GetFunctionPtr) dlsym(hLibrary, "lib3mf_levelset_getfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetFunction = (PLib3MFLevelSet_SetFunctionPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setfunction"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetFunction = (PLib3MFLevelSet_SetFunctionPtr) dlsym(hLibrary, "lib3mf_levelset_setfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetTransform = (PLib3MFLevelSet_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_levelset_gettransform"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetTransform = (PLib3MFLevelSet_GetTransformPtr) dlsym(hLibrary, "lib3mf_levelset_gettransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetTransform = (PLib3MFLevelSet_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_levelset_settransform"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetTransform = (PLib3MFLevelSet_SetTransformPtr) dlsym(hLibrary, "lib3mf_levelset_settransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetChannelName = (PLib3MFLevelSet_GetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_levelset_getchannelname"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetChannelName = (PLib3MFLevelSet_GetChannelNamePtr) dlsym(hLibrary, "lib3mf_levelset_getchannelname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetChannelName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetChannelName = (PLib3MFLevelSet_SetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_levelset_setchannelname"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetChannelName = (PLib3MFLevelSet_SetChannelNamePtr) dlsym(hLibrary, "lib3mf_levelset_setchannelname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetChannelName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetMinFeatureSize = (PLib3MFLevelSet_SetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_levelset_setminfeaturesize"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetMinFeatureSize = (PLib3MFLevelSet_SetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_levelset_setminfeaturesize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetMinFeatureSize == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetMinFeatureSize = (PLib3MFLevelSet_GetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_levelset_getminfeaturesize"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetMinFeatureSize = (PLib3MFLevelSet_GetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_levelset_getminfeaturesize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetMinFeatureSize == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetFallBackValue = (PLib3MFLevelSet_SetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_levelset_setfallbackvalue"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetFallBackValue = (PLib3MFLevelSet_SetFallBackValuePtr) dlsym(hLibrary, "lib3mf_levelset_setfallbackvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetFallBackValue == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetFallBackValue = (PLib3MFLevelSet_GetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_levelset_getfallbackvalue"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetFallBackValue = (PLib3MFLevelSet_GetFallBackValuePtr) dlsym(hLibrary, "lib3mf_levelset_getfallbackvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetFallBackValue == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetMeshBBoxOnly = (PLib3MFLevelSet_SetMeshBBoxOnlyPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setmeshbboxonly"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetMeshBBoxOnly = (PLib3MFLevelSet_SetMeshBBoxOnlyPtr) dlsym(hLibrary, "lib3mf_levelset_setmeshbboxonly"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetMeshBBoxOnly == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetMeshBBoxOnly = (PLib3MFLevelSet_GetMeshBBoxOnlyPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getmeshbboxonly"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetMeshBBoxOnly = (PLib3MFLevelSet_GetMeshBBoxOnlyPtr) dlsym(hLibrary, "lib3mf_levelset_getmeshbboxonly"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetMeshBBoxOnly == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetMesh = (PLib3MFLevelSet_SetMeshPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setmesh"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetMesh = (PLib3MFLevelSet_SetMeshPtr) dlsym(hLibrary, "lib3mf_levelset_setmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetMesh == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetMesh = (PLib3MFLevelSet_GetMeshPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getmesh"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetMesh = (PLib3MFLevelSet_GetMeshPtr) dlsym(hLibrary, "lib3mf_levelset_getmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetMesh == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetVolumeData = (PLib3MFLevelSet_GetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getvolumedata"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetVolumeData = (PLib3MFLevelSet_GetVolumeDataPtr) dlsym(hLibrary, "lib3mf_levelset_getvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetVolumeData = (PLib3MFLevelSet_SetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setvolumedata"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetVolumeData = (PLib3MFLevelSet_SetVolumeDataPtr) dlsym(hLibrary, "lib3mf_levelset_setvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_BeamLattice_GetMinLength = (PLib3MFBeamLattice_GetMinLengthPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getminlength"); #else // _WIN32 @@ -1632,678 +2073,2559 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresource"); + pWrapperTable->m_FunctionReference_GetFunctionResourceID = (PLib3MFFunctionReference_GetFunctionResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getfunctionresourceid"); #else // _WIN32 - pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) dlsym(hLibrary, "lib3mf_component_getobjectresource"); + pWrapperTable->m_FunctionReference_GetFunctionResourceID = (PLib3MFFunctionReference_GetFunctionResourceIDPtr) dlsym(hLibrary, "lib3mf_functionreference_getfunctionresourceid"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_GetObjectResource == NULL) + if (pWrapperTable->m_FunctionReference_GetFunctionResourceID == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresourceid"); + pWrapperTable->m_FunctionReference_SetFunctionResourceID = (PLib3MFFunctionReference_SetFunctionResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setfunctionresourceid"); #else // _WIN32 - pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) dlsym(hLibrary, "lib3mf_component_getobjectresourceid"); + pWrapperTable->m_FunctionReference_SetFunctionResourceID = (PLib3MFFunctionReference_SetFunctionResourceIDPtr) dlsym(hLibrary, "lib3mf_functionreference_setfunctionresourceid"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_GetObjectResourceID == NULL) + if (pWrapperTable->m_FunctionReference_SetFunctionResourceID == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getuuid"); + pWrapperTable->m_FunctionReference_GetTransform = (PLib3MFFunctionReference_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_gettransform"); #else // _WIN32 - pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) dlsym(hLibrary, "lib3mf_component_getuuid"); + pWrapperTable->m_FunctionReference_GetTransform = (PLib3MFFunctionReference_GetTransformPtr) dlsym(hLibrary, "lib3mf_functionreference_gettransform"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_GetUUID == NULL) + if (pWrapperTable->m_FunctionReference_GetTransform == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_setuuid"); + pWrapperTable->m_FunctionReference_SetTransform = (PLib3MFFunctionReference_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_settransform"); #else // _WIN32 - pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) dlsym(hLibrary, "lib3mf_component_setuuid"); + pWrapperTable->m_FunctionReference_SetTransform = (PLib3MFFunctionReference_SetTransformPtr) dlsym(hLibrary, "lib3mf_functionreference_settransform"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_SetUUID == NULL) + if (pWrapperTable->m_FunctionReference_SetTransform == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_hastransform"); + pWrapperTable->m_FunctionReference_GetChannelName = (PLib3MFFunctionReference_GetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getchannelname"); #else // _WIN32 - pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) dlsym(hLibrary, "lib3mf_component_hastransform"); + pWrapperTable->m_FunctionReference_GetChannelName = (PLib3MFFunctionReference_GetChannelNamePtr) dlsym(hLibrary, "lib3mf_functionreference_getchannelname"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_HasTransform == NULL) + if (pWrapperTable->m_FunctionReference_GetChannelName == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_gettransform"); + pWrapperTable->m_FunctionReference_SetChannelName = (PLib3MFFunctionReference_SetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setchannelname"); #else // _WIN32 - pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) dlsym(hLibrary, "lib3mf_component_gettransform"); + pWrapperTable->m_FunctionReference_SetChannelName = (PLib3MFFunctionReference_SetChannelNamePtr) dlsym(hLibrary, "lib3mf_functionreference_setchannelname"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_GetTransform == NULL) + if (pWrapperTable->m_FunctionReference_SetChannelName == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_settransform"); + pWrapperTable->m_FunctionReference_SetMinFeatureSize = (PLib3MFFunctionReference_SetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setminfeaturesize"); #else // _WIN32 - pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) dlsym(hLibrary, "lib3mf_component_settransform"); + pWrapperTable->m_FunctionReference_SetMinFeatureSize = (PLib3MFFunctionReference_SetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_functionreference_setminfeaturesize"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_SetTransform == NULL) + if (pWrapperTable->m_FunctionReference_SetMinFeatureSize == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_addcomponent"); + pWrapperTable->m_FunctionReference_GetMinFeatureSize = (PLib3MFFunctionReference_GetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getminfeaturesize"); #else // _WIN32 - pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_addcomponent"); + pWrapperTable->m_FunctionReference_GetMinFeatureSize = (PLib3MFFunctionReference_GetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_functionreference_getminfeaturesize"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ComponentsObject_AddComponent == NULL) + if (pWrapperTable->m_FunctionReference_GetMinFeatureSize == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponent"); + pWrapperTable->m_FunctionReference_SetFallBackValue = (PLib3MFFunctionReference_SetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setfallbackvalue"); #else // _WIN32 - pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponent"); + pWrapperTable->m_FunctionReference_SetFallBackValue = (PLib3MFFunctionReference_SetFallBackValuePtr) dlsym(hLibrary, "lib3mf_functionreference_setfallbackvalue"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ComponentsObject_GetComponent == NULL) + if (pWrapperTable->m_FunctionReference_SetFallBackValue == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + pWrapperTable->m_FunctionReference_GetFallBackValue = (PLib3MFFunctionReference_GetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getfallbackvalue"); #else // _WIN32 - pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + pWrapperTable->m_FunctionReference_GetFallBackValue = (PLib3MFFunctionReference_GetFallBackValuePtr) dlsym(hLibrary, "lib3mf_functionreference_getfallbackvalue"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ComponentsObject_GetComponentCount == NULL) + if (pWrapperTable->m_FunctionReference_GetFallBackValue == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_setname"); + pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup = (PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_getbasematerialgroup"); #else // _WIN32 - pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) dlsym(hLibrary, "lib3mf_beamset_setname"); + pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup = (PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_getbasematerialgroup"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetName == NULL) + if (pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_getname"); + pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup = (PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_setbasematerialgroup"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) dlsym(hLibrary, "lib3mf_beamset_getname"); + pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup = (PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_setbasematerialgroup"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetName == NULL) + if (pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setidentifier"); + pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount = (PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_getmaterialmappingcount"); #else // _WIN32 - pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_setidentifier"); + pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount = (PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_getmaterialmappingcount"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetIdentifier == NULL) + if (pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getidentifier"); + pWrapperTable->m_VolumeDataComposite_GetMaterialMapping = (PLib3MFVolumeDataComposite_GetMaterialMappingPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_getmaterialmapping"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_getidentifier"); + pWrapperTable->m_VolumeDataComposite_GetMaterialMapping = (PLib3MFVolumeDataComposite_GetMaterialMappingPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_getmaterialmapping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_GetMaterialMapping == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataComposite_AddMaterialMapping = (PLib3MFVolumeDataComposite_AddMaterialMappingPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_addmaterialmapping"); + #else // _WIN32 + pWrapperTable->m_VolumeDataComposite_AddMaterialMapping = (PLib3MFVolumeDataComposite_AddMaterialMappingPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_addmaterialmapping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_AddMaterialMapping == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping = (PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_removematerialmapping"); + #else // _WIN32 + pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping = (PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_removematerialmapping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataProperty_GetName = (PLib3MFVolumeDataProperty_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_volumedataproperty_getname"); + #else // _WIN32 + pWrapperTable->m_VolumeDataProperty_GetName = (PLib3MFVolumeDataProperty_GetNamePtr) dlsym(hLibrary, "lib3mf_volumedataproperty_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataProperty_GetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataProperty_SetIsRequired = (PLib3MFVolumeDataProperty_SetIsRequiredPtr) GetProcAddress(hLibrary, "lib3mf_volumedataproperty_setisrequired"); + #else // _WIN32 + pWrapperTable->m_VolumeDataProperty_SetIsRequired = (PLib3MFVolumeDataProperty_SetIsRequiredPtr) dlsym(hLibrary, "lib3mf_volumedataproperty_setisrequired"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataProperty_SetIsRequired == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataProperty_IsRequired = (PLib3MFVolumeDataProperty_IsRequiredPtr) GetProcAddress(hLibrary, "lib3mf_volumedataproperty_isrequired"); + #else // _WIN32 + pWrapperTable->m_VolumeDataProperty_IsRequired = (PLib3MFVolumeDataProperty_IsRequiredPtr) dlsym(hLibrary, "lib3mf_volumedataproperty_isrequired"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataProperty_IsRequired == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetComposite = (PLib3MFVolumeData_GetCompositePtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getcomposite"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetComposite = (PLib3MFVolumeData_GetCompositePtr) dlsym(hLibrary, "lib3mf_volumedata_getcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_CreateNewComposite = (PLib3MFVolumeData_CreateNewCompositePtr) GetProcAddress(hLibrary, "lib3mf_volumedata_createnewcomposite"); + #else // _WIN32 + pWrapperTable->m_VolumeData_CreateNewComposite = (PLib3MFVolumeData_CreateNewCompositePtr) dlsym(hLibrary, "lib3mf_volumedata_createnewcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_CreateNewComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_RemoveComposite = (PLib3MFVolumeData_RemoveCompositePtr) GetProcAddress(hLibrary, "lib3mf_volumedata_removecomposite"); + #else // _WIN32 + pWrapperTable->m_VolumeData_RemoveComposite = (PLib3MFVolumeData_RemoveCompositePtr) dlsym(hLibrary, "lib3mf_volumedata_removecomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_RemoveComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetColor = (PLib3MFVolumeData_GetColorPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getcolor"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetColor = (PLib3MFVolumeData_GetColorPtr) dlsym(hLibrary, "lib3mf_volumedata_getcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_CreateNewColor = (PLib3MFVolumeData_CreateNewColorPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_createnewcolor"); + #else // _WIN32 + pWrapperTable->m_VolumeData_CreateNewColor = (PLib3MFVolumeData_CreateNewColorPtr) dlsym(hLibrary, "lib3mf_volumedata_createnewcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_CreateNewColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_RemoveColor = (PLib3MFVolumeData_RemoveColorPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_removecolor"); + #else // _WIN32 + pWrapperTable->m_VolumeData_RemoveColor = (PLib3MFVolumeData_RemoveColorPtr) dlsym(hLibrary, "lib3mf_volumedata_removecolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_RemoveColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetPropertyCount = (PLib3MFVolumeData_GetPropertyCountPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getpropertycount"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetPropertyCount = (PLib3MFVolumeData_GetPropertyCountPtr) dlsym(hLibrary, "lib3mf_volumedata_getpropertycount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetPropertyCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetProperty = (PLib3MFVolumeData_GetPropertyPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getproperty"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetProperty = (PLib3MFVolumeData_GetPropertyPtr) dlsym(hLibrary, "lib3mf_volumedata_getproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_AddPropertyFromFunction = (PLib3MFVolumeData_AddPropertyFromFunctionPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_addpropertyfromfunction"); + #else // _WIN32 + pWrapperTable->m_VolumeData_AddPropertyFromFunction = (PLib3MFVolumeData_AddPropertyFromFunctionPtr) dlsym(hLibrary, "lib3mf_volumedata_addpropertyfromfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_AddPropertyFromFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_RemoveProperty = (PLib3MFVolumeData_RemovePropertyPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_removeproperty"); + #else // _WIN32 + pWrapperTable->m_VolumeData_RemoveProperty = (PLib3MFVolumeData_RemovePropertyPtr) dlsym(hLibrary, "lib3mf_volumedata_removeproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_RemoveProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresource"); + #else // _WIN32 + pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) dlsym(hLibrary, "lib3mf_component_getobjectresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetObjectResource == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresourceid"); + #else // _WIN32 + pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) dlsym(hLibrary, "lib3mf_component_getobjectresourceid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetObjectResourceID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getuuid"); + #else // _WIN32 + pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) dlsym(hLibrary, "lib3mf_component_getuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetUUID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_setuuid"); + #else // _WIN32 + pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) dlsym(hLibrary, "lib3mf_component_setuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_SetUUID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_hastransform"); + #else // _WIN32 + pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) dlsym(hLibrary, "lib3mf_component_hastransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_HasTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_gettransform"); + #else // _WIN32 + pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) dlsym(hLibrary, "lib3mf_component_gettransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_settransform"); + #else // _WIN32 + pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) dlsym(hLibrary, "lib3mf_component_settransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_SetTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_addcomponent"); + #else // _WIN32 + pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_addcomponent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComponentsObject_AddComponent == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponent"); + #else // _WIN32 + pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComponentsObject_GetComponent == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + #else // _WIN32 + pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComponentsObject_GetComponentCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_setname"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) dlsym(hLibrary, "lib3mf_beamset_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_getname"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) dlsym(hLibrary, "lib3mf_beamset_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setidentifier"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getidentifier"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferencecount"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getreferencecount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetReferenceCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetReferences == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetReferences == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferencecount"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferencecount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetBallReferenceCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setballreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setballreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetBallReferences == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetBallReferences == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getcount"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_AddMaterial == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_removematerial"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_removematerial"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_RemoveMaterial == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getname"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setname"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_SetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_SetDisplayColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetDisplayColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcount"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_addcolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_addcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_AddColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_removecolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_removecolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_RemoveColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_setcolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_setcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_SetColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_GetColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getcount"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_AddTex2Coord == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetTex2Coord == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_RemoveTex2Coord == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetTexture2D == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcount"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) dlsym(hLibrary, "lib3mf_compositematerials_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_addcomposite"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_addcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_AddComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_removecomposite"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_removecomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_RemoveComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcomposite"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_getcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getcount"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_AddMultiProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_SetMultiProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetMultiProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetLayerCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addlayer"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addlayer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_AddLayer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayer"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetLayer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removelayer"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removelayer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_RemoveLayer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Image3D_GetName = (PLib3MFImage3D_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_image3d_getname"); + #else // _WIN32 + pWrapperTable->m_Image3D_GetName = (PLib3MFImage3D_GetNamePtr) dlsym(hLibrary, "lib3mf_image3d_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3D_GetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Image3D_SetName = (PLib3MFImage3D_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_image3d_setname"); + #else // _WIN32 + pWrapperTable->m_Image3D_SetName = (PLib3MFImage3D_SetNamePtr) dlsym(hLibrary, "lib3mf_image3d_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3D_SetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Image3D_IsImageStack = (PLib3MFImage3D_IsImageStackPtr) GetProcAddress(hLibrary, "lib3mf_image3d_isimagestack"); + #else // _WIN32 + pWrapperTable->m_Image3D_IsImageStack = (PLib3MFImage3D_IsImageStackPtr) dlsym(hLibrary, "lib3mf_image3d_isimagestack"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3D_IsImageStack == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetRowCount = (PLib3MFImageStack_GetRowCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getrowcount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetRowCount = (PLib3MFImageStack_GetRowCountPtr) dlsym(hLibrary, "lib3mf_imagestack_getrowcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetRowCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_SetRowCount = (PLib3MFImageStack_SetRowCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_setrowcount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_SetRowCount = (PLib3MFImageStack_SetRowCountPtr) dlsym(hLibrary, "lib3mf_imagestack_setrowcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_SetRowCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetColumnCount = (PLib3MFImageStack_GetColumnCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getcolumncount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetColumnCount = (PLib3MFImageStack_GetColumnCountPtr) dlsym(hLibrary, "lib3mf_imagestack_getcolumncount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetColumnCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_SetColumnCount = (PLib3MFImageStack_SetColumnCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_setcolumncount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_SetColumnCount = (PLib3MFImageStack_SetColumnCountPtr) dlsym(hLibrary, "lib3mf_imagestack_setcolumncount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_SetColumnCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetSheetCount = (PLib3MFImageStack_GetSheetCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getsheetcount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetSheetCount = (PLib3MFImageStack_GetSheetCountPtr) dlsym(hLibrary, "lib3mf_imagestack_getsheetcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetSheetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetSheet = (PLib3MFImageStack_GetSheetPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getsheet"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetSheet = (PLib3MFImageStack_GetSheetPtr) dlsym(hLibrary, "lib3mf_imagestack_getsheet"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetSheet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_SetSheet = (PLib3MFImageStack_SetSheetPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_setsheet"); + #else // _WIN32 + pWrapperTable->m_ImageStack_SetSheet = (PLib3MFImageStack_SetSheetPtr) dlsym(hLibrary, "lib3mf_imagestack_setsheet"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_SetSheet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_CreateEmptySheet = (PLib3MFImageStack_CreateEmptySheetPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_createemptysheet"); + #else // _WIN32 + pWrapperTable->m_ImageStack_CreateEmptySheet = (PLib3MFImageStack_CreateEmptySheetPtr) dlsym(hLibrary, "lib3mf_imagestack_createemptysheet"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_CreateEmptySheet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromBuffer = (PLib3MFImageStack_CreateSheetFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_createsheetfrombuffer"); + #else // _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromBuffer = (PLib3MFImageStack_CreateSheetFromBufferPtr) dlsym(hLibrary, "lib3mf_imagestack_createsheetfrombuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_CreateSheetFromBuffer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromFile = (PLib3MFImageStack_CreateSheetFromFilePtr) GetProcAddress(hLibrary, "lib3mf_imagestack_createsheetfromfile"); + #else // _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromFile = (PLib3MFImageStack_CreateSheetFromFilePtr) dlsym(hLibrary, "lib3mf_imagestack_createsheetfromfile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_CreateSheetFromFile == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_getpath"); + #else // _WIN32 + pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) dlsym(hLibrary, "lib3mf_attachment_getpath"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_GetPath == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_setpath"); + #else // _WIN32 + pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) dlsym(hLibrary, "lib3mf_attachment_setpath"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_SetPath == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) GetProcAddress(hLibrary, "lib3mf_attachment_packagepart"); + #else // _WIN32 + pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) dlsym(hLibrary, "lib3mf_attachment_packagepart"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_PackagePart == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getrelationshiptype"); + #else // _WIN32 + pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_getrelationshiptype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_GetRelationShipType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_setrelationshiptype"); + #else // _WIN32 + pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_setrelationshiptype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_SetRelationShipType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetofile"); + #else // _WIN32 + pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) dlsym(hLibrary, "lib3mf_attachment_writetofile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_WriteToFile == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromfile"); + #else // _WIN32 + pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) dlsym(hLibrary, "lib3mf_attachment_readfromfile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_ReadFromFile == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromcallback"); + #else // _WIN32 + pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) dlsym(hLibrary, "lib3mf_attachment_readfromcallback"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_ReadFromCallback == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getstreamsize"); + #else // _WIN32 + pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) dlsym(hLibrary, "lib3mf_attachment_getstreamsize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_GetStreamSize == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetobuffer"); + #else // _WIN32 + pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) dlsym(hLibrary, "lib3mf_attachment_writetobuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_WriteToBuffer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfrombuffer"); + #else // _WIN32 + pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) dlsym(hLibrary, "lib3mf_attachment_readfrombuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_ReadFromBuffer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getattachment"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_getattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetAttachment == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setattachment"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_setattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetAttachment == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getcontenttype"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_getcontenttype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetContentType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setcontenttype"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_setcontenttype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetContentType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetTileStyleUV == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_settilestyleuv"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_settilestyleuv"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetTileStyleUV == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getfilter"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_getfilter"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetFilter == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setfilter"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_setfilter"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetFilter == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetIdentifier = (PLib3MFImplicitPort_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitport_getidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetIdentifier = (PLib3MFImplicitPort_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitport_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetIdentifier = (PLib3MFImplicitPort_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitport_setidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetIdentifier = (PLib3MFImplicitPort_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitport_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetDisplayName = (PLib3MFImplicitPort_GetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_getdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetDisplayName = (PLib3MFImplicitPort_GetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitport_getdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetDisplayName = (PLib3MFImplicitPort_SetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_setdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetDisplayName = (PLib3MFImplicitPort_SetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitport_setdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetType = (PLib3MFImplicitPort_SetTypePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_settype"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetType = (PLib3MFImplicitPort_SetTypePtr) dlsym(hLibrary, "lib3mf_implicitport_settype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetType = (PLib3MFImplicitPort_GetTypePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_gettype"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetType = (PLib3MFImplicitPort_GetTypePtr) dlsym(hLibrary, "lib3mf_implicitport_gettype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetReference = (PLib3MFImplicitPort_GetReferencePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_getreference"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetReference = (PLib3MFImplicitPort_GetReferencePtr) dlsym(hLibrary, "lib3mf_implicitport_getreference"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetReference == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetReference = (PLib3MFImplicitPort_SetReferencePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_setreference"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetReference = (PLib3MFImplicitPort_SetReferencePtr) dlsym(hLibrary, "lib3mf_implicitport_setreference"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetReference == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Iterator_MoveNext = (PLib3MFIterator_MoveNextPtr) GetProcAddress(hLibrary, "lib3mf_iterator_movenext"); + #else // _WIN32 + pWrapperTable->m_Iterator_MoveNext = (PLib3MFIterator_MoveNextPtr) dlsym(hLibrary, "lib3mf_iterator_movenext"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Iterator_MoveNext == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Iterator_MovePrevious = (PLib3MFIterator_MovePreviousPtr) GetProcAddress(hLibrary, "lib3mf_iterator_moveprevious"); + #else // _WIN32 + pWrapperTable->m_Iterator_MovePrevious = (PLib3MFIterator_MovePreviousPtr) dlsym(hLibrary, "lib3mf_iterator_moveprevious"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Iterator_MovePrevious == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Iterator_Count = (PLib3MFIterator_CountPtr) GetProcAddress(hLibrary, "lib3mf_iterator_count"); + #else // _WIN32 + pWrapperTable->m_Iterator_Count = (PLib3MFIterator_CountPtr) dlsym(hLibrary, "lib3mf_iterator_count"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Iterator_Count == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPortIterator_GetCurrent = (PLib3MFImplicitPortIterator_GetCurrentPtr) GetProcAddress(hLibrary, "lib3mf_implicitportiterator_getcurrent"); + #else // _WIN32 + pWrapperTable->m_ImplicitPortIterator_GetCurrent = (PLib3MFImplicitPortIterator_GetCurrentPtr) dlsym(hLibrary, "lib3mf_implicitportiterator_getcurrent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPortIterator_GetCurrent == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetIdentifier = (PLib3MFImplicitNode_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetIdentifier = (PLib3MFImplicitNode_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitnode_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_SetIdentifier = (PLib3MFImplicitNode_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_setidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_SetIdentifier = (PLib3MFImplicitNode_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitnode_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_SetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetDisplayName = (PLib3MFImplicitNode_GetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetDisplayName = (PLib3MFImplicitNode_GetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitnode_getdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_SetDisplayName = (PLib3MFImplicitNode_SetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_setdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_SetDisplayName = (PLib3MFImplicitNode_SetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitnode_setdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_SetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetTag = (PLib3MFImplicitNode_GetTagPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_gettag"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetTag = (PLib3MFImplicitNode_GetTagPtr) dlsym(hLibrary, "lib3mf_implicitnode_gettag"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetTag == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_SetTag = (PLib3MFImplicitNode_SetTagPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_settag"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_SetTag = (PLib3MFImplicitNode_SetTagPtr) dlsym(hLibrary, "lib3mf_implicitnode_settag"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_SetTag == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetNodeType = (PLib3MFImplicitNode_GetNodeTypePtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getnodetype"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetNodeType = (PLib3MFImplicitNode_GetNodeTypePtr) dlsym(hLibrary, "lib3mf_implicitnode_getnodetype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetNodeType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_AddInput = (PLib3MFImplicitNode_AddInputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_addinput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_AddInput = (PLib3MFImplicitNode_AddInputPtr) dlsym(hLibrary, "lib3mf_implicitnode_addinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_AddInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetInputs = (PLib3MFImplicitNode_GetInputsPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getinputs"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetInputs = (PLib3MFImplicitNode_GetInputsPtr) dlsym(hLibrary, "lib3mf_implicitnode_getinputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetInputs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_AddOutput = (PLib3MFImplicitNode_AddOutputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_addoutput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_AddOutput = (PLib3MFImplicitNode_AddOutputPtr) dlsym(hLibrary, "lib3mf_implicitnode_addoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_AddOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetOutputs = (PLib3MFImplicitNode_GetOutputsPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getoutputs"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetOutputs = (PLib3MFImplicitNode_GetOutputsPtr) dlsym(hLibrary, "lib3mf_implicitnode_getoutputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetOutputs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_FindInput = (PLib3MFImplicitNode_FindInputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_findinput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_FindInput = (PLib3MFImplicitNode_FindInputPtr) dlsym(hLibrary, "lib3mf_implicitnode_findinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_FindInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_FindOutput = (PLib3MFImplicitNode_FindOutputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_findoutput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_FindOutput = (PLib3MFImplicitNode_FindOutputPtr) dlsym(hLibrary, "lib3mf_implicitnode_findoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_FindOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_AreTypesValid = (PLib3MFImplicitNode_AreTypesValidPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_aretypesvalid"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_AreTypesValid = (PLib3MFImplicitNode_AreTypesValidPtr) dlsym(hLibrary, "lib3mf_implicitnode_aretypesvalid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_AreTypesValid == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_OneInputNode_GetInputA = (PLib3MFOneInputNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_oneinputnode_getinputa"); + #else // _WIN32 + pWrapperTable->m_OneInputNode_GetInputA = (PLib3MFOneInputNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_oneinputnode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_OneInputNode_GetInputA == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_OneInputNode_GetOutputResult = (PLib3MFOneInputNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_oneinputnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_OneInputNode_GetOutputResult = (PLib3MFOneInputNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_oneinputnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_OneInputNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIdNode_SetResource = (PLib3MFResourceIdNode_SetResourcePtr) GetProcAddress(hLibrary, "lib3mf_resourceidnode_setresource"); + #else // _WIN32 + pWrapperTable->m_ResourceIdNode_SetResource = (PLib3MFResourceIdNode_SetResourcePtr) dlsym(hLibrary, "lib3mf_resourceidnode_setresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIdNode_SetResource == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIdNode_GetResource = (PLib3MFResourceIdNode_GetResourcePtr) GetProcAddress(hLibrary, "lib3mf_resourceidnode_getresource"); + #else // _WIN32 + pWrapperTable->m_ResourceIdNode_GetResource = (PLib3MFResourceIdNode_GetResourcePtr) dlsym(hLibrary, "lib3mf_resourceidnode_getresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIdNode_GetResource == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIdNode_GetOutputValue = (PLib3MFResourceIdNode_GetOutputValuePtr) GetProcAddress(hLibrary, "lib3mf_resourceidnode_getoutputvalue"); + #else // _WIN32 + pWrapperTable->m_ResourceIdNode_GetOutputValue = (PLib3MFResourceIdNode_GetOutputValuePtr) dlsym(hLibrary, "lib3mf_resourceidnode_getoutputvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIdNode_GetOutputValue == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_TwoInputNode_GetInputB = (PLib3MFTwoInputNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_twoinputnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_TwoInputNode_GetInputB = (PLib3MFTwoInputNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_twoinputnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_TwoInputNode_GetInputB == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SelectNode_GetInputB = (PLib3MFSelectNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_selectnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_SelectNode_GetInputB = (PLib3MFSelectNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_selectnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SelectNode_GetInputB == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SelectNode_GetInputC = (PLib3MFSelectNode_GetInputCPtr) GetProcAddress(hLibrary, "lib3mf_selectnode_getinputc"); + #else // _WIN32 + pWrapperTable->m_SelectNode_GetInputC = (PLib3MFSelectNode_GetInputCPtr) dlsym(hLibrary, "lib3mf_selectnode_getinputc"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SelectNode_GetInputC == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SelectNode_GetInputD = (PLib3MFSelectNode_GetInputDPtr) GetProcAddress(hLibrary, "lib3mf_selectnode_getinputd"); + #else // _WIN32 + pWrapperTable->m_SelectNode_GetInputD = (PLib3MFSelectNode_GetInputDPtr) dlsym(hLibrary, "lib3mf_selectnode_getinputd"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SelectNode_GetInputD == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ClampNode_GetInputMin = (PLib3MFClampNode_GetInputMinPtr) GetProcAddress(hLibrary, "lib3mf_clampnode_getinputmin"); + #else // _WIN32 + pWrapperTable->m_ClampNode_GetInputMin = (PLib3MFClampNode_GetInputMinPtr) dlsym(hLibrary, "lib3mf_clampnode_getinputmin"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ClampNode_GetInputMin == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ClampNode_GetInputMax = (PLib3MFClampNode_GetInputMaxPtr) GetProcAddress(hLibrary, "lib3mf_clampnode_getinputmax"); + #else // _WIN32 + pWrapperTable->m_ClampNode_GetInputMax = (PLib3MFClampNode_GetInputMaxPtr) dlsym(hLibrary, "lib3mf_clampnode_getinputmax"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ClampNode_GetInputMax == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputX = (PLib3MFComposeVectorNode_GetInputXPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getinputx"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputX = (PLib3MFComposeVectorNode_GetInputXPtr) dlsym(hLibrary, "lib3mf_composevectornode_getinputx"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetInputX == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputY = (PLib3MFComposeVectorNode_GetInputYPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getinputy"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputY = (PLib3MFComposeVectorNode_GetInputYPtr) dlsym(hLibrary, "lib3mf_composevectornode_getinputy"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetInputY == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputZ = (PLib3MFComposeVectorNode_GetInputZPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getinputz"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputZ = (PLib3MFComposeVectorNode_GetInputZPtr) dlsym(hLibrary, "lib3mf_composevectornode_getinputz"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetInputZ == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetOutputResult = (PLib3MFComposeVectorNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetOutputResult = (PLib3MFComposeVectorNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_composevectornode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetInputA = (PLib3MFDecomposeVectorNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getinputa"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetInputA = (PLib3MFDecomposeVectorNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetInputA == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputX = (PLib3MFDecomposeVectorNode_GetOutputXPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getoutputx"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputX = (PLib3MFDecomposeVectorNode_GetOutputXPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getoutputx"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetOutputX == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputY = (PLib3MFDecomposeVectorNode_GetOutputYPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getoutputy"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputY = (PLib3MFDecomposeVectorNode_GetOutputYPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getoutputy"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetOutputY == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputZ = (PLib3MFDecomposeVectorNode_GetOutputZPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getoutputz"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputZ = (PLib3MFDecomposeVectorNode_GetOutputZPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getoutputz"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetOutputZ == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM00 = (PLib3MFComposeMatrixNode_GetInputM00Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm00"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM00 = (PLib3MFComposeMatrixNode_GetInputM00Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm00"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM00 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM01 = (PLib3MFComposeMatrixNode_GetInputM01Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm01"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM01 = (PLib3MFComposeMatrixNode_GetInputM01Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm01"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM01 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM02 = (PLib3MFComposeMatrixNode_GetInputM02Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm02"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM02 = (PLib3MFComposeMatrixNode_GetInputM02Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm02"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM02 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM03 = (PLib3MFComposeMatrixNode_GetInputM03Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm03"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM03 = (PLib3MFComposeMatrixNode_GetInputM03Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm03"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM03 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM10 = (PLib3MFComposeMatrixNode_GetInputM10Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm10"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM10 = (PLib3MFComposeMatrixNode_GetInputM10Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm10"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM10 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM11 = (PLib3MFComposeMatrixNode_GetInputM11Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm11"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM11 = (PLib3MFComposeMatrixNode_GetInputM11Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm11"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM11 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM12 = (PLib3MFComposeMatrixNode_GetInputM12Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm12"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM12 = (PLib3MFComposeMatrixNode_GetInputM12Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm12"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM12 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM13 = (PLib3MFComposeMatrixNode_GetInputM13Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm13"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM13 = (PLib3MFComposeMatrixNode_GetInputM13Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm13"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM13 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM20 = (PLib3MFComposeMatrixNode_GetInputM20Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm20"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM20 = (PLib3MFComposeMatrixNode_GetInputM20Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm20"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM20 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM21 = (PLib3MFComposeMatrixNode_GetInputM21Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm21"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM21 = (PLib3MFComposeMatrixNode_GetInputM21Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm21"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM21 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM22 = (PLib3MFComposeMatrixNode_GetInputM22Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm22"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM22 = (PLib3MFComposeMatrixNode_GetInputM22Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm22"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM22 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM23 = (PLib3MFComposeMatrixNode_GetInputM23Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm23"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM23 = (PLib3MFComposeMatrixNode_GetInputM23Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm23"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM23 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM30 = (PLib3MFComposeMatrixNode_GetInputM30Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm30"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM30 = (PLib3MFComposeMatrixNode_GetInputM30Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm30"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM30 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM31 = (PLib3MFComposeMatrixNode_GetInputM31Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm31"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM31 = (PLib3MFComposeMatrixNode_GetInputM31Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm31"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM31 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM32 = (PLib3MFComposeMatrixNode_GetInputM32Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm32"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM32 = (PLib3MFComposeMatrixNode_GetInputM32Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm32"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM32 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM33 = (PLib3MFComposeMatrixNode_GetInputM33Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm33"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM33 = (PLib3MFComposeMatrixNode_GetInputM33Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm33"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM33 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetOutputResult = (PLib3MFComposeMatrixNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetOutputResult = (PLib3MFComposeMatrixNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_composematrixnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputA = (PLib3MFMatrixFromRowsNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputa"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputA = (PLib3MFMatrixFromRowsNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputA == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputB = (PLib3MFMatrixFromRowsNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputB = (PLib3MFMatrixFromRowsNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputB == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputC = (PLib3MFMatrixFromRowsNode_GetInputCPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputc"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputC = (PLib3MFMatrixFromRowsNode_GetInputCPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputc"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputC == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputD = (PLib3MFMatrixFromRowsNode_GetInputDPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputd"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputD = (PLib3MFMatrixFromRowsNode_GetInputDPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputd"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputD == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetOutputResult = (PLib3MFMatrixFromRowsNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetOutputResult = (PLib3MFMatrixFromRowsNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputA = (PLib3MFMatrixFromColumnsNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputa"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputA = (PLib3MFMatrixFromColumnsNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputA == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputB = (PLib3MFMatrixFromColumnsNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputB = (PLib3MFMatrixFromColumnsNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputB == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputC = (PLib3MFMatrixFromColumnsNode_GetInputCPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputc"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputC = (PLib3MFMatrixFromColumnsNode_GetInputCPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputc"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputC == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputD = (PLib3MFMatrixFromColumnsNode_GetInputDPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputd"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputD = (PLib3MFMatrixFromColumnsNode_GetInputDPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputd"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputD == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult = (PLib3MFMatrixFromColumnsNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult = (PLib3MFMatrixFromColumnsNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstantNode_SetConstant = (PLib3MFConstantNode_SetConstantPtr) GetProcAddress(hLibrary, "lib3mf_constantnode_setconstant"); + #else // _WIN32 + pWrapperTable->m_ConstantNode_SetConstant = (PLib3MFConstantNode_SetConstantPtr) dlsym(hLibrary, "lib3mf_constantnode_setconstant"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstantNode_SetConstant == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstantNode_GetConstant = (PLib3MFConstantNode_GetConstantPtr) GetProcAddress(hLibrary, "lib3mf_constantnode_getconstant"); + #else // _WIN32 + pWrapperTable->m_ConstantNode_GetConstant = (PLib3MFConstantNode_GetConstantPtr) dlsym(hLibrary, "lib3mf_constantnode_getconstant"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstantNode_GetConstant == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstantNode_GetOutputValue = (PLib3MFConstantNode_GetOutputValuePtr) GetProcAddress(hLibrary, "lib3mf_constantnode_getoutputvalue"); + #else // _WIN32 + pWrapperTable->m_ConstantNode_GetOutputValue = (PLib3MFConstantNode_GetOutputValuePtr) dlsym(hLibrary, "lib3mf_constantnode_getoutputvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstantNode_GetOutputValue == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstVecNode_SetVector = (PLib3MFConstVecNode_SetVectorPtr) GetProcAddress(hLibrary, "lib3mf_constvecnode_setvector"); + #else // _WIN32 + pWrapperTable->m_ConstVecNode_SetVector = (PLib3MFConstVecNode_SetVectorPtr) dlsym(hLibrary, "lib3mf_constvecnode_setvector"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstVecNode_SetVector == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstVecNode_GetVector = (PLib3MFConstVecNode_GetVectorPtr) GetProcAddress(hLibrary, "lib3mf_constvecnode_getvector"); + #else // _WIN32 + pWrapperTable->m_ConstVecNode_GetVector = (PLib3MFConstVecNode_GetVectorPtr) dlsym(hLibrary, "lib3mf_constvecnode_getvector"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstVecNode_GetVector == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstVecNode_GetOutputVector = (PLib3MFConstVecNode_GetOutputVectorPtr) GetProcAddress(hLibrary, "lib3mf_constvecnode_getoutputvector"); + #else // _WIN32 + pWrapperTable->m_ConstVecNode_GetOutputVector = (PLib3MFConstVecNode_GetOutputVectorPtr) dlsym(hLibrary, "lib3mf_constvecnode_getoutputvector"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstVecNode_GetOutputVector == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstMatNode_SetMatrix = (PLib3MFConstMatNode_SetMatrixPtr) GetProcAddress(hLibrary, "lib3mf_constmatnode_setmatrix"); + #else // _WIN32 + pWrapperTable->m_ConstMatNode_SetMatrix = (PLib3MFConstMatNode_SetMatrixPtr) dlsym(hLibrary, "lib3mf_constmatnode_setmatrix"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstMatNode_SetMatrix == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstMatNode_GetMatrix = (PLib3MFConstMatNode_GetMatrixPtr) GetProcAddress(hLibrary, "lib3mf_constmatnode_getmatrix"); + #else // _WIN32 + pWrapperTable->m_ConstMatNode_GetMatrix = (PLib3MFConstMatNode_GetMatrixPtr) dlsym(hLibrary, "lib3mf_constmatnode_getmatrix"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstMatNode_GetMatrix == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstMatNode_GetOutputMatrix = (PLib3MFConstMatNode_GetOutputMatrixPtr) GetProcAddress(hLibrary, "lib3mf_constmatnode_getoutputmatrix"); + #else // _WIN32 + pWrapperTable->m_ConstMatNode_GetOutputMatrix = (PLib3MFConstMatNode_GetOutputMatrixPtr) dlsym(hLibrary, "lib3mf_constmatnode_getoutputmatrix"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstMatNode_GetOutputMatrix == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshNode_GetInputMesh = (PLib3MFMeshNode_GetInputMeshPtr) GetProcAddress(hLibrary, "lib3mf_meshnode_getinputmesh"); + #else // _WIN32 + pWrapperTable->m_MeshNode_GetInputMesh = (PLib3MFMeshNode_GetInputMeshPtr) dlsym(hLibrary, "lib3mf_meshnode_getinputmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshNode_GetInputMesh == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshNode_GetInputPos = (PLib3MFMeshNode_GetInputPosPtr) GetProcAddress(hLibrary, "lib3mf_meshnode_getinputpos"); + #else // _WIN32 + pWrapperTable->m_MeshNode_GetInputPos = (PLib3MFMeshNode_GetInputPosPtr) dlsym(hLibrary, "lib3mf_meshnode_getinputpos"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshNode_GetInputPos == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshNode_GetOutputDistance = (PLib3MFMeshNode_GetOutputDistancePtr) GetProcAddress(hLibrary, "lib3mf_meshnode_getoutputdistance"); + #else // _WIN32 + pWrapperTable->m_MeshNode_GetOutputDistance = (PLib3MFMeshNode_GetOutputDistancePtr) dlsym(hLibrary, "lib3mf_meshnode_getoutputdistance"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshNode_GetOutputDistance == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputMesh = (PLib3MFUnsignedMeshNode_GetInputMeshPtr) GetProcAddress(hLibrary, "lib3mf_unsignedmeshnode_getinputmesh"); + #else // _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputMesh = (PLib3MFUnsignedMeshNode_GetInputMeshPtr) dlsym(hLibrary, "lib3mf_unsignedmeshnode_getinputmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_UnsignedMeshNode_GetInputMesh == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputPos = (PLib3MFUnsignedMeshNode_GetInputPosPtr) GetProcAddress(hLibrary, "lib3mf_unsignedmeshnode_getinputpos"); + #else // _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputPos = (PLib3MFUnsignedMeshNode_GetInputPosPtr) dlsym(hLibrary, "lib3mf_unsignedmeshnode_getinputpos"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_UnsignedMeshNode_GetInputPos == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetOutputDistance = (PLib3MFUnsignedMeshNode_GetOutputDistancePtr) GetProcAddress(hLibrary, "lib3mf_unsignedmeshnode_getoutputdistance"); + #else // _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetOutputDistance = (PLib3MFUnsignedMeshNode_GetOutputDistancePtr) dlsym(hLibrary, "lib3mf_unsignedmeshnode_getoutputdistance"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_UnsignedMeshNode_GetOutputDistance == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionCallNode_GetInputFunctionID = (PLib3MFFunctionCallNode_GetInputFunctionIDPtr) GetProcAddress(hLibrary, "lib3mf_functioncallnode_getinputfunctionid"); + #else // _WIN32 + pWrapperTable->m_FunctionCallNode_GetInputFunctionID = (PLib3MFFunctionCallNode_GetInputFunctionIDPtr) dlsym(hLibrary, "lib3mf_functioncallnode_getinputfunctionid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionCallNode_GetInputFunctionID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_NodeIterator_GetCurrent = (PLib3MFNodeIterator_GetCurrentPtr) GetProcAddress(hLibrary, "lib3mf_nodeiterator_getcurrent"); + #else // _WIN32 + pWrapperTable->m_NodeIterator_GetCurrent = (PLib3MFNodeIterator_GetCurrentPtr) dlsym(hLibrary, "lib3mf_nodeiterator_getcurrent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_NodeIterator_GetCurrent == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_GetDisplayName = (PLib3MFFunction_GetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_function_getdisplayname"); + #else // _WIN32 + pWrapperTable->m_Function_GetDisplayName = (PLib3MFFunction_GetDisplayNamePtr) dlsym(hLibrary, "lib3mf_function_getdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_GetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_SetDisplayName = (PLib3MFFunction_SetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_function_setdisplayname"); + #else // _WIN32 + pWrapperTable->m_Function_SetDisplayName = (PLib3MFFunction_SetDisplayNamePtr) dlsym(hLibrary, "lib3mf_function_setdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_SetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_AddInput = (PLib3MFFunction_AddInputPtr) GetProcAddress(hLibrary, "lib3mf_function_addinput"); + #else // _WIN32 + pWrapperTable->m_Function_AddInput = (PLib3MFFunction_AddInputPtr) dlsym(hLibrary, "lib3mf_function_addinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_AddInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_GetInputs = (PLib3MFFunction_GetInputsPtr) GetProcAddress(hLibrary, "lib3mf_function_getinputs"); + #else // _WIN32 + pWrapperTable->m_Function_GetInputs = (PLib3MFFunction_GetInputsPtr) dlsym(hLibrary, "lib3mf_function_getinputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_GetInputs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_RemoveInput = (PLib3MFFunction_RemoveInputPtr) GetProcAddress(hLibrary, "lib3mf_function_removeinput"); + #else // _WIN32 + pWrapperTable->m_Function_RemoveInput = (PLib3MFFunction_RemoveInputPtr) dlsym(hLibrary, "lib3mf_function_removeinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_RemoveInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_AddOutput = (PLib3MFFunction_AddOutputPtr) GetProcAddress(hLibrary, "lib3mf_function_addoutput"); + #else // _WIN32 + pWrapperTable->m_Function_AddOutput = (PLib3MFFunction_AddOutputPtr) dlsym(hLibrary, "lib3mf_function_addoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_AddOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_GetOutputs = (PLib3MFFunction_GetOutputsPtr) GetProcAddress(hLibrary, "lib3mf_function_getoutputs"); + #else // _WIN32 + pWrapperTable->m_Function_GetOutputs = (PLib3MFFunction_GetOutputsPtr) dlsym(hLibrary, "lib3mf_function_getoutputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_GetOutputs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_RemoveOutput = (PLib3MFFunction_RemoveOutputPtr) GetProcAddress(hLibrary, "lib3mf_function_removeoutput"); + #else // _WIN32 + pWrapperTable->m_Function_RemoveOutput = (PLib3MFFunction_RemoveOutputPtr) dlsym(hLibrary, "lib3mf_function_removeoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_RemoveOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_FindInput = (PLib3MFFunction_FindInputPtr) GetProcAddress(hLibrary, "lib3mf_function_findinput"); + #else // _WIN32 + pWrapperTable->m_Function_FindInput = (PLib3MFFunction_FindInputPtr) dlsym(hLibrary, "lib3mf_function_findinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_FindInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_FindOutput = (PLib3MFFunction_FindOutputPtr) GetProcAddress(hLibrary, "lib3mf_function_findoutput"); + #else // _WIN32 + pWrapperTable->m_Function_FindOutput = (PLib3MFFunction_FindOutputPtr) dlsym(hLibrary, "lib3mf_function_findoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_FindOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_GetIdentifier = (PLib3MFImplicitFunction_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_getidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_GetIdentifier = (PLib3MFImplicitFunction_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitfunction_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_GetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_SetIdentifier = (PLib3MFImplicitFunction_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_setidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_SetIdentifier = (PLib3MFImplicitFunction_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitfunction_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_SetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddNode = (PLib3MFImplicitFunction_AddNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddNode = (PLib3MFImplicitFunction_AddNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddNode == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddSinNode = (PLib3MFImplicitFunction_AddSinNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsinnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddSinNode = (PLib3MFImplicitFunction_AddSinNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsinnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddSinNode == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddCosNode = (PLib3MFImplicitFunction_AddCosNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcosnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddCosNode = (PLib3MFImplicitFunction_AddCosNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcosnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddCosNode == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddTanNode = (PLib3MFImplicitFunction_AddTanNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addtannode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddTanNode = (PLib3MFImplicitFunction_AddTanNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addtannode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddTanNode == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddArcSinNode = (PLib3MFImplicitFunction_AddArcSinNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addarcsinnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddArcSinNode = (PLib3MFImplicitFunction_AddArcSinNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addarcsinnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetIdentifier == NULL) + if (pWrapperTable->m_ImplicitFunction_AddArcSinNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferencecount"); + pWrapperTable->m_ImplicitFunction_AddArcCosNode = (PLib3MFImplicitFunction_AddArcCosNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addarccosnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getreferencecount"); + pWrapperTable->m_ImplicitFunction_AddArcCosNode = (PLib3MFImplicitFunction_AddArcCosNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addarccosnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetReferenceCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddArcCosNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setreferences"); + pWrapperTable->m_ImplicitFunction_AddArcTan2Node = (PLib3MFImplicitFunction_AddArcTan2NodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addarctan2node"); #else // _WIN32 - pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setreferences"); + pWrapperTable->m_ImplicitFunction_AddArcTan2Node = (PLib3MFImplicitFunction_AddArcTan2NodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addarctan2node"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetReferences == NULL) + if (pWrapperTable->m_ImplicitFunction_AddArcTan2Node == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferences"); + pWrapperTable->m_ImplicitFunction_AddSinhNode = (PLib3MFImplicitFunction_AddSinhNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsinhnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getreferences"); + pWrapperTable->m_ImplicitFunction_AddSinhNode = (PLib3MFImplicitFunction_AddSinhNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsinhnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetReferences == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSinhNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferencecount"); + pWrapperTable->m_ImplicitFunction_AddCoshNode = (PLib3MFImplicitFunction_AddCoshNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcoshnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferencecount"); + pWrapperTable->m_ImplicitFunction_AddCoshNode = (PLib3MFImplicitFunction_AddCoshNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcoshnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetBallReferenceCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddCoshNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setballreferences"); + pWrapperTable->m_ImplicitFunction_AddTanhNode = (PLib3MFImplicitFunction_AddTanhNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addtanhnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setballreferences"); + pWrapperTable->m_ImplicitFunction_AddTanhNode = (PLib3MFImplicitFunction_AddTanhNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addtanhnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetBallReferences == NULL) + if (pWrapperTable->m_ImplicitFunction_AddTanhNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferences"); + pWrapperTable->m_ImplicitFunction_AddRoundNode = (PLib3MFImplicitFunction_AddRoundNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addroundnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferences"); + pWrapperTable->m_ImplicitFunction_AddRoundNode = (PLib3MFImplicitFunction_AddRoundNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addroundnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetBallReferences == NULL) + if (pWrapperTable->m_ImplicitFunction_AddRoundNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddCeilNode = (PLib3MFImplicitFunction_AddCeilNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addceilnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddCeilNode = (PLib3MFImplicitFunction_AddCeilNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addceilnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddCeilNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddFloorNode = (PLib3MFImplicitFunction_AddFloorNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfloornode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddFloorNode = (PLib3MFImplicitFunction_AddFloorNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfloornode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddFloorNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + pWrapperTable->m_ImplicitFunction_AddSignNode = (PLib3MFImplicitFunction_AddSignNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsignnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + pWrapperTable->m_ImplicitFunction_AddSignNode = (PLib3MFImplicitFunction_AddSignNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsignnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_AddMaterial == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSignNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_removematerial"); + pWrapperTable->m_ImplicitFunction_AddFractNode = (PLib3MFImplicitFunction_AddFractNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfractnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_removematerial"); + pWrapperTable->m_ImplicitFunction_AddFractNode = (PLib3MFImplicitFunction_AddFractNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfractnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_RemoveMaterial == NULL) + if (pWrapperTable->m_ImplicitFunction_AddFractNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getname"); + pWrapperTable->m_ImplicitFunction_AddAbsNode = (PLib3MFImplicitFunction_AddAbsNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addabsnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getname"); + pWrapperTable->m_ImplicitFunction_AddAbsNode = (PLib3MFImplicitFunction_AddAbsNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addabsnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetName == NULL) + if (pWrapperTable->m_ImplicitFunction_AddAbsNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setname"); + pWrapperTable->m_ImplicitFunction_AddExpNode = (PLib3MFImplicitFunction_AddExpNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addexpnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setname"); + pWrapperTable->m_ImplicitFunction_AddExpNode = (PLib3MFImplicitFunction_AddExpNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addexpnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_SetName == NULL) + if (pWrapperTable->m_ImplicitFunction_AddExpNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + pWrapperTable->m_ImplicitFunction_AddLogNode = (PLib3MFImplicitFunction_AddLogNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlognode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + pWrapperTable->m_ImplicitFunction_AddLogNode = (PLib3MFImplicitFunction_AddLogNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlognode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_SetDisplayColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLogNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + pWrapperTable->m_ImplicitFunction_AddLog2Node = (PLib3MFImplicitFunction_AddLog2NodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlog2node"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + pWrapperTable->m_ImplicitFunction_AddLog2Node = (PLib3MFImplicitFunction_AddLog2NodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlog2node"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetDisplayColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLog2Node == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddLog10Node = (PLib3MFImplicitFunction_AddLog10NodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlog10node"); #else // _WIN32 - pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddLog10Node = (PLib3MFImplicitFunction_AddLog10NodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlog10node"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLog10Node == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddLengthNode = (PLib3MFImplicitFunction_AddLengthNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlengthnode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddLengthNode = (PLib3MFImplicitFunction_AddLengthNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlengthnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLengthNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_addcolor"); + pWrapperTable->m_ImplicitFunction_AddTransposeNode = (PLib3MFImplicitFunction_AddTransposeNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addtransposenode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_addcolor"); + pWrapperTable->m_ImplicitFunction_AddTransposeNode = (PLib3MFImplicitFunction_AddTransposeNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addtransposenode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_AddColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddTransposeNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_removecolor"); + pWrapperTable->m_ImplicitFunction_InverseNode = (PLib3MFImplicitFunction_InverseNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_inversenode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_removecolor"); + pWrapperTable->m_ImplicitFunction_InverseNode = (PLib3MFImplicitFunction_InverseNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_inversenode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_RemoveColor == NULL) + if (pWrapperTable->m_ImplicitFunction_InverseNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_setcolor"); + pWrapperTable->m_ImplicitFunction_AddSqrtNode = (PLib3MFImplicitFunction_AddSqrtNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsqrtnode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_setcolor"); + pWrapperTable->m_ImplicitFunction_AddSqrtNode = (PLib3MFImplicitFunction_AddSqrtNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsqrtnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_SetColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSqrtNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcolor"); + pWrapperTable->m_ImplicitFunction_AddResourceIdNode = (PLib3MFImplicitFunction_AddResourceIdNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addresourceidnode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcolor"); + pWrapperTable->m_ImplicitFunction_AddResourceIdNode = (PLib3MFImplicitFunction_AddResourceIdNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addresourceidnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_GetColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddResourceIdNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddAdditionNode = (PLib3MFImplicitFunction_AddAdditionNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addadditionnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddAdditionNode = (PLib3MFImplicitFunction_AddAdditionNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addadditionnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddAdditionNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddSubtractionNode = (PLib3MFImplicitFunction_AddSubtractionNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsubtractionnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddSubtractionNode = (PLib3MFImplicitFunction_AddSubtractionNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsubtractionnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSubtractionNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + pWrapperTable->m_ImplicitFunction_AddMultiplicationNode = (PLib3MFImplicitFunction_AddMultiplicationNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmultiplicationnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + pWrapperTable->m_ImplicitFunction_AddMultiplicationNode = (PLib3MFImplicitFunction_AddMultiplicationNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmultiplicationnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_AddTex2Coord == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMultiplicationNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + pWrapperTable->m_ImplicitFunction_AddDivisionNode = (PLib3MFImplicitFunction_AddDivisionNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_adddivisionnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + pWrapperTable->m_ImplicitFunction_AddDivisionNode = (PLib3MFImplicitFunction_AddDivisionNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_adddivisionnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetTex2Coord == NULL) + if (pWrapperTable->m_ImplicitFunction_AddDivisionNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + pWrapperTable->m_ImplicitFunction_AddDotNode = (PLib3MFImplicitFunction_AddDotNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_adddotnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + pWrapperTable->m_ImplicitFunction_AddDotNode = (PLib3MFImplicitFunction_AddDotNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_adddotnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_RemoveTex2Coord == NULL) + if (pWrapperTable->m_ImplicitFunction_AddDotNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + pWrapperTable->m_ImplicitFunction_AddCrossNode = (PLib3MFImplicitFunction_AddCrossNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcrossnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + pWrapperTable->m_ImplicitFunction_AddCrossNode = (PLib3MFImplicitFunction_AddCrossNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcrossnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetTexture2D == NULL) + if (pWrapperTable->m_ImplicitFunction_AddCrossNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcount"); + pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode = (PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmatvecmultiplicationnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) dlsym(hLibrary, "lib3mf_compositematerials_getcount"); + pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode = (PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmatvecmultiplicationnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddMinNode = (PLib3MFImplicitFunction_AddMinNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addminnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddMinNode = (PLib3MFImplicitFunction_AddMinNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addminnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMinNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + pWrapperTable->m_ImplicitFunction_AddMaxNode = (PLib3MFImplicitFunction_AddMaxNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmaxnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + pWrapperTable->m_ImplicitFunction_AddMaxNode = (PLib3MFImplicitFunction_AddMaxNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmaxnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMaxNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_addcomposite"); + pWrapperTable->m_ImplicitFunction_AddFmodNode = (PLib3MFImplicitFunction_AddFmodNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfmodnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_addcomposite"); + pWrapperTable->m_ImplicitFunction_AddFmodNode = (PLib3MFImplicitFunction_AddFmodNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfmodnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_AddComposite == NULL) + if (pWrapperTable->m_ImplicitFunction_AddFmodNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_removecomposite"); + pWrapperTable->m_ImplicitFunction_AddPowNode = (PLib3MFImplicitFunction_AddPowNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addpownode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_removecomposite"); + pWrapperTable->m_ImplicitFunction_AddPowNode = (PLib3MFImplicitFunction_AddPowNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addpownode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_RemoveComposite == NULL) + if (pWrapperTable->m_ImplicitFunction_AddPowNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcomposite"); + pWrapperTable->m_ImplicitFunction_AddSelectNode = (PLib3MFImplicitFunction_AddSelectNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addselectnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_getcomposite"); + pWrapperTable->m_ImplicitFunction_AddSelectNode = (PLib3MFImplicitFunction_AddSelectNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addselectnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetComposite == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSelectNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddClampNode = (PLib3MFImplicitFunction_AddClampNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addclampnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddClampNode = (PLib3MFImplicitFunction_AddClampNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addclampnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddClampNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddComposeVectorNode = (PLib3MFImplicitFunction_AddComposeVectorNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcomposevectornode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddComposeVectorNode = (PLib3MFImplicitFunction_AddComposeVectorNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcomposevectornode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddComposeVectorNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode = (PLib3MFImplicitFunction_AddVectorFromScalarNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addvectorfromscalarnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode = (PLib3MFImplicitFunction_AddVectorFromScalarNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addvectorfromscalarnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_AddMultiProperty == NULL) + if (pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode = (PLib3MFImplicitFunction_AddDecomposeVectorNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_adddecomposevectornode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode = (PLib3MFImplicitFunction_AddDecomposeVectorNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_adddecomposevectornode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_SetMultiProperty == NULL) + if (pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode = (PLib3MFImplicitFunction_AddComposeMatrixNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcomposematrixnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode = (PLib3MFImplicitFunction_AddComposeMatrixNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcomposematrixnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetMultiProperty == NULL) + if (pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode = (PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmatrixfromrowsnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode = (PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmatrixfromrowsnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode = (PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmatrixfromcolumnsnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode = (PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmatrixfromcolumnsnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetLayerCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addlayer"); + pWrapperTable->m_ImplicitFunction_AddConstantNode = (PLib3MFImplicitFunction_AddConstantNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addconstantnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addlayer"); + pWrapperTable->m_ImplicitFunction_AddConstantNode = (PLib3MFImplicitFunction_AddConstantNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addconstantnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_AddLayer == NULL) + if (pWrapperTable->m_ImplicitFunction_AddConstantNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayer"); + pWrapperTable->m_ImplicitFunction_AddConstVecNode = (PLib3MFImplicitFunction_AddConstVecNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addconstvecnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayer"); + pWrapperTable->m_ImplicitFunction_AddConstVecNode = (PLib3MFImplicitFunction_AddConstVecNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addconstvecnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetLayer == NULL) + if (pWrapperTable->m_ImplicitFunction_AddConstVecNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removelayer"); + pWrapperTable->m_ImplicitFunction_AddConstMatNode = (PLib3MFImplicitFunction_AddConstMatNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addconstmatnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removelayer"); + pWrapperTable->m_ImplicitFunction_AddConstMatNode = (PLib3MFImplicitFunction_AddConstMatNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addconstmatnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_RemoveLayer == NULL) + if (pWrapperTable->m_ImplicitFunction_AddConstMatNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_getpath"); + pWrapperTable->m_ImplicitFunction_AddMeshNode = (PLib3MFImplicitFunction_AddMeshNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmeshnode"); #else // _WIN32 - pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) dlsym(hLibrary, "lib3mf_attachment_getpath"); + pWrapperTable->m_ImplicitFunction_AddMeshNode = (PLib3MFImplicitFunction_AddMeshNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmeshnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_GetPath == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMeshNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_setpath"); + pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode = (PLib3MFImplicitFunction_AddUnsignedMeshNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addunsignedmeshnode"); #else // _WIN32 - pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) dlsym(hLibrary, "lib3mf_attachment_setpath"); + pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode = (PLib3MFImplicitFunction_AddUnsignedMeshNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addunsignedmeshnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_SetPath == NULL) + if (pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) GetProcAddress(hLibrary, "lib3mf_attachment_packagepart"); + pWrapperTable->m_ImplicitFunction_AddFunctionCallNode = (PLib3MFImplicitFunction_AddFunctionCallNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfunctioncallnode"); #else // _WIN32 - pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) dlsym(hLibrary, "lib3mf_attachment_packagepart"); + pWrapperTable->m_ImplicitFunction_AddFunctionCallNode = (PLib3MFImplicitFunction_AddFunctionCallNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfunctioncallnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_PackagePart == NULL) + if (pWrapperTable->m_ImplicitFunction_AddFunctionCallNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getrelationshiptype"); + pWrapperTable->m_ImplicitFunction_GetNodes = (PLib3MFImplicitFunction_GetNodesPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_getnodes"); #else // _WIN32 - pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_getrelationshiptype"); + pWrapperTable->m_ImplicitFunction_GetNodes = (PLib3MFImplicitFunction_GetNodesPtr) dlsym(hLibrary, "lib3mf_implicitfunction_getnodes"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_GetRelationShipType == NULL) + if (pWrapperTable->m_ImplicitFunction_GetNodes == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_setrelationshiptype"); + pWrapperTable->m_ImplicitFunction_RemoveNode = (PLib3MFImplicitFunction_RemoveNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_removenode"); #else // _WIN32 - pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_setrelationshiptype"); + pWrapperTable->m_ImplicitFunction_RemoveNode = (PLib3MFImplicitFunction_RemoveNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_removenode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_SetRelationShipType == NULL) + if (pWrapperTable->m_ImplicitFunction_RemoveNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetofile"); + pWrapperTable->m_ImplicitFunction_AddLink = (PLib3MFImplicitFunction_AddLinkPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlink"); #else // _WIN32 - pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) dlsym(hLibrary, "lib3mf_attachment_writetofile"); + pWrapperTable->m_ImplicitFunction_AddLink = (PLib3MFImplicitFunction_AddLinkPtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlink"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_WriteToFile == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLink == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromfile"); + pWrapperTable->m_ImplicitFunction_AddLinkByNames = (PLib3MFImplicitFunction_AddLinkByNamesPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlinkbynames"); #else // _WIN32 - pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) dlsym(hLibrary, "lib3mf_attachment_readfromfile"); + pWrapperTable->m_ImplicitFunction_AddLinkByNames = (PLib3MFImplicitFunction_AddLinkByNamesPtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlinkbynames"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_ReadFromFile == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLinkByNames == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromcallback"); + pWrapperTable->m_ImplicitFunction_Clear = (PLib3MFImplicitFunction_ClearPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_clear"); #else // _WIN32 - pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) dlsym(hLibrary, "lib3mf_attachment_readfromcallback"); + pWrapperTable->m_ImplicitFunction_Clear = (PLib3MFImplicitFunction_ClearPtr) dlsym(hLibrary, "lib3mf_implicitfunction_clear"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_ReadFromCallback == NULL) + if (pWrapperTable->m_ImplicitFunction_Clear == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getstreamsize"); + pWrapperTable->m_ImplicitFunction_SortNodesTopologically = (PLib3MFImplicitFunction_SortNodesTopologicallyPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_sortnodestopologically"); #else // _WIN32 - pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) dlsym(hLibrary, "lib3mf_attachment_getstreamsize"); + pWrapperTable->m_ImplicitFunction_SortNodesTopologically = (PLib3MFImplicitFunction_SortNodesTopologicallyPtr) dlsym(hLibrary, "lib3mf_implicitfunction_sortnodestopologically"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_GetStreamSize == NULL) + if (pWrapperTable->m_ImplicitFunction_SortNodesTopologically == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetobuffer"); + pWrapperTable->m_FunctionFromImage3D_GetImage3D = (PLib3MFFunctionFromImage3D_GetImage3DPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getimage3d"); #else // _WIN32 - pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) dlsym(hLibrary, "lib3mf_attachment_writetobuffer"); + pWrapperTable->m_FunctionFromImage3D_GetImage3D = (PLib3MFFunctionFromImage3D_GetImage3DPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getimage3d"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_WriteToBuffer == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetImage3D == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfrombuffer"); + pWrapperTable->m_FunctionFromImage3D_SetImage3D = (PLib3MFFunctionFromImage3D_SetImage3DPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setimage3d"); #else // _WIN32 - pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) dlsym(hLibrary, "lib3mf_attachment_readfrombuffer"); + pWrapperTable->m_FunctionFromImage3D_SetImage3D = (PLib3MFFunctionFromImage3D_SetImage3DPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setimage3d"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_ReadFromBuffer == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetImage3D == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getattachment"); + pWrapperTable->m_FunctionFromImage3D_SetFilter = (PLib3MFFunctionFromImage3D_SetFilterPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setfilter"); #else // _WIN32 - pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_getattachment"); + pWrapperTable->m_FunctionFromImage3D_SetFilter = (PLib3MFFunctionFromImage3D_SetFilterPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setfilter"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetAttachment == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetFilter == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setattachment"); + pWrapperTable->m_FunctionFromImage3D_GetFilter = (PLib3MFFunctionFromImage3D_GetFilterPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getfilter"); #else // _WIN32 - pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_setattachment"); + pWrapperTable->m_FunctionFromImage3D_GetFilter = (PLib3MFFunctionFromImage3D_GetFilterPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getfilter"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetAttachment == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetFilter == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getcontenttype"); + pWrapperTable->m_FunctionFromImage3D_SetTileStyles = (PLib3MFFunctionFromImage3D_SetTileStylesPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_settilestyles"); #else // _WIN32 - pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_getcontenttype"); + pWrapperTable->m_FunctionFromImage3D_SetTileStyles = (PLib3MFFunctionFromImage3D_SetTileStylesPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_settilestyles"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetContentType == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetTileStyles == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setcontenttype"); + pWrapperTable->m_FunctionFromImage3D_GetTileStyles = (PLib3MFFunctionFromImage3D_GetTileStylesPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_gettilestyles"); #else // _WIN32 - pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_setcontenttype"); + pWrapperTable->m_FunctionFromImage3D_GetTileStyles = (PLib3MFFunctionFromImage3D_GetTileStylesPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_gettilestyles"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetContentType == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetTileStyles == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + pWrapperTable->m_FunctionFromImage3D_GetOffset = (PLib3MFFunctionFromImage3D_GetOffsetPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getoffset"); #else // _WIN32 - pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + pWrapperTable->m_FunctionFromImage3D_GetOffset = (PLib3MFFunctionFromImage3D_GetOffsetPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getoffset"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetTileStyleUV == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetOffset == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_settilestyleuv"); + pWrapperTable->m_FunctionFromImage3D_SetOffset = (PLib3MFFunctionFromImage3D_SetOffsetPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setoffset"); #else // _WIN32 - pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_settilestyleuv"); + pWrapperTable->m_FunctionFromImage3D_SetOffset = (PLib3MFFunctionFromImage3D_SetOffsetPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setoffset"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetTileStyleUV == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetOffset == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getfilter"); + pWrapperTable->m_FunctionFromImage3D_GetScale = (PLib3MFFunctionFromImage3D_GetScalePtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getscale"); #else // _WIN32 - pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_getfilter"); + pWrapperTable->m_FunctionFromImage3D_GetScale = (PLib3MFFunctionFromImage3D_GetScalePtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getscale"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetFilter == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetScale == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setfilter"); + pWrapperTable->m_FunctionFromImage3D_SetScale = (PLib3MFFunctionFromImage3D_SetScalePtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setscale"); #else // _WIN32 - pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_setfilter"); + pWrapperTable->m_FunctionFromImage3D_SetScale = (PLib3MFFunctionFromImage3D_SetScalePtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setscale"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetFilter == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetScale == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 @@ -3152,6 +5474,15 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_GetSliceStackByID == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_GetLevelSetByID = (PLib3MFModel_GetLevelSetByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getlevelsetbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetLevelSetByID = (PLib3MFModel_GetLevelSetByIDPtr) dlsym(hLibrary, "lib3mf_model_getlevelsetbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetLevelSetByID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Model_GetBuildUUID = (PLib3MFModel_GetBuildUUIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getbuilduuid"); #else // _WIN32 @@ -3287,6 +5618,15 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_GetSliceStacks == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_GetImage3Ds = (PLib3MFModel_GetImage3DsPtr) GetProcAddress(hLibrary, "lib3mf_model_getimage3ds"); + #else // _WIN32 + pWrapperTable->m_Model_GetImage3Ds = (PLib3MFModel_GetImage3DsPtr) dlsym(hLibrary, "lib3mf_model_getimage3ds"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetImage3Ds == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Model_MergeToModel = (PLib3MFModel_MergeToModelPtr) GetProcAddress(hLibrary, "lib3mf_model_mergetomodel"); #else // _WIN32 @@ -3296,6 +5636,15 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_MergeToModel == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_MergeFromModel = (PLib3MFModel_MergeFromModelPtr) GetProcAddress(hLibrary, "lib3mf_model_mergefrommodel"); + #else // _WIN32 + pWrapperTable->m_Model_MergeFromModel = (PLib3MFModel_MergeFromModelPtr) dlsym(hLibrary, "lib3mf_model_mergefrommodel"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_MergeFromModel == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Model_AddMeshObject = (PLib3MFModel_AddMeshObjectPtr) GetProcAddress(hLibrary, "lib3mf_model_addmeshobject"); #else // _WIN32 @@ -3377,6 +5726,24 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_AddMultiPropertyGroup == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_AddImageStack = (PLib3MFModel_AddImageStackPtr) GetProcAddress(hLibrary, "lib3mf_model_addimagestack"); + #else // _WIN32 + pWrapperTable->m_Model_AddImageStack = (PLib3MFModel_AddImageStackPtr) dlsym(hLibrary, "lib3mf_model_addimagestack"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddImageStack == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetImageStackByID = (PLib3MFModel_GetImageStackByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getimagestackbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetImageStackByID = (PLib3MFModel_GetImageStackByIDPtr) dlsym(hLibrary, "lib3mf_model_getimagestackbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetImageStackByID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Model_AddBuildItem = (PLib3MFModel_AddBuildItemPtr) GetProcAddress(hLibrary, "lib3mf_model_addbuilditem"); #else // _WIN32 @@ -3521,6 +5888,69 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_GetKeyStore == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_GetFunctions = (PLib3MFModel_GetFunctionsPtr) GetProcAddress(hLibrary, "lib3mf_model_getfunctions"); + #else // _WIN32 + pWrapperTable->m_Model_GetFunctions = (PLib3MFModel_GetFunctionsPtr) dlsym(hLibrary, "lib3mf_model_getfunctions"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetFunctions == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddImplicitFunction = (PLib3MFModel_AddImplicitFunctionPtr) GetProcAddress(hLibrary, "lib3mf_model_addimplicitfunction"); + #else // _WIN32 + pWrapperTable->m_Model_AddImplicitFunction = (PLib3MFModel_AddImplicitFunctionPtr) dlsym(hLibrary, "lib3mf_model_addimplicitfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddImplicitFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddFunctionFromImage3D = (PLib3MFModel_AddFunctionFromImage3DPtr) GetProcAddress(hLibrary, "lib3mf_model_addfunctionfromimage3d"); + #else // _WIN32 + pWrapperTable->m_Model_AddFunctionFromImage3D = (PLib3MFModel_AddFunctionFromImage3DPtr) dlsym(hLibrary, "lib3mf_model_addfunctionfromimage3d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddFunctionFromImage3D == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddVolumeData = (PLib3MFModel_AddVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_model_addvolumedata"); + #else // _WIN32 + pWrapperTable->m_Model_AddVolumeData = (PLib3MFModel_AddVolumeDataPtr) dlsym(hLibrary, "lib3mf_model_addvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddLevelSet = (PLib3MFModel_AddLevelSetPtr) GetProcAddress(hLibrary, "lib3mf_model_addlevelset"); + #else // _WIN32 + pWrapperTable->m_Model_AddLevelSet = (PLib3MFModel_AddLevelSetPtr) dlsym(hLibrary, "lib3mf_model_addlevelset"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddLevelSet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetLevelSets = (PLib3MFModel_GetLevelSetsPtr) GetProcAddress(hLibrary, "lib3mf_model_getlevelsets"); + #else // _WIN32 + pWrapperTable->m_Model_GetLevelSets = (PLib3MFModel_GetLevelSetsPtr) dlsym(hLibrary, "lib3mf_model_getlevelsets"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetLevelSets == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_RemoveResource = (PLib3MFModel_RemoveResourcePtr) GetProcAddress(hLibrary, "lib3mf_model_removeresource"); + #else // _WIN32 + pWrapperTable->m_Model_RemoveResource = (PLib3MFModel_RemoveResourcePtr) dlsym(hLibrary, "lib3mf_model_removeresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_RemoveResource == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_GetLibraryVersion = (PLib3MFGetLibraryVersionPtr) GetProcAddress(hLibrary, "lib3mf_getlibraryversion"); #else // _WIN32 diff --git a/Autogenerated/Bindings/Go/lib3mf_dynamic.h b/Autogenerated/Bindings/Go/lib3mf_dynamic.h index 044c754bb..d7fcaf59a 100644 --- a/Autogenerated/Bindings/Go/lib3mf_dynamic.h +++ b/Autogenerated/Bindings/Go/lib3mf_dynamic.h @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated plain C Header file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -562,6 +562,45 @@ typedef Lib3MFResult (*PLib3MFCompositeMaterialsIterator_GetCurrentCompositeMate */ typedef Lib3MFResult (*PLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupPtr) (Lib3MF_MultiPropertyGroupIterator pMultiPropertyGroupIterator, Lib3MF_MultiPropertyGroup * pResource); +/************************************************************************************************************************* + Class definition for Image3DIterator +**************************************************************************************************************************/ + +/** +* Returns the Image3D the iterator points at. +* +* @param[in] pImage3DIterator - Image3DIterator instance. +* @param[out] pResource - returns the Image3D instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3DIterator_GetCurrentImage3DPtr) (Lib3MF_Image3DIterator pImage3DIterator, Lib3MF_Image3D * pResource); + +/************************************************************************************************************************* + Class definition for FunctionIterator +**************************************************************************************************************************/ + +/** +* Returns the Function the iterator points at. +* +* @param[in] pFunctionIterator - FunctionIterator instance. +* @param[out] pResource - returns the Function instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionIterator_GetCurrentFunctionPtr) (Lib3MF_FunctionIterator pFunctionIterator, Lib3MF_Function * pResource); + +/************************************************************************************************************************* + Class definition for LevelSetIterator +**************************************************************************************************************************/ + +/** +* Returns the LevelSet the iterator points at. +* +* @param[in] pLevelSetIterator - LevelSetIterator instance. +* @param[out] pResource - returns the MeshObject instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSetIterator_GetCurrentLevelSetPtr) (Lib3MF_LevelSetIterator pLevelSetIterator, Lib3MF_LevelSet * pResource); + /************************************************************************************************************************* Class definition for MetaData **************************************************************************************************************************/ @@ -821,6 +860,15 @@ typedef Lib3MFResult (*PLib3MFObject_IsMeshObjectPtr) (Lib3MF_Object pObject, bo */ typedef Lib3MFResult (*PLib3MFObject_IsComponentsObjectPtr) (Lib3MF_Object pObject, bool * pIsComponentsObject); +/** +* Retrieves, if an object is a level set object +* +* @param[in] pObject - Object instance. +* @param[out] pIsLevelSetObject - returns, whether the object is a level set object +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFObject_IsLevelSetObjectPtr) (Lib3MF_Object pObject, bool * pIsLevelSetObject); + /** * Retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. * @@ -1153,6 +1201,174 @@ typedef Lib3MFResult (*PLib3MFMeshObject_IsManifoldAndOrientedPtr) (Lib3MF_MeshO */ typedef Lib3MFResult (*PLib3MFMeshObject_BeamLatticePtr) (Lib3MF_MeshObject pMeshObject, Lib3MF_BeamLattice * pTheBeamLattice); +/** +* Retrieves the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[out] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshObject_GetVolumeDataPtr) (Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshObject_SetVolumeDataPtr) (Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData pTheVolumeData); + +/************************************************************************************************************************* + Class definition for LevelSet +**************************************************************************************************************************/ + +/** +* Returns the function that is used as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetFunctionPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_Function * pTheFunction); + +/** +* Sets the function to use as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetFunctionPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_Function pTheFunction); + +/** +* Returns the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTransform - the transformation matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetTransformPtr) (Lib3MF_LevelSet pLevelSet, sLib3MFTransform * pTransform); + +/** +* Sets the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetTransformPtr) (Lib3MF_LevelSet pLevelSet, const sLib3MFTransform * pTransform); + +/** +* Returns the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetChannelNamePtr) (Lib3MF_LevelSet pLevelSet, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); + +/** +* Sets the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pChannelName - new name of the function output channel +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetChannelNamePtr) (Lib3MF_LevelSet pLevelSet, const char * pChannelName); + +/** +* Sets the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetMinFeatureSizePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double dMinFeatureSize); + +/** +* Returns the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetMinFeatureSizePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double * pMinFeatureSize); + +/** +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dFallBackValue - fallback value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetFallBackValuePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double dFallBackValue); + +/** +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pFallBackValue - fallback value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetFallBackValuePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double * pFallBackValue); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] bMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetMeshBBoxOnlyPtr) (Lib3MF_LevelSet pLevelSet, bool bMeshBBoxOnly); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetMeshBBoxOnlyPtr) (Lib3MF_LevelSet pLevelSet, bool * pMeshBBoxOnly); + +/** +* Sets the mesh to use as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetMeshPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject pTheMesh); + +/** +* Returns the mesh that is used as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetMeshPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject * pTheMesh); + +/** +* Retrieves the VolumeData this Object. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheVolumeData - the VolumeData of this Object +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetVolumeDataPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this LevelSet. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetVolumeDataPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData pTheVolumeData); + /************************************************************************************************************************* Class definition for BeamLattice **************************************************************************************************************************/ @@ -1383,784 +1599,3179 @@ typedef Lib3MFResult (*PLib3MFBeamLattice_AddBeamSetPtr) (Lib3MF_BeamLattice pBe typedef Lib3MFResult (*PLib3MFBeamLattice_GetBeamSetPtr) (Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF_BeamSet * pBeamSet); /************************************************************************************************************************* - Class definition for Component + Class definition for FunctionReference **************************************************************************************************************************/ /** -* Returns the Resource Instance of the component. +* Returns the UniqueResourceID of the Function. Only functions with a 'pos'-input are allowed. * -* @param[in] pComponent - Component instance. -* @param[out] pObjectResource - filled with the Resource Instance. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourcePtr) (Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetFunctionResourceIDPtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 * pUniqueResourceID); /** -* Returns the UniqueResourceID of the component. +* Sets the UniqueResourceID to refer to. * -* @param[in] pComponent - Component instance. -* @param[out] pUniqueResourceID - returns the UniqueResourceID. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nUniqueResourceID - UniqueResourceID of the function * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourceIDPtr) (Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetFunctionResourceIDPtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 nUniqueResourceID); /** -* returns, whether a component has a UUID and, if true, the component's UUID +* Returns the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[out] pHasUUID - flag whether the component has a UUID -* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) -* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pTransform - the transformation matrix * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetUUIDPtr) (Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetTransformPtr) (Lib3MF_FunctionReference pFunctionReference, sLib3MFTransform * pTransform); /** -* sets the component's UUID +* Sets the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pTransform - new transformation matrix * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_SetUUIDPtr) (Lib3MF_Component pComponent, const char * pUUID); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetTransformPtr) (Lib3MF_FunctionReference pFunctionReference, const sLib3MFTransform * pTransform); /** -* Returns, if the component has a different transformation than the identity matrix +* Returns the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_HasTransformPtr) (Lib3MF_Component pComponent, bool * pHasTransform); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetChannelNamePtr) (Lib3MF_FunctionReference pFunctionReference, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); /** -* Returns the transformation matrix of the component. +* Sets the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pTransform - filled with the component transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pChannelName - new name of the function output channel * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetTransformPtr) (Lib3MF_Component pComponent, sLib3MFTransform * pTransform); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetChannelNamePtr) (Lib3MF_FunctionReference pFunctionReference, const char * pChannelName); /** -* Sets the transformation matrix of the component. +* Sets the minimal feature size as a hint for the function evaluator * -* @param[in] pComponent - Component instance. -* @param[in] pTransform - new transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_SetTransformPtr) (Lib3MF_Component pComponent, const sLib3MFTransform * pTransform); - -/************************************************************************************************************************* - Class definition for ComponentsObject -**************************************************************************************************************************/ +typedef Lib3MFResult (*PLib3MFFunctionReference_SetMinFeatureSizePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dMinFeatureSize); /** -* Adds a new component to a components object. +* Returns the minimal feature size as a hint for the function evaluator * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] pObjectResource - object to add as component. Must not lead to circular references! -* @param[in] pTransform - optional transform matrix for the component. -* @param[out] pComponentInstance - new component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponentsObject_AddComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const sLib3MFTransform * pTransform, Lib3MF_Component * pComponentInstance); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetMinFeatureSizePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pMinFeatureSize); /** -* Retrieves a component from a component object. +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) -* @param[out] pComponentInstance - component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dFallBackValue - fallback value * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetFallBackValuePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dFallBackValue); /** -* Retrieves a component count of a component object. +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[out] pCount - returns the component count +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pFallBackValue - fallback value * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentCountPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetFallBackValuePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pFallBackValue); /************************************************************************************************************************* - Class definition for BeamSet + Class definition for VolumeDataColor **************************************************************************************************************************/ -/** -* Sets a beamset's name string -* -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pName - new name of the beamset. -* @return error code or 0 (success) -*/ -typedef Lib3MFResult (*PLib3MFBeamSet_SetNamePtr) (Lib3MF_BeamSet pBeamSet, const char * pName); +/************************************************************************************************************************* + Class definition for MaterialMapping +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for VolumeDataComposite +**************************************************************************************************************************/ /** -* Retrieves a beamset's name string +* Returns the BaseMaterialGroup used within this volume data item * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pBaseMaterialGroupInstance - The BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetNamePtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); /** -* Sets a beamset's identifier string +* Sets the BaseMaterialGroup to use within this volume data item. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pIdentifier - new name of the beamset. +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pBaseMaterialGroupInstance - The new BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_SetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const char * pIdentifier); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance); /** -* Retrieves a beamset's identifier string +* Returns the number of material mappings of this VolumeDataComposite element * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) -* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pCount - the number of material mappings. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 * pCount); /** -* Retrieves the reference count of a beamset +* Returns MaterialMappting with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the reference count +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - Index of the MaterialMapping in question. +* @param[out] pTheMaterialMapping - MaterialMapping used in this element * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_GetMaterialMappingPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Sets the references of a beamset +* Adds a the MaterialMapping * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pTransform - new transformation matrix +* @param[out] pTheMaterialMapping - The new MaterialMapping * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_SetReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_AddMaterialMappingPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, const sLib3MFTransform * pTransform, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Retrieves the references of a beamset +* Removes the MaterialMapping with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - The index of the MaterialMapping to be removed. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex); + +/************************************************************************************************************************* + Class definition for VolumeDataProperty +**************************************************************************************************************************/ /** -* Retrieves the ball reference count of a beamset +* Gets the qualified name of this property. * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the ball reference count +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] nPropertyNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pPropertyNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPropertyNameBuffer - buffer of The qualified name of this property., may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFVolumeDataProperty_GetNamePtr) (Lib3MF_VolumeDataProperty pVolumeDataProperty, const Lib3MF_uint32 nPropertyNameBufferSize, Lib3MF_uint32* pPropertyNameNeededChars, char * pPropertyNameBuffer); /** -* Sets the ball references of a beamset +* Sets whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] bIsRequired - New value for whether this property is required to process this 3MF document instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_SetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataProperty_SetIsRequiredPtr) (Lib3MF_VolumeDataProperty pVolumeDataProperty, bool bIsRequired); /** -* Retrieves the ball references of a beamset +* Returns whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[out] pIsRequired - Is this property required to process this 3MF document instance? * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataProperty_IsRequiredPtr) (Lib3MF_VolumeDataProperty pVolumeDataProperty, bool * pIsRequired); /************************************************************************************************************************* - Class definition for BaseMaterialGroup + Class definition for VolumeData **************************************************************************************************************************/ /** -* Retrieves the count of base materials in the material group. +* Returns the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[out] pCount - returns the count of base materials. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - filled with the VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetCountPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFVolumeData_GetCompositePtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* returns all the PropertyIDs of all materials in this group +* Creates a new VolumeDataComposite for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - The new VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFVolumeData_CreateNewCompositePtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* Adds a new material to the material group +* Removes the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] pName - new name of the base material. -* @param[in] pDisplayColor - Display color of the material -* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_AddMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const sLib3MFColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFVolumeData_RemoveCompositePtr) (Lib3MF_VolumeData pVolumeData); /** -* Removes a material from the material group. +* Returns the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheColorData - filled with the VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_RemoveMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFVolumeData_GetColorPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataColor * pTheColorData); /** -* Returns the base material's name +* Creates a new VolumeDataColor for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheColorData - The new VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +typedef Lib3MFResult (*PLib3MFVolumeData_CreateNewColorPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataColor * pTheColorData); /** -* Sets a base material's name +* Removes the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pName - new name of the base material. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); +typedef Lib3MFResult (*PLib3MFVolumeData_RemoveColorPtr) (Lib3MF_VolumeData pVolumeData); /** -* Sets a base material's display color. +* Returns the number of VolumeDataProperty * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pCount - the number of VolumeDataProperty-elements within this VolumdeData * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); +typedef Lib3MFResult (*PLib3MFVolumeData_GetPropertyCountPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 * pCount); /** -* Returns a base material's display color. +* Returns the VolumeDataProperty at a given Index * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[out] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be returned. +* @param[out] pTheVolumeDataProperty - the VolumeDataProperty at the given index. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); +typedef Lib3MFResult (*PLib3MFVolumeData_GetPropertyPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Adds a new VolumeDataProperty from a Function +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pName - the qualified name (namespace+name) of the Property +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheVolumeDataProperty - the newly created VolumeDataProperty. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFVolumeData_AddPropertyFromFunctionPtr) (Lib3MF_VolumeData pVolumeData, const char * pName, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Removes the VolumeDataProperty with a given index +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be removed. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFVolumeData_RemovePropertyPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex); /************************************************************************************************************************* - Class definition for ColorGroup + Class definition for Component **************************************************************************************************************************/ /** -* Retrieves the count of base materials in this Color Group. +* Returns the Resource Instance of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[out] pCount - returns the count of colors within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pObjectResource - filled with the Resource Instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_GetCountPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourcePtr) (Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); /** -* returns all the PropertyIDs of all colors within this group +* Returns the UniqueResourceID of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @param[in] pComponent - Component instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_GetAllPropertyIDsPtr) (Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourceIDPtr) (Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); /** -* Adds a new value. +* returns, whether a component has a UUID and, if true, the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] pTheColor - The new color -* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pHasUUID - flag whether the component has a UUID +* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) +* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_AddColorPtr) (Lib3MF_ColorGroup pColorGroup, const sLib3MFColor * pTheColor, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFComponent_GetUUIDPtr) (Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); /** -* Removes a color from the color group. +* sets the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @param[in] pComponent - Component instance. +* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_RemoveColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFComponent_SetUUIDPtr) (Lib3MF_Component pComponent, const char * pUUID); /** -* Sets a color value. +* Returns, if the component has a different transformation than the identity matrix * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[in] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_SetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); +typedef Lib3MFResult (*PLib3MFComponent_HasTransformPtr) (Lib3MF_Component pComponent, bool * pHasTransform); /** -* Sets a color value. +* Returns the transformation matrix of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[out] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pTransform - filled with the component transformation matrix * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_GetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); +typedef Lib3MFResult (*PLib3MFComponent_GetTransformPtr) (Lib3MF_Component pComponent, sLib3MFTransform * pTransform); + +/** +* Sets the transformation matrix of the component. +* +* @param[in] pComponent - Component instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComponent_SetTransformPtr) (Lib3MF_Component pComponent, const sLib3MFTransform * pTransform); /************************************************************************************************************************* - Class definition for Texture2DGroup + Class definition for ComponentsObject **************************************************************************************************************************/ /** -* Retrieves the count of tex2coords in the Texture2DGroup. +* Adds a new component to a components object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pCount - returns the count of tex2coords. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] pObjectResource - object to add as component. Must not lead to circular references! +* @param[in] pTransform - optional transform matrix for the component. +* @param[out] pComponentInstance - new component instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetCountPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFComponentsObject_AddComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const sLib3MFTransform * pTransform, Lib3MF_Component * pComponentInstance); /** -* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* Retrieves a component from a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) +* @param[out] pComponentInstance - component instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); /** -* Adds a new tex2coord to the Texture2DGroup +* Retrieves a component count of a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. -* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[out] pCount - returns the component count * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_AddTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const sLib3MFTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentCountPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); + +/************************************************************************************************************************* + Class definition for BeamSet +**************************************************************************************************************************/ /** -* Obtains a tex2coord to the Texture2DGroup +* Sets a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. -* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pName - new name of the beamset. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, sLib3MFTex2Coord * pUVCoordinate); +typedef Lib3MFResult (*PLib3MFBeamSet_SetNamePtr) (Lib3MF_BeamSet pBeamSet, const char * pName); /** -* Removes a tex2coords from the Texture2DGroup. +* Retrieves a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_RemoveTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFBeamSet_GetNamePtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); /** -* Obtains the texture2D instance of this group. +* Sets a beamset's identifier string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pIdentifier - new name of the beamset. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTexture2DPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); +typedef Lib3MFResult (*PLib3MFBeamSet_SetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const char * pIdentifier); + +/** +* Retrieves a beamset's identifier string +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Retrieves the reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the reference count +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_SetReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the ball reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the ball reference count +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_SetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); + +/** +* Retrieves the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); /************************************************************************************************************************* - Class definition for CompositeMaterials + Class definition for BaseMaterialGroup **************************************************************************************************************************/ /** -* Retrieves the count of Composite-s in the CompositeMaterials. +* Retrieves the count of base materials in the material group. * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pCount - returns the count of Composite-s +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[out] pCount - returns the count of base materials. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCountPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetCountPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); /** -* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* returns all the PropertyIDs of all materials in this group * -* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new material to the material group +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] pName - new name of the base material. +* @param[in] pDisplayColor - Display color of the material +* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_AddMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const sLib3MFColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a material from the material group. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_RemoveMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); + +/** +* Returns the base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* Sets a base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pName - new name of the base material. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); + +/** +* Sets a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); + +/** +* Returns a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[out] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); + +/************************************************************************************************************************* + Class definition for ColorGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of base materials in this Color Group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[out] pCount - returns the count of colors within this color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_GetCountPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all colors within this group +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_GetAllPropertyIDsPtr) (Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] pTheColor - The new color +* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_AddColorPtr) (Lib3MF_ColorGroup pColorGroup, const sLib3MFColor * pTheColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a color from the color group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_RemoveColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[in] pTheColor - The color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_SetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[out] pTheColor - The color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_GetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); + +/************************************************************************************************************************* + Class definition for Texture2DGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of tex2coords in the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pCount - returns the count of tex2coords. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetCountPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_AddTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const sLib3MFTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); + +/** +* Obtains a tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. +* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, sLib3MFTex2Coord * pUVCoordinate); + +/** +* Removes a tex2coords from the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_RemoveTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); + +/** +* Obtains the texture2D instance of this group. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTexture2DPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); + +/************************************************************************************************************************* + Class definition for CompositeMaterials +**************************************************************************************************************************/ + +/** +* Retrieves the count of Composite-s in the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pCount - returns the count of Composite-s +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCountPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. * @param[in] nPropertyIDsBufferSize - Number of elements in buffer * @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. * @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the Composite-Mixing Values in the CompositeMaterials. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); + +/** +* Adds a new Composite-Mixing Values to the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite +* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_AddCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const sLib3MFCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_RemoveCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); + +/** +* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, sLib3MFCompositeConstituent * pCompositeBuffer); + +/************************************************************************************************************************* + Class definition for MultiPropertyGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the count of MultiProperty-s +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new MultiProperty to the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. +* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Sets the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Removes a MultiProperty from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); + +/** +* Retrieves the number of layers of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the number of layers +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup +* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const sLib3MFMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); + +/** +* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried +* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, sLib3MFMultiPropertyLayer * pTheLayer); + +/** +* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); + +/************************************************************************************************************************* + Class definition for Image3D +**************************************************************************************************************************/ + +/** +* returns the name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of the name of this Image3D, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3D_GetNamePtr) (Lib3MF_Image3D pImage3D, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* sets a new name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] pName - the new name of this Image3D +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3D_SetNamePtr) (Lib3MF_Image3D pImage3D, const char * pName); + +/** +* Retrieves, if this Image3D is a ImageStack +* +* @param[in] pImage3D - Image3D instance. +* @param[out] pIsImageStack - returns, whether the Image3D is an ImageStack +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3D_IsImageStackPtr) (Lib3MF_Image3D pImage3D, bool * pIsImageStack); + +/************************************************************************************************************************* + Class definition for ImageStack +**************************************************************************************************************************/ + +/** +* Retrieves the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pRowCount - number of rows +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetRowCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pRowCount); + +/** +* Sets the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nRowCount - number of rows +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_SetRowCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nRowCount); + +/** +* Retrieves the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pColumnCount - number of columns +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetColumnCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pColumnCount); + +/** +* Sets the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nColumnCount - number of columns +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_SetColumnCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nColumnCount); + +/** +* Retrieves the number of images in the stack. +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pSheetCount - number of images +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetSheetCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pSheetCount); + +/** +* Retrieves a sheet of the stack. Raises an error if sheet is not set. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetSheetPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment * pSheet); + +/** +* Sets a sheet to an existing attachment. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_SetSheetPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment pSheet); + +/** +* Creates a new sheet attachment with empty data. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_CreateEmptySheetPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a memory buffer. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] nDataBufferSize - Number of elements in buffer +* @param[in] pDataBuffer - uint8 buffer of binary image data +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_CreateSheetFromBufferPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_uint64 nDataBufferSize, const Lib3MF_uint8 * pDataBuffer, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a file on disk. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] pFileName - file name to read from +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_CreateSheetFromFilePtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, const char * pFileName, Lib3MF_Attachment * pSheet); + +/************************************************************************************************************************* + Class definition for Attachment +**************************************************************************************************************************/ + +/** +* Retrieves an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_GetPathPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new path of the attachment. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_SetPathPtr) (Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Returns the PackagePart that is this attachment. +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pPackagePart - The PackagePart of this attachment. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_PackagePartPtr) (Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); + +/** +* Retrieves an attachment's relationship type +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_GetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's relationship type. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new relationship type string. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_SetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Writes out the attachment as file. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to write into. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_WriteToFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to read from. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_ReadFromFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pTheReadCallback - Callback to call for reading a data chunk +* @param[in] nStreamSize - number of bytes the callback returns +* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. +* @param[in] pUserData - Userdata that is passed to the callback function +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_ReadFromCallbackPtr) (Lib3MF_Attachment pAttachment, Lib3MFReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MFSeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); + +/** +* Retrieves the size of the attachment stream +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pStreamSize - the stream size +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_GetStreamSizePtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); + +/** +* Writes out the attachment into a buffer +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_WriteToBufferPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); + +/** +* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_ReadFromBufferPtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); + +/************************************************************************************************************************* + Class definition for Texture2D +**************************************************************************************************************************/ + +/** +* Retrieves the attachment located at the path of the texture. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); + +/** +* Sets the texture's package path to the path of the attachment. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pContentType - returns content type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetContentTypePtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureType * pContentType); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eContentType - new Content Type +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetContentTypePtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureType eContentType); + +/** +* Retrieves a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pTileStyleU - returns tilestyle type enum. +* @param[out] pTileStyleV - returns tilestyle type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV); + +/** +* Sets a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eTileStyleU - new tilestyle type enum. +* @param[in] eTileStyleV - new tilestyle type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV); + +/** +* Retrieves a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pFilter - returns filter type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetFilterPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter * pFilter); + +/** +* Sets a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eFilter - sets new filter type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetFilterPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter eFilter); + +/************************************************************************************************************************* + Class definition for ImplicitPort +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetIdentifierPtr) (Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetIdentifierPtr) (Lib3MF_ImplicitPort pImplicitPort, const char * pIdentifier); + +/** +* Retrieves the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetDisplayNamePtr) (Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetDisplayNamePtr) (Lib3MF_ImplicitPort pImplicitPort, const char * pDisplayName); + +/** +* Sets the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] eImplicitPortType - the type +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetTypePtr) (Lib3MF_ImplicitPort pImplicitPort, eLib3MFImplicitPortType eImplicitPortType); + +/** +* Retrieves the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[out] pImplicitPortType - the type +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetTypePtr) (Lib3MF_ImplicitPort pImplicitPort, eLib3MFImplicitPortType * pImplicitPortType); + +/** +* Retrieves the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nReferenceBufferSize - size of the buffer (including trailing 0) +* @param[out] pReferenceNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pReferenceBuffer - buffer of the reference, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetReferencePtr) (Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nReferenceBufferSize, Lib3MF_uint32* pReferenceNeededChars, char * pReferenceBuffer); + +/** +* Sets the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pReference - the reference +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetReferencePtr) (Lib3MF_ImplicitPort pImplicitPort, const char * pReference); + +/************************************************************************************************************************* + Class definition for Iterator +**************************************************************************************************************************/ + +/** +* Iterates to the next item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasNext - Iterates to the next item in the list. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFIterator_MoveNextPtr) (Lib3MF_Iterator pIterator, bool * pHasNext); + +/** +* Iterates to the previous item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasPrevious - Iterates to the previous item in the list. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFIterator_MovePreviousPtr) (Lib3MF_Iterator pIterator, bool * pHasPrevious); + +/** +* Returns the number of items the iterator captures. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pCount - returns the number of items the iterator captures. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFIterator_CountPtr) (Lib3MF_Iterator pIterator, Lib3MF_uint64 * pCount); + +/************************************************************************************************************************* + Class definition for ImplicitPortIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pImplicitPortIterator - ImplicitPortIterator instance. +* @param[out] pPort - The current element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPortIterator_GetCurrentPtr) (Lib3MF_ImplicitPortIterator pImplicitPortIterator, Lib3MF_ImplicitPort * pPort); + +/************************************************************************************************************************* + Class definition for ImplicitNode +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetIdentifierPtr) (Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_SetIdentifierPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier); + +/** +* Retrieves the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetDisplayNamePtr) (Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_SetDisplayNamePtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pDisplayName); + +/** +* Retrieves the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nTagBufferSize - size of the buffer (including trailing 0) +* @param[out] pTagNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pTagBuffer - buffer of the tag, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetTagPtr) (Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nTagBufferSize, Lib3MF_uint32* pTagNeededChars, char * pTagBuffer); + +/** +* Sets the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pTag - the tag +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_SetTagPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pTag); + +/** +* Retrieves the type of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pType - the type of the node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetNodeTypePtr) (Lib3MF_ImplicitNode pImplicitNode, eLib3MFImplicitNodeType * pType); + +/** +* Add an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[out] pPort - +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_AddInputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator for the inputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetInputsPtr) (Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Add an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[out] pPort - +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_AddOutputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator the outputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetOutputsPtr) (Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Retrieves an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_FindInputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_FindOutputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/** +* Checks if the types of the input and output ports are valid for the node type +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pValid - true, if the types are valid +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_AreTypesValidPtr) (Lib3MF_ImplicitNode pImplicitNode, bool * pValid); + +/************************************************************************************************************************* + Class definition for OneInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pInput - the input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFOneInputNode_GetInputAPtr) (Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves the output +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFOneInputNode_GetOutputResultPtr) (Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for SinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcSinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcCosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SinhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CoshNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for RoundNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CeilNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FloorNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SignNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FractNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for AbsNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ExpNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LogNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log10Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LengthNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TransposeNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for InverseNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SqrtNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ResourceIdNode +**************************************************************************************************************************/ + +/** +* Sets the Resource that the resourceid attribute of the node will point to +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[in] pResource - the resource +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFResourceIdNode_SetResourcePtr) (Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource pResource); + +/** +* Retrieves the resource of the node +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pResource - the resource +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFResourceIdNode_GetResourcePtr) (Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource * pResource); + +/** +* Retrieves the output +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFResourceIdNode_GetOutputValuePtr) (Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for TwoInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pTwoInputNode - TwoInputNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTwoInputNode_GetInputBPtr) (Lib3MF_TwoInputNode pTwoInputNode, Lib3MF_ImplicitPort * pB); + +/************************************************************************************************************************* + Class definition for AdditionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SubtractionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DivisionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DotNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CrossNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTan2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MatVecMultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MaxNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FmodNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ModNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for PowNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SelectNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFSelectNode_GetInputBPtr) (Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pB); + +/** +* Retrieves the third input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pC - the third input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFSelectNode_GetInputCPtr) (Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pC); + +/** +* Retrieves the fourth input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pD - the fourth input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFSelectNode_GetInputDPtr) (Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pD); + +/************************************************************************************************************************* + Class definition for ClampNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the lower limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMin - the input for the lower limit +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFClampNode_GetInputMinPtr) (Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMin); + +/** +* Retrieves the input for the upper limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMax - the input for the upper limit +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFClampNode_GetInputMaxPtr) (Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMax); + +/************************************************************************************************************************* + Class definition for ComposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the x component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pX - the input for the x component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetInputXPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the input for the y component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pY - the input for the y component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetInputYPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the input for the z component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pZ - the input for the z component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetInputZPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/** +* Retrieves the output +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetOutputResultPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for VectorFromScalarNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DecomposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pA - the input port for the vector to decompose +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetInputAPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pA); + +/** +* Retrieves the output for the x component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pX - the output for the x component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetOutputXPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the output for the y component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pY - the output for the y component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetOutputYPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the output for the z component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pZ - the output for the z component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetOutputZPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/************************************************************************************************************************* + Class definition for ComposeMatrixNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the element 0 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM00 - the input for the m00 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM00Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM00); + +/** +* Retrieves the input for the element 0 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM01 - the input for the m01 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM01Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM01); + +/** +* Retrieves the input for the element 0 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM02 - the input for the m02 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM02Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM02); + +/** +* Retrieves the input for the element 0 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM03 - the input for the m03 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM03Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM03); + +/** +* Retrieves the input for the element 1 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM10 - the input for the m10 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM10Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM10); + +/** +* Retrieves the input for the element 1 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM11 - the input for the m11 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM11Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM11); + +/** +* Retrieves the input for the element 1 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM12 - the input for the m12 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM12Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM12); + +/** +* Retrieves the input for the element 1 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM13 - the input for the m3 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM13Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM13); + +/** +* Retrieves the input for the element 2 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM20 - the input for the m2 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM20Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM20); + +/** +* Retrieves the input for the element 2 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM21 - +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM21Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM21); + +/** +* Retrieves the input for the element 2 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM22 - the input for the m22 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM22Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM22); + +/** +* Retrieves the input for the element 2 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM23 - the input for the m23 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM23Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM23); + +/** +* Retrieves the input for the element 3 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM30 - the input for the m30 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM30Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM30); + +/** +* Retrieves the input for the element 3 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM31 - the input for the m31 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM31Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM31); + +/** +* Retrieves the input for the element 3 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM32 - the input for the m32 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM32Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM32); + +/** +* Retrieves the input for the element 3 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM33 - the input for the m33 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM33Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM33); + +/** +* Retrieves the output +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetOutputResultPtr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromRowsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow0 - the input for the first row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputAPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow0); + +/** +* Retrieves the input for the second row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow1 - the input for the second row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputBPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow1); + +/** +* Retrieves the input for the third row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow2 - the input for the third row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputCPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow2); + +/** +* Retrieves the input for the fourth row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow3 - the input for the fourth row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputDPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetOutputResultPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromColumnsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn0 - the input for the first column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputAPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn0); + +/** +* Retrieves the input for the second column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn1 - the input for the second column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputBPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn1); + +/** +* Retrieves the input for the third column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn2 - the input for the third column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputCPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn2); + +/** +* Retrieves the input for the fourth column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn3 - the input for the fourth column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputDPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetOutputResultPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for ConstantNode +**************************************************************************************************************************/ + +/** +* Sets the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[in] dValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstantNode_SetConstantPtr) (Lib3MF_ConstantNode pConstantNode, Lib3MF_double dValue); + +/** +* Retrieves the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstantNode_GetConstantPtr) (Lib3MF_ConstantNode pConstantNode, Lib3MF_double * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstantNode_GetOutputValuePtr) (Lib3MF_ConstantNode pConstantNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for ConstVecNode +**************************************************************************************************************************/ + +/** +* Sets the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstVecNode_SetVectorPtr) (Lib3MF_ConstVecNode pConstVecNode, const sLib3MFVector * pValue); + +/** +* Retrieves the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstVecNode_GetVectorPtr) (Lib3MF_ConstVecNode pConstVecNode, sLib3MFVector * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pVector - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstVecNode_GetOutputVectorPtr) (Lib3MF_ConstVecNode pConstVecNode, Lib3MF_ImplicitPort * pVector); + +/************************************************************************************************************************* + Class definition for ConstMatNode +**************************************************************************************************************************/ + +/** +* Sets the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstMatNode_SetMatrixPtr) (Lib3MF_ConstMatNode pConstMatNode, const sLib3MFMatrix4x4 * pValue); + +/** +* Retrieves the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pValue - the matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstMatNode_GetMatrixPtr) (Lib3MF_ConstMatNode pConstMatNode, sLib3MFMatrix4x4 * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pMatrix - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstMatNode_GetOutputMatrixPtr) (Lib3MF_ConstMatNode pConstMatNode, Lib3MF_ImplicitPort * pMatrix); + +/************************************************************************************************************************* + Class definition for MeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshNode_GetInputMeshPtr) (Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshNode_GetInputPosPtr) (Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pDistance - the output port for the signed distance to the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshNode_GetOutputDistancePtr) (Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for UnsignedMeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFUnsignedMeshNode_GetInputMeshPtr) (Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFUnsignedMeshNode_GetInputPosPtr) (Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pDistance - the output port for the unsigned distance to the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFUnsignedMeshNode_GetOutputDistancePtr) (Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for FunctionCallNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the function id +* +* @param[in] pFunctionCallNode - FunctionCallNode instance. +* @param[out] pFunction - the input port for the function +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionCallNode_GetInputFunctionIDPtr) (Lib3MF_FunctionCallNode pFunctionCallNode, Lib3MF_ImplicitPort * pFunction); + +/************************************************************************************************************************* + Class definition for NodeIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pNodeIterator - NodeIterator instance. +* @param[out] pNode - The current element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFNodeIterator_GetCurrentPtr) (Lib3MF_NodeIterator pNodeIterator, Lib3MF_ImplicitNode * pNode); + +/************************************************************************************************************************* + Class definition for Function +**************************************************************************************************************************/ + +/** +* Retrieves the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_GetDisplayNamePtr) (Lib3MF_Function pFunction, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_SetDisplayNamePtr) (Lib3MF_Function pFunction, const char * pDisplayName); + +/** +* Add an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_AddInputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, eLib3MFImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the list of inputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_GetInputsPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an input +* +* @param[in] pFunction - Function instance. +* @param[in] pInput - The input to be removed +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_RemoveInputPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPort pInput); + +/** +* Add an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_AddOutputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, eLib3MFImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the outputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_GetOutputsPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an output +* +* @param[in] pFunction - Function instance. +* @param[in] pOutput - The output to be removed +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_RemoveOutputPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPort pOutput); + +/** +* Retrieves an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_FindInputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_FindOutputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/************************************************************************************************************************* + Class definition for ImplicitFunction +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_GetIdentifierPtr) (Lib3MF_ImplicitFunction pImplicitFunction, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_SetIdentifierPtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier); + +/** +* Add a node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] eNodeType - the type of the node +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, eLib3MFImplicitNodeType eNodeType, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ImplicitNode * pNode); + +/** +* Add a SinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSinNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinNode * pNode); + +/** +* Add a CosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCosNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CosNode * pNode); + +/** +* Add a TanNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddTanNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanNode * pNode); + +/** +* Add a ArcSinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddArcSinNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcSinNode * pNode); + +/** +* Add a ArcCosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddArcCosNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcCosNode * pNode); + +/** +* Add a ArcTan2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddArcTan2NodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcTan2Node * pNode); + +/** +* Add a SinhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSinhNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinhNode * pNode); + +/** +* Add a CoshNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCoshNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CoshNode * pNode); + +/** +* Add a TanhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddTanhNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanhNode * pNode); + +/** +* Add a RoundNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddRoundNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_RoundNode * pNode); + +/** +* Add a CeilNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCeilNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CeilNode * pNode); + +/** +* Add a FloorNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFloorNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FloorNode * pNode); + +/** +* Add a SignNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSignNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SignNode * pNode); + +/** +* Add a FractNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFractNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FractNode * pNode); + +/** +* Add a AbsNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddAbsNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AbsNode * pNode); + +/** +* Add a ExpNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddExpNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ExpNode * pNode); + +/** +* Add a LogNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLogNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_LogNode * pNode); + +/** +* Add a Log2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLog2NodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log2Node * pNode); + +/** +* Add a Log10Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLog10NodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log10Node * pNode); + +/** +* Add a LengthNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLengthNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_LengthNode * pNode); + +/** +* Add a TransposeNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddTransposeNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TransposeNode * pNode); + +/** +* Add a InverseNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_InverseNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_InverseNode * pNode); + +/** +* Add a SqrtNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSqrtNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SqrtNode * pNode); + +/** +* Add a ResourceIdNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddResourceIdNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ResourceIdNode * pNode); + +/** +* Add an AdditionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddAdditionNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AdditionNode * pNode); + +/** +* Add a SubtractionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSubtractionNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SubtractionNode * pNode); + +/** +* Add a MultiplicationNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMultiplicationNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MultiplicationNode * pNode); + +/** +* Add a DivisionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddDivisionNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_DivisionNode * pNode); + +/** +* Add a DotNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddDotNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DotNode * pNode); + +/** +* Add a CrossNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCrossNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_CrossNode * pNode); /** -* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* Add a MatVecMultiplicationNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatVecMultiplicationNode * pNode); /** -* Adds a new Composite-Mixing Values to the CompositeMaterials. +* Add a MinNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite -* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_AddCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const sLib3MFCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMinNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MinNode * pNode); /** -* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* Add a MaxNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_RemoveCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMaxNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MaxNode * pNode); /** -* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* Add a FmodNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, sLib3MFCompositeConstituent * pCompositeBuffer); - -/************************************************************************************************************************* - Class definition for MultiPropertyGroup -**************************************************************************************************************************/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFmodNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FmodNode * pNode); /** -* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* Add a PowNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the count of MultiProperty-s +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddPowNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_PowNode * pNode); /** -* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* Add a SelectNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSelectNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SelectNode * pNode); /** -* Adds a new MultiProperty to the MultiPropertyGroup. +* Add a ClampNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. -* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddClampNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ClampNode * pNode); /** -* Sets the PropertyIDs of a MultiProperty. +* Add a ComposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddComposeVectorNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeVectorNode * pNode); /** -* Obtains the PropertyIDs of a MultiProperty. +* Add a VectorFromScalar * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddVectorFromScalarNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_VectorFromScalarNode * pNode); /** -* Removes a MultiProperty from this MultiPropertyGroup. +* Add a DecomposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddDecomposeVectorNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DecomposeVectorNode * pNode); /** -* Retrieves the number of layers of this MultiPropertyGroup. +* Add a ComposeMatrixNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the number of layers +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddComposeMatrixNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeMatrixNode * pNode); /** -* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* Add a MatrixFromRowsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup -* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const sLib3MFMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromRowsNode * pNode); /** -* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* Add a MatrixFromColumnsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried -* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, sLib3MFMultiPropertyLayer * pTheLayer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromColumnsNode * pNode); /** -* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* Add a ConstantNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); - -/************************************************************************************************************************* - Class definition for Attachment -**************************************************************************************************************************/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddConstantNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstantNode * pNode); /** -* Retrieves an attachment's package path. This function will be removed in a later release. +* Add a ConstVecNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_GetPathPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddConstVecNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstVecNode * pNode); /** -* Sets an attachment's package path. This function will be removed in a later release. +* Add a ConstMatNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new path of the attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_SetPathPtr) (Lib3MF_Attachment pAttachment, const char * pPath); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddConstMatNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstMatNode * pNode); /** -* Returns the PackagePart that is this attachment. +* Add a MeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[out] pPackagePart - The PackagePart of this attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_PackagePartPtr) (Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMeshNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MeshNode * pNode); /** -* Retrieves an attachment's relationship type +* Add a UnsignedMeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_GetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddUnsignedMeshNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_UnsignedMeshNode * pNode); /** -* Sets an attachment's relationship type. +* Add a FunctionCallNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new relationship type string. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_SetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const char * pPath); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFunctionCallNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_FunctionCallNode * pNode); /** -* Writes out the attachment as file. +* Retrieves the nodes * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to write into. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[out] pIterator - iterator for the list of nodes * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_WriteToFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); +typedef Lib3MFResult (*PLib3MFImplicitFunction_GetNodesPtr) (Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_NodeIterator * pIterator); /** -* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Removes a node * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to read from. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pNode - The node to be removed * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_ReadFromFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); +typedef Lib3MFResult (*PLib3MFImplicitFunction_RemoveNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitNode pNode); /** -* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[in] pTheReadCallback - Callback to call for reading a data chunk -* @param[in] nStreamSize - number of bytes the callback returns -* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. -* @param[in] pUserData - Userdata that is passed to the callback function +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - the source port +* @param[in] pTarget - the target port * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_ReadFromCallbackPtr) (Lib3MF_Attachment pAttachment, Lib3MFReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MFSeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLinkPtr) (Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitPort pSource, Lib3MF_ImplicitPort pTarget); /** -* Retrieves the size of the attachment stream +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[out] pStreamSize - the stream size +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - name of the source port in the format nodename.portname +* @param[in] pTarget - name of the target port in the format nodename.portname * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_GetStreamSizePtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLinkByNamesPtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pSource, const char * pTarget); /** -* Writes out the attachment into a buffer +* Clears the function * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_WriteToBufferPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_ClearPtr) (Lib3MF_ImplicitFunction pImplicitFunction); /** -* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* Sorts the nodes topologically * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_ReadFromBufferPtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_SortNodesTopologicallyPtr) (Lib3MF_ImplicitFunction pImplicitFunction); /************************************************************************************************************************* - Class definition for Texture2D + Class definition for FunctionFromImage3D **************************************************************************************************************************/ /** -* Retrieves the attachment located at the path of the texture. +* Returns the selected 3D image. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pImage3D - image instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetImage3DPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D * pImage3D); /** -* Sets the texture's package path to the path of the attachment. +* Sets the 3D image of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] pImage3D - image instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetImage3DPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D pImage3D); /** -* Retrieves a texture's content type. +* Sets the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pContentType - returns content type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eFilter - texture filter * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetContentTypePtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureType * pContentType); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetFilterPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureFilter eFilter); /** -* Retrieves a texture's content type. +* Returns the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eContentType - new Content Type +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pFilter - texture filter * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetContentTypePtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureType eContentType); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetFilterPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureFilter * pFilter); /** -* Retrieves a texture's tilestyle type. +* Sets the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pTileStyleU - returns tilestyle type enum. -* @param[out] pTileStyleV - returns tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eTileStyleU - tile style in U +* @param[in] eTileStyleV - tile style in V +* @param[in] eTileStyleW - tile style in W * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetTileStylesPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV, eLib3MFTextureTileStyle eTileStyleW); /** -* Sets a texture's tilestyle type. +* Retrieves the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eTileStyleU - new tilestyle type enum. -* @param[in] eTileStyleV - new tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pTileStyleU - tile style in U +* @param[out] pTileStyleV - tile style in V +* @param[out] pTileStyleW - tile style in W * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetTileStylesPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV, eLib3MFTextureTileStyle * pTileStyleW); /** -* Retrieves a texture's filter type. +* returns the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pFilter - returns filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetFilterPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter * pFilter); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetOffsetPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pOffset); /** -* Sets a texture's filter type. +* Sets the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eFilter - sets new filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetFilterPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter eFilter); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetOffsetPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dOffset); + +/** +* returns the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetScalePtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pScale); + +/** +* Sets the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetScalePtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dScale); /************************************************************************************************************************* Class definition for BuildItem @@ -3132,6 +5743,16 @@ typedef Lib3MFResult (*PLib3MFModel_GetColorGroupByIDPtr) (Lib3MF_Model pModel, */ typedef Lib3MFResult (*PLib3MFModel_GetSliceStackByIDPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_SliceStack * pSliceStacInstance); +/** +* finds a level set object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pLevelSetObjectInstance - returns the level set object instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetLevelSetByIDPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_LevelSet * pLevelSetObjectInstance); + /** * returns, whether a build has a UUID and, if true, the build's UUID * @@ -3270,6 +5891,15 @@ typedef Lib3MFResult (*PLib3MFModel_GetMultiPropertyGroupsPtr) (Lib3MF_Model pMo */ typedef Lib3MFResult (*PLib3MFModel_GetSliceStacksPtr) (Lib3MF_Model pModel, Lib3MF_SliceStackIterator * pResourceIterator); +/** +* creates a resource iterator instance with all image3d resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetImage3DsPtr) (Lib3MF_Model pModel, Lib3MF_Image3DIterator * pResourceIterator); + /** * Merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. * @@ -3279,6 +5909,15 @@ typedef Lib3MFResult (*PLib3MFModel_GetSliceStacksPtr) (Lib3MF_Model pModel, Lib */ typedef Lib3MFResult (*PLib3MFModel_MergeToModelPtr) (Lib3MF_Model pModel, Lib3MF_Model * pMergedModelInstance); +/** +* Merges the given model into this model. +* +* @param[in] pModel - Model instance. +* @param[in] pModelInstance - model to be merged +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_MergeFromModelPtr) (Lib3MF_Model pModel, Lib3MF_Model pModelInstance); + /** * adds an empty mesh object to the model. * @@ -3364,6 +6003,28 @@ typedef Lib3MFResult (*PLib3MFModel_AddCompositeMaterialsPtr) (Lib3MF_Model pMod */ typedef Lib3MFResult (*PLib3MFModel_AddMultiPropertyGroupPtr) (Lib3MF_Model pModel, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance); +/** +* creates a new 3D Image Resource +* +* @param[in] pModel - Model instance. +* @param[in] nColumnCount - the number of columns in each sheet. +* @param[in] nRowCount - the number of rows in each sheet. +* @param[in] nSheetCount - the number of sheets in the image stack. +* @param[out] pInstance - returns the new ImageStack instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddImageStackPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nColumnCount, Lib3MF_uint32 nRowCount, Lib3MF_uint32 nSheetCount, Lib3MF_ImageStack * pInstance); + +/** +* finds an ImageStack object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pImageStackInstance - returns the image stack instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetImageStackByIDPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ImageStack * pImageStackInstance); + /** * adds a build item to the model. * @@ -3515,6 +6176,70 @@ typedef Lib3MFResult (*PLib3MFModel_SetRandomNumberCallbackPtr) (Lib3MF_Model pM */ typedef Lib3MFResult (*PLib3MFModel_GetKeyStorePtr) (Lib3MF_Model pModel, Lib3MF_KeyStore * pKeyStore); +/** +* creates a resource iterator for all functions +* +* @param[in] pModel - Model instance. +* @param[out] pTheResourceIterator - returns the resource iterator +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetFunctionsPtr) (Lib3MF_Model pModel, Lib3MF_FunctionIterator * pTheResourceIterator); + +/** +* adds a function described by nodes to the model +* +* @param[in] pModel - Model instance. +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddImplicitFunctionPtr) (Lib3MF_Model pModel, Lib3MF_ImplicitFunction * pFunctionInstance); + +/** +* adds a function defined by an image3d to the model +* +* @param[in] pModel - Model instance. +* @param[in] pImage3DInstance - the Image3D-instance used for this function +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddFunctionFromImage3DPtr) (Lib3MF_Model pModel, Lib3MF_Image3D pImage3DInstance, Lib3MF_FunctionFromImage3D * pFunctionInstance); + +/** +* adds a volume data resource to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pVolumeDataInstance - returns the new volume data instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddVolumeDataPtr) (Lib3MF_Model pModel, Lib3MF_VolumeData * pVolumeDataInstance); + +/** +* adds an empty boundary shape object to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pLevelSetInstance - returns the mesh object instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddLevelSetPtr) (Lib3MF_Model pModel, Lib3MF_LevelSet * pLevelSetInstance); + +/** +* creates a resource iterator instance with all boundary shape resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetLevelSetsPtr) (Lib3MF_Model pModel, Lib3MF_LevelSetIterator * pResourceIterator); + +/** +* Removes a resource from the model +* +* @param[in] pModel - Model instance. +* @param[in] pResource - The resource to remove +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_RemoveResourcePtr) (Lib3MF_Model pModel, Lib3MF_Resource pResource); + /************************************************************************************************************************* Global functions **************************************************************************************************************************/ @@ -3767,6 +6492,9 @@ typedef struct { PLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupPtr m_Texture2DGroupIterator_GetCurrentTexture2DGroup; PLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsPtr m_CompositeMaterialsIterator_GetCurrentCompositeMaterials; PLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupPtr m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup; + PLib3MFImage3DIterator_GetCurrentImage3DPtr m_Image3DIterator_GetCurrentImage3D; + PLib3MFFunctionIterator_GetCurrentFunctionPtr m_FunctionIterator_GetCurrentFunction; + PLib3MFLevelSetIterator_GetCurrentLevelSetPtr m_LevelSetIterator_GetCurrentLevelSet; PLib3MFMetaData_GetNameSpacePtr m_MetaData_GetNameSpace; PLib3MFMetaData_SetNameSpacePtr m_MetaData_SetNameSpace; PLib3MFMetaData_GetNamePtr m_MetaData_GetName; @@ -3792,6 +6520,7 @@ typedef struct { PLib3MFObject_SetPartNumberPtr m_Object_SetPartNumber; PLib3MFObject_IsMeshObjectPtr m_Object_IsMeshObject; PLib3MFObject_IsComponentsObjectPtr m_Object_IsComponentsObject; + PLib3MFObject_IsLevelSetObjectPtr m_Object_IsLevelSetObject; PLib3MFObject_IsValidPtr m_Object_IsValid; PLib3MFObject_SetAttachmentAsThumbnailPtr m_Object_SetAttachmentAsThumbnail; PLib3MFObject_GetThumbnailAttachmentPtr m_Object_GetThumbnailAttachment; @@ -3826,6 +6555,24 @@ typedef struct { PLib3MFMeshObject_SetGeometryPtr m_MeshObject_SetGeometry; PLib3MFMeshObject_IsManifoldAndOrientedPtr m_MeshObject_IsManifoldAndOriented; PLib3MFMeshObject_BeamLatticePtr m_MeshObject_BeamLattice; + PLib3MFMeshObject_GetVolumeDataPtr m_MeshObject_GetVolumeData; + PLib3MFMeshObject_SetVolumeDataPtr m_MeshObject_SetVolumeData; + PLib3MFLevelSet_GetFunctionPtr m_LevelSet_GetFunction; + PLib3MFLevelSet_SetFunctionPtr m_LevelSet_SetFunction; + PLib3MFLevelSet_GetTransformPtr m_LevelSet_GetTransform; + PLib3MFLevelSet_SetTransformPtr m_LevelSet_SetTransform; + PLib3MFLevelSet_GetChannelNamePtr m_LevelSet_GetChannelName; + PLib3MFLevelSet_SetChannelNamePtr m_LevelSet_SetChannelName; + PLib3MFLevelSet_SetMinFeatureSizePtr m_LevelSet_SetMinFeatureSize; + PLib3MFLevelSet_GetMinFeatureSizePtr m_LevelSet_GetMinFeatureSize; + PLib3MFLevelSet_SetFallBackValuePtr m_LevelSet_SetFallBackValue; + PLib3MFLevelSet_GetFallBackValuePtr m_LevelSet_GetFallBackValue; + PLib3MFLevelSet_SetMeshBBoxOnlyPtr m_LevelSet_SetMeshBBoxOnly; + PLib3MFLevelSet_GetMeshBBoxOnlyPtr m_LevelSet_GetMeshBBoxOnly; + PLib3MFLevelSet_SetMeshPtr m_LevelSet_SetMesh; + PLib3MFLevelSet_GetMeshPtr m_LevelSet_GetMesh; + PLib3MFLevelSet_GetVolumeDataPtr m_LevelSet_GetVolumeData; + PLib3MFLevelSet_SetVolumeDataPtr m_LevelSet_SetVolumeData; PLib3MFBeamLattice_GetMinLengthPtr m_BeamLattice_GetMinLength; PLib3MFBeamLattice_SetMinLengthPtr m_BeamLattice_SetMinLength; PLib3MFBeamLattice_GetClippingPtr m_BeamLattice_GetClipping; @@ -3849,6 +6596,35 @@ typedef struct { PLib3MFBeamLattice_GetBeamSetCountPtr m_BeamLattice_GetBeamSetCount; PLib3MFBeamLattice_AddBeamSetPtr m_BeamLattice_AddBeamSet; PLib3MFBeamLattice_GetBeamSetPtr m_BeamLattice_GetBeamSet; + PLib3MFFunctionReference_GetFunctionResourceIDPtr m_FunctionReference_GetFunctionResourceID; + PLib3MFFunctionReference_SetFunctionResourceIDPtr m_FunctionReference_SetFunctionResourceID; + PLib3MFFunctionReference_GetTransformPtr m_FunctionReference_GetTransform; + PLib3MFFunctionReference_SetTransformPtr m_FunctionReference_SetTransform; + PLib3MFFunctionReference_GetChannelNamePtr m_FunctionReference_GetChannelName; + PLib3MFFunctionReference_SetChannelNamePtr m_FunctionReference_SetChannelName; + PLib3MFFunctionReference_SetMinFeatureSizePtr m_FunctionReference_SetMinFeatureSize; + PLib3MFFunctionReference_GetMinFeatureSizePtr m_FunctionReference_GetMinFeatureSize; + PLib3MFFunctionReference_SetFallBackValuePtr m_FunctionReference_SetFallBackValue; + PLib3MFFunctionReference_GetFallBackValuePtr m_FunctionReference_GetFallBackValue; + PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr m_VolumeDataComposite_GetBaseMaterialGroup; + PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr m_VolumeDataComposite_SetBaseMaterialGroup; + PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr m_VolumeDataComposite_GetMaterialMappingCount; + PLib3MFVolumeDataComposite_GetMaterialMappingPtr m_VolumeDataComposite_GetMaterialMapping; + PLib3MFVolumeDataComposite_AddMaterialMappingPtr m_VolumeDataComposite_AddMaterialMapping; + PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr m_VolumeDataComposite_RemoveMaterialMapping; + PLib3MFVolumeDataProperty_GetNamePtr m_VolumeDataProperty_GetName; + PLib3MFVolumeDataProperty_SetIsRequiredPtr m_VolumeDataProperty_SetIsRequired; + PLib3MFVolumeDataProperty_IsRequiredPtr m_VolumeDataProperty_IsRequired; + PLib3MFVolumeData_GetCompositePtr m_VolumeData_GetComposite; + PLib3MFVolumeData_CreateNewCompositePtr m_VolumeData_CreateNewComposite; + PLib3MFVolumeData_RemoveCompositePtr m_VolumeData_RemoveComposite; + PLib3MFVolumeData_GetColorPtr m_VolumeData_GetColor; + PLib3MFVolumeData_CreateNewColorPtr m_VolumeData_CreateNewColor; + PLib3MFVolumeData_RemoveColorPtr m_VolumeData_RemoveColor; + PLib3MFVolumeData_GetPropertyCountPtr m_VolumeData_GetPropertyCount; + PLib3MFVolumeData_GetPropertyPtr m_VolumeData_GetProperty; + PLib3MFVolumeData_AddPropertyFromFunctionPtr m_VolumeData_AddPropertyFromFunction; + PLib3MFVolumeData_RemovePropertyPtr m_VolumeData_RemoveProperty; PLib3MFComponent_GetObjectResourcePtr m_Component_GetObjectResource; PLib3MFComponent_GetObjectResourceIDPtr m_Component_GetObjectResourceID; PLib3MFComponent_GetUUIDPtr m_Component_GetUUID; @@ -3905,6 +6681,19 @@ typedef struct { PLib3MFMultiPropertyGroup_AddLayerPtr m_MultiPropertyGroup_AddLayer; PLib3MFMultiPropertyGroup_GetLayerPtr m_MultiPropertyGroup_GetLayer; PLib3MFMultiPropertyGroup_RemoveLayerPtr m_MultiPropertyGroup_RemoveLayer; + PLib3MFImage3D_GetNamePtr m_Image3D_GetName; + PLib3MFImage3D_SetNamePtr m_Image3D_SetName; + PLib3MFImage3D_IsImageStackPtr m_Image3D_IsImageStack; + PLib3MFImageStack_GetRowCountPtr m_ImageStack_GetRowCount; + PLib3MFImageStack_SetRowCountPtr m_ImageStack_SetRowCount; + PLib3MFImageStack_GetColumnCountPtr m_ImageStack_GetColumnCount; + PLib3MFImageStack_SetColumnCountPtr m_ImageStack_SetColumnCount; + PLib3MFImageStack_GetSheetCountPtr m_ImageStack_GetSheetCount; + PLib3MFImageStack_GetSheetPtr m_ImageStack_GetSheet; + PLib3MFImageStack_SetSheetPtr m_ImageStack_SetSheet; + PLib3MFImageStack_CreateEmptySheetPtr m_ImageStack_CreateEmptySheet; + PLib3MFImageStack_CreateSheetFromBufferPtr m_ImageStack_CreateSheetFromBuffer; + PLib3MFImageStack_CreateSheetFromFilePtr m_ImageStack_CreateSheetFromFile; PLib3MFAttachment_GetPathPtr m_Attachment_GetPath; PLib3MFAttachment_SetPathPtr m_Attachment_SetPath; PLib3MFAttachment_PackagePartPtr m_Attachment_PackagePart; @@ -3924,6 +6713,173 @@ typedef struct { PLib3MFTexture2D_SetTileStyleUVPtr m_Texture2D_SetTileStyleUV; PLib3MFTexture2D_GetFilterPtr m_Texture2D_GetFilter; PLib3MFTexture2D_SetFilterPtr m_Texture2D_SetFilter; + PLib3MFImplicitPort_GetIdentifierPtr m_ImplicitPort_GetIdentifier; + PLib3MFImplicitPort_SetIdentifierPtr m_ImplicitPort_SetIdentifier; + PLib3MFImplicitPort_GetDisplayNamePtr m_ImplicitPort_GetDisplayName; + PLib3MFImplicitPort_SetDisplayNamePtr m_ImplicitPort_SetDisplayName; + PLib3MFImplicitPort_SetTypePtr m_ImplicitPort_SetType; + PLib3MFImplicitPort_GetTypePtr m_ImplicitPort_GetType; + PLib3MFImplicitPort_GetReferencePtr m_ImplicitPort_GetReference; + PLib3MFImplicitPort_SetReferencePtr m_ImplicitPort_SetReference; + PLib3MFIterator_MoveNextPtr m_Iterator_MoveNext; + PLib3MFIterator_MovePreviousPtr m_Iterator_MovePrevious; + PLib3MFIterator_CountPtr m_Iterator_Count; + PLib3MFImplicitPortIterator_GetCurrentPtr m_ImplicitPortIterator_GetCurrent; + PLib3MFImplicitNode_GetIdentifierPtr m_ImplicitNode_GetIdentifier; + PLib3MFImplicitNode_SetIdentifierPtr m_ImplicitNode_SetIdentifier; + PLib3MFImplicitNode_GetDisplayNamePtr m_ImplicitNode_GetDisplayName; + PLib3MFImplicitNode_SetDisplayNamePtr m_ImplicitNode_SetDisplayName; + PLib3MFImplicitNode_GetTagPtr m_ImplicitNode_GetTag; + PLib3MFImplicitNode_SetTagPtr m_ImplicitNode_SetTag; + PLib3MFImplicitNode_GetNodeTypePtr m_ImplicitNode_GetNodeType; + PLib3MFImplicitNode_AddInputPtr m_ImplicitNode_AddInput; + PLib3MFImplicitNode_GetInputsPtr m_ImplicitNode_GetInputs; + PLib3MFImplicitNode_AddOutputPtr m_ImplicitNode_AddOutput; + PLib3MFImplicitNode_GetOutputsPtr m_ImplicitNode_GetOutputs; + PLib3MFImplicitNode_FindInputPtr m_ImplicitNode_FindInput; + PLib3MFImplicitNode_FindOutputPtr m_ImplicitNode_FindOutput; + PLib3MFImplicitNode_AreTypesValidPtr m_ImplicitNode_AreTypesValid; + PLib3MFOneInputNode_GetInputAPtr m_OneInputNode_GetInputA; + PLib3MFOneInputNode_GetOutputResultPtr m_OneInputNode_GetOutputResult; + PLib3MFResourceIdNode_SetResourcePtr m_ResourceIdNode_SetResource; + PLib3MFResourceIdNode_GetResourcePtr m_ResourceIdNode_GetResource; + PLib3MFResourceIdNode_GetOutputValuePtr m_ResourceIdNode_GetOutputValue; + PLib3MFTwoInputNode_GetInputBPtr m_TwoInputNode_GetInputB; + PLib3MFSelectNode_GetInputBPtr m_SelectNode_GetInputB; + PLib3MFSelectNode_GetInputCPtr m_SelectNode_GetInputC; + PLib3MFSelectNode_GetInputDPtr m_SelectNode_GetInputD; + PLib3MFClampNode_GetInputMinPtr m_ClampNode_GetInputMin; + PLib3MFClampNode_GetInputMaxPtr m_ClampNode_GetInputMax; + PLib3MFComposeVectorNode_GetInputXPtr m_ComposeVectorNode_GetInputX; + PLib3MFComposeVectorNode_GetInputYPtr m_ComposeVectorNode_GetInputY; + PLib3MFComposeVectorNode_GetInputZPtr m_ComposeVectorNode_GetInputZ; + PLib3MFComposeVectorNode_GetOutputResultPtr m_ComposeVectorNode_GetOutputResult; + PLib3MFDecomposeVectorNode_GetInputAPtr m_DecomposeVectorNode_GetInputA; + PLib3MFDecomposeVectorNode_GetOutputXPtr m_DecomposeVectorNode_GetOutputX; + PLib3MFDecomposeVectorNode_GetOutputYPtr m_DecomposeVectorNode_GetOutputY; + PLib3MFDecomposeVectorNode_GetOutputZPtr m_DecomposeVectorNode_GetOutputZ; + PLib3MFComposeMatrixNode_GetInputM00Ptr m_ComposeMatrixNode_GetInputM00; + PLib3MFComposeMatrixNode_GetInputM01Ptr m_ComposeMatrixNode_GetInputM01; + PLib3MFComposeMatrixNode_GetInputM02Ptr m_ComposeMatrixNode_GetInputM02; + PLib3MFComposeMatrixNode_GetInputM03Ptr m_ComposeMatrixNode_GetInputM03; + PLib3MFComposeMatrixNode_GetInputM10Ptr m_ComposeMatrixNode_GetInputM10; + PLib3MFComposeMatrixNode_GetInputM11Ptr m_ComposeMatrixNode_GetInputM11; + PLib3MFComposeMatrixNode_GetInputM12Ptr m_ComposeMatrixNode_GetInputM12; + PLib3MFComposeMatrixNode_GetInputM13Ptr m_ComposeMatrixNode_GetInputM13; + PLib3MFComposeMatrixNode_GetInputM20Ptr m_ComposeMatrixNode_GetInputM20; + PLib3MFComposeMatrixNode_GetInputM21Ptr m_ComposeMatrixNode_GetInputM21; + PLib3MFComposeMatrixNode_GetInputM22Ptr m_ComposeMatrixNode_GetInputM22; + PLib3MFComposeMatrixNode_GetInputM23Ptr m_ComposeMatrixNode_GetInputM23; + PLib3MFComposeMatrixNode_GetInputM30Ptr m_ComposeMatrixNode_GetInputM30; + PLib3MFComposeMatrixNode_GetInputM31Ptr m_ComposeMatrixNode_GetInputM31; + PLib3MFComposeMatrixNode_GetInputM32Ptr m_ComposeMatrixNode_GetInputM32; + PLib3MFComposeMatrixNode_GetInputM33Ptr m_ComposeMatrixNode_GetInputM33; + PLib3MFComposeMatrixNode_GetOutputResultPtr m_ComposeMatrixNode_GetOutputResult; + PLib3MFMatrixFromRowsNode_GetInputAPtr m_MatrixFromRowsNode_GetInputA; + PLib3MFMatrixFromRowsNode_GetInputBPtr m_MatrixFromRowsNode_GetInputB; + PLib3MFMatrixFromRowsNode_GetInputCPtr m_MatrixFromRowsNode_GetInputC; + PLib3MFMatrixFromRowsNode_GetInputDPtr m_MatrixFromRowsNode_GetInputD; + PLib3MFMatrixFromRowsNode_GetOutputResultPtr m_MatrixFromRowsNode_GetOutputResult; + PLib3MFMatrixFromColumnsNode_GetInputAPtr m_MatrixFromColumnsNode_GetInputA; + PLib3MFMatrixFromColumnsNode_GetInputBPtr m_MatrixFromColumnsNode_GetInputB; + PLib3MFMatrixFromColumnsNode_GetInputCPtr m_MatrixFromColumnsNode_GetInputC; + PLib3MFMatrixFromColumnsNode_GetInputDPtr m_MatrixFromColumnsNode_GetInputD; + PLib3MFMatrixFromColumnsNode_GetOutputResultPtr m_MatrixFromColumnsNode_GetOutputResult; + PLib3MFConstantNode_SetConstantPtr m_ConstantNode_SetConstant; + PLib3MFConstantNode_GetConstantPtr m_ConstantNode_GetConstant; + PLib3MFConstantNode_GetOutputValuePtr m_ConstantNode_GetOutputValue; + PLib3MFConstVecNode_SetVectorPtr m_ConstVecNode_SetVector; + PLib3MFConstVecNode_GetVectorPtr m_ConstVecNode_GetVector; + PLib3MFConstVecNode_GetOutputVectorPtr m_ConstVecNode_GetOutputVector; + PLib3MFConstMatNode_SetMatrixPtr m_ConstMatNode_SetMatrix; + PLib3MFConstMatNode_GetMatrixPtr m_ConstMatNode_GetMatrix; + PLib3MFConstMatNode_GetOutputMatrixPtr m_ConstMatNode_GetOutputMatrix; + PLib3MFMeshNode_GetInputMeshPtr m_MeshNode_GetInputMesh; + PLib3MFMeshNode_GetInputPosPtr m_MeshNode_GetInputPos; + PLib3MFMeshNode_GetOutputDistancePtr m_MeshNode_GetOutputDistance; + PLib3MFUnsignedMeshNode_GetInputMeshPtr m_UnsignedMeshNode_GetInputMesh; + PLib3MFUnsignedMeshNode_GetInputPosPtr m_UnsignedMeshNode_GetInputPos; + PLib3MFUnsignedMeshNode_GetOutputDistancePtr m_UnsignedMeshNode_GetOutputDistance; + PLib3MFFunctionCallNode_GetInputFunctionIDPtr m_FunctionCallNode_GetInputFunctionID; + PLib3MFNodeIterator_GetCurrentPtr m_NodeIterator_GetCurrent; + PLib3MFFunction_GetDisplayNamePtr m_Function_GetDisplayName; + PLib3MFFunction_SetDisplayNamePtr m_Function_SetDisplayName; + PLib3MFFunction_AddInputPtr m_Function_AddInput; + PLib3MFFunction_GetInputsPtr m_Function_GetInputs; + PLib3MFFunction_RemoveInputPtr m_Function_RemoveInput; + PLib3MFFunction_AddOutputPtr m_Function_AddOutput; + PLib3MFFunction_GetOutputsPtr m_Function_GetOutputs; + PLib3MFFunction_RemoveOutputPtr m_Function_RemoveOutput; + PLib3MFFunction_FindInputPtr m_Function_FindInput; + PLib3MFFunction_FindOutputPtr m_Function_FindOutput; + PLib3MFImplicitFunction_GetIdentifierPtr m_ImplicitFunction_GetIdentifier; + PLib3MFImplicitFunction_SetIdentifierPtr m_ImplicitFunction_SetIdentifier; + PLib3MFImplicitFunction_AddNodePtr m_ImplicitFunction_AddNode; + PLib3MFImplicitFunction_AddSinNodePtr m_ImplicitFunction_AddSinNode; + PLib3MFImplicitFunction_AddCosNodePtr m_ImplicitFunction_AddCosNode; + PLib3MFImplicitFunction_AddTanNodePtr m_ImplicitFunction_AddTanNode; + PLib3MFImplicitFunction_AddArcSinNodePtr m_ImplicitFunction_AddArcSinNode; + PLib3MFImplicitFunction_AddArcCosNodePtr m_ImplicitFunction_AddArcCosNode; + PLib3MFImplicitFunction_AddArcTan2NodePtr m_ImplicitFunction_AddArcTan2Node; + PLib3MFImplicitFunction_AddSinhNodePtr m_ImplicitFunction_AddSinhNode; + PLib3MFImplicitFunction_AddCoshNodePtr m_ImplicitFunction_AddCoshNode; + PLib3MFImplicitFunction_AddTanhNodePtr m_ImplicitFunction_AddTanhNode; + PLib3MFImplicitFunction_AddRoundNodePtr m_ImplicitFunction_AddRoundNode; + PLib3MFImplicitFunction_AddCeilNodePtr m_ImplicitFunction_AddCeilNode; + PLib3MFImplicitFunction_AddFloorNodePtr m_ImplicitFunction_AddFloorNode; + PLib3MFImplicitFunction_AddSignNodePtr m_ImplicitFunction_AddSignNode; + PLib3MFImplicitFunction_AddFractNodePtr m_ImplicitFunction_AddFractNode; + PLib3MFImplicitFunction_AddAbsNodePtr m_ImplicitFunction_AddAbsNode; + PLib3MFImplicitFunction_AddExpNodePtr m_ImplicitFunction_AddExpNode; + PLib3MFImplicitFunction_AddLogNodePtr m_ImplicitFunction_AddLogNode; + PLib3MFImplicitFunction_AddLog2NodePtr m_ImplicitFunction_AddLog2Node; + PLib3MFImplicitFunction_AddLog10NodePtr m_ImplicitFunction_AddLog10Node; + PLib3MFImplicitFunction_AddLengthNodePtr m_ImplicitFunction_AddLengthNode; + PLib3MFImplicitFunction_AddTransposeNodePtr m_ImplicitFunction_AddTransposeNode; + PLib3MFImplicitFunction_InverseNodePtr m_ImplicitFunction_InverseNode; + PLib3MFImplicitFunction_AddSqrtNodePtr m_ImplicitFunction_AddSqrtNode; + PLib3MFImplicitFunction_AddResourceIdNodePtr m_ImplicitFunction_AddResourceIdNode; + PLib3MFImplicitFunction_AddAdditionNodePtr m_ImplicitFunction_AddAdditionNode; + PLib3MFImplicitFunction_AddSubtractionNodePtr m_ImplicitFunction_AddSubtractionNode; + PLib3MFImplicitFunction_AddMultiplicationNodePtr m_ImplicitFunction_AddMultiplicationNode; + PLib3MFImplicitFunction_AddDivisionNodePtr m_ImplicitFunction_AddDivisionNode; + PLib3MFImplicitFunction_AddDotNodePtr m_ImplicitFunction_AddDotNode; + PLib3MFImplicitFunction_AddCrossNodePtr m_ImplicitFunction_AddCrossNode; + PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr m_ImplicitFunction_AddMatVecMultiplicationNode; + PLib3MFImplicitFunction_AddMinNodePtr m_ImplicitFunction_AddMinNode; + PLib3MFImplicitFunction_AddMaxNodePtr m_ImplicitFunction_AddMaxNode; + PLib3MFImplicitFunction_AddFmodNodePtr m_ImplicitFunction_AddFmodNode; + PLib3MFImplicitFunction_AddPowNodePtr m_ImplicitFunction_AddPowNode; + PLib3MFImplicitFunction_AddSelectNodePtr m_ImplicitFunction_AddSelectNode; + PLib3MFImplicitFunction_AddClampNodePtr m_ImplicitFunction_AddClampNode; + PLib3MFImplicitFunction_AddComposeVectorNodePtr m_ImplicitFunction_AddComposeVectorNode; + PLib3MFImplicitFunction_AddVectorFromScalarNodePtr m_ImplicitFunction_AddVectorFromScalarNode; + PLib3MFImplicitFunction_AddDecomposeVectorNodePtr m_ImplicitFunction_AddDecomposeVectorNode; + PLib3MFImplicitFunction_AddComposeMatrixNodePtr m_ImplicitFunction_AddComposeMatrixNode; + PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr m_ImplicitFunction_AddMatrixFromRowsNode; + PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr m_ImplicitFunction_AddMatrixFromColumnsNode; + PLib3MFImplicitFunction_AddConstantNodePtr m_ImplicitFunction_AddConstantNode; + PLib3MFImplicitFunction_AddConstVecNodePtr m_ImplicitFunction_AddConstVecNode; + PLib3MFImplicitFunction_AddConstMatNodePtr m_ImplicitFunction_AddConstMatNode; + PLib3MFImplicitFunction_AddMeshNodePtr m_ImplicitFunction_AddMeshNode; + PLib3MFImplicitFunction_AddUnsignedMeshNodePtr m_ImplicitFunction_AddUnsignedMeshNode; + PLib3MFImplicitFunction_AddFunctionCallNodePtr m_ImplicitFunction_AddFunctionCallNode; + PLib3MFImplicitFunction_GetNodesPtr m_ImplicitFunction_GetNodes; + PLib3MFImplicitFunction_RemoveNodePtr m_ImplicitFunction_RemoveNode; + PLib3MFImplicitFunction_AddLinkPtr m_ImplicitFunction_AddLink; + PLib3MFImplicitFunction_AddLinkByNamesPtr m_ImplicitFunction_AddLinkByNames; + PLib3MFImplicitFunction_ClearPtr m_ImplicitFunction_Clear; + PLib3MFImplicitFunction_SortNodesTopologicallyPtr m_ImplicitFunction_SortNodesTopologically; + PLib3MFFunctionFromImage3D_GetImage3DPtr m_FunctionFromImage3D_GetImage3D; + PLib3MFFunctionFromImage3D_SetImage3DPtr m_FunctionFromImage3D_SetImage3D; + PLib3MFFunctionFromImage3D_SetFilterPtr m_FunctionFromImage3D_SetFilter; + PLib3MFFunctionFromImage3D_GetFilterPtr m_FunctionFromImage3D_GetFilter; + PLib3MFFunctionFromImage3D_SetTileStylesPtr m_FunctionFromImage3D_SetTileStyles; + PLib3MFFunctionFromImage3D_GetTileStylesPtr m_FunctionFromImage3D_GetTileStyles; + PLib3MFFunctionFromImage3D_GetOffsetPtr m_FunctionFromImage3D_GetOffset; + PLib3MFFunctionFromImage3D_SetOffsetPtr m_FunctionFromImage3D_SetOffset; + PLib3MFFunctionFromImage3D_GetScalePtr m_FunctionFromImage3D_GetScale; + PLib3MFFunctionFromImage3D_SetScalePtr m_FunctionFromImage3D_SetScale; PLib3MFBuildItem_GetObjectResourcePtr m_BuildItem_GetObjectResource; PLib3MFBuildItem_GetUUIDPtr m_BuildItem_GetUUID; PLib3MFBuildItem_SetUUIDPtr m_BuildItem_SetUUID; @@ -4018,6 +6974,7 @@ typedef struct { PLib3MFModel_GetComponentsObjectByIDPtr m_Model_GetComponentsObjectByID; PLib3MFModel_GetColorGroupByIDPtr m_Model_GetColorGroupByID; PLib3MFModel_GetSliceStackByIDPtr m_Model_GetSliceStackByID; + PLib3MFModel_GetLevelSetByIDPtr m_Model_GetLevelSetByID; PLib3MFModel_GetBuildUUIDPtr m_Model_GetBuildUUID; PLib3MFModel_SetBuildUUIDPtr m_Model_SetBuildUUID; PLib3MFModel_GetBuildItemsPtr m_Model_GetBuildItems; @@ -4033,7 +6990,9 @@ typedef struct { PLib3MFModel_GetCompositeMaterialsPtr m_Model_GetCompositeMaterials; PLib3MFModel_GetMultiPropertyGroupsPtr m_Model_GetMultiPropertyGroups; PLib3MFModel_GetSliceStacksPtr m_Model_GetSliceStacks; + PLib3MFModel_GetImage3DsPtr m_Model_GetImage3Ds; PLib3MFModel_MergeToModelPtr m_Model_MergeToModel; + PLib3MFModel_MergeFromModelPtr m_Model_MergeFromModel; PLib3MFModel_AddMeshObjectPtr m_Model_AddMeshObject; PLib3MFModel_AddComponentsObjectPtr m_Model_AddComponentsObject; PLib3MFModel_AddSliceStackPtr m_Model_AddSliceStack; @@ -4043,6 +7002,8 @@ typedef struct { PLib3MFModel_AddTexture2DGroupPtr m_Model_AddTexture2DGroup; PLib3MFModel_AddCompositeMaterialsPtr m_Model_AddCompositeMaterials; PLib3MFModel_AddMultiPropertyGroupPtr m_Model_AddMultiPropertyGroup; + PLib3MFModel_AddImageStackPtr m_Model_AddImageStack; + PLib3MFModel_GetImageStackByIDPtr m_Model_GetImageStackByID; PLib3MFModel_AddBuildItemPtr m_Model_AddBuildItem; PLib3MFModel_RemoveBuildItemPtr m_Model_RemoveBuildItem; PLib3MFModel_GetMetaDataGroupPtr m_Model_GetMetaDataGroup; @@ -4059,6 +7020,13 @@ typedef struct { PLib3MFModel_RemoveCustomContentTypePtr m_Model_RemoveCustomContentType; PLib3MFModel_SetRandomNumberCallbackPtr m_Model_SetRandomNumberCallback; PLib3MFModel_GetKeyStorePtr m_Model_GetKeyStore; + PLib3MFModel_GetFunctionsPtr m_Model_GetFunctions; + PLib3MFModel_AddImplicitFunctionPtr m_Model_AddImplicitFunction; + PLib3MFModel_AddFunctionFromImage3DPtr m_Model_AddFunctionFromImage3D; + PLib3MFModel_AddVolumeDataPtr m_Model_AddVolumeData; + PLib3MFModel_AddLevelSetPtr m_Model_AddLevelSet; + PLib3MFModel_GetLevelSetsPtr m_Model_GetLevelSets; + PLib3MFModel_RemoveResourcePtr m_Model_RemoveResource; PLib3MFGetLibraryVersionPtr m_GetLibraryVersion; PLib3MFGetPrereleaseInformationPtr m_GetPrereleaseInformation; PLib3MFGetBuildInformationPtr m_GetBuildInformation; diff --git a/Autogenerated/Bindings/Go/lib3mf_impl.go b/Autogenerated/Bindings/Go/lib3mf_impl.go index f91e68c3b..552faf054 100644 --- a/Autogenerated/Bindings/Go/lib3mf_impl.go +++ b/Autogenerated/Bindings/Go/lib3mf_impl.go @@ -95,316 +95,443 @@ type Lib3MFImplementation struct { Lib3MF_texture2dgroupiterator_getcurrenttexture2dgroup uintptr Lib3MF_compositematerialsiterator_getcurrentcompositematerials uintptr Lib3MF_multipropertygroupiterator_getcurrentmultipropertygroup uintptr - Lib3MF_metadata_getnamespace uintptr - Lib3MF_metadata_setnamespace uintptr - Lib3MF_metadata_getname uintptr - Lib3MF_metadata_setname uintptr - Lib3MF_metadata_getkey uintptr - Lib3MF_metadata_getmustpreserve uintptr - Lib3MF_metadata_setmustpreserve uintptr - Lib3MF_metadata_gettype uintptr - Lib3MF_metadata_settype uintptr - Lib3MF_metadata_getvalue uintptr - Lib3MF_metadata_setvalue uintptr - Lib3MF_metadatagroup_getmetadatacount uintptr - Lib3MF_metadatagroup_getmetadata uintptr - Lib3MF_metadatagroup_getmetadatabykey uintptr - Lib3MF_metadatagroup_removemetadatabyindex uintptr - Lib3MF_metadatagroup_removemetadata uintptr - Lib3MF_metadatagroup_addmetadata uintptr - Lib3MF_object_gettype uintptr - Lib3MF_object_settype uintptr - Lib3MF_object_getname uintptr - Lib3MF_object_setname uintptr - Lib3MF_object_getpartnumber uintptr - Lib3MF_object_setpartnumber uintptr - Lib3MF_object_ismeshobject uintptr - Lib3MF_object_iscomponentsobject uintptr - Lib3MF_object_isvalid uintptr - Lib3MF_object_setattachmentasthumbnail uintptr - Lib3MF_object_getthumbnailattachment uintptr - Lib3MF_object_clearthumbnailattachment uintptr - Lib3MF_object_getoutbox uintptr - Lib3MF_object_getuuid uintptr - Lib3MF_object_setuuid uintptr - Lib3MF_object_getmetadatagroup uintptr - Lib3MF_object_setslicesmeshresolution uintptr - Lib3MF_object_getslicesmeshresolution uintptr - Lib3MF_object_hasslices uintptr - Lib3MF_object_clearslicestack uintptr - Lib3MF_object_getslicestack uintptr - Lib3MF_object_assignslicestack uintptr - Lib3MF_meshobject_getvertexcount uintptr - Lib3MF_meshobject_gettrianglecount uintptr - Lib3MF_meshobject_getvertex uintptr - Lib3MF_meshobject_setvertex uintptr - Lib3MF_meshobject_addvertex uintptr - Lib3MF_meshobject_getvertices uintptr - Lib3MF_meshobject_gettriangle uintptr - Lib3MF_meshobject_settriangle uintptr - Lib3MF_meshobject_addtriangle uintptr - Lib3MF_meshobject_gettriangleindices uintptr - Lib3MF_meshobject_setobjectlevelproperty uintptr - Lib3MF_meshobject_getobjectlevelproperty uintptr - Lib3MF_meshobject_settriangleproperties uintptr - Lib3MF_meshobject_gettriangleproperties uintptr - Lib3MF_meshobject_setalltriangleproperties uintptr - Lib3MF_meshobject_getalltriangleproperties uintptr - Lib3MF_meshobject_clearallproperties uintptr - Lib3MF_meshobject_setgeometry uintptr - Lib3MF_meshobject_ismanifoldandoriented uintptr - Lib3MF_meshobject_beamlattice uintptr - Lib3MF_beamlattice_getminlength uintptr - Lib3MF_beamlattice_setminlength uintptr - Lib3MF_beamlattice_getclipping uintptr - Lib3MF_beamlattice_setclipping uintptr - Lib3MF_beamlattice_getrepresentation uintptr - Lib3MF_beamlattice_setrepresentation uintptr - Lib3MF_beamlattice_getballoptions uintptr - Lib3MF_beamlattice_setballoptions uintptr - Lib3MF_beamlattice_getbeamcount uintptr - Lib3MF_beamlattice_getbeam uintptr - Lib3MF_beamlattice_addbeam uintptr - Lib3MF_beamlattice_setbeam uintptr - Lib3MF_beamlattice_setbeams uintptr - Lib3MF_beamlattice_getbeams uintptr - Lib3MF_beamlattice_getballcount uintptr - Lib3MF_beamlattice_getball uintptr - Lib3MF_beamlattice_addball uintptr - Lib3MF_beamlattice_setball uintptr - Lib3MF_beamlattice_setballs uintptr - Lib3MF_beamlattice_getballs uintptr - Lib3MF_beamlattice_getbeamsetcount uintptr - Lib3MF_beamlattice_addbeamset uintptr - Lib3MF_beamlattice_getbeamset uintptr - Lib3MF_component_getobjectresource uintptr - Lib3MF_component_getobjectresourceid uintptr - Lib3MF_component_getuuid uintptr - Lib3MF_component_setuuid uintptr - Lib3MF_component_hastransform uintptr - Lib3MF_component_gettransform uintptr - Lib3MF_component_settransform uintptr - Lib3MF_componentsobject_addcomponent uintptr - Lib3MF_componentsobject_getcomponent uintptr - Lib3MF_componentsobject_getcomponentcount uintptr - Lib3MF_beamset_setname uintptr - Lib3MF_beamset_getname uintptr - Lib3MF_beamset_setidentifier uintptr - Lib3MF_beamset_getidentifier uintptr - Lib3MF_beamset_getreferencecount uintptr - Lib3MF_beamset_setreferences uintptr - Lib3MF_beamset_getreferences uintptr - Lib3MF_beamset_getballreferencecount uintptr - Lib3MF_beamset_setballreferences uintptr - Lib3MF_beamset_getballreferences uintptr - Lib3MF_basematerialgroup_getcount uintptr - Lib3MF_basematerialgroup_getallpropertyids uintptr - Lib3MF_basematerialgroup_addmaterial uintptr - Lib3MF_basematerialgroup_removematerial uintptr - Lib3MF_basematerialgroup_getname uintptr - Lib3MF_basematerialgroup_setname uintptr - Lib3MF_basematerialgroup_setdisplaycolor uintptr - Lib3MF_basematerialgroup_getdisplaycolor uintptr - Lib3MF_colorgroup_getcount uintptr - Lib3MF_colorgroup_getallpropertyids uintptr - Lib3MF_colorgroup_addcolor uintptr - Lib3MF_colorgroup_removecolor uintptr - Lib3MF_colorgroup_setcolor uintptr - Lib3MF_colorgroup_getcolor uintptr - Lib3MF_texture2dgroup_getcount uintptr - Lib3MF_texture2dgroup_getallpropertyids uintptr - Lib3MF_texture2dgroup_addtex2coord uintptr - Lib3MF_texture2dgroup_gettex2coord uintptr - Lib3MF_texture2dgroup_removetex2coord uintptr - Lib3MF_texture2dgroup_gettexture2d uintptr - Lib3MF_compositematerials_getcount uintptr - Lib3MF_compositematerials_getallpropertyids uintptr - Lib3MF_compositematerials_getbasematerialgroup uintptr - Lib3MF_compositematerials_addcomposite uintptr - Lib3MF_compositematerials_removecomposite uintptr - Lib3MF_compositematerials_getcomposite uintptr - Lib3MF_multipropertygroup_getcount uintptr - Lib3MF_multipropertygroup_getallpropertyids uintptr - Lib3MF_multipropertygroup_addmultiproperty uintptr - Lib3MF_multipropertygroup_setmultiproperty uintptr - Lib3MF_multipropertygroup_getmultiproperty uintptr - Lib3MF_multipropertygroup_removemultiproperty uintptr - Lib3MF_multipropertygroup_getlayercount uintptr - Lib3MF_multipropertygroup_addlayer uintptr - Lib3MF_multipropertygroup_getlayer uintptr - Lib3MF_multipropertygroup_removelayer uintptr - Lib3MF_attachment_getpath uintptr - Lib3MF_attachment_setpath uintptr - Lib3MF_attachment_packagepart uintptr - Lib3MF_attachment_getrelationshiptype uintptr - Lib3MF_attachment_setrelationshiptype uintptr - Lib3MF_attachment_writetofile uintptr - Lib3MF_attachment_readfromfile uintptr - Lib3MF_attachment_readfromcallback uintptr - Lib3MF_attachment_getstreamsize uintptr - Lib3MF_attachment_writetobuffer uintptr - Lib3MF_attachment_readfrombuffer uintptr - Lib3MF_texture2d_getattachment uintptr - Lib3MF_texture2d_setattachment uintptr - Lib3MF_texture2d_getcontenttype uintptr - Lib3MF_texture2d_setcontenttype uintptr - Lib3MF_texture2d_gettilestyleuv uintptr - Lib3MF_texture2d_settilestyleuv uintptr - Lib3MF_texture2d_getfilter uintptr - Lib3MF_texture2d_setfilter uintptr - Lib3MF_builditem_getobjectresource uintptr - Lib3MF_builditem_getuuid uintptr - Lib3MF_builditem_setuuid uintptr - Lib3MF_builditem_getobjectresourceid uintptr - Lib3MF_builditem_hasobjecttransform uintptr - Lib3MF_builditem_getobjecttransform uintptr - Lib3MF_builditem_setobjecttransform uintptr - Lib3MF_builditem_getpartnumber uintptr - Lib3MF_builditem_setpartnumber uintptr - Lib3MF_builditem_getmetadatagroup uintptr - Lib3MF_builditem_getoutbox uintptr - Lib3MF_builditemiterator_movenext uintptr - Lib3MF_builditemiterator_moveprevious uintptr - Lib3MF_builditemiterator_getcurrent uintptr - Lib3MF_builditemiterator_clone uintptr - Lib3MF_builditemiterator_count uintptr - Lib3MF_slice_setvertices uintptr - Lib3MF_slice_getvertices uintptr - Lib3MF_slice_getvertexcount uintptr - Lib3MF_slice_addpolygon uintptr - Lib3MF_slice_getpolygoncount uintptr - Lib3MF_slice_setpolygonindices uintptr - Lib3MF_slice_getpolygonindices uintptr - Lib3MF_slice_getpolygonindexcount uintptr - Lib3MF_slice_getztop uintptr - Lib3MF_slicestack_getbottomz uintptr - Lib3MF_slicestack_getslicecount uintptr - Lib3MF_slicestack_getslice uintptr - Lib3MF_slicestack_addslice uintptr - Lib3MF_slicestack_getslicerefcount uintptr - Lib3MF_slicestack_addslicestackreference uintptr - Lib3MF_slicestack_getslicestackreference uintptr - Lib3MF_slicestack_collapseslicereferences uintptr - Lib3MF_slicestack_setownpath uintptr - Lib3MF_slicestack_getownpath uintptr - Lib3MF_consumer_getconsumerid uintptr - Lib3MF_consumer_getkeyid uintptr - Lib3MF_consumer_getkeyvalue uintptr - Lib3MF_accessright_getconsumer uintptr - Lib3MF_accessright_getwrappingalgorithm uintptr - Lib3MF_accessright_getmgfalgorithm uintptr - Lib3MF_accessright_getdigestmethod uintptr - Lib3MF_contentencryptionparams_getencryptionalgorithm uintptr - Lib3MF_contentencryptionparams_getkey uintptr - Lib3MF_contentencryptionparams_getinitializationvector uintptr - Lib3MF_contentencryptionparams_getauthenticationtag uintptr - Lib3MF_contentencryptionparams_setauthenticationtag uintptr + Lib3MF_image3diterator_getcurrentimage3d uintptr + Lib3MF_scalarfielditerator_getcurrentscalarfield uintptr + Lib3MF_vector3dfielditerator_getcurrentvector3dfield uintptr + Lib3MF_metadata_getnamespace uintptr + Lib3MF_metadata_setnamespace uintptr + Lib3MF_metadata_getname uintptr + Lib3MF_metadata_setname uintptr + Lib3MF_metadata_getkey uintptr + Lib3MF_metadata_getmustpreserve uintptr + Lib3MF_metadata_setmustpreserve uintptr + Lib3MF_metadata_gettype uintptr + Lib3MF_metadata_settype uintptr + Lib3MF_metadata_getvalue uintptr + Lib3MF_metadata_setvalue uintptr + Lib3MF_metadatagroup_getmetadatacount uintptr + Lib3MF_metadatagroup_getmetadata uintptr + Lib3MF_metadatagroup_getmetadatabykey uintptr + Lib3MF_metadatagroup_removemetadatabyindex uintptr + Lib3MF_metadatagroup_removemetadata uintptr + Lib3MF_metadatagroup_addmetadata uintptr + Lib3MF_object_gettype uintptr + Lib3MF_object_settype uintptr + Lib3MF_object_getname uintptr + Lib3MF_object_setname uintptr + Lib3MF_object_getpartnumber uintptr + Lib3MF_object_setpartnumber uintptr + Lib3MF_object_ismeshobject uintptr + Lib3MF_object_iscomponentsobject uintptr + Lib3MF_object_isvalid uintptr + Lib3MF_object_setattachmentasthumbnail uintptr + Lib3MF_object_getthumbnailattachment uintptr + Lib3MF_object_clearthumbnailattachment uintptr + Lib3MF_object_getoutbox uintptr + Lib3MF_object_getuuid uintptr + Lib3MF_object_setuuid uintptr + Lib3MF_object_getmetadatagroup uintptr + Lib3MF_object_setslicesmeshresolution uintptr + Lib3MF_object_getslicesmeshresolution uintptr + Lib3MF_object_hasslices uintptr + Lib3MF_object_clearslicestack uintptr + Lib3MF_object_getslicestack uintptr + Lib3MF_object_assignslicestack uintptr + Lib3MF_meshobject_getvertexcount uintptr + Lib3MF_meshobject_gettrianglecount uintptr + Lib3MF_meshobject_getvertex uintptr + Lib3MF_meshobject_setvertex uintptr + Lib3MF_meshobject_addvertex uintptr + Lib3MF_meshobject_getvertices uintptr + Lib3MF_meshobject_gettriangle uintptr + Lib3MF_meshobject_settriangle uintptr + Lib3MF_meshobject_addtriangle uintptr + Lib3MF_meshobject_gettriangleindices uintptr + Lib3MF_meshobject_setobjectlevelproperty uintptr + Lib3MF_meshobject_getobjectlevelproperty uintptr + Lib3MF_meshobject_settriangleproperties uintptr + Lib3MF_meshobject_gettriangleproperties uintptr + Lib3MF_meshobject_setalltriangleproperties uintptr + Lib3MF_meshobject_getalltriangleproperties uintptr + Lib3MF_meshobject_clearallproperties uintptr + Lib3MF_meshobject_setgeometry uintptr + Lib3MF_meshobject_ismanifoldandoriented uintptr + Lib3MF_meshobject_beamlattice uintptr + Lib3MF_meshobject_volumedata uintptr + Lib3MF_beamlattice_getminlength uintptr + Lib3MF_beamlattice_setminlength uintptr + Lib3MF_beamlattice_getclipping uintptr + Lib3MF_beamlattice_setclipping uintptr + Lib3MF_beamlattice_getrepresentation uintptr + Lib3MF_beamlattice_setrepresentation uintptr + Lib3MF_beamlattice_getballoptions uintptr + Lib3MF_beamlattice_setballoptions uintptr + Lib3MF_beamlattice_getbeamcount uintptr + Lib3MF_beamlattice_getbeam uintptr + Lib3MF_beamlattice_addbeam uintptr + Lib3MF_beamlattice_setbeam uintptr + Lib3MF_beamlattice_setbeams uintptr + Lib3MF_beamlattice_getbeams uintptr + Lib3MF_beamlattice_getballcount uintptr + Lib3MF_beamlattice_getball uintptr + Lib3MF_beamlattice_addball uintptr + Lib3MF_beamlattice_setball uintptr + Lib3MF_beamlattice_setballs uintptr + Lib3MF_beamlattice_getballs uintptr + Lib3MF_beamlattice_getbeamsetcount uintptr + Lib3MF_beamlattice_addbeamset uintptr + Lib3MF_beamlattice_getbeamset uintptr + Lib3MF_scalarfield_getname uintptr + Lib3MF_scalarfield_setname uintptr + Lib3MF_scalarfield_isfromimage3d uintptr + Lib3MF_scalarfield_isconstant uintptr + Lib3MF_scalarfield_iscomposed uintptr + Lib3MF_vector3dfield_getname uintptr + Lib3MF_vector3dfield_setname uintptr + Lib3MF_vector3dfield_isfromimage3d uintptr + Lib3MF_vector3dfield_isconstant uintptr + Lib3MF_vector3dfield_iscomposed uintptr + Lib3MF_scalarfieldfromimage3d_getimage uintptr + Lib3MF_scalarfieldfromimage3d_setimage uintptr + Lib3MF_scalarfieldfromimage3d_setchannel uintptr + Lib3MF_scalarfieldfromimage3d_getchannel uintptr + Lib3MF_scalarfieldfromimage3d_setfilter uintptr + Lib3MF_scalarfieldfromimage3d_getfilter uintptr + Lib3MF_scalarfieldfromimage3d_settilestyles uintptr + Lib3MF_scalarfieldfromimage3d_gettilestyles uintptr + Lib3MF_scalarfieldfromimage3d_getoffset uintptr + Lib3MF_scalarfieldfromimage3d_setoffset uintptr + Lib3MF_scalarfieldfromimage3d_getscale uintptr + Lib3MF_scalarfieldfromimage3d_setscale uintptr + Lib3MF_scalarfieldconstant_getvalue uintptr + Lib3MF_scalarfieldconstant_setvalue uintptr + Lib3MF_scalarfieldcomposed_setmethod uintptr + Lib3MF_scalarfieldcomposed_getmethod uintptr + Lib3MF_scalarfieldcomposed_getfactor1 uintptr + Lib3MF_scalarfieldcomposed_setfactor1 uintptr + Lib3MF_scalarfieldcomposed_getfactor2 uintptr + Lib3MF_scalarfieldcomposed_setfactor2 uintptr + Lib3MF_scalarfieldcomposed_scalarfieldreference1 uintptr + Lib3MF_scalarfieldcomposed_scalarfieldreference2 uintptr + Lib3MF_scalarfieldcomposed_scalarfieldreferencemask uintptr + Lib3MF_vector3dfieldfromimage3d_getimage uintptr + Lib3MF_vector3dfieldfromimage3d_setimage uintptr + Lib3MF_vector3dfieldfromimage3d_setfilter uintptr + Lib3MF_vector3dfieldfromimage3d_getfilter uintptr + Lib3MF_vector3dfieldfromimage3d_settilestyles uintptr + Lib3MF_vector3dfieldfromimage3d_gettilestyles uintptr + Lib3MF_vector3dfieldfromimage3d_getoffset uintptr + Lib3MF_vector3dfieldfromimage3d_setoffset uintptr + Lib3MF_vector3dfieldfromimage3d_getscale uintptr + Lib3MF_vector3dfieldfromimage3d_setscale uintptr + Lib3MF_vector3dfieldconstant_getvaluex uintptr + Lib3MF_vector3dfieldconstant_setvaluex uintptr + Lib3MF_vector3dfieldconstant_getvaluey uintptr + Lib3MF_vector3dfieldconstant_setvaluey uintptr + Lib3MF_vector3dfieldconstant_getvaluez uintptr + Lib3MF_vector3dfieldconstant_setvaluez uintptr + Lib3MF_vector3dfieldcomposed_setmethod uintptr + Lib3MF_vector3dfieldcomposed_getmethod uintptr + Lib3MF_vector3dfieldcomposed_setspace uintptr + Lib3MF_vector3dfieldcomposed_getspace uintptr + Lib3MF_vector3dfieldcomposed_getfactor1 uintptr + Lib3MF_vector3dfieldcomposed_setfactor1 uintptr + Lib3MF_vector3dfieldcomposed_getfactor2 uintptr + Lib3MF_vector3dfieldcomposed_setfactor2 uintptr + Lib3MF_vector3dfieldcomposed_vector3dfieldreference1 uintptr + Lib3MF_vector3dfieldcomposed_vector3dfieldreference2 uintptr + Lib3MF_vector3dfieldcomposed_scalarfieldreferencemask uintptr + Lib3MF_fieldreference_getfieldresourceid uintptr + Lib3MF_fieldreference_setfieldresourceid uintptr + Lib3MF_fieldreference_gettransform uintptr + Lib3MF_fieldreference_settransform uintptr + Lib3MF_scalarfieldreference_setscalarfield uintptr + Lib3MF_vector3dfieldreference_setvector3dfield uintptr + Lib3MF_volumedataboundary_getsolidthreshold uintptr + Lib3MF_volumedataboundary_setsolidthreshold uintptr + Lib3MF_volumedatacomposite_getbasematerialgroup uintptr + Lib3MF_volumedatacomposite_setbasematerialgroup uintptr + Lib3MF_volumedatacomposite_getmaterialmappingcount uintptr + Lib3MF_volumedatacomposite_getmaterialmapping uintptr + Lib3MF_volumedatacomposite_addmaterialmapping uintptr + Lib3MF_volumedatacomposite_removematerialmapping uintptr + Lib3MF_volumedataproperty_getname uintptr + Lib3MF_volumedataproperty_setisrequired uintptr + Lib3MF_volumedataproperty_isrequired uintptr + Lib3MF_volumedata_getboundary uintptr + Lib3MF_volumedata_createnewboundary uintptr + Lib3MF_volumedata_removeboundary uintptr + Lib3MF_volumedata_getcomposite uintptr + Lib3MF_volumedata_createnewcomposite uintptr + Lib3MF_volumedata_removecomposite uintptr + Lib3MF_volumedata_getcolor uintptr + Lib3MF_volumedata_createnewcolor uintptr + Lib3MF_volumedata_removecolor uintptr + Lib3MF_volumedata_getpropertycount uintptr + Lib3MF_volumedata_getproperty uintptr + Lib3MF_volumedata_addpropertyfromscalarfield uintptr + Lib3MF_volumedata_addpropertyfromvector3dfield uintptr + Lib3MF_volumedata_removeproperty uintptr + Lib3MF_component_getobjectresource uintptr + Lib3MF_component_getobjectresourceid uintptr + Lib3MF_component_getuuid uintptr + Lib3MF_component_setuuid uintptr + Lib3MF_component_hastransform uintptr + Lib3MF_component_gettransform uintptr + Lib3MF_component_settransform uintptr + Lib3MF_componentsobject_addcomponent uintptr + Lib3MF_componentsobject_getcomponent uintptr + Lib3MF_componentsobject_getcomponentcount uintptr + Lib3MF_beamset_setname uintptr + Lib3MF_beamset_getname uintptr + Lib3MF_beamset_setidentifier uintptr + Lib3MF_beamset_getidentifier uintptr + Lib3MF_beamset_getreferencecount uintptr + Lib3MF_beamset_setreferences uintptr + Lib3MF_beamset_getreferences uintptr + Lib3MF_beamset_getballreferencecount uintptr + Lib3MF_beamset_setballreferences uintptr + Lib3MF_beamset_getballreferences uintptr + Lib3MF_basematerialgroup_getcount uintptr + Lib3MF_basematerialgroup_getallpropertyids uintptr + Lib3MF_basematerialgroup_addmaterial uintptr + Lib3MF_basematerialgroup_removematerial uintptr + Lib3MF_basematerialgroup_getname uintptr + Lib3MF_basematerialgroup_setname uintptr + Lib3MF_basematerialgroup_setdisplaycolor uintptr + Lib3MF_basematerialgroup_getdisplaycolor uintptr + Lib3MF_colorgroup_getcount uintptr + Lib3MF_colorgroup_getallpropertyids uintptr + Lib3MF_colorgroup_addcolor uintptr + Lib3MF_colorgroup_removecolor uintptr + Lib3MF_colorgroup_setcolor uintptr + Lib3MF_colorgroup_getcolor uintptr + Lib3MF_texture2dgroup_getcount uintptr + Lib3MF_texture2dgroup_getallpropertyids uintptr + Lib3MF_texture2dgroup_addtex2coord uintptr + Lib3MF_texture2dgroup_gettex2coord uintptr + Lib3MF_texture2dgroup_removetex2coord uintptr + Lib3MF_texture2dgroup_gettexture2d uintptr + Lib3MF_compositematerials_getcount uintptr + Lib3MF_compositematerials_getallpropertyids uintptr + Lib3MF_compositematerials_getbasematerialgroup uintptr + Lib3MF_compositematerials_addcomposite uintptr + Lib3MF_compositematerials_removecomposite uintptr + Lib3MF_compositematerials_getcomposite uintptr + Lib3MF_multipropertygroup_getcount uintptr + Lib3MF_multipropertygroup_getallpropertyids uintptr + Lib3MF_multipropertygroup_addmultiproperty uintptr + Lib3MF_multipropertygroup_setmultiproperty uintptr + Lib3MF_multipropertygroup_getmultiproperty uintptr + Lib3MF_multipropertygroup_removemultiproperty uintptr + Lib3MF_multipropertygroup_getlayercount uintptr + Lib3MF_multipropertygroup_addlayer uintptr + Lib3MF_multipropertygroup_getlayer uintptr + Lib3MF_multipropertygroup_removelayer uintptr + Lib3MF_image3d_getname uintptr + Lib3MF_image3d_setname uintptr + Lib3MF_image3d_isimagestack uintptr + Lib3MF_imagestack_getrowcount uintptr + Lib3MF_imagestack_setrowcount uintptr + Lib3MF_imagestack_getcolumncount uintptr + Lib3MF_imagestack_setcolumncount uintptr + Lib3MF_imagestack_getsheetcount uintptr + Lib3MF_imagestack_getsheet uintptr + Lib3MF_imagestack_setsheet uintptr + Lib3MF_imagestack_createemptysheet uintptr + Lib3MF_imagestack_createsheetfrombuffer uintptr + Lib3MF_imagestack_createsheetfromfile uintptr + Lib3MF_attachment_getpath uintptr + Lib3MF_attachment_setpath uintptr + Lib3MF_attachment_packagepart uintptr + Lib3MF_attachment_getrelationshiptype uintptr + Lib3MF_attachment_setrelationshiptype uintptr + Lib3MF_attachment_writetofile uintptr + Lib3MF_attachment_readfromfile uintptr + Lib3MF_attachment_readfromcallback uintptr + Lib3MF_attachment_getstreamsize uintptr + Lib3MF_attachment_writetobuffer uintptr + Lib3MF_attachment_readfrombuffer uintptr + Lib3MF_texture2d_getattachment uintptr + Lib3MF_texture2d_setattachment uintptr + Lib3MF_texture2d_getcontenttype uintptr + Lib3MF_texture2d_setcontenttype uintptr + Lib3MF_texture2d_gettilestyleuv uintptr + Lib3MF_texture2d_settilestyleuv uintptr + Lib3MF_texture2d_getfilter uintptr + Lib3MF_texture2d_setfilter uintptr + Lib3MF_builditem_getobjectresource uintptr + Lib3MF_builditem_getuuid uintptr + Lib3MF_builditem_setuuid uintptr + Lib3MF_builditem_getobjectresourceid uintptr + Lib3MF_builditem_hasobjecttransform uintptr + Lib3MF_builditem_getobjecttransform uintptr + Lib3MF_builditem_setobjecttransform uintptr + Lib3MF_builditem_getpartnumber uintptr + Lib3MF_builditem_setpartnumber uintptr + Lib3MF_builditem_getmetadatagroup uintptr + Lib3MF_builditem_getoutbox uintptr + Lib3MF_builditemiterator_movenext uintptr + Lib3MF_builditemiterator_moveprevious uintptr + Lib3MF_builditemiterator_getcurrent uintptr + Lib3MF_builditemiterator_clone uintptr + Lib3MF_builditemiterator_count uintptr + Lib3MF_slice_setvertices uintptr + Lib3MF_slice_getvertices uintptr + Lib3MF_slice_getvertexcount uintptr + Lib3MF_slice_addpolygon uintptr + Lib3MF_slice_getpolygoncount uintptr + Lib3MF_slice_setpolygonindices uintptr + Lib3MF_slice_getpolygonindices uintptr + Lib3MF_slice_getpolygonindexcount uintptr + Lib3MF_slice_getztop uintptr + Lib3MF_slicestack_getbottomz uintptr + Lib3MF_slicestack_getslicecount uintptr + Lib3MF_slicestack_getslice uintptr + Lib3MF_slicestack_addslice uintptr + Lib3MF_slicestack_getslicerefcount uintptr + Lib3MF_slicestack_addslicestackreference uintptr + Lib3MF_slicestack_getslicestackreference uintptr + Lib3MF_slicestack_collapseslicereferences uintptr + Lib3MF_slicestack_setownpath uintptr + Lib3MF_slicestack_getownpath uintptr + Lib3MF_consumer_getconsumerid uintptr + Lib3MF_consumer_getkeyid uintptr + Lib3MF_consumer_getkeyvalue uintptr + Lib3MF_accessright_getconsumer uintptr + Lib3MF_accessright_getwrappingalgorithm uintptr + Lib3MF_accessright_getmgfalgorithm uintptr + Lib3MF_accessright_getdigestmethod uintptr + Lib3MF_contentencryptionparams_getencryptionalgorithm uintptr + Lib3MF_contentencryptionparams_getkey uintptr + Lib3MF_contentencryptionparams_getinitializationvector uintptr + Lib3MF_contentencryptionparams_getauthenticationtag uintptr + Lib3MF_contentencryptionparams_setauthenticationtag uintptr Lib3MF_contentencryptionparams_getadditionalauthenticationdata uintptr - Lib3MF_contentencryptionparams_getdescriptor uintptr - Lib3MF_contentencryptionparams_getkeyuuid uintptr - Lib3MF_resourcedata_getpath uintptr - Lib3MF_resourcedata_getencryptionalgorithm uintptr - Lib3MF_resourcedata_getcompression uintptr - Lib3MF_resourcedata_getadditionalauthenticationdata uintptr - Lib3MF_resourcedatagroup_getkeyuuid uintptr - Lib3MF_resourcedatagroup_addaccessright uintptr - Lib3MF_resourcedatagroup_findaccessrightbyconsumer uintptr - Lib3MF_resourcedatagroup_removeaccessright uintptr - Lib3MF_keystore_addconsumer uintptr - Lib3MF_keystore_getconsumercount uintptr - Lib3MF_keystore_getconsumer uintptr - Lib3MF_keystore_removeconsumer uintptr - Lib3MF_keystore_findconsumer uintptr - Lib3MF_keystore_getresourcedatagroupcount uintptr - Lib3MF_keystore_addresourcedatagroup uintptr - Lib3MF_keystore_getresourcedatagroup uintptr - Lib3MF_keystore_removeresourcedatagroup uintptr - Lib3MF_keystore_findresourcedatagroup uintptr - Lib3MF_keystore_addresourcedata uintptr - Lib3MF_keystore_removeresourcedata uintptr - Lib3MF_keystore_findresourcedata uintptr - Lib3MF_keystore_getresourcedatacount uintptr - Lib3MF_keystore_getresourcedata uintptr - Lib3MF_keystore_getuuid uintptr - Lib3MF_keystore_setuuid uintptr - Lib3MF_model_rootmodelpart uintptr - Lib3MF_model_findorcreatepackagepart uintptr - Lib3MF_model_setunit uintptr - Lib3MF_model_getunit uintptr - Lib3MF_model_getlanguage uintptr - Lib3MF_model_setlanguage uintptr - Lib3MF_model_querywriter uintptr - Lib3MF_model_queryreader uintptr - Lib3MF_model_gettexture2dbyid uintptr - Lib3MF_model_getpropertytypebyid uintptr - Lib3MF_model_getbasematerialgroupbyid uintptr - Lib3MF_model_gettexture2dgroupbyid uintptr - Lib3MF_model_getcompositematerialsbyid uintptr - Lib3MF_model_getmultipropertygroupbyid uintptr - Lib3MF_model_getmeshobjectbyid uintptr - Lib3MF_model_getcomponentsobjectbyid uintptr - Lib3MF_model_getcolorgroupbyid uintptr - Lib3MF_model_getslicestackbyid uintptr - Lib3MF_model_getbuilduuid uintptr - Lib3MF_model_setbuilduuid uintptr - Lib3MF_model_getbuilditems uintptr - Lib3MF_model_getoutbox uintptr - Lib3MF_model_getresources uintptr - Lib3MF_model_getobjects uintptr - Lib3MF_model_getmeshobjects uintptr - Lib3MF_model_getcomponentsobjects uintptr - Lib3MF_model_gettexture2ds uintptr - Lib3MF_model_getbasematerialgroups uintptr - Lib3MF_model_getcolorgroups uintptr - Lib3MF_model_gettexture2dgroups uintptr - Lib3MF_model_getcompositematerials uintptr - Lib3MF_model_getmultipropertygroups uintptr - Lib3MF_model_getslicestacks uintptr - Lib3MF_model_mergetomodel uintptr - Lib3MF_model_addmeshobject uintptr - Lib3MF_model_addcomponentsobject uintptr - Lib3MF_model_addslicestack uintptr - Lib3MF_model_addtexture2dfromattachment uintptr - Lib3MF_model_addbasematerialgroup uintptr - Lib3MF_model_addcolorgroup uintptr - Lib3MF_model_addtexture2dgroup uintptr - Lib3MF_model_addcompositematerials uintptr - Lib3MF_model_addmultipropertygroup uintptr - Lib3MF_model_addbuilditem uintptr - Lib3MF_model_removebuilditem uintptr - Lib3MF_model_getmetadatagroup uintptr - Lib3MF_model_addattachment uintptr - Lib3MF_model_removeattachment uintptr - Lib3MF_model_getattachment uintptr - Lib3MF_model_findattachment uintptr - Lib3MF_model_getattachmentcount uintptr - Lib3MF_model_haspackagethumbnailattachment uintptr - Lib3MF_model_createpackagethumbnailattachment uintptr - Lib3MF_model_getpackagethumbnailattachment uintptr - Lib3MF_model_removepackagethumbnailattachment uintptr - Lib3MF_model_addcustomcontenttype uintptr - Lib3MF_model_removecustomcontenttype uintptr - Lib3MF_model_setrandomnumbercallback uintptr - Lib3MF_model_getkeystore uintptr - Lib3MF_getlibraryversion uintptr - Lib3MF_getprereleaseinformation uintptr - Lib3MF_getbuildinformation uintptr - Lib3MF_getspecificationversion uintptr - Lib3MF_createmodel uintptr - Lib3MF_release uintptr - Lib3MF_acquire uintptr - Lib3MF_setjournal uintptr - Lib3MF_getlasterror uintptr - Lib3MF_getsymbollookupmethod uintptr - Lib3MF_retrieveprogressmessage uintptr - Lib3MF_rgbatocolor uintptr - Lib3MF_floatrgbatocolor uintptr - Lib3MF_colortorgba uintptr - Lib3MF_colortofloatrgba uintptr - Lib3MF_getidentitytransform uintptr - Lib3MF_getuniformscaletransform uintptr - Lib3MF_getscaletransform uintptr - Lib3MF_gettranslationtransform uintptr + Lib3MF_contentencryptionparams_getdescriptor uintptr + Lib3MF_contentencryptionparams_getkeyuuid uintptr + Lib3MF_resourcedata_getpath uintptr + Lib3MF_resourcedata_getencryptionalgorithm uintptr + Lib3MF_resourcedata_getcompression uintptr + Lib3MF_resourcedata_getadditionalauthenticationdata uintptr + Lib3MF_resourcedatagroup_getkeyuuid uintptr + Lib3MF_resourcedatagroup_addaccessright uintptr + Lib3MF_resourcedatagroup_findaccessrightbyconsumer uintptr + Lib3MF_resourcedatagroup_removeaccessright uintptr + Lib3MF_keystore_addconsumer uintptr + Lib3MF_keystore_getconsumercount uintptr + Lib3MF_keystore_getconsumer uintptr + Lib3MF_keystore_removeconsumer uintptr + Lib3MF_keystore_findconsumer uintptr + Lib3MF_keystore_getresourcedatagroupcount uintptr + Lib3MF_keystore_addresourcedatagroup uintptr + Lib3MF_keystore_getresourcedatagroup uintptr + Lib3MF_keystore_removeresourcedatagroup uintptr + Lib3MF_keystore_findresourcedatagroup uintptr + Lib3MF_keystore_addresourcedata uintptr + Lib3MF_keystore_removeresourcedata uintptr + Lib3MF_keystore_findresourcedata uintptr + Lib3MF_keystore_getresourcedatacount uintptr + Lib3MF_keystore_getresourcedata uintptr + Lib3MF_keystore_getuuid uintptr + Lib3MF_keystore_setuuid uintptr + Lib3MF_model_rootmodelpart uintptr + Lib3MF_model_findorcreatepackagepart uintptr + Lib3MF_model_setunit uintptr + Lib3MF_model_getunit uintptr + Lib3MF_model_getlanguage uintptr + Lib3MF_model_setlanguage uintptr + Lib3MF_model_querywriter uintptr + Lib3MF_model_queryreader uintptr + Lib3MF_model_gettexture2dbyid uintptr + Lib3MF_model_getpropertytypebyid uintptr + Lib3MF_model_getbasematerialgroupbyid uintptr + Lib3MF_model_gettexture2dgroupbyid uintptr + Lib3MF_model_getcompositematerialsbyid uintptr + Lib3MF_model_getmultipropertygroupbyid uintptr + Lib3MF_model_getmeshobjectbyid uintptr + Lib3MF_model_getcomponentsobjectbyid uintptr + Lib3MF_model_getcolorgroupbyid uintptr + Lib3MF_model_getslicestackbyid uintptr + Lib3MF_model_getbuilduuid uintptr + Lib3MF_model_setbuilduuid uintptr + Lib3MF_model_getbuilditems uintptr + Lib3MF_model_getoutbox uintptr + Lib3MF_model_getresources uintptr + Lib3MF_model_getobjects uintptr + Lib3MF_model_getmeshobjects uintptr + Lib3MF_model_getcomponentsobjects uintptr + Lib3MF_model_gettexture2ds uintptr + Lib3MF_model_getbasematerialgroups uintptr + Lib3MF_model_getcolorgroups uintptr + Lib3MF_model_gettexture2dgroups uintptr + Lib3MF_model_getcompositematerials uintptr + Lib3MF_model_getmultipropertygroups uintptr + Lib3MF_model_getslicestacks uintptr + Lib3MF_model_getimage3ds uintptr + Lib3MF_model_getscalarfields uintptr + Lib3MF_model_getvector3dfields uintptr + Lib3MF_model_mergetomodel uintptr + Lib3MF_model_addmeshobject uintptr + Lib3MF_model_addcomponentsobject uintptr + Lib3MF_model_addslicestack uintptr + Lib3MF_model_addtexture2dfromattachment uintptr + Lib3MF_model_addbasematerialgroup uintptr + Lib3MF_model_addcolorgroup uintptr + Lib3MF_model_addtexture2dgroup uintptr + Lib3MF_model_addcompositematerials uintptr + Lib3MF_model_addmultipropertygroup uintptr + Lib3MF_model_addimagestack uintptr + Lib3MF_model_getimagestackbyid uintptr + Lib3MF_model_addscalarfieldfromimage3d uintptr + Lib3MF_model_addscalarfieldcomposed uintptr + Lib3MF_model_addscalarfieldconstant uintptr + Lib3MF_model_getscalarfieldbyid uintptr + Lib3MF_model_getscalarfieldfromimage3dbyid uintptr + Lib3MF_model_getscalarfieldcomposedbyid uintptr + Lib3MF_model_getscalarfieldconstantbyid uintptr + Lib3MF_model_addvector3dfieldfromimage3d uintptr + Lib3MF_model_addvector3dfieldcomposed uintptr + Lib3MF_model_addvector3dfieldconstant uintptr + Lib3MF_model_getvector3dfieldbyid uintptr + Lib3MF_model_getvector3dfieldfromimage3dbyid uintptr + Lib3MF_model_getvector3dfieldcomposedbyid uintptr + Lib3MF_model_getvector3dfieldconstantbyid uintptr + Lib3MF_model_addbuilditem uintptr + Lib3MF_model_removebuilditem uintptr + Lib3MF_model_getmetadatagroup uintptr + Lib3MF_model_addattachment uintptr + Lib3MF_model_removeattachment uintptr + Lib3MF_model_getattachment uintptr + Lib3MF_model_findattachment uintptr + Lib3MF_model_getattachmentcount uintptr + Lib3MF_model_haspackagethumbnailattachment uintptr + Lib3MF_model_createpackagethumbnailattachment uintptr + Lib3MF_model_getpackagethumbnailattachment uintptr + Lib3MF_model_removepackagethumbnailattachment uintptr + Lib3MF_model_addcustomcontenttype uintptr + Lib3MF_model_removecustomcontenttype uintptr + Lib3MF_model_setrandomnumbercallback uintptr + Lib3MF_model_getkeystore uintptr + Lib3MF_getlibraryversion uintptr + Lib3MF_getprereleaseinformation uintptr + Lib3MF_getbuildinformation uintptr + Lib3MF_getspecificationversion uintptr + Lib3MF_createmodel uintptr + Lib3MF_release uintptr + Lib3MF_acquire uintptr + Lib3MF_setjournal uintptr + Lib3MF_getlasterror uintptr + Lib3MF_getsymbollookupmethod uintptr + Lib3MF_retrieveprogressmessage uintptr + Lib3MF_rgbatocolor uintptr + Lib3MF_floatrgbatocolor uintptr + Lib3MF_colortorgba uintptr + Lib3MF_colortofloatrgba uintptr + Lib3MF_getidentitytransform uintptr + Lib3MF_getuniformscaletransform uintptr + Lib3MF_getscaletransform uintptr + Lib3MF_gettranslationtransform uintptr } type Lib3MFImplementationHandle interface { @@ -871,7 +998,22 @@ func (implementation *Lib3MFImplementation) Initialize(DLLFileName string) error if err != nil { return errors.New("Could not get function lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup: " + err.Error()) } - + + implementation.Lib3MF_image3diterator_getcurrentimage3d, err = syscall.GetProcAddress(dllHandle, "lib3mf_image3diterator_getcurrentimage3d") + if (err != nil) { + return errors.New("Could not get function lib3mf_image3diterator_getcurrentimage3d: " + err.Error()) + } + + implementation.Lib3MF_scalarfielditerator_getcurrentscalarfield, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfielditerator_getcurrentscalarfield") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfielditerator_getcurrentscalarfield: " + err.Error()) + } + + implementation.Lib3MF_vector3dfielditerator_getcurrentvector3dfield, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfielditerator_getcurrentvector3dfield") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfielditerator_getcurrentvector3dfield: " + err.Error()) + } + implementation.Lib3MF_metadata_getnamespace, err = syscall.GetProcAddress(dllHandle, "lib3mf_metadata_getnamespace") if err != nil { return errors.New("Could not get function lib3mf_metadata_getnamespace: " + err.Error()) @@ -1166,7 +1308,12 @@ func (implementation *Lib3MFImplementation) Initialize(DLLFileName string) error if err != nil { return errors.New("Could not get function lib3mf_meshobject_beamlattice: " + err.Error()) } - + + implementation.Lib3MF_meshobject_volumedata, err = syscall.GetProcAddress(dllHandle, "lib3mf_meshobject_volumedata") + if (err != nil) { + return errors.New("Could not get function lib3mf_meshobject_volumedata: " + err.Error()) + } + implementation.Lib3MF_beamlattice_getminlength, err = syscall.GetProcAddress(dllHandle, "lib3mf_beamlattice_getminlength") if err != nil { return errors.New("Could not get function lib3mf_beamlattice_getminlength: " + err.Error()) @@ -1281,7 +1428,462 @@ func (implementation *Lib3MFImplementation) Initialize(DLLFileName string) error if err != nil { return errors.New("Could not get function lib3mf_beamlattice_getbeamset: " + err.Error()) } - + + implementation.Lib3MF_scalarfield_getname, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfield_getname") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfield_getname: " + err.Error()) + } + + implementation.Lib3MF_scalarfield_setname, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfield_setname") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfield_setname: " + err.Error()) + } + + implementation.Lib3MF_scalarfield_isfromimage3d, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfield_isfromimage3d") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfield_isfromimage3d: " + err.Error()) + } + + implementation.Lib3MF_scalarfield_isconstant, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfield_isconstant") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfield_isconstant: " + err.Error()) + } + + implementation.Lib3MF_scalarfield_iscomposed, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfield_iscomposed") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfield_iscomposed: " + err.Error()) + } + + implementation.Lib3MF_vector3dfield_getname, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfield_getname") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfield_getname: " + err.Error()) + } + + implementation.Lib3MF_vector3dfield_setname, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfield_setname") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfield_setname: " + err.Error()) + } + + implementation.Lib3MF_vector3dfield_isfromimage3d, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfield_isfromimage3d") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfield_isfromimage3d: " + err.Error()) + } + + implementation.Lib3MF_vector3dfield_isconstant, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfield_isconstant") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfield_isconstant: " + err.Error()) + } + + implementation.Lib3MF_vector3dfield_iscomposed, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfield_iscomposed") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfield_iscomposed: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldfromimage3d_getimage, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldfromimage3d_getimage") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldfromimage3d_getimage: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldfromimage3d_setimage, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldfromimage3d_setimage") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldfromimage3d_setimage: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldfromimage3d_setchannel, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldfromimage3d_setchannel") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldfromimage3d_setchannel: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldfromimage3d_getchannel, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldfromimage3d_getchannel") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldfromimage3d_getchannel: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldfromimage3d_setfilter, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldfromimage3d_setfilter") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldfromimage3d_setfilter: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldfromimage3d_getfilter, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldfromimage3d_getfilter") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldfromimage3d_getfilter: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldfromimage3d_settilestyles, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldfromimage3d_settilestyles") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldfromimage3d_settilestyles: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldfromimage3d_gettilestyles, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldfromimage3d_gettilestyles") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldfromimage3d_gettilestyles: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldfromimage3d_getoffset, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldfromimage3d_getoffset") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldfromimage3d_getoffset: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldfromimage3d_setoffset, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldfromimage3d_setoffset") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldfromimage3d_setoffset: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldfromimage3d_getscale, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldfromimage3d_getscale") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldfromimage3d_getscale: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldfromimage3d_setscale, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldfromimage3d_setscale") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldfromimage3d_setscale: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldconstant_getvalue, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldconstant_getvalue") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldconstant_getvalue: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldconstant_setvalue, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldconstant_setvalue") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldconstant_setvalue: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldcomposed_setmethod, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldcomposed_setmethod") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldcomposed_setmethod: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldcomposed_getmethod, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldcomposed_getmethod") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldcomposed_getmethod: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldcomposed_getfactor1, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldcomposed_getfactor1") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldcomposed_getfactor1: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldcomposed_setfactor1, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldcomposed_setfactor1") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldcomposed_setfactor1: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldcomposed_getfactor2, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldcomposed_getfactor2") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldcomposed_getfactor2: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldcomposed_setfactor2, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldcomposed_setfactor2") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldcomposed_setfactor2: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldcomposed_scalarfieldreference1, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldcomposed_scalarfieldreference1") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldcomposed_scalarfieldreference1: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldcomposed_scalarfieldreference2, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldcomposed_scalarfieldreference2") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldcomposed_scalarfieldreference2: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldcomposed_scalarfieldreferencemask, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldcomposed_scalarfieldreferencemask") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldcomposed_scalarfieldreferencemask: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldfromimage3d_getimage, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldfromimage3d_getimage") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldfromimage3d_getimage: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldfromimage3d_setimage, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldfromimage3d_setimage") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldfromimage3d_setimage: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldfromimage3d_setfilter, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldfromimage3d_setfilter") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldfromimage3d_setfilter: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldfromimage3d_getfilter, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldfromimage3d_getfilter") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldfromimage3d_getfilter: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldfromimage3d_settilestyles, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldfromimage3d_settilestyles") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldfromimage3d_settilestyles: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldfromimage3d_gettilestyles, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldfromimage3d_gettilestyles") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldfromimage3d_gettilestyles: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldfromimage3d_getoffset, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldfromimage3d_getoffset") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldfromimage3d_getoffset: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldfromimage3d_setoffset, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldfromimage3d_setoffset") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldfromimage3d_setoffset: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldfromimage3d_getscale, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldfromimage3d_getscale") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldfromimage3d_getscale: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldfromimage3d_setscale, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldfromimage3d_setscale") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldfromimage3d_setscale: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldconstant_getvaluex, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldconstant_getvaluex") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldconstant_getvaluex: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldconstant_setvaluex, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldconstant_setvaluex") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldconstant_setvaluex: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldconstant_getvaluey, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldconstant_getvaluey") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldconstant_getvaluey: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldconstant_setvaluey, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldconstant_setvaluey") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldconstant_setvaluey: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldconstant_getvaluez, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldconstant_getvaluez") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldconstant_getvaluez: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldconstant_setvaluez, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldconstant_setvaluez") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldconstant_setvaluez: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldcomposed_setmethod, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldcomposed_setmethod") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldcomposed_setmethod: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldcomposed_getmethod, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldcomposed_getmethod") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldcomposed_getmethod: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldcomposed_setspace, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldcomposed_setspace") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldcomposed_setspace: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldcomposed_getspace, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldcomposed_getspace") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldcomposed_getspace: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldcomposed_getfactor1, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldcomposed_getfactor1") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldcomposed_getfactor1: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldcomposed_setfactor1, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldcomposed_setfactor1") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldcomposed_setfactor1: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldcomposed_getfactor2, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldcomposed_getfactor2") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldcomposed_getfactor2: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldcomposed_setfactor2, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldcomposed_setfactor2") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldcomposed_setfactor2: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldcomposed_vector3dfieldreference1, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldcomposed_vector3dfieldreference1") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldcomposed_vector3dfieldreference1: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldcomposed_vector3dfieldreference2, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldcomposed_vector3dfieldreference2") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldcomposed_vector3dfieldreference2: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldcomposed_scalarfieldreferencemask, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldcomposed_scalarfieldreferencemask") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldcomposed_scalarfieldreferencemask: " + err.Error()) + } + + implementation.Lib3MF_fieldreference_getfieldresourceid, err = syscall.GetProcAddress(dllHandle, "lib3mf_fieldreference_getfieldresourceid") + if (err != nil) { + return errors.New("Could not get function lib3mf_fieldreference_getfieldresourceid: " + err.Error()) + } + + implementation.Lib3MF_fieldreference_setfieldresourceid, err = syscall.GetProcAddress(dllHandle, "lib3mf_fieldreference_setfieldresourceid") + if (err != nil) { + return errors.New("Could not get function lib3mf_fieldreference_setfieldresourceid: " + err.Error()) + } + + implementation.Lib3MF_fieldreference_gettransform, err = syscall.GetProcAddress(dllHandle, "lib3mf_fieldreference_gettransform") + if (err != nil) { + return errors.New("Could not get function lib3mf_fieldreference_gettransform: " + err.Error()) + } + + implementation.Lib3MF_fieldreference_settransform, err = syscall.GetProcAddress(dllHandle, "lib3mf_fieldreference_settransform") + if (err != nil) { + return errors.New("Could not get function lib3mf_fieldreference_settransform: " + err.Error()) + } + + implementation.Lib3MF_scalarfieldreference_setscalarfield, err = syscall.GetProcAddress(dllHandle, "lib3mf_scalarfieldreference_setscalarfield") + if (err != nil) { + return errors.New("Could not get function lib3mf_scalarfieldreference_setscalarfield: " + err.Error()) + } + + implementation.Lib3MF_vector3dfieldreference_setvector3dfield, err = syscall.GetProcAddress(dllHandle, "lib3mf_vector3dfieldreference_setvector3dfield") + if (err != nil) { + return errors.New("Could not get function lib3mf_vector3dfieldreference_setvector3dfield: " + err.Error()) + } + + implementation.Lib3MF_volumedataboundary_getsolidthreshold, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedataboundary_getsolidthreshold") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedataboundary_getsolidthreshold: " + err.Error()) + } + + implementation.Lib3MF_volumedataboundary_setsolidthreshold, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedataboundary_setsolidthreshold") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedataboundary_setsolidthreshold: " + err.Error()) + } + + implementation.Lib3MF_volumedatacomposite_getbasematerialgroup, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedatacomposite_getbasematerialgroup") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedatacomposite_getbasematerialgroup: " + err.Error()) + } + + implementation.Lib3MF_volumedatacomposite_setbasematerialgroup, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedatacomposite_setbasematerialgroup") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedatacomposite_setbasematerialgroup: " + err.Error()) + } + + implementation.Lib3MF_volumedatacomposite_getmaterialmappingcount, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedatacomposite_getmaterialmappingcount") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedatacomposite_getmaterialmappingcount: " + err.Error()) + } + + implementation.Lib3MF_volumedatacomposite_getmaterialmapping, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedatacomposite_getmaterialmapping") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedatacomposite_getmaterialmapping: " + err.Error()) + } + + implementation.Lib3MF_volumedatacomposite_addmaterialmapping, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedatacomposite_addmaterialmapping") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedatacomposite_addmaterialmapping: " + err.Error()) + } + + implementation.Lib3MF_volumedatacomposite_removematerialmapping, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedatacomposite_removematerialmapping") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedatacomposite_removematerialmapping: " + err.Error()) + } + + implementation.Lib3MF_volumedataproperty_getname, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedataproperty_getname") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedataproperty_getname: " + err.Error()) + } + + implementation.Lib3MF_volumedataproperty_setisrequired, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedataproperty_setisrequired") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedataproperty_setisrequired: " + err.Error()) + } + + implementation.Lib3MF_volumedataproperty_isrequired, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedataproperty_isrequired") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedataproperty_isrequired: " + err.Error()) + } + + implementation.Lib3MF_volumedata_getboundary, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_getboundary") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_getboundary: " + err.Error()) + } + + implementation.Lib3MF_volumedata_createnewboundary, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_createnewboundary") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_createnewboundary: " + err.Error()) + } + + implementation.Lib3MF_volumedata_removeboundary, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_removeboundary") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_removeboundary: " + err.Error()) + } + + implementation.Lib3MF_volumedata_getcomposite, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_getcomposite") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_getcomposite: " + err.Error()) + } + + implementation.Lib3MF_volumedata_createnewcomposite, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_createnewcomposite") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_createnewcomposite: " + err.Error()) + } + + implementation.Lib3MF_volumedata_removecomposite, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_removecomposite") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_removecomposite: " + err.Error()) + } + + implementation.Lib3MF_volumedata_getcolor, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_getcolor") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_getcolor: " + err.Error()) + } + + implementation.Lib3MF_volumedata_createnewcolor, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_createnewcolor") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_createnewcolor: " + err.Error()) + } + + implementation.Lib3MF_volumedata_removecolor, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_removecolor") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_removecolor: " + err.Error()) + } + + implementation.Lib3MF_volumedata_getpropertycount, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_getpropertycount") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_getpropertycount: " + err.Error()) + } + + implementation.Lib3MF_volumedata_getproperty, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_getproperty") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_getproperty: " + err.Error()) + } + + implementation.Lib3MF_volumedata_addpropertyfromscalarfield, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_addpropertyfromscalarfield") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_addpropertyfromscalarfield: " + err.Error()) + } + + implementation.Lib3MF_volumedata_addpropertyfromvector3dfield, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_addpropertyfromvector3dfield") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_addpropertyfromvector3dfield: " + err.Error()) + } + + implementation.Lib3MF_volumedata_removeproperty, err = syscall.GetProcAddress(dllHandle, "lib3mf_volumedata_removeproperty") + if (err != nil) { + return errors.New("Could not get function lib3mf_volumedata_removeproperty: " + err.Error()) + } + implementation.Lib3MF_component_getobjectresource, err = syscall.GetProcAddress(dllHandle, "lib3mf_component_getobjectresource") if err != nil { return errors.New("Could not get function lib3mf_component_getobjectresource: " + err.Error()) @@ -1561,7 +2163,72 @@ func (implementation *Lib3MFImplementation) Initialize(DLLFileName string) error if err != nil { return errors.New("Could not get function lib3mf_multipropertygroup_removelayer: " + err.Error()) } - + + implementation.Lib3MF_image3d_getname, err = syscall.GetProcAddress(dllHandle, "lib3mf_image3d_getname") + if (err != nil) { + return errors.New("Could not get function lib3mf_image3d_getname: " + err.Error()) + } + + implementation.Lib3MF_image3d_setname, err = syscall.GetProcAddress(dllHandle, "lib3mf_image3d_setname") + if (err != nil) { + return errors.New("Could not get function lib3mf_image3d_setname: " + err.Error()) + } + + implementation.Lib3MF_image3d_isimagestack, err = syscall.GetProcAddress(dllHandle, "lib3mf_image3d_isimagestack") + if (err != nil) { + return errors.New("Could not get function lib3mf_image3d_isimagestack: " + err.Error()) + } + + implementation.Lib3MF_imagestack_getrowcount, err = syscall.GetProcAddress(dllHandle, "lib3mf_imagestack_getrowcount") + if (err != nil) { + return errors.New("Could not get function lib3mf_imagestack_getrowcount: " + err.Error()) + } + + implementation.Lib3MF_imagestack_setrowcount, err = syscall.GetProcAddress(dllHandle, "lib3mf_imagestack_setrowcount") + if (err != nil) { + return errors.New("Could not get function lib3mf_imagestack_setrowcount: " + err.Error()) + } + + implementation.Lib3MF_imagestack_getcolumncount, err = syscall.GetProcAddress(dllHandle, "lib3mf_imagestack_getcolumncount") + if (err != nil) { + return errors.New("Could not get function lib3mf_imagestack_getcolumncount: " + err.Error()) + } + + implementation.Lib3MF_imagestack_setcolumncount, err = syscall.GetProcAddress(dllHandle, "lib3mf_imagestack_setcolumncount") + if (err != nil) { + return errors.New("Could not get function lib3mf_imagestack_setcolumncount: " + err.Error()) + } + + implementation.Lib3MF_imagestack_getsheetcount, err = syscall.GetProcAddress(dllHandle, "lib3mf_imagestack_getsheetcount") + if (err != nil) { + return errors.New("Could not get function lib3mf_imagestack_getsheetcount: " + err.Error()) + } + + implementation.Lib3MF_imagestack_getsheet, err = syscall.GetProcAddress(dllHandle, "lib3mf_imagestack_getsheet") + if (err != nil) { + return errors.New("Could not get function lib3mf_imagestack_getsheet: " + err.Error()) + } + + implementation.Lib3MF_imagestack_setsheet, err = syscall.GetProcAddress(dllHandle, "lib3mf_imagestack_setsheet") + if (err != nil) { + return errors.New("Could not get function lib3mf_imagestack_setsheet: " + err.Error()) + } + + implementation.Lib3MF_imagestack_createemptysheet, err = syscall.GetProcAddress(dllHandle, "lib3mf_imagestack_createemptysheet") + if (err != nil) { + return errors.New("Could not get function lib3mf_imagestack_createemptysheet: " + err.Error()) + } + + implementation.Lib3MF_imagestack_createsheetfrombuffer, err = syscall.GetProcAddress(dllHandle, "lib3mf_imagestack_createsheetfrombuffer") + if (err != nil) { + return errors.New("Could not get function lib3mf_imagestack_createsheetfrombuffer: " + err.Error()) + } + + implementation.Lib3MF_imagestack_createsheetfromfile, err = syscall.GetProcAddress(dllHandle, "lib3mf_imagestack_createsheetfromfile") + if (err != nil) { + return errors.New("Could not get function lib3mf_imagestack_createsheetfromfile: " + err.Error()) + } + implementation.Lib3MF_attachment_getpath, err = syscall.GetProcAddress(dllHandle, "lib3mf_attachment_getpath") if err != nil { return errors.New("Could not get function lib3mf_attachment_getpath: " + err.Error()) @@ -2196,7 +2863,22 @@ func (implementation *Lib3MFImplementation) Initialize(DLLFileName string) error if err != nil { return errors.New("Could not get function lib3mf_model_getslicestacks: " + err.Error()) } - + + implementation.Lib3MF_model_getimage3ds, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_getimage3ds") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_getimage3ds: " + err.Error()) + } + + implementation.Lib3MF_model_getscalarfields, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_getscalarfields") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_getscalarfields: " + err.Error()) + } + + implementation.Lib3MF_model_getvector3dfields, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_getvector3dfields") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_getvector3dfields: " + err.Error()) + } + implementation.Lib3MF_model_mergetomodel, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_mergetomodel") if err != nil { return errors.New("Could not get function lib3mf_model_mergetomodel: " + err.Error()) @@ -2246,7 +2928,87 @@ func (implementation *Lib3MFImplementation) Initialize(DLLFileName string) error if err != nil { return errors.New("Could not get function lib3mf_model_addmultipropertygroup: " + err.Error()) } - + + implementation.Lib3MF_model_addimagestack, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_addimagestack") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_addimagestack: " + err.Error()) + } + + implementation.Lib3MF_model_getimagestackbyid, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_getimagestackbyid") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_getimagestackbyid: " + err.Error()) + } + + implementation.Lib3MF_model_addscalarfieldfromimage3d, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_addscalarfieldfromimage3d") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_addscalarfieldfromimage3d: " + err.Error()) + } + + implementation.Lib3MF_model_addscalarfieldcomposed, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_addscalarfieldcomposed") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_addscalarfieldcomposed: " + err.Error()) + } + + implementation.Lib3MF_model_addscalarfieldconstant, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_addscalarfieldconstant") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_addscalarfieldconstant: " + err.Error()) + } + + implementation.Lib3MF_model_getscalarfieldbyid, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_getscalarfieldbyid") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_getscalarfieldbyid: " + err.Error()) + } + + implementation.Lib3MF_model_getscalarfieldfromimage3dbyid, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_getscalarfieldfromimage3dbyid") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_getscalarfieldfromimage3dbyid: " + err.Error()) + } + + implementation.Lib3MF_model_getscalarfieldcomposedbyid, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_getscalarfieldcomposedbyid") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_getscalarfieldcomposedbyid: " + err.Error()) + } + + implementation.Lib3MF_model_getscalarfieldconstantbyid, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_getscalarfieldconstantbyid") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_getscalarfieldconstantbyid: " + err.Error()) + } + + implementation.Lib3MF_model_addvector3dfieldfromimage3d, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_addvector3dfieldfromimage3d") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_addvector3dfieldfromimage3d: " + err.Error()) + } + + implementation.Lib3MF_model_addvector3dfieldcomposed, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_addvector3dfieldcomposed") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_addvector3dfieldcomposed: " + err.Error()) + } + + implementation.Lib3MF_model_addvector3dfieldconstant, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_addvector3dfieldconstant") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_addvector3dfieldconstant: " + err.Error()) + } + + implementation.Lib3MF_model_getvector3dfieldbyid, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_getvector3dfieldbyid") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_getvector3dfieldbyid: " + err.Error()) + } + + implementation.Lib3MF_model_getvector3dfieldfromimage3dbyid, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_getvector3dfieldfromimage3dbyid") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_getvector3dfieldfromimage3dbyid: " + err.Error()) + } + + implementation.Lib3MF_model_getvector3dfieldcomposedbyid, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_getvector3dfieldcomposedbyid") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_getvector3dfieldcomposedbyid: " + err.Error()) + } + + implementation.Lib3MF_model_getvector3dfieldconstantbyid, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_getvector3dfieldconstantbyid") + if (err != nil) { + return errors.New("Could not get function lib3mf_model_getvector3dfieldconstantbyid: " + err.Error()) + } + implementation.Lib3MF_model_addbuilditem, err = syscall.GetProcAddress(dllHandle, "lib3mf_model_addbuilditem") if err != nil { return errors.New("Could not get function lib3mf_model_addbuilditem: " + err.Error()) @@ -3301,10 +4063,61 @@ func (implementation *Lib3MFImplementation) MultiPropertyGroupIterator_GetCurren } err = implementation.CallFunction(implementation.Lib3MF_multipropertygroupiterator_getcurrentmultipropertygroup, implementation_multipropertygroupiterator.GetDLLInHandle(), hResource.GetDLLOutHandle()) - if err != nil { + if (err != nil) { + return hResource, err + } + + return hResource, err +} + +func (implementation *Lib3MFImplementation) Image3DIterator_GetCurrentImage3D(Image3DIterator Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hResource := implementation.NewHandle() + + implementation_image3diterator, err := implementation.GetWrapperHandle(Image3DIterator) + if (err != nil) { + return hResource, err + } + + err = implementation.CallFunction(implementation.Lib3MF_image3diterator_getcurrentimage3d, implementation_image3diterator.GetDLLInHandle(), hResource.GetDLLOutHandle()) + if (err != nil) { + return hResource, err + } + + return hResource, err +} + +func (implementation *Lib3MFImplementation) ScalarFieldIterator_GetCurrentScalarField(ScalarFieldIterator Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hResource := implementation.NewHandle() + + implementation_scalarfielditerator, err := implementation.GetWrapperHandle(ScalarFieldIterator) + if (err != nil) { + return hResource, err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfielditerator_getcurrentscalarfield, implementation_scalarfielditerator.GetDLLInHandle(), hResource.GetDLLOutHandle()) + if (err != nil) { + return hResource, err + } + + return hResource, err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldIterator_GetCurrentVector3DField(Vector3DFieldIterator Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hResource := implementation.NewHandle() + + implementation_vector3dfielditerator, err := implementation.GetWrapperHandle(Vector3DFieldIterator) + if (err != nil) { return hResource, err } + err = implementation.CallFunction(implementation.Lib3MF_vector3dfielditerator_getcurrentvector3dfield, implementation_vector3dfielditerator.GetDLLInHandle(), hResource.GetDLLOutHandle()) + if (err != nil) { + return hResource, err + } + return hResource, err } @@ -4403,6 +5216,23 @@ func (implementation *Lib3MFImplementation) MeshObject_BeamLattice(MeshObject Li return hTheBeamLattice, err } +func (implementation *Lib3MFImplementation) MeshObject_VolumeData(MeshObject Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheVolumeData := implementation.NewHandle() + + implementation_meshobject, err := implementation.GetWrapperHandle(MeshObject) + if (err != nil) { + return hTheVolumeData, err + } + + err = implementation.CallFunction(implementation.Lib3MF_meshobject_volumedata, implementation_meshobject.GetDLLInHandle(), hTheVolumeData.GetDLLOutHandle()) + if (err != nil) { + return hTheVolumeData, err + } + + return hTheVolumeData, err +} + func (implementation *Lib3MFImplementation) BeamLattice_GetMinLength(BeamLattice Lib3MFHandle) (float64, error) { var err error = nil var dMinLength float64 = 0 @@ -4797,256 +5627,1887 @@ func (implementation *Lib3MFImplementation) BeamLattice_GetBeamSet(BeamLattice L return hBeamSet, err } -func (implementation *Lib3MFImplementation) Component_GetObjectResource(Component Lib3MFHandle) (Lib3MFHandle, error) { +func (implementation *Lib3MFImplementation) ScalarField_GetName(ScalarField Lib3MFHandle) (string, error) { var err error = nil - hObjectResource := implementation.NewHandle() + var neededforName int64 = 0 + var filledinName int64 = 0 + + implementation_scalarfield, err := implementation.GetWrapperHandle(ScalarField) + if (err != nil) { + return "", err + } - implementation_component, err := implementation.GetWrapperHandle(Component) - if err != nil { - return hObjectResource, err + err = implementation.CallFunction(implementation.Lib3MF_scalarfield_getname, implementation_scalarfield.GetDLLInHandle(), Int64InValue(0), Int64OutValue(&neededforName), Int64InValue(0)) + if (err != nil) { + return "", err + } + bufferSizeName := neededforName + bufferName := make([]byte, bufferSizeName) + err = implementation.CallFunction(implementation.Lib3MF_scalarfield_getname, implementation_scalarfield.GetDLLInHandle(), Int64InValue(bufferSizeName), Int64OutValue(&filledinName), uintptr(unsafe.Pointer(&bufferName[0]))) + if (err != nil) { + return "", err } + + return string(bufferName[:(filledinName-1)]), err +} - err = implementation.CallFunction(implementation.Lib3MF_component_getobjectresource, implementation_component.GetDLLInHandle(), hObjectResource.GetDLLOutHandle()) - if err != nil { - return hObjectResource, err +func (implementation *Lib3MFImplementation) ScalarField_SetName(ScalarField Lib3MFHandle, sName string) (error) { + var err error = nil + + implementation_scalarfield, err := implementation.GetWrapperHandle(ScalarField) + if (err != nil) { + return err } - return hObjectResource, err + err = implementation.CallFunction(implementation.Lib3MF_scalarfield_setname, implementation_scalarfield.GetDLLInHandle(), StringInValue(sName)) + if (err != nil) { + return err + } + + return err } -func (implementation *Lib3MFImplementation) Component_GetObjectResourceID(Component Lib3MFHandle) (uint32, error) { +func (implementation *Lib3MFImplementation) ScalarField_IsFromImage3D(ScalarField Lib3MFHandle) (bool, error) { var err error = nil - var nUniqueResourceID uint32 = 0 + var bIsFromImage3D int64 = 0 + + implementation_scalarfield, err := implementation.GetWrapperHandle(ScalarField) + if (err != nil) { + return false, err + } - implementation_component, err := implementation.GetWrapperHandle(Component) - if err != nil { - return 0, err + err = implementation.CallFunction(implementation.Lib3MF_scalarfield_isfromimage3d, implementation_scalarfield.GetDLLInHandle(), Int64OutValue(&bIsFromImage3D)) + if (err != nil) { + return false, err } + + return (bIsFromImage3D != 0), err +} - err = implementation.CallFunction(implementation.Lib3MF_component_getobjectresourceid, implementation_component.GetDLLInHandle(), UInt32OutValue(&nUniqueResourceID)) - if err != nil { - return 0, err +func (implementation *Lib3MFImplementation) ScalarField_IsConstant(ScalarField Lib3MFHandle) (bool, error) { + var err error = nil + var bIsConstant int64 = 0 + + implementation_scalarfield, err := implementation.GetWrapperHandle(ScalarField) + if (err != nil) { + return false, err } - return uint32(nUniqueResourceID), err + err = implementation.CallFunction(implementation.Lib3MF_scalarfield_isconstant, implementation_scalarfield.GetDLLInHandle(), Int64OutValue(&bIsConstant)) + if (err != nil) { + return false, err + } + + return (bIsConstant != 0), err } -func (implementation *Lib3MFImplementation) Component_GetUUID(Component Lib3MFHandle) (bool, string, error) { +func (implementation *Lib3MFImplementation) ScalarField_IsComposed(ScalarField Lib3MFHandle) (bool, error) { var err error = nil - var bHasUUID int64 = 0 - var neededforUUID int64 = 0 - var filledinUUID int64 = 0 - - implementation_component, err := implementation.GetWrapperHandle(Component) - if err != nil { - return false, "", err + var bIsComposed int64 = 0 + + implementation_scalarfield, err := implementation.GetWrapperHandle(ScalarField) + if (err != nil) { + return false, err } - err = implementation.CallFunction(implementation.Lib3MF_component_getuuid, implementation_component.GetDLLInHandle(), Int64OutValue(&bHasUUID), Int64InValue(0), Int64OutValue(&neededforUUID), Int64InValue(0)) - if err != nil { - return false, "", err + err = implementation.CallFunction(implementation.Lib3MF_scalarfield_iscomposed, implementation_scalarfield.GetDLLInHandle(), Int64OutValue(&bIsComposed)) + if (err != nil) { + return false, err } - bufferSizeUUID := neededforUUID - bufferUUID := make([]byte, bufferSizeUUID) - err = implementation.CallFunction(implementation.Lib3MF_component_getuuid, implementation_component.GetDLLInHandle(), Int64OutValue(&bHasUUID), Int64InValue(bufferSizeUUID), Int64OutValue(&filledinUUID), uintptr(unsafe.Pointer(&bufferUUID[0]))) - if err != nil { - return false, "", err + + return (bIsComposed != 0), err +} + +func (implementation *Lib3MFImplementation) Vector3DField_GetName(Vector3DField Lib3MFHandle) (string, error) { + var err error = nil + var neededforName int64 = 0 + var filledinName int64 = 0 + + implementation_vector3dfield, err := implementation.GetWrapperHandle(Vector3DField) + if (err != nil) { + return "", err } - return (bHasUUID != 0), string(bufferUUID[:(filledinUUID - 1)]), err + err = implementation.CallFunction(implementation.Lib3MF_vector3dfield_getname, implementation_vector3dfield.GetDLLInHandle(), Int64InValue(0), Int64OutValue(&neededforName), Int64InValue(0)) + if (err != nil) { + return "", err + } + bufferSizeName := neededforName + bufferName := make([]byte, bufferSizeName) + err = implementation.CallFunction(implementation.Lib3MF_vector3dfield_getname, implementation_vector3dfield.GetDLLInHandle(), Int64InValue(bufferSizeName), Int64OutValue(&filledinName), uintptr(unsafe.Pointer(&bufferName[0]))) + if (err != nil) { + return "", err + } + + return string(bufferName[:(filledinName-1)]), err } -func (implementation *Lib3MFImplementation) Component_SetUUID(Component Lib3MFHandle, sUUID string) error { +func (implementation *Lib3MFImplementation) Vector3DField_SetName(Vector3DField Lib3MFHandle, sName string) (error) { var err error = nil - - implementation_component, err := implementation.GetWrapperHandle(Component) - if err != nil { + + implementation_vector3dfield, err := implementation.GetWrapperHandle(Vector3DField) + if (err != nil) { return err } - err = implementation.CallFunction(implementation.Lib3MF_component_setuuid, implementation_component.GetDLLInHandle(), StringInValue(sUUID)) - if err != nil { + err = implementation.CallFunction(implementation.Lib3MF_vector3dfield_setname, implementation_vector3dfield.GetDLLInHandle(), StringInValue(sName)) + if (err != nil) { return err } - + return err } -func (implementation *Lib3MFImplementation) Component_HasTransform(Component Lib3MFHandle) (bool, error) { +func (implementation *Lib3MFImplementation) Vector3DField_IsFromImage3D(Vector3DField Lib3MFHandle) (bool, error) { var err error = nil - var bHasTransform int64 = 0 - - implementation_component, err := implementation.GetWrapperHandle(Component) - if err != nil { + var bIsFromImage3D int64 = 0 + + implementation_vector3dfield, err := implementation.GetWrapperHandle(Vector3DField) + if (err != nil) { return false, err } - err = implementation.CallFunction(implementation.Lib3MF_component_hastransform, implementation_component.GetDLLInHandle(), Int64OutValue(&bHasTransform)) - if err != nil { + err = implementation.CallFunction(implementation.Lib3MF_vector3dfield_isfromimage3d, implementation_vector3dfield.GetDLLInHandle(), Int64OutValue(&bIsFromImage3D)) + if (err != nil) { return false, err } - - return (bHasTransform != 0), err + + return (bIsFromImage3D != 0), err } -func (implementation *Lib3MFImplementation) Component_GetTransform(Component Lib3MFHandle) (sLib3MFTransform, error) { +func (implementation *Lib3MFImplementation) Vector3DField_IsConstant(Vector3DField Lib3MFHandle) (bool, error) { var err error = nil - var sTransform sLib3MFTransform - - implementation_component, err := implementation.GetWrapperHandle(Component) - if err != nil { - return sTransform, err + var bIsConstant int64 = 0 + + implementation_vector3dfield, err := implementation.GetWrapperHandle(Vector3DField) + if (err != nil) { + return false, err } - err = implementation.CallFunction(implementation.Lib3MF_component_gettransform, implementation_component.GetDLLInHandle(), 0) - if err != nil { - return sTransform, err + err = implementation.CallFunction(implementation.Lib3MF_vector3dfield_isconstant, implementation_vector3dfield.GetDLLInHandle(), Int64OutValue(&bIsConstant)) + if (err != nil) { + return false, err } - - return sTransform, err + + return (bIsConstant != 0), err } -func (implementation *Lib3MFImplementation) Component_SetTransform(Component Lib3MFHandle, sTransform sLib3MFTransform) error { +func (implementation *Lib3MFImplementation) Vector3DField_IsComposed(Vector3DField Lib3MFHandle) (bool, error) { var err error = nil + var bIsComposed int64 = 0 + + implementation_vector3dfield, err := implementation.GetWrapperHandle(Vector3DField) + if (err != nil) { + return false, err + } - implementation_component, err := implementation.GetWrapperHandle(Component) - if err != nil { - return err + err = implementation.CallFunction(implementation.Lib3MF_vector3dfield_iscomposed, implementation_vector3dfield.GetDLLInHandle(), Int64OutValue(&bIsComposed)) + if (err != nil) { + return false, err } + + return (bIsComposed != 0), err +} - err = implementation.CallFunction(implementation.Lib3MF_component_settransform, implementation_component.GetDLLInHandle(), uintptr(unsafe.Pointer(&sTransform))) - if err != nil { - return err +func (implementation *Lib3MFImplementation) ScalarFieldFromImage3D_GetImage(ScalarFieldFromImage3D Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hImage3D := implementation.NewHandle() + + implementation_scalarfieldfromimage3d, err := implementation.GetWrapperHandle(ScalarFieldFromImage3D) + if (err != nil) { + return hImage3D, err } - return err + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldfromimage3d_getimage, implementation_scalarfieldfromimage3d.GetDLLInHandle(), hImage3D.GetDLLOutHandle()) + if (err != nil) { + return hImage3D, err + } + + return hImage3D, err } -func (implementation *Lib3MFImplementation) ComponentsObject_AddComponent(ComponentsObject Lib3MFHandle, ObjectResource Lib3MFHandle, sTransform sLib3MFTransform) (Lib3MFHandle, error) { +func (implementation *Lib3MFImplementation) ScalarFieldFromImage3D_SetImage(ScalarFieldFromImage3D Lib3MFHandle, Image3D Lib3MFHandle) (error) { var err error = nil - hComponentInstance := implementation.NewHandle() - - implementation_componentsobject, err := implementation.GetWrapperHandle(ComponentsObject) - if err != nil { - return hComponentInstance, err + + implementation_scalarfieldfromimage3d, err := implementation.GetWrapperHandle(ScalarFieldFromImage3D) + if (err != nil) { + return err } - implementation_objectresource, err := implementation.GetWrapperHandle(ObjectResource) - if err != nil { - return hComponentInstance, err + implementation_image3d, err := implementation.GetWrapperHandle(Image3D) + if (err != nil) { + return err } - - ObjectResourceDLLHandle := implementation_objectresource.GetDLLInHandle() - if ObjectResourceDLLHandle == 0 { + + Image3DDLLHandle := implementation_image3d.GetDLLInHandle() + if (Image3DDLLHandle == 0) { err := fmt.Errorf("Handle must not be 0.") - return hComponentInstance, err + return err } - err = implementation.CallFunction(implementation.Lib3MF_componentsobject_addcomponent, implementation_componentsobject.GetDLLInHandle(), ObjectResourceDLLHandle, uintptr(unsafe.Pointer(&sTransform)), hComponentInstance.GetDLLOutHandle()) - if err != nil { - return hComponentInstance, err + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldfromimage3d_setimage, implementation_scalarfieldfromimage3d.GetDLLInHandle(), Image3DDLLHandle) + if (err != nil) { + return err } - - return hComponentInstance, err + + return err } -func (implementation *Lib3MFImplementation) ComponentsObject_GetComponent(ComponentsObject Lib3MFHandle, nIndex uint32) (Lib3MFHandle, error) { +func (implementation *Lib3MFImplementation) ScalarFieldFromImage3D_SetChannel(ScalarFieldFromImage3D Lib3MFHandle, eName ELib3MFChannelName) (error) { var err error = nil - hComponentInstance := implementation.NewHandle() - - implementation_componentsobject, err := implementation.GetWrapperHandle(ComponentsObject) - if err != nil { - return hComponentInstance, err + + implementation_scalarfieldfromimage3d, err := implementation.GetWrapperHandle(ScalarFieldFromImage3D) + if (err != nil) { + return err } - err = implementation.CallFunction(implementation.Lib3MF_componentsobject_getcomponent, implementation_componentsobject.GetDLLInHandle(), UInt32InValue(nIndex), hComponentInstance.GetDLLOutHandle()) - if err != nil { - return hComponentInstance, err + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldfromimage3d_setchannel, implementation_scalarfieldfromimage3d.GetDLLInHandle(), uintptr(eName)) + if (err != nil) { + return err } - - return hComponentInstance, err + + return err } -func (implementation *Lib3MFImplementation) ComponentsObject_GetComponentCount(ComponentsObject Lib3MFHandle) (uint32, error) { +func (implementation *Lib3MFImplementation) ScalarFieldFromImage3D_GetChannel(ScalarFieldFromImage3D Lib3MFHandle) (ELib3MFChannelName, error) { var err error = nil - var nCount uint32 = 0 - - implementation_componentsobject, err := implementation.GetWrapperHandle(ComponentsObject) - if err != nil { + var eName uint64 = 0 + + implementation_scalarfieldfromimage3d, err := implementation.GetWrapperHandle(ScalarFieldFromImage3D) + if (err != nil) { return 0, err } - err = implementation.CallFunction(implementation.Lib3MF_componentsobject_getcomponentcount, implementation_componentsobject.GetDLLInHandle(), UInt32OutValue(&nCount)) - if err != nil { + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldfromimage3d_getchannel, implementation_scalarfieldfromimage3d.GetDLLInHandle(), UInt64OutValue(&eName)) + if (err != nil) { return 0, err } - - return uint32(nCount), err + + return ELib3MFChannelName (eName), err } -func (implementation *Lib3MFImplementation) BeamSet_SetName(BeamSet Lib3MFHandle, sName string) error { +func (implementation *Lib3MFImplementation) ScalarFieldFromImage3D_SetFilter(ScalarFieldFromImage3D Lib3MFHandle, eFilter ELib3MFTextureFilter) (error) { var err error = nil - - implementation_beamset, err := implementation.GetWrapperHandle(BeamSet) - if err != nil { + + implementation_scalarfieldfromimage3d, err := implementation.GetWrapperHandle(ScalarFieldFromImage3D) + if (err != nil) { return err } - err = implementation.CallFunction(implementation.Lib3MF_beamset_setname, implementation_beamset.GetDLLInHandle(), StringInValue(sName)) - if err != nil { + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldfromimage3d_setfilter, implementation_scalarfieldfromimage3d.GetDLLInHandle(), uintptr(eFilter)) + if (err != nil) { return err } - + return err } -func (implementation *Lib3MFImplementation) BeamSet_GetName(BeamSet Lib3MFHandle) (string, error) { +func (implementation *Lib3MFImplementation) ScalarFieldFromImage3D_GetFilter(ScalarFieldFromImage3D Lib3MFHandle) (ELib3MFTextureFilter, error) { var err error = nil - var neededforName int64 = 0 - var filledinName int64 = 0 - - implementation_beamset, err := implementation.GetWrapperHandle(BeamSet) - if err != nil { - return "", err + var eFilter uint64 = 0 + + implementation_scalarfieldfromimage3d, err := implementation.GetWrapperHandle(ScalarFieldFromImage3D) + if (err != nil) { + return 0, err } - err = implementation.CallFunction(implementation.Lib3MF_beamset_getname, implementation_beamset.GetDLLInHandle(), Int64InValue(0), Int64OutValue(&neededforName), Int64InValue(0)) - if err != nil { - return "", err - } - bufferSizeName := neededforName - bufferName := make([]byte, bufferSizeName) - err = implementation.CallFunction(implementation.Lib3MF_beamset_getname, implementation_beamset.GetDLLInHandle(), Int64InValue(bufferSizeName), Int64OutValue(&filledinName), uintptr(unsafe.Pointer(&bufferName[0]))) - if err != nil { - return "", err + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldfromimage3d_getfilter, implementation_scalarfieldfromimage3d.GetDLLInHandle(), UInt64OutValue(&eFilter)) + if (err != nil) { + return 0, err } - - return string(bufferName[:(filledinName - 1)]), err + + return ELib3MFTextureFilter (eFilter), err } -func (implementation *Lib3MFImplementation) BeamSet_SetIdentifier(BeamSet Lib3MFHandle, sIdentifier string) error { +func (implementation *Lib3MFImplementation) ScalarFieldFromImage3D_SetTileStyles(ScalarFieldFromImage3D Lib3MFHandle, eTileStyleU ELib3MFTextureTileStyle, eTileStyleV ELib3MFTextureTileStyle, eTileStyleW ELib3MFTextureTileStyle) (error) { var err error = nil - - implementation_beamset, err := implementation.GetWrapperHandle(BeamSet) - if err != nil { + + implementation_scalarfieldfromimage3d, err := implementation.GetWrapperHandle(ScalarFieldFromImage3D) + if (err != nil) { return err } - err = implementation.CallFunction(implementation.Lib3MF_beamset_setidentifier, implementation_beamset.GetDLLInHandle(), StringInValue(sIdentifier)) - if err != nil { + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldfromimage3d_settilestyles, implementation_scalarfieldfromimage3d.GetDLLInHandle(), uintptr(eTileStyleU), uintptr(eTileStyleV), uintptr(eTileStyleW)) + if (err != nil) { return err } - + return err } -func (implementation *Lib3MFImplementation) BeamSet_GetIdentifier(BeamSet Lib3MFHandle) (string, error) { +func (implementation *Lib3MFImplementation) ScalarFieldFromImage3D_GetTileStyles(ScalarFieldFromImage3D Lib3MFHandle) (ELib3MFTextureTileStyle, ELib3MFTextureTileStyle, ELib3MFTextureTileStyle, error) { var err error = nil - var neededforIdentifier int64 = 0 - var filledinIdentifier int64 = 0 - - implementation_beamset, err := implementation.GetWrapperHandle(BeamSet) - if err != nil { - return "", err + var eTileStyleU uint64 = 0 + var eTileStyleV uint64 = 0 + var eTileStyleW uint64 = 0 + + implementation_scalarfieldfromimage3d, err := implementation.GetWrapperHandle(ScalarFieldFromImage3D) + if (err != nil) { + return 0, 0, 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldfromimage3d_gettilestyles, implementation_scalarfieldfromimage3d.GetDLLInHandle(), UInt64OutValue(&eTileStyleU), UInt64OutValue(&eTileStyleV), UInt64OutValue(&eTileStyleW)) + if (err != nil) { + return 0, 0, 0, err + } + + return ELib3MFTextureTileStyle (eTileStyleU), ELib3MFTextureTileStyle (eTileStyleV), ELib3MFTextureTileStyle (eTileStyleW), err +} + +func (implementation *Lib3MFImplementation) ScalarFieldFromImage3D_GetOffset(ScalarFieldFromImage3D Lib3MFHandle) (float64, error) { + var err error = nil + var dOffset float64 = 0 + + implementation_scalarfieldfromimage3d, err := implementation.GetWrapperHandle(ScalarFieldFromImage3D) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldfromimage3d_getoffset, implementation_scalarfieldfromimage3d.GetDLLInHandle(), Float64OutValue(&dOffset)) + if (err != nil) { + return 0, err + } + + return dOffset, err +} + +func (implementation *Lib3MFImplementation) ScalarFieldFromImage3D_SetOffset(ScalarFieldFromImage3D Lib3MFHandle, dOffset float64) (error) { + var err error = nil + + implementation_scalarfieldfromimage3d, err := implementation.GetWrapperHandle(ScalarFieldFromImage3D) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldfromimage3d_setoffset, implementation_scalarfieldfromimage3d.GetDLLInHandle(), Float64InValue(dOffset)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) ScalarFieldFromImage3D_GetScale(ScalarFieldFromImage3D Lib3MFHandle) (float64, error) { + var err error = nil + var dScale float64 = 0 + + implementation_scalarfieldfromimage3d, err := implementation.GetWrapperHandle(ScalarFieldFromImage3D) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldfromimage3d_getscale, implementation_scalarfieldfromimage3d.GetDLLInHandle(), Float64OutValue(&dScale)) + if (err != nil) { + return 0, err + } + + return dScale, err +} + +func (implementation *Lib3MFImplementation) ScalarFieldFromImage3D_SetScale(ScalarFieldFromImage3D Lib3MFHandle, dScale float64) (error) { + var err error = nil + + implementation_scalarfieldfromimage3d, err := implementation.GetWrapperHandle(ScalarFieldFromImage3D) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldfromimage3d_setscale, implementation_scalarfieldfromimage3d.GetDLLInHandle(), Float64InValue(dScale)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) ScalarFieldConstant_GetValue(ScalarFieldConstant Lib3MFHandle) (float64, error) { + var err error = nil + var dValue float64 = 0 + + implementation_scalarfieldconstant, err := implementation.GetWrapperHandle(ScalarFieldConstant) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldconstant_getvalue, implementation_scalarfieldconstant.GetDLLInHandle(), Float64OutValue(&dValue)) + if (err != nil) { + return 0, err + } + + return dValue, err +} + +func (implementation *Lib3MFImplementation) ScalarFieldConstant_SetValue(ScalarFieldConstant Lib3MFHandle, dValue float64) (error) { + var err error = nil + + implementation_scalarfieldconstant, err := implementation.GetWrapperHandle(ScalarFieldConstant) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldconstant_setvalue, implementation_scalarfieldconstant.GetDLLInHandle(), Float64InValue(dValue)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) ScalarFieldComposed_SetMethod(ScalarFieldComposed Lib3MFHandle, eTheMethod ELib3MFCompositionMethod) (error) { + var err error = nil + + implementation_scalarfieldcomposed, err := implementation.GetWrapperHandle(ScalarFieldComposed) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldcomposed_setmethod, implementation_scalarfieldcomposed.GetDLLInHandle(), uintptr(eTheMethod)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) ScalarFieldComposed_GetMethod(ScalarFieldComposed Lib3MFHandle) (ELib3MFCompositionMethod, error) { + var err error = nil + var eTheMethod uint64 = 0 + + implementation_scalarfieldcomposed, err := implementation.GetWrapperHandle(ScalarFieldComposed) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldcomposed_getmethod, implementation_scalarfieldcomposed.GetDLLInHandle(), UInt64OutValue(&eTheMethod)) + if (err != nil) { + return 0, err + } + + return ELib3MFCompositionMethod (eTheMethod), err +} + +func (implementation *Lib3MFImplementation) ScalarFieldComposed_GetFactor1(ScalarFieldComposed Lib3MFHandle) (float64, error) { + var err error = nil + var dFactor1 float64 = 0 + + implementation_scalarfieldcomposed, err := implementation.GetWrapperHandle(ScalarFieldComposed) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldcomposed_getfactor1, implementation_scalarfieldcomposed.GetDLLInHandle(), Float64OutValue(&dFactor1)) + if (err != nil) { + return 0, err + } + + return dFactor1, err +} + +func (implementation *Lib3MFImplementation) ScalarFieldComposed_SetFactor1(ScalarFieldComposed Lib3MFHandle, dFactor1 float64) (error) { + var err error = nil + + implementation_scalarfieldcomposed, err := implementation.GetWrapperHandle(ScalarFieldComposed) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldcomposed_setfactor1, implementation_scalarfieldcomposed.GetDLLInHandle(), Float64InValue(dFactor1)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) ScalarFieldComposed_GetFactor2(ScalarFieldComposed Lib3MFHandle) (float64, error) { + var err error = nil + var dFactor2 float64 = 0 + + implementation_scalarfieldcomposed, err := implementation.GetWrapperHandle(ScalarFieldComposed) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldcomposed_getfactor2, implementation_scalarfieldcomposed.GetDLLInHandle(), Float64OutValue(&dFactor2)) + if (err != nil) { + return 0, err + } + + return dFactor2, err +} + +func (implementation *Lib3MFImplementation) ScalarFieldComposed_SetFactor2(ScalarFieldComposed Lib3MFHandle, dFactor2 float64) (error) { + var err error = nil + + implementation_scalarfieldcomposed, err := implementation.GetWrapperHandle(ScalarFieldComposed) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldcomposed_setfactor2, implementation_scalarfieldcomposed.GetDLLInHandle(), Float64InValue(dFactor2)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) ScalarFieldComposed_ScalarFieldReference1(ScalarFieldComposed Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheScalarFieldReference1 := implementation.NewHandle() + + implementation_scalarfieldcomposed, err := implementation.GetWrapperHandle(ScalarFieldComposed) + if (err != nil) { + return hTheScalarFieldReference1, err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldcomposed_scalarfieldreference1, implementation_scalarfieldcomposed.GetDLLInHandle(), hTheScalarFieldReference1.GetDLLOutHandle()) + if (err != nil) { + return hTheScalarFieldReference1, err + } + + return hTheScalarFieldReference1, err +} + +func (implementation *Lib3MFImplementation) ScalarFieldComposed_ScalarFieldReference2(ScalarFieldComposed Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheScalarFieldReference1 := implementation.NewHandle() + + implementation_scalarfieldcomposed, err := implementation.GetWrapperHandle(ScalarFieldComposed) + if (err != nil) { + return hTheScalarFieldReference1, err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldcomposed_scalarfieldreference2, implementation_scalarfieldcomposed.GetDLLInHandle(), hTheScalarFieldReference1.GetDLLOutHandle()) + if (err != nil) { + return hTheScalarFieldReference1, err + } + + return hTheScalarFieldReference1, err +} + +func (implementation *Lib3MFImplementation) ScalarFieldComposed_ScalarFieldReferenceMask(ScalarFieldComposed Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheScalarFieldReferenceMask := implementation.NewHandle() + + implementation_scalarfieldcomposed, err := implementation.GetWrapperHandle(ScalarFieldComposed) + if (err != nil) { + return hTheScalarFieldReferenceMask, err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldcomposed_scalarfieldreferencemask, implementation_scalarfieldcomposed.GetDLLInHandle(), hTheScalarFieldReferenceMask.GetDLLOutHandle()) + if (err != nil) { + return hTheScalarFieldReferenceMask, err + } + + return hTheScalarFieldReferenceMask, err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldFromImage3D_GetImage(Vector3DFieldFromImage3D Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hImage3D := implementation.NewHandle() + + implementation_vector3dfieldfromimage3d, err := implementation.GetWrapperHandle(Vector3DFieldFromImage3D) + if (err != nil) { + return hImage3D, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldfromimage3d_getimage, implementation_vector3dfieldfromimage3d.GetDLLInHandle(), hImage3D.GetDLLOutHandle()) + if (err != nil) { + return hImage3D, err + } + + return hImage3D, err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldFromImage3D_SetImage(Vector3DFieldFromImage3D Lib3MFHandle, Image3D Lib3MFHandle) (error) { + var err error = nil + + implementation_vector3dfieldfromimage3d, err := implementation.GetWrapperHandle(Vector3DFieldFromImage3D) + if (err != nil) { + return err + } + implementation_image3d, err := implementation.GetWrapperHandle(Image3D) + if (err != nil) { + return err + } + + Image3DDLLHandle := implementation_image3d.GetDLLInHandle() + if (Image3DDLLHandle == 0) { + err := fmt.Errorf("Handle must not be 0.") + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldfromimage3d_setimage, implementation_vector3dfieldfromimage3d.GetDLLInHandle(), Image3DDLLHandle) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldFromImage3D_SetFilter(Vector3DFieldFromImage3D Lib3MFHandle, eFilter ELib3MFTextureFilter) (error) { + var err error = nil + + implementation_vector3dfieldfromimage3d, err := implementation.GetWrapperHandle(Vector3DFieldFromImage3D) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldfromimage3d_setfilter, implementation_vector3dfieldfromimage3d.GetDLLInHandle(), uintptr(eFilter)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldFromImage3D_GetFilter(Vector3DFieldFromImage3D Lib3MFHandle) (ELib3MFTextureFilter, error) { + var err error = nil + var eFilter uint64 = 0 + + implementation_vector3dfieldfromimage3d, err := implementation.GetWrapperHandle(Vector3DFieldFromImage3D) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldfromimage3d_getfilter, implementation_vector3dfieldfromimage3d.GetDLLInHandle(), UInt64OutValue(&eFilter)) + if (err != nil) { + return 0, err + } + + return ELib3MFTextureFilter (eFilter), err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldFromImage3D_SetTileStyles(Vector3DFieldFromImage3D Lib3MFHandle, eTileStyleU ELib3MFTextureTileStyle, eTileStyleV ELib3MFTextureTileStyle, eTileStyleW ELib3MFTextureTileStyle) (error) { + var err error = nil + + implementation_vector3dfieldfromimage3d, err := implementation.GetWrapperHandle(Vector3DFieldFromImage3D) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldfromimage3d_settilestyles, implementation_vector3dfieldfromimage3d.GetDLLInHandle(), uintptr(eTileStyleU), uintptr(eTileStyleV), uintptr(eTileStyleW)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldFromImage3D_GetTileStyles(Vector3DFieldFromImage3D Lib3MFHandle) (ELib3MFTextureTileStyle, ELib3MFTextureTileStyle, ELib3MFTextureTileStyle, error) { + var err error = nil + var eTileStyleU uint64 = 0 + var eTileStyleV uint64 = 0 + var eTileStyleW uint64 = 0 + + implementation_vector3dfieldfromimage3d, err := implementation.GetWrapperHandle(Vector3DFieldFromImage3D) + if (err != nil) { + return 0, 0, 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldfromimage3d_gettilestyles, implementation_vector3dfieldfromimage3d.GetDLLInHandle(), UInt64OutValue(&eTileStyleU), UInt64OutValue(&eTileStyleV), UInt64OutValue(&eTileStyleW)) + if (err != nil) { + return 0, 0, 0, err + } + + return ELib3MFTextureTileStyle (eTileStyleU), ELib3MFTextureTileStyle (eTileStyleV), ELib3MFTextureTileStyle (eTileStyleW), err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldFromImage3D_GetOffset(Vector3DFieldFromImage3D Lib3MFHandle) (float64, error) { + var err error = nil + var dOffset float64 = 0 + + implementation_vector3dfieldfromimage3d, err := implementation.GetWrapperHandle(Vector3DFieldFromImage3D) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldfromimage3d_getoffset, implementation_vector3dfieldfromimage3d.GetDLLInHandle(), Float64OutValue(&dOffset)) + if (err != nil) { + return 0, err + } + + return dOffset, err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldFromImage3D_SetOffset(Vector3DFieldFromImage3D Lib3MFHandle, dOffset float64) (error) { + var err error = nil + + implementation_vector3dfieldfromimage3d, err := implementation.GetWrapperHandle(Vector3DFieldFromImage3D) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldfromimage3d_setoffset, implementation_vector3dfieldfromimage3d.GetDLLInHandle(), Float64InValue(dOffset)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldFromImage3D_GetScale(Vector3DFieldFromImage3D Lib3MFHandle) (float64, error) { + var err error = nil + var dScale float64 = 0 + + implementation_vector3dfieldfromimage3d, err := implementation.GetWrapperHandle(Vector3DFieldFromImage3D) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldfromimage3d_getscale, implementation_vector3dfieldfromimage3d.GetDLLInHandle(), Float64OutValue(&dScale)) + if (err != nil) { + return 0, err + } + + return dScale, err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldFromImage3D_SetScale(Vector3DFieldFromImage3D Lib3MFHandle, dScale float64) (error) { + var err error = nil + + implementation_vector3dfieldfromimage3d, err := implementation.GetWrapperHandle(Vector3DFieldFromImage3D) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldfromimage3d_setscale, implementation_vector3dfieldfromimage3d.GetDLLInHandle(), Float64InValue(dScale)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldConstant_GetValueX(Vector3DFieldConstant Lib3MFHandle) (float64, error) { + var err error = nil + var dValueX float64 = 0 + + implementation_vector3dfieldconstant, err := implementation.GetWrapperHandle(Vector3DFieldConstant) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldconstant_getvaluex, implementation_vector3dfieldconstant.GetDLLInHandle(), Float64OutValue(&dValueX)) + if (err != nil) { + return 0, err + } + + return dValueX, err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldConstant_SetValueX(Vector3DFieldConstant Lib3MFHandle, dValueX float64) (error) { + var err error = nil + + implementation_vector3dfieldconstant, err := implementation.GetWrapperHandle(Vector3DFieldConstant) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldconstant_setvaluex, implementation_vector3dfieldconstant.GetDLLInHandle(), Float64InValue(dValueX)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldConstant_GetValueY(Vector3DFieldConstant Lib3MFHandle) (float64, error) { + var err error = nil + var dValueY float64 = 0 + + implementation_vector3dfieldconstant, err := implementation.GetWrapperHandle(Vector3DFieldConstant) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldconstant_getvaluey, implementation_vector3dfieldconstant.GetDLLInHandle(), Float64OutValue(&dValueY)) + if (err != nil) { + return 0, err + } + + return dValueY, err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldConstant_SetValueY(Vector3DFieldConstant Lib3MFHandle, dValueY float64) (error) { + var err error = nil + + implementation_vector3dfieldconstant, err := implementation.GetWrapperHandle(Vector3DFieldConstant) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldconstant_setvaluey, implementation_vector3dfieldconstant.GetDLLInHandle(), Float64InValue(dValueY)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldConstant_GetValueZ(Vector3DFieldConstant Lib3MFHandle) (float64, error) { + var err error = nil + var dValueZ float64 = 0 + + implementation_vector3dfieldconstant, err := implementation.GetWrapperHandle(Vector3DFieldConstant) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldconstant_getvaluez, implementation_vector3dfieldconstant.GetDLLInHandle(), Float64OutValue(&dValueZ)) + if (err != nil) { + return 0, err + } + + return dValueZ, err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldConstant_SetValueZ(Vector3DFieldConstant Lib3MFHandle, dValueZ float64) (error) { + var err error = nil + + implementation_vector3dfieldconstant, err := implementation.GetWrapperHandle(Vector3DFieldConstant) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldconstant_setvaluez, implementation_vector3dfieldconstant.GetDLLInHandle(), Float64InValue(dValueZ)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldComposed_SetMethod(Vector3DFieldComposed Lib3MFHandle, eTheMethod ELib3MFCompositionMethod) (error) { + var err error = nil + + implementation_vector3dfieldcomposed, err := implementation.GetWrapperHandle(Vector3DFieldComposed) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldcomposed_setmethod, implementation_vector3dfieldcomposed.GetDLLInHandle(), uintptr(eTheMethod)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldComposed_GetMethod(Vector3DFieldComposed Lib3MFHandle) (ELib3MFCompositionMethod, error) { + var err error = nil + var eTheMethod uint64 = 0 + + implementation_vector3dfieldcomposed, err := implementation.GetWrapperHandle(Vector3DFieldComposed) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldcomposed_getmethod, implementation_vector3dfieldcomposed.GetDLLInHandle(), UInt64OutValue(&eTheMethod)) + if (err != nil) { + return 0, err + } + + return ELib3MFCompositionMethod (eTheMethod), err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldComposed_SetSpace(Vector3DFieldComposed Lib3MFHandle, eTheSpace ELib3MFCompositionSpace) (error) { + var err error = nil + + implementation_vector3dfieldcomposed, err := implementation.GetWrapperHandle(Vector3DFieldComposed) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldcomposed_setspace, implementation_vector3dfieldcomposed.GetDLLInHandle(), uintptr(eTheSpace)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldComposed_GetSpace(Vector3DFieldComposed Lib3MFHandle) (ELib3MFCompositionSpace, error) { + var err error = nil + var eTheSpace uint64 = 0 + + implementation_vector3dfieldcomposed, err := implementation.GetWrapperHandle(Vector3DFieldComposed) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldcomposed_getspace, implementation_vector3dfieldcomposed.GetDLLInHandle(), UInt64OutValue(&eTheSpace)) + if (err != nil) { + return 0, err + } + + return ELib3MFCompositionSpace (eTheSpace), err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldComposed_GetFactor1(Vector3DFieldComposed Lib3MFHandle) (float64, error) { + var err error = nil + var dFactor1 float64 = 0 + + implementation_vector3dfieldcomposed, err := implementation.GetWrapperHandle(Vector3DFieldComposed) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldcomposed_getfactor1, implementation_vector3dfieldcomposed.GetDLLInHandle(), Float64OutValue(&dFactor1)) + if (err != nil) { + return 0, err + } + + return dFactor1, err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldComposed_SetFactor1(Vector3DFieldComposed Lib3MFHandle, dFactor1 float64) (error) { + var err error = nil + + implementation_vector3dfieldcomposed, err := implementation.GetWrapperHandle(Vector3DFieldComposed) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldcomposed_setfactor1, implementation_vector3dfieldcomposed.GetDLLInHandle(), Float64InValue(dFactor1)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldComposed_GetFactor2(Vector3DFieldComposed Lib3MFHandle) (float64, error) { + var err error = nil + var dFactor2 float64 = 0 + + implementation_vector3dfieldcomposed, err := implementation.GetWrapperHandle(Vector3DFieldComposed) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldcomposed_getfactor2, implementation_vector3dfieldcomposed.GetDLLInHandle(), Float64OutValue(&dFactor2)) + if (err != nil) { + return 0, err + } + + return dFactor2, err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldComposed_SetFactor2(Vector3DFieldComposed Lib3MFHandle, dFactor2 float64) (error) { + var err error = nil + + implementation_vector3dfieldcomposed, err := implementation.GetWrapperHandle(Vector3DFieldComposed) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldcomposed_setfactor2, implementation_vector3dfieldcomposed.GetDLLInHandle(), Float64InValue(dFactor2)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldComposed_Vector3DFieldReference1(Vector3DFieldComposed Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheVector3DFieldReference1 := implementation.NewHandle() + + implementation_vector3dfieldcomposed, err := implementation.GetWrapperHandle(Vector3DFieldComposed) + if (err != nil) { + return hTheVector3DFieldReference1, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldcomposed_vector3dfieldreference1, implementation_vector3dfieldcomposed.GetDLLInHandle(), hTheVector3DFieldReference1.GetDLLOutHandle()) + if (err != nil) { + return hTheVector3DFieldReference1, err + } + + return hTheVector3DFieldReference1, err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldComposed_Vector3DFieldReference2(Vector3DFieldComposed Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheVector3DFieldReference1 := implementation.NewHandle() + + implementation_vector3dfieldcomposed, err := implementation.GetWrapperHandle(Vector3DFieldComposed) + if (err != nil) { + return hTheVector3DFieldReference1, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldcomposed_vector3dfieldreference2, implementation_vector3dfieldcomposed.GetDLLInHandle(), hTheVector3DFieldReference1.GetDLLOutHandle()) + if (err != nil) { + return hTheVector3DFieldReference1, err + } + + return hTheVector3DFieldReference1, err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldComposed_ScalarFieldReferenceMask(Vector3DFieldComposed Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheScalarFieldReferenceMask := implementation.NewHandle() + + implementation_vector3dfieldcomposed, err := implementation.GetWrapperHandle(Vector3DFieldComposed) + if (err != nil) { + return hTheScalarFieldReferenceMask, err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldcomposed_scalarfieldreferencemask, implementation_vector3dfieldcomposed.GetDLLInHandle(), hTheScalarFieldReferenceMask.GetDLLOutHandle()) + if (err != nil) { + return hTheScalarFieldReferenceMask, err + } + + return hTheScalarFieldReferenceMask, err +} + +func (implementation *Lib3MFImplementation) FieldReference_GetFieldResourceID(FieldReference Lib3MFHandle) (uint32, error) { + var err error = nil + var nUniqueResourceID uint32 = 0 + + implementation_fieldreference, err := implementation.GetWrapperHandle(FieldReference) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_fieldreference_getfieldresourceid, implementation_fieldreference.GetDLLInHandle(), UInt32OutValue(&nUniqueResourceID)) + if (err != nil) { + return 0, err + } + + return uint32(nUniqueResourceID), err +} + +func (implementation *Lib3MFImplementation) FieldReference_SetFieldResourceID(FieldReference Lib3MFHandle, nUniqueResourceID uint32) (error) { + var err error = nil + + implementation_fieldreference, err := implementation.GetWrapperHandle(FieldReference) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_fieldreference_setfieldresourceid, implementation_fieldreference.GetDLLInHandle(), UInt32InValue(nUniqueResourceID)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) FieldReference_GetTransform(FieldReference Lib3MFHandle) (sLib3MFTransform, error) { + var err error = nil + var sTransform sLib3MFTransform + + implementation_fieldreference, err := implementation.GetWrapperHandle(FieldReference) + if (err != nil) { + return sTransform, err + } + + err = implementation.CallFunction(implementation.Lib3MF_fieldreference_gettransform, implementation_fieldreference.GetDLLInHandle(), 0) + if (err != nil) { + return sTransform, err + } + + return sTransform, err +} + +func (implementation *Lib3MFImplementation) FieldReference_SetTransform(FieldReference Lib3MFHandle, sTransform sLib3MFTransform) (error) { + var err error = nil + + implementation_fieldreference, err := implementation.GetWrapperHandle(FieldReference) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_fieldreference_settransform, implementation_fieldreference.GetDLLInHandle(), uintptr(unsafe.Pointer(&sTransform))) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) ScalarFieldReference_SetScalarField(ScalarFieldReference Lib3MFHandle, TheScalarField Lib3MFHandle) (error) { + var err error = nil + + implementation_scalarfieldreference, err := implementation.GetWrapperHandle(ScalarFieldReference) + if (err != nil) { + return err + } + implementation_thescalarfield, err := implementation.GetWrapperHandle(TheScalarField) + if (err != nil) { + return err + } + + TheScalarFieldDLLHandle := implementation_thescalarfield.GetDLLInHandle() + if (TheScalarFieldDLLHandle == 0) { + err := fmt.Errorf("Handle must not be 0.") + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_scalarfieldreference_setscalarfield, implementation_scalarfieldreference.GetDLLInHandle(), TheScalarFieldDLLHandle) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Vector3DFieldReference_SetVector3DField(Vector3DFieldReference Lib3MFHandle, TheVector3DField Lib3MFHandle) (error) { + var err error = nil + + implementation_vector3dfieldreference, err := implementation.GetWrapperHandle(Vector3DFieldReference) + if (err != nil) { + return err + } + implementation_thevector3dfield, err := implementation.GetWrapperHandle(TheVector3DField) + if (err != nil) { + return err + } + + TheVector3DFieldDLLHandle := implementation_thevector3dfield.GetDLLInHandle() + if (TheVector3DFieldDLLHandle == 0) { + err := fmt.Errorf("Handle must not be 0.") + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_vector3dfieldreference_setvector3dfield, implementation_vector3dfieldreference.GetDLLInHandle(), TheVector3DFieldDLLHandle) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) VolumeDataBoundary_GetSolidThreshold(VolumeDataBoundary Lib3MFHandle) (float64, error) { + var err error = nil + var dTheSolidThreshold float64 = 0 + + implementation_volumedataboundary, err := implementation.GetWrapperHandle(VolumeDataBoundary) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedataboundary_getsolidthreshold, implementation_volumedataboundary.GetDLLInHandle(), Float64OutValue(&dTheSolidThreshold)) + if (err != nil) { + return 0, err + } + + return dTheSolidThreshold, err +} + +func (implementation *Lib3MFImplementation) VolumeDataBoundary_SetSolidThreshold(VolumeDataBoundary Lib3MFHandle, dTheSolidThreshold float64) (error) { + var err error = nil + + implementation_volumedataboundary, err := implementation.GetWrapperHandle(VolumeDataBoundary) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedataboundary_setsolidthreshold, implementation_volumedataboundary.GetDLLInHandle(), Float64InValue(dTheSolidThreshold)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) VolumeDataComposite_GetBaseMaterialGroup(VolumeDataComposite Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hBaseMaterialGroupInstance := implementation.NewHandle() + + implementation_volumedatacomposite, err := implementation.GetWrapperHandle(VolumeDataComposite) + if (err != nil) { + return hBaseMaterialGroupInstance, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedatacomposite_getbasematerialgroup, implementation_volumedatacomposite.GetDLLInHandle(), hBaseMaterialGroupInstance.GetDLLOutHandle()) + if (err != nil) { + return hBaseMaterialGroupInstance, err + } + + return hBaseMaterialGroupInstance, err +} + +func (implementation *Lib3MFImplementation) VolumeDataComposite_SetBaseMaterialGroup(VolumeDataComposite Lib3MFHandle, BaseMaterialGroupInstance Lib3MFHandle) (error) { + var err error = nil + + implementation_volumedatacomposite, err := implementation.GetWrapperHandle(VolumeDataComposite) + if (err != nil) { + return err + } + implementation_basematerialgroupinstance, err := implementation.GetWrapperHandle(BaseMaterialGroupInstance) + if (err != nil) { + return err + } + + BaseMaterialGroupInstanceDLLHandle := implementation_basematerialgroupinstance.GetDLLInHandle() + if (BaseMaterialGroupInstanceDLLHandle == 0) { + err := fmt.Errorf("Handle must not be 0.") + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedatacomposite_setbasematerialgroup, implementation_volumedatacomposite.GetDLLInHandle(), BaseMaterialGroupInstanceDLLHandle) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) VolumeDataComposite_GetMaterialMappingCount(VolumeDataComposite Lib3MFHandle) (uint32, error) { + var err error = nil + var nCount uint32 = 0 + + implementation_volumedatacomposite, err := implementation.GetWrapperHandle(VolumeDataComposite) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedatacomposite_getmaterialmappingcount, implementation_volumedatacomposite.GetDLLInHandle(), UInt32OutValue(&nCount)) + if (err != nil) { + return 0, err + } + + return uint32(nCount), err +} + +func (implementation *Lib3MFImplementation) VolumeDataComposite_GetMaterialMapping(VolumeDataComposite Lib3MFHandle, nIndex uint32) (Lib3MFHandle, error) { + var err error = nil + hTheMaterialMapping := implementation.NewHandle() + + implementation_volumedatacomposite, err := implementation.GetWrapperHandle(VolumeDataComposite) + if (err != nil) { + return hTheMaterialMapping, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedatacomposite_getmaterialmapping, implementation_volumedatacomposite.GetDLLInHandle(), UInt32InValue(nIndex), hTheMaterialMapping.GetDLLOutHandle()) + if (err != nil) { + return hTheMaterialMapping, err + } + + return hTheMaterialMapping, err +} + +func (implementation *Lib3MFImplementation) VolumeDataComposite_AddMaterialMapping(VolumeDataComposite Lib3MFHandle, sTransform sLib3MFTransform) (Lib3MFHandle, error) { + var err error = nil + hTheMaterialMapping := implementation.NewHandle() + + implementation_volumedatacomposite, err := implementation.GetWrapperHandle(VolumeDataComposite) + if (err != nil) { + return hTheMaterialMapping, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedatacomposite_addmaterialmapping, implementation_volumedatacomposite.GetDLLInHandle(), uintptr(unsafe.Pointer(&sTransform)), hTheMaterialMapping.GetDLLOutHandle()) + if (err != nil) { + return hTheMaterialMapping, err + } + + return hTheMaterialMapping, err +} + +func (implementation *Lib3MFImplementation) VolumeDataComposite_RemoveMaterialMapping(VolumeDataComposite Lib3MFHandle, nIndex uint32) (error) { + var err error = nil + + implementation_volumedatacomposite, err := implementation.GetWrapperHandle(VolumeDataComposite) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedatacomposite_removematerialmapping, implementation_volumedatacomposite.GetDLLInHandle(), UInt32InValue(nIndex)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) VolumeDataProperty_GetName(VolumeDataProperty Lib3MFHandle) (string, error) { + var err error = nil + var neededforPropertyName int64 = 0 + var filledinPropertyName int64 = 0 + + implementation_volumedataproperty, err := implementation.GetWrapperHandle(VolumeDataProperty) + if (err != nil) { + return "", err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedataproperty_getname, implementation_volumedataproperty.GetDLLInHandle(), Int64InValue(0), Int64OutValue(&neededforPropertyName), Int64InValue(0)) + if (err != nil) { + return "", err + } + bufferSizePropertyName := neededforPropertyName + bufferPropertyName := make([]byte, bufferSizePropertyName) + err = implementation.CallFunction(implementation.Lib3MF_volumedataproperty_getname, implementation_volumedataproperty.GetDLLInHandle(), Int64InValue(bufferSizePropertyName), Int64OutValue(&filledinPropertyName), uintptr(unsafe.Pointer(&bufferPropertyName[0]))) + if (err != nil) { + return "", err + } + + return string(bufferPropertyName[:(filledinPropertyName-1)]), err +} + +func (implementation *Lib3MFImplementation) VolumeDataProperty_SetIsRequired(VolumeDataProperty Lib3MFHandle, bIsRequired bool) (error) { + var err error = nil + var nIsRequired uint8 = 0 + if (bIsRequired) { + nIsRequired = 1 + } + + + implementation_volumedataproperty, err := implementation.GetWrapperHandle(VolumeDataProperty) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedataproperty_setisrequired, implementation_volumedataproperty.GetDLLInHandle(), UInt8InValue(nIsRequired)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) VolumeDataProperty_IsRequired(VolumeDataProperty Lib3MFHandle) (bool, error) { + var err error = nil + var bIsRequired int64 = 0 + + implementation_volumedataproperty, err := implementation.GetWrapperHandle(VolumeDataProperty) + if (err != nil) { + return false, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedataproperty_isrequired, implementation_volumedataproperty.GetDLLInHandle(), Int64OutValue(&bIsRequired)) + if (err != nil) { + return false, err + } + + return (bIsRequired != 0), err +} + +func (implementation *Lib3MFImplementation) VolumeData_GetBoundary(VolumeData Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheLevelSetData := implementation.NewHandle() + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return hTheLevelSetData, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_getboundary, implementation_volumedata.GetDLLInHandle(), hTheLevelSetData.GetDLLOutHandle()) + if (err != nil) { + return hTheLevelSetData, err + } + + return hTheLevelSetData, err +} + +func (implementation *Lib3MFImplementation) VolumeData_CreateNewBoundary(VolumeData Lib3MFHandle, TheScalarField Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheLevelSetData := implementation.NewHandle() + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return hTheLevelSetData, err + } + implementation_thescalarfield, err := implementation.GetWrapperHandle(TheScalarField) + if (err != nil) { + return hTheLevelSetData, err + } + + TheScalarFieldDLLHandle := implementation_thescalarfield.GetDLLInHandle() + if (TheScalarFieldDLLHandle == 0) { + err := fmt.Errorf("Handle must not be 0.") + return hTheLevelSetData, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_createnewboundary, implementation_volumedata.GetDLLInHandle(), TheScalarFieldDLLHandle, hTheLevelSetData.GetDLLOutHandle()) + if (err != nil) { + return hTheLevelSetData, err + } + + return hTheLevelSetData, err +} + +func (implementation *Lib3MFImplementation) VolumeData_RemoveBoundary(VolumeData Lib3MFHandle) (error) { + var err error = nil + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_removeboundary, implementation_volumedata.GetDLLInHandle()) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) VolumeData_GetComposite(VolumeData Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheCompositeData := implementation.NewHandle() + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return hTheCompositeData, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_getcomposite, implementation_volumedata.GetDLLInHandle(), hTheCompositeData.GetDLLOutHandle()) + if (err != nil) { + return hTheCompositeData, err + } + + return hTheCompositeData, err +} + +func (implementation *Lib3MFImplementation) VolumeData_CreateNewComposite(VolumeData Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheCompositeData := implementation.NewHandle() + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return hTheCompositeData, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_createnewcomposite, implementation_volumedata.GetDLLInHandle(), hTheCompositeData.GetDLLOutHandle()) + if (err != nil) { + return hTheCompositeData, err + } + + return hTheCompositeData, err +} + +func (implementation *Lib3MFImplementation) VolumeData_RemoveComposite(VolumeData Lib3MFHandle) (error) { + var err error = nil + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_removecomposite, implementation_volumedata.GetDLLInHandle()) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) VolumeData_GetColor(VolumeData Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheColorData := implementation.NewHandle() + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return hTheColorData, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_getcolor, implementation_volumedata.GetDLLInHandle(), hTheColorData.GetDLLOutHandle()) + if (err != nil) { + return hTheColorData, err + } + + return hTheColorData, err +} + +func (implementation *Lib3MFImplementation) VolumeData_CreateNewColor(VolumeData Lib3MFHandle, TheVector3DField Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheColorData := implementation.NewHandle() + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return hTheColorData, err + } + implementation_thevector3dfield, err := implementation.GetWrapperHandle(TheVector3DField) + if (err != nil) { + return hTheColorData, err + } + + TheVector3DFieldDLLHandle := implementation_thevector3dfield.GetDLLInHandle() + if (TheVector3DFieldDLLHandle == 0) { + err := fmt.Errorf("Handle must not be 0.") + return hTheColorData, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_createnewcolor, implementation_volumedata.GetDLLInHandle(), TheVector3DFieldDLLHandle, hTheColorData.GetDLLOutHandle()) + if (err != nil) { + return hTheColorData, err + } + + return hTheColorData, err +} + +func (implementation *Lib3MFImplementation) VolumeData_RemoveColor(VolumeData Lib3MFHandle) (error) { + var err error = nil + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_removecolor, implementation_volumedata.GetDLLInHandle()) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) VolumeData_GetPropertyCount(VolumeData Lib3MFHandle) (uint32, error) { + var err error = nil + var nCount uint32 = 0 + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_getpropertycount, implementation_volumedata.GetDLLInHandle(), UInt32OutValue(&nCount)) + if (err != nil) { + return 0, err + } + + return uint32(nCount), err +} + +func (implementation *Lib3MFImplementation) VolumeData_GetProperty(VolumeData Lib3MFHandle, nIndex uint32) (Lib3MFHandle, error) { + var err error = nil + hTheVolumeDataProperty := implementation.NewHandle() + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return hTheVolumeDataProperty, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_getproperty, implementation_volumedata.GetDLLInHandle(), UInt32InValue(nIndex), hTheVolumeDataProperty.GetDLLOutHandle()) + if (err != nil) { + return hTheVolumeDataProperty, err + } + + return hTheVolumeDataProperty, err +} + +func (implementation *Lib3MFImplementation) VolumeData_AddPropertyFromScalarField(VolumeData Lib3MFHandle, sName string, TheScalarField Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheVolumeDataProperty := implementation.NewHandle() + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return hTheVolumeDataProperty, err + } + implementation_thescalarfield, err := implementation.GetWrapperHandle(TheScalarField) + if (err != nil) { + return hTheVolumeDataProperty, err + } + + TheScalarFieldDLLHandle := implementation_thescalarfield.GetDLLInHandle() + if (TheScalarFieldDLLHandle == 0) { + err := fmt.Errorf("Handle must not be 0.") + return hTheVolumeDataProperty, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_addpropertyfromscalarfield, implementation_volumedata.GetDLLInHandle(), StringInValue(sName), TheScalarFieldDLLHandle, hTheVolumeDataProperty.GetDLLOutHandle()) + if (err != nil) { + return hTheVolumeDataProperty, err + } + + return hTheVolumeDataProperty, err +} + +func (implementation *Lib3MFImplementation) VolumeData_AddPropertyFromVector3DField(VolumeData Lib3MFHandle, sName string, TheVector3DField Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheVolumeDataProperty := implementation.NewHandle() + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return hTheVolumeDataProperty, err + } + implementation_thevector3dfield, err := implementation.GetWrapperHandle(TheVector3DField) + if (err != nil) { + return hTheVolumeDataProperty, err + } + + TheVector3DFieldDLLHandle := implementation_thevector3dfield.GetDLLInHandle() + if (TheVector3DFieldDLLHandle == 0) { + err := fmt.Errorf("Handle must not be 0.") + return hTheVolumeDataProperty, err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_addpropertyfromvector3dfield, implementation_volumedata.GetDLLInHandle(), StringInValue(sName), TheVector3DFieldDLLHandle, hTheVolumeDataProperty.GetDLLOutHandle()) + if (err != nil) { + return hTheVolumeDataProperty, err + } + + return hTheVolumeDataProperty, err +} + +func (implementation *Lib3MFImplementation) VolumeData_RemoveProperty(VolumeData Lib3MFHandle, nIndex uint32) (error) { + var err error = nil + + implementation_volumedata, err := implementation.GetWrapperHandle(VolumeData) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_volumedata_removeproperty, implementation_volumedata.GetDLLInHandle(), UInt32InValue(nIndex)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Component_GetObjectResource(Component Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hObjectResource := implementation.NewHandle() + + implementation_component, err := implementation.GetWrapperHandle(Component) + if err != nil { + return hObjectResource, err + } + + err = implementation.CallFunction(implementation.Lib3MF_component_getobjectresource, implementation_component.GetDLLInHandle(), hObjectResource.GetDLLOutHandle()) + if err != nil { + return hObjectResource, err + } + + return hObjectResource, err +} + +func (implementation *Lib3MFImplementation) Component_GetObjectResourceID(Component Lib3MFHandle) (uint32, error) { + var err error = nil + var nUniqueResourceID uint32 = 0 + + implementation_component, err := implementation.GetWrapperHandle(Component) + if err != nil { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_component_getobjectresourceid, implementation_component.GetDLLInHandle(), UInt32OutValue(&nUniqueResourceID)) + if err != nil { + return 0, err + } + + return uint32(nUniqueResourceID), err +} + +func (implementation *Lib3MFImplementation) Component_GetUUID(Component Lib3MFHandle) (bool, string, error) { + var err error = nil + var bHasUUID int64 = 0 + var neededforUUID int64 = 0 + var filledinUUID int64 = 0 + + implementation_component, err := implementation.GetWrapperHandle(Component) + if err != nil { + return false, "", err + } + + err = implementation.CallFunction(implementation.Lib3MF_component_getuuid, implementation_component.GetDLLInHandle(), Int64OutValue(&bHasUUID), Int64InValue(0), Int64OutValue(&neededforUUID), Int64InValue(0)) + if err != nil { + return false, "", err + } + bufferSizeUUID := neededforUUID + bufferUUID := make([]byte, bufferSizeUUID) + err = implementation.CallFunction(implementation.Lib3MF_component_getuuid, implementation_component.GetDLLInHandle(), Int64OutValue(&bHasUUID), Int64InValue(bufferSizeUUID), Int64OutValue(&filledinUUID), uintptr(unsafe.Pointer(&bufferUUID[0]))) + if err != nil { + return false, "", err + } + + return (bHasUUID != 0), string(bufferUUID[:(filledinUUID - 1)]), err +} + +func (implementation *Lib3MFImplementation) Component_SetUUID(Component Lib3MFHandle, sUUID string) error { + var err error = nil + + implementation_component, err := implementation.GetWrapperHandle(Component) + if err != nil { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_component_setuuid, implementation_component.GetDLLInHandle(), StringInValue(sUUID)) + if err != nil { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Component_HasTransform(Component Lib3MFHandle) (bool, error) { + var err error = nil + var bHasTransform int64 = 0 + + implementation_component, err := implementation.GetWrapperHandle(Component) + if err != nil { + return false, err + } + + err = implementation.CallFunction(implementation.Lib3MF_component_hastransform, implementation_component.GetDLLInHandle(), Int64OutValue(&bHasTransform)) + if err != nil { + return false, err + } + + return (bHasTransform != 0), err +} + +func (implementation *Lib3MFImplementation) Component_GetTransform(Component Lib3MFHandle) (sLib3MFTransform, error) { + var err error = nil + var sTransform sLib3MFTransform + + implementation_component, err := implementation.GetWrapperHandle(Component) + if err != nil { + return sTransform, err + } + + err = implementation.CallFunction(implementation.Lib3MF_component_gettransform, implementation_component.GetDLLInHandle(), 0) + if err != nil { + return sTransform, err + } + + return sTransform, err +} + +func (implementation *Lib3MFImplementation) Component_SetTransform(Component Lib3MFHandle, sTransform sLib3MFTransform) error { + var err error = nil + + implementation_component, err := implementation.GetWrapperHandle(Component) + if err != nil { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_component_settransform, implementation_component.GetDLLInHandle(), uintptr(unsafe.Pointer(&sTransform))) + if err != nil { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) ComponentsObject_AddComponent(ComponentsObject Lib3MFHandle, ObjectResource Lib3MFHandle, sTransform sLib3MFTransform) (Lib3MFHandle, error) { + var err error = nil + hComponentInstance := implementation.NewHandle() + + implementation_componentsobject, err := implementation.GetWrapperHandle(ComponentsObject) + if err != nil { + return hComponentInstance, err + } + implementation_objectresource, err := implementation.GetWrapperHandle(ObjectResource) + if err != nil { + return hComponentInstance, err + } + + ObjectResourceDLLHandle := implementation_objectresource.GetDLLInHandle() + if ObjectResourceDLLHandle == 0 { + err := fmt.Errorf("Handle must not be 0.") + return hComponentInstance, err + } + + err = implementation.CallFunction(implementation.Lib3MF_componentsobject_addcomponent, implementation_componentsobject.GetDLLInHandle(), ObjectResourceDLLHandle, uintptr(unsafe.Pointer(&sTransform)), hComponentInstance.GetDLLOutHandle()) + if err != nil { + return hComponentInstance, err + } + + return hComponentInstance, err +} + +func (implementation *Lib3MFImplementation) ComponentsObject_GetComponent(ComponentsObject Lib3MFHandle, nIndex uint32) (Lib3MFHandle, error) { + var err error = nil + hComponentInstance := implementation.NewHandle() + + implementation_componentsobject, err := implementation.GetWrapperHandle(ComponentsObject) + if err != nil { + return hComponentInstance, err + } + + err = implementation.CallFunction(implementation.Lib3MF_componentsobject_getcomponent, implementation_componentsobject.GetDLLInHandle(), UInt32InValue(nIndex), hComponentInstance.GetDLLOutHandle()) + if err != nil { + return hComponentInstance, err + } + + return hComponentInstance, err +} + +func (implementation *Lib3MFImplementation) ComponentsObject_GetComponentCount(ComponentsObject Lib3MFHandle) (uint32, error) { + var err error = nil + var nCount uint32 = 0 + + implementation_componentsobject, err := implementation.GetWrapperHandle(ComponentsObject) + if err != nil { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_componentsobject_getcomponentcount, implementation_componentsobject.GetDLLInHandle(), UInt32OutValue(&nCount)) + if err != nil { + return 0, err + } + + return uint32(nCount), err +} + +func (implementation *Lib3MFImplementation) BeamSet_SetName(BeamSet Lib3MFHandle, sName string) error { + var err error = nil + + implementation_beamset, err := implementation.GetWrapperHandle(BeamSet) + if err != nil { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_beamset_setname, implementation_beamset.GetDLLInHandle(), StringInValue(sName)) + if err != nil { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) BeamSet_GetName(BeamSet Lib3MFHandle) (string, error) { + var err error = nil + var neededforName int64 = 0 + var filledinName int64 = 0 + + implementation_beamset, err := implementation.GetWrapperHandle(BeamSet) + if err != nil { + return "", err + } + + err = implementation.CallFunction(implementation.Lib3MF_beamset_getname, implementation_beamset.GetDLLInHandle(), Int64InValue(0), Int64OutValue(&neededforName), Int64InValue(0)) + if err != nil { + return "", err + } + bufferSizeName := neededforName + bufferName := make([]byte, bufferSizeName) + err = implementation.CallFunction(implementation.Lib3MF_beamset_getname, implementation_beamset.GetDLLInHandle(), Int64InValue(bufferSizeName), Int64OutValue(&filledinName), uintptr(unsafe.Pointer(&bufferName[0]))) + if err != nil { + return "", err + } + + return string(bufferName[:(filledinName - 1)]), err +} + +func (implementation *Lib3MFImplementation) BeamSet_SetIdentifier(BeamSet Lib3MFHandle, sIdentifier string) error { + var err error = nil + + implementation_beamset, err := implementation.GetWrapperHandle(BeamSet) + if err != nil { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_beamset_setidentifier, implementation_beamset.GetDLLInHandle(), StringInValue(sIdentifier)) + if err != nil { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) BeamSet_GetIdentifier(BeamSet Lib3MFHandle) (string, error) { + var err error = nil + var neededforIdentifier int64 = 0 + var filledinIdentifier int64 = 0 + + implementation_beamset, err := implementation.GetWrapperHandle(BeamSet) + if err != nil { + return "", err } err = implementation.CallFunction(implementation.Lib3MF_beamset_getidentifier, implementation_beamset.GetDLLInHandle(), Int64InValue(0), Int64OutValue(&neededforIdentifier), Int64InValue(0)) @@ -5696,148 +8157,382 @@ func (implementation *Lib3MFImplementation) MultiPropertyGroup_GetAllPropertyIDs return make([]uint32, 0), err } - return bufferPropertyIDs, err + return bufferPropertyIDs, err +} + +func (implementation *Lib3MFImplementation) MultiPropertyGroup_AddMultiProperty(MultiPropertyGroup Lib3MFHandle, PropertyIDs []uint32) (uint32, error) { + var err error = nil + var nPropertyID uint32 = 0 + + implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) + if err != nil { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_addmultiproperty, implementation_multipropertygroup.GetDLLInHandle(), 0, 0, UInt32OutValue(&nPropertyID)) + if err != nil { + return 0, err + } + + return uint32(nPropertyID), err +} + +func (implementation *Lib3MFImplementation) MultiPropertyGroup_SetMultiProperty(MultiPropertyGroup Lib3MFHandle, nPropertyID uint32, PropertyIDs []uint32) error { + var err error = nil + + implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) + if err != nil { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_setmultiproperty, implementation_multipropertygroup.GetDLLInHandle(), UInt32InValue(nPropertyID), 0, 0) + if err != nil { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) MultiPropertyGroup_GetMultiProperty(MultiPropertyGroup Lib3MFHandle, nPropertyID uint32) ([]uint32, error) { + var err error = nil + var neededforPropertyIDs int64 = 0 + var filledinPropertyIDs int64 = 0 + bufferPropertyIDs := make([]uint32, 0) + + implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) + if err != nil { + return make([]uint32, 0), err + } + + err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_getmultiproperty, implementation_multipropertygroup.GetDLLInHandle(), UInt32InValue(nPropertyID), Int64InValue(0), Int64OutValue(&neededforPropertyIDs), Int64InValue(0)) + if err != nil { + return make([]uint32, 0), err + } + bufferSizePropertyIDs := neededforPropertyIDs + bufferPropertyIDs = make([]uint32, bufferSizePropertyIDs) + err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_getmultiproperty, implementation_multipropertygroup.GetDLLInHandle(), UInt32InValue(nPropertyID), Int64InValue(bufferSizePropertyIDs), Int64OutValue(&filledinPropertyIDs), uintptr(unsafe.Pointer(&bufferPropertyIDs[0]))) + if err != nil { + return make([]uint32, 0), err + } + + return bufferPropertyIDs, err +} + +func (implementation *Lib3MFImplementation) MultiPropertyGroup_RemoveMultiProperty(MultiPropertyGroup Lib3MFHandle, nPropertyID uint32) error { + var err error = nil + + implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) + if err != nil { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_removemultiproperty, implementation_multipropertygroup.GetDLLInHandle(), UInt32InValue(nPropertyID)) + if err != nil { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) MultiPropertyGroup_GetLayerCount(MultiPropertyGroup Lib3MFHandle) (uint32, error) { + var err error = nil + var nCount uint32 = 0 + + implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) + if err != nil { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_getlayercount, implementation_multipropertygroup.GetDLLInHandle(), UInt32OutValue(&nCount)) + if err != nil { + return 0, err + } + + return uint32(nCount), err +} + +func (implementation *Lib3MFImplementation) MultiPropertyGroup_AddLayer(MultiPropertyGroup Lib3MFHandle, sTheLayer sLib3MFMultiPropertyLayer) (uint32, error) { + var err error = nil + var nLayerIndex uint32 = 0 + + implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) + if err != nil { + return 0, err + } + + err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_addlayer, implementation_multipropertygroup.GetDLLInHandle(), uintptr(unsafe.Pointer(&sTheLayer)), UInt32OutValue(&nLayerIndex)) + if err != nil { + return 0, err + } + + return uint32(nLayerIndex), err +} + +func (implementation *Lib3MFImplementation) MultiPropertyGroup_GetLayer(MultiPropertyGroup Lib3MFHandle, nLayerIndex uint32) (sLib3MFMultiPropertyLayer, error) { + var err error = nil + var sTheLayer sLib3MFMultiPropertyLayer + + implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) + if err != nil { + return sTheLayer, err + } + + err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_getlayer, implementation_multipropertygroup.GetDLLInHandle(), UInt32InValue(nLayerIndex), 0) + if err != nil { + return sTheLayer, err + } + + return sTheLayer, err +} + +func (implementation *Lib3MFImplementation) MultiPropertyGroup_RemoveLayer(MultiPropertyGroup Lib3MFHandle, nLayerIndex uint32) error { + var err error = nil + + implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) + if err != nil { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_removelayer, implementation_multipropertygroup.GetDLLInHandle(), UInt32InValue(nLayerIndex)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Image3D_GetName(Image3D Lib3MFHandle) (string, error) { + var err error = nil + var neededforName int64 = 0 + var filledinName int64 = 0 + + implementation_image3d, err := implementation.GetWrapperHandle(Image3D) + if (err != nil) { + return "", err + } + + err = implementation.CallFunction(implementation.Lib3MF_image3d_getname, implementation_image3d.GetDLLInHandle(), Int64InValue(0), Int64OutValue(&neededforName), Int64InValue(0)) + if (err != nil) { + return "", err + } + bufferSizeName := neededforName + bufferName := make([]byte, bufferSizeName) + err = implementation.CallFunction(implementation.Lib3MF_image3d_getname, implementation_image3d.GetDLLInHandle(), Int64InValue(bufferSizeName), Int64OutValue(&filledinName), uintptr(unsafe.Pointer(&bufferName[0]))) + if (err != nil) { + return "", err + } + + return string(bufferName[:(filledinName-1)]), err +} + +func (implementation *Lib3MFImplementation) Image3D_SetName(Image3D Lib3MFHandle, sName string) (error) { + var err error = nil + + implementation_image3d, err := implementation.GetWrapperHandle(Image3D) + if (err != nil) { + return err + } + + err = implementation.CallFunction(implementation.Lib3MF_image3d_setname, implementation_image3d.GetDLLInHandle(), StringInValue(sName)) + if (err != nil) { + return err + } + + return err +} + +func (implementation *Lib3MFImplementation) Image3D_IsImageStack(Image3D Lib3MFHandle) (bool, error) { + var err error = nil + var bIsImageStack int64 = 0 + + implementation_image3d, err := implementation.GetWrapperHandle(Image3D) + if (err != nil) { + return false, err + } + + err = implementation.CallFunction(implementation.Lib3MF_image3d_isimagestack, implementation_image3d.GetDLLInHandle(), Int64OutValue(&bIsImageStack)) + if (err != nil) { + return false, err + } + + return (bIsImageStack != 0), err } -func (implementation *Lib3MFImplementation) MultiPropertyGroup_AddMultiProperty(MultiPropertyGroup Lib3MFHandle, PropertyIDs []uint32) (uint32, error) { +func (implementation *Lib3MFImplementation) ImageStack_GetRowCount(ImageStack Lib3MFHandle) (uint32, error) { var err error = nil - var nPropertyID uint32 = 0 - - implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) - if err != nil { + var nRowCount uint32 = 0 + + implementation_imagestack, err := implementation.GetWrapperHandle(ImageStack) + if (err != nil) { return 0, err } - err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_addmultiproperty, implementation_multipropertygroup.GetDLLInHandle(), 0, 0, UInt32OutValue(&nPropertyID)) - if err != nil { + err = implementation.CallFunction(implementation.Lib3MF_imagestack_getrowcount, implementation_imagestack.GetDLLInHandle(), UInt32OutValue(&nRowCount)) + if (err != nil) { return 0, err } - - return uint32(nPropertyID), err + + return uint32(nRowCount), err } -func (implementation *Lib3MFImplementation) MultiPropertyGroup_SetMultiProperty(MultiPropertyGroup Lib3MFHandle, nPropertyID uint32, PropertyIDs []uint32) error { +func (implementation *Lib3MFImplementation) ImageStack_SetRowCount(ImageStack Lib3MFHandle, nRowCount uint32) (error) { var err error = nil - - implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) - if err != nil { + + implementation_imagestack, err := implementation.GetWrapperHandle(ImageStack) + if (err != nil) { return err } - err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_setmultiproperty, implementation_multipropertygroup.GetDLLInHandle(), UInt32InValue(nPropertyID), 0, 0) - if err != nil { + err = implementation.CallFunction(implementation.Lib3MF_imagestack_setrowcount, implementation_imagestack.GetDLLInHandle(), UInt32InValue(nRowCount)) + if (err != nil) { return err } - + return err } -func (implementation *Lib3MFImplementation) MultiPropertyGroup_GetMultiProperty(MultiPropertyGroup Lib3MFHandle, nPropertyID uint32) ([]uint32, error) { +func (implementation *Lib3MFImplementation) ImageStack_GetColumnCount(ImageStack Lib3MFHandle) (uint32, error) { var err error = nil - var neededforPropertyIDs int64 = 0 - var filledinPropertyIDs int64 = 0 - bufferPropertyIDs := make([]uint32, 0) - - implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) - if err != nil { - return make([]uint32, 0), err + var nColumnCount uint32 = 0 + + implementation_imagestack, err := implementation.GetWrapperHandle(ImageStack) + if (err != nil) { + return 0, err } - err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_getmultiproperty, implementation_multipropertygroup.GetDLLInHandle(), UInt32InValue(nPropertyID), Int64InValue(0), Int64OutValue(&neededforPropertyIDs), Int64InValue(0)) - if err != nil { - return make([]uint32, 0), err - } - bufferSizePropertyIDs := neededforPropertyIDs - bufferPropertyIDs = make([]uint32, bufferSizePropertyIDs) - err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_getmultiproperty, implementation_multipropertygroup.GetDLLInHandle(), UInt32InValue(nPropertyID), Int64InValue(bufferSizePropertyIDs), Int64OutValue(&filledinPropertyIDs), uintptr(unsafe.Pointer(&bufferPropertyIDs[0]))) - if err != nil { - return make([]uint32, 0), err + err = implementation.CallFunction(implementation.Lib3MF_imagestack_getcolumncount, implementation_imagestack.GetDLLInHandle(), UInt32OutValue(&nColumnCount)) + if (err != nil) { + return 0, err } - - return bufferPropertyIDs, err + + return uint32(nColumnCount), err } -func (implementation *Lib3MFImplementation) MultiPropertyGroup_RemoveMultiProperty(MultiPropertyGroup Lib3MFHandle, nPropertyID uint32) error { +func (implementation *Lib3MFImplementation) ImageStack_SetColumnCount(ImageStack Lib3MFHandle, nColumnCount uint32) (error) { var err error = nil - - implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) - if err != nil { + + implementation_imagestack, err := implementation.GetWrapperHandle(ImageStack) + if (err != nil) { return err } - err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_removemultiproperty, implementation_multipropertygroup.GetDLLInHandle(), UInt32InValue(nPropertyID)) - if err != nil { + err = implementation.CallFunction(implementation.Lib3MF_imagestack_setcolumncount, implementation_imagestack.GetDLLInHandle(), UInt32InValue(nColumnCount)) + if (err != nil) { return err } - + return err } -func (implementation *Lib3MFImplementation) MultiPropertyGroup_GetLayerCount(MultiPropertyGroup Lib3MFHandle) (uint32, error) { +func (implementation *Lib3MFImplementation) ImageStack_GetSheetCount(ImageStack Lib3MFHandle) (uint32, error) { var err error = nil - var nCount uint32 = 0 - - implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) - if err != nil { + var nSheetCount uint32 = 0 + + implementation_imagestack, err := implementation.GetWrapperHandle(ImageStack) + if (err != nil) { return 0, err } - err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_getlayercount, implementation_multipropertygroup.GetDLLInHandle(), UInt32OutValue(&nCount)) - if err != nil { + err = implementation.CallFunction(implementation.Lib3MF_imagestack_getsheetcount, implementation_imagestack.GetDLLInHandle(), UInt32OutValue(&nSheetCount)) + if (err != nil) { return 0, err } - - return uint32(nCount), err + + return uint32(nSheetCount), err } -func (implementation *Lib3MFImplementation) MultiPropertyGroup_AddLayer(MultiPropertyGroup Lib3MFHandle, sTheLayer sLib3MFMultiPropertyLayer) (uint32, error) { +func (implementation *Lib3MFImplementation) ImageStack_GetSheet(ImageStack Lib3MFHandle, nIndex uint32) (Lib3MFHandle, error) { var err error = nil - var nLayerIndex uint32 = 0 - - implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) - if err != nil { - return 0, err + hSheet := implementation.NewHandle() + + implementation_imagestack, err := implementation.GetWrapperHandle(ImageStack) + if (err != nil) { + return hSheet, err } - err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_addlayer, implementation_multipropertygroup.GetDLLInHandle(), uintptr(unsafe.Pointer(&sTheLayer)), UInt32OutValue(&nLayerIndex)) - if err != nil { - return 0, err + err = implementation.CallFunction(implementation.Lib3MF_imagestack_getsheet, implementation_imagestack.GetDLLInHandle(), UInt32InValue(nIndex), hSheet.GetDLLOutHandle()) + if (err != nil) { + return hSheet, err } - - return uint32(nLayerIndex), err + + return hSheet, err } -func (implementation *Lib3MFImplementation) MultiPropertyGroup_GetLayer(MultiPropertyGroup Lib3MFHandle, nLayerIndex uint32) (sLib3MFMultiPropertyLayer, error) { +func (implementation *Lib3MFImplementation) ImageStack_SetSheet(ImageStack Lib3MFHandle, nIndex uint32, Sheet Lib3MFHandle) (error) { var err error = nil - var sTheLayer sLib3MFMultiPropertyLayer + + implementation_imagestack, err := implementation.GetWrapperHandle(ImageStack) + if (err != nil) { + return err + } + implementation_sheet, err := implementation.GetWrapperHandle(Sheet) + if (err != nil) { + return err + } + + SheetDLLHandle := implementation_sheet.GetDLLInHandle() + if (SheetDLLHandle == 0) { + err := fmt.Errorf("Handle must not be 0.") + return err + } - implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) - if err != nil { - return sTheLayer, err + err = implementation.CallFunction(implementation.Lib3MF_imagestack_setsheet, implementation_imagestack.GetDLLInHandle(), UInt32InValue(nIndex), SheetDLLHandle) + if (err != nil) { + return err } + + return err +} - err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_getlayer, implementation_multipropertygroup.GetDLLInHandle(), UInt32InValue(nLayerIndex), 0) - if err != nil { - return sTheLayer, err +func (implementation *Lib3MFImplementation) ImageStack_CreateEmptySheet(ImageStack Lib3MFHandle, nIndex uint32, sPath string) (Lib3MFHandle, error) { + var err error = nil + hSheet := implementation.NewHandle() + + implementation_imagestack, err := implementation.GetWrapperHandle(ImageStack) + if (err != nil) { + return hSheet, err } - return sTheLayer, err + err = implementation.CallFunction(implementation.Lib3MF_imagestack_createemptysheet, implementation_imagestack.GetDLLInHandle(), UInt32InValue(nIndex), StringInValue(sPath), hSheet.GetDLLOutHandle()) + if (err != nil) { + return hSheet, err + } + + return hSheet, err } -func (implementation *Lib3MFImplementation) MultiPropertyGroup_RemoveLayer(MultiPropertyGroup Lib3MFHandle, nLayerIndex uint32) error { +func (implementation *Lib3MFImplementation) ImageStack_CreateSheetFromBuffer(ImageStack Lib3MFHandle, nIndex uint32, sPath string, Data []uint8) (Lib3MFHandle, error) { var err error = nil + hSheet := implementation.NewHandle() + + implementation_imagestack, err := implementation.GetWrapperHandle(ImageStack) + if (err != nil) { + return hSheet, err + } - implementation_multipropertygroup, err := implementation.GetWrapperHandle(MultiPropertyGroup) - if err != nil { - return err + err = implementation.CallFunction(implementation.Lib3MF_imagestack_createsheetfrombuffer, implementation_imagestack.GetDLLInHandle(), UInt32InValue(nIndex), StringInValue(sPath), 0, 0, hSheet.GetDLLOutHandle()) + if (err != nil) { + return hSheet, err } + + return hSheet, err +} - err = implementation.CallFunction(implementation.Lib3MF_multipropertygroup_removelayer, implementation_multipropertygroup.GetDLLInHandle(), UInt32InValue(nLayerIndex)) - if err != nil { - return err +func (implementation *Lib3MFImplementation) ImageStack_CreateSheetFromFile(ImageStack Lib3MFHandle, nIndex uint32, sPath string, sFileName string) (Lib3MFHandle, error) { + var err error = nil + hSheet := implementation.NewHandle() + + implementation_imagestack, err := implementation.GetWrapperHandle(ImageStack) + if (err != nil) { + return hSheet, err } - return err + err = implementation.CallFunction(implementation.Lib3MF_imagestack_createsheetfromfile, implementation_imagestack.GetDLLInHandle(), UInt32InValue(nIndex), StringInValue(sPath), StringInValue(sFileName), hSheet.GetDLLOutHandle()) + if (err != nil) { + return hSheet, err + } + + return hSheet, err } func (implementation *Lib3MFImplementation) Attachment_GetPath(Attachment Lib3MFHandle) (string, error) { @@ -8240,10 +10935,61 @@ func (implementation *Lib3MFImplementation) Model_GetSliceStacks(Model Lib3MFHan } err = implementation.CallFunction(implementation.Lib3MF_model_getslicestacks, implementation_model.GetDLLInHandle(), hResourceIterator.GetDLLOutHandle()) - if err != nil { + if (err != nil) { + return hResourceIterator, err + } + + return hResourceIterator, err +} + +func (implementation *Lib3MFImplementation) Model_GetImage3Ds(Model Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hResourceIterator := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hResourceIterator, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_getimage3ds, implementation_model.GetDLLInHandle(), hResourceIterator.GetDLLOutHandle()) + if (err != nil) { + return hResourceIterator, err + } + + return hResourceIterator, err +} + +func (implementation *Lib3MFImplementation) Model_GetScalarFields(Model Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hResourceIterator := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hResourceIterator, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_getscalarfields, implementation_model.GetDLLInHandle(), hResourceIterator.GetDLLOutHandle()) + if (err != nil) { + return hResourceIterator, err + } + + return hResourceIterator, err +} + +func (implementation *Lib3MFImplementation) Model_GetVector3DFields(Model Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hResourceIterator := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { return hResourceIterator, err } + err = implementation.CallFunction(implementation.Lib3MF_model_getvector3dfields, implementation_model.GetDLLInHandle(), hResourceIterator.GetDLLOutHandle()) + if (err != nil) { + return hResourceIterator, err + } + return hResourceIterator, err } @@ -8447,6 +11193,298 @@ func (implementation *Lib3MFImplementation) Model_AddMultiPropertyGroup(Model Li return hMultiPropertyGroupInstance, err } +func (implementation *Lib3MFImplementation) Model_AddImageStack(Model Lib3MFHandle, nColumnCount uint32, nRowCount uint32, nSheetCount uint32) (Lib3MFHandle, error) { + var err error = nil + hInstance := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hInstance, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_addimagestack, implementation_model.GetDLLInHandle(), UInt32InValue(nColumnCount), UInt32InValue(nRowCount), UInt32InValue(nSheetCount), hInstance.GetDLLOutHandle()) + if (err != nil) { + return hInstance, err + } + + return hInstance, err +} + +func (implementation *Lib3MFImplementation) Model_GetImageStackByID(Model Lib3MFHandle, nUniqueResourceID uint32) (Lib3MFHandle, error) { + var err error = nil + hImageStackInstance := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hImageStackInstance, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_getimagestackbyid, implementation_model.GetDLLInHandle(), UInt32InValue(nUniqueResourceID), hImageStackInstance.GetDLLOutHandle()) + if (err != nil) { + return hImageStackInstance, err + } + + return hImageStackInstance, err +} + +func (implementation *Lib3MFImplementation) Model_AddScalarFieldFromImage3D(Model Lib3MFHandle, Image3D Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheScalarFieldFromImage3D := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hTheScalarFieldFromImage3D, err + } + implementation_image3d, err := implementation.GetWrapperHandle(Image3D) + if (err != nil) { + return hTheScalarFieldFromImage3D, err + } + + Image3DDLLHandle := implementation_image3d.GetDLLInHandle() + if (Image3DDLLHandle == 0) { + err := fmt.Errorf("Handle must not be 0.") + return hTheScalarFieldFromImage3D, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_addscalarfieldfromimage3d, implementation_model.GetDLLInHandle(), Image3DDLLHandle, hTheScalarFieldFromImage3D.GetDLLOutHandle()) + if (err != nil) { + return hTheScalarFieldFromImage3D, err + } + + return hTheScalarFieldFromImage3D, err +} + +func (implementation *Lib3MFImplementation) Model_AddScalarFieldComposed(Model Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheScalarFieldComposed := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hTheScalarFieldComposed, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_addscalarfieldcomposed, implementation_model.GetDLLInHandle(), hTheScalarFieldComposed.GetDLLOutHandle()) + if (err != nil) { + return hTheScalarFieldComposed, err + } + + return hTheScalarFieldComposed, err +} + +func (implementation *Lib3MFImplementation) Model_AddScalarFieldConstant(Model Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheScalarFieldConstant := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hTheScalarFieldConstant, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_addscalarfieldconstant, implementation_model.GetDLLInHandle(), hTheScalarFieldConstant.GetDLLOutHandle()) + if (err != nil) { + return hTheScalarFieldConstant, err + } + + return hTheScalarFieldConstant, err +} + +func (implementation *Lib3MFImplementation) Model_GetScalarFieldByID(Model Lib3MFHandle, nUniqueResourceID uint32) (Lib3MFHandle, error) { + var err error = nil + hScalarFieldInstance := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hScalarFieldInstance, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_getscalarfieldbyid, implementation_model.GetDLLInHandle(), UInt32InValue(nUniqueResourceID), hScalarFieldInstance.GetDLLOutHandle()) + if (err != nil) { + return hScalarFieldInstance, err + } + + return hScalarFieldInstance, err +} + +func (implementation *Lib3MFImplementation) Model_GetScalarFieldFromImage3DByID(Model Lib3MFHandle, nUniqueResourceID uint32) (Lib3MFHandle, error) { + var err error = nil + hScalarFieldFromImage3DInstance := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hScalarFieldFromImage3DInstance, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_getscalarfieldfromimage3dbyid, implementation_model.GetDLLInHandle(), UInt32InValue(nUniqueResourceID), hScalarFieldFromImage3DInstance.GetDLLOutHandle()) + if (err != nil) { + return hScalarFieldFromImage3DInstance, err + } + + return hScalarFieldFromImage3DInstance, err +} + +func (implementation *Lib3MFImplementation) Model_GetScalarFieldComposedByID(Model Lib3MFHandle, nUniqueResourceID uint32) (Lib3MFHandle, error) { + var err error = nil + hScalarFieldComposedInstance := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hScalarFieldComposedInstance, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_getscalarfieldcomposedbyid, implementation_model.GetDLLInHandle(), UInt32InValue(nUniqueResourceID), hScalarFieldComposedInstance.GetDLLOutHandle()) + if (err != nil) { + return hScalarFieldComposedInstance, err + } + + return hScalarFieldComposedInstance, err +} + +func (implementation *Lib3MFImplementation) Model_GetScalarFieldConstantByID(Model Lib3MFHandle, nUniqueResourceID uint32) (Lib3MFHandle, error) { + var err error = nil + hScalarFieldConstantInstance := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hScalarFieldConstantInstance, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_getscalarfieldconstantbyid, implementation_model.GetDLLInHandle(), UInt32InValue(nUniqueResourceID), hScalarFieldConstantInstance.GetDLLOutHandle()) + if (err != nil) { + return hScalarFieldConstantInstance, err + } + + return hScalarFieldConstantInstance, err +} + +func (implementation *Lib3MFImplementation) Model_AddVector3DFieldFromImage3D(Model Lib3MFHandle, Image3D Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheVector3DFieldFromImage3D := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hTheVector3DFieldFromImage3D, err + } + implementation_image3d, err := implementation.GetWrapperHandle(Image3D) + if (err != nil) { + return hTheVector3DFieldFromImage3D, err + } + + Image3DDLLHandle := implementation_image3d.GetDLLInHandle() + if (Image3DDLLHandle == 0) { + err := fmt.Errorf("Handle must not be 0.") + return hTheVector3DFieldFromImage3D, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_addvector3dfieldfromimage3d, implementation_model.GetDLLInHandle(), Image3DDLLHandle, hTheVector3DFieldFromImage3D.GetDLLOutHandle()) + if (err != nil) { + return hTheVector3DFieldFromImage3D, err + } + + return hTheVector3DFieldFromImage3D, err +} + +func (implementation *Lib3MFImplementation) Model_AddVector3DFieldComposed(Model Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheVector3DFieldComposed := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hTheVector3DFieldComposed, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_addvector3dfieldcomposed, implementation_model.GetDLLInHandle(), hTheVector3DFieldComposed.GetDLLOutHandle()) + if (err != nil) { + return hTheVector3DFieldComposed, err + } + + return hTheVector3DFieldComposed, err +} + +func (implementation *Lib3MFImplementation) Model_AddVector3DFieldConstant(Model Lib3MFHandle) (Lib3MFHandle, error) { + var err error = nil + hTheVector3DFieldConstant := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hTheVector3DFieldConstant, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_addvector3dfieldconstant, implementation_model.GetDLLInHandle(), hTheVector3DFieldConstant.GetDLLOutHandle()) + if (err != nil) { + return hTheVector3DFieldConstant, err + } + + return hTheVector3DFieldConstant, err +} + +func (implementation *Lib3MFImplementation) Model_GetVector3DFieldByID(Model Lib3MFHandle, nUniqueResourceID uint32) (Lib3MFHandle, error) { + var err error = nil + hVector3DFieldInstance := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hVector3DFieldInstance, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_getvector3dfieldbyid, implementation_model.GetDLLInHandle(), UInt32InValue(nUniqueResourceID), hVector3DFieldInstance.GetDLLOutHandle()) + if (err != nil) { + return hVector3DFieldInstance, err + } + + return hVector3DFieldInstance, err +} + +func (implementation *Lib3MFImplementation) Model_GetVector3DFieldFromImage3DByID(Model Lib3MFHandle, nUniqueResourceID uint32) (Lib3MFHandle, error) { + var err error = nil + hVector3DFieldFromImage3DInstance := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hVector3DFieldFromImage3DInstance, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_getvector3dfieldfromimage3dbyid, implementation_model.GetDLLInHandle(), UInt32InValue(nUniqueResourceID), hVector3DFieldFromImage3DInstance.GetDLLOutHandle()) + if (err != nil) { + return hVector3DFieldFromImage3DInstance, err + } + + return hVector3DFieldFromImage3DInstance, err +} + +func (implementation *Lib3MFImplementation) Model_GetVector3DFieldComposedByID(Model Lib3MFHandle, nUniqueResourceID uint32) (Lib3MFHandle, error) { + var err error = nil + hVector3DFieldComposedInstance := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hVector3DFieldComposedInstance, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_getvector3dfieldcomposedbyid, implementation_model.GetDLLInHandle(), UInt32InValue(nUniqueResourceID), hVector3DFieldComposedInstance.GetDLLOutHandle()) + if (err != nil) { + return hVector3DFieldComposedInstance, err + } + + return hVector3DFieldComposedInstance, err +} + +func (implementation *Lib3MFImplementation) Model_GetVector3DFieldConstantByID(Model Lib3MFHandle, nUniqueResourceID uint32) (Lib3MFHandle, error) { + var err error = nil + hVector3DFieldConstantInstance := implementation.NewHandle() + + implementation_model, err := implementation.GetWrapperHandle(Model) + if (err != nil) { + return hVector3DFieldConstantInstance, err + } + + err = implementation.CallFunction(implementation.Lib3MF_model_getvector3dfieldconstantbyid, implementation_model.GetDLLInHandle(), UInt32InValue(nUniqueResourceID), hVector3DFieldConstantInstance.GetDLLOutHandle()) + if (err != nil) { + return hVector3DFieldConstantInstance, err + } + + return hVector3DFieldConstantInstance, err +} + func (implementation *Lib3MFImplementation) Model_AddBuildItem(Model Lib3MFHandle, Object Lib3MFHandle, sTransform sLib3MFTransform) (Lib3MFHandle, error) { var err error = nil hBuildItemInstance := implementation.NewHandle() diff --git a/Autogenerated/Bindings/Go/lib3mf_types.h b/Autogenerated/Bindings/Go/lib3mf_types.h index 6f2dcf6a4..696aec4eb 100644 --- a/Autogenerated/Bindings/Go/lib3mf_types.h +++ b/Autogenerated/Bindings/Go/lib3mf_types.h @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated plain C Header file with basic types in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -84,8 +84,8 @@ typedef void * Lib3MF_pvoid; **************************************************************************************************************************/ #define LIB3MF_VERSION_MAJOR 2 -#define LIB3MF_VERSION_MINOR 3 -#define LIB3MF_VERSION_MICRO 2 +#define LIB3MF_VERSION_MINOR 4 +#define LIB3MF_VERSION_MICRO 0 #define LIB3MF_VERSION_PRERELEASEINFO "" #define LIB3MF_VERSION_BUILDINFO "" @@ -130,13 +130,18 @@ typedef void * Lib3MF_pvoid; #define LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER 140 /** A progress identifier is unknown */ #define LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT 141 /** An element buffer exceeds its spec limit */ #define LIB3MF_ERROR_INVALIDRESOURCE 142 /** A resource is invalid */ +#define LIB3MF_ERROR_INVALIDLEVELSET 143 /** A level set is invalid */ #define LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE 2000 /** This object type is not valid for beamlattices */ #define LIB3MF_ERROR_INVALIDKEYSTORE 3000 /** The keystore object is invalid */ #define LIB3MF_ERROR_INVALIDKEYSTORECONSUMER 3001 /** The consumer keystore object is invalid */ #define LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND 3002 /** A consumer has not been found */ #define LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND 3003 /** A resource data has not been found */ #define LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED 3004 /** A Key or Conentent encryption callback has not been registered */ -#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key siue is invalid */ +#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key size is invalid */ +#define LIB3MF_ERROR_INCOMPATIBLEPORTTYPES 4000 /** Link could not be added, the port types are incompatible */ +#define LIB3MF_ERROR_GRAPHISCYCLIC 4001 /** The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted. */ +#define LIB3MF_ERROR_INPUTNOTSET 4002 /** The input of a node is not set. */ +#define LIB3MF_ERROR_INVALIDNODECONFIGURATION 4003 /** The selected node configuration is not supported */ /************************************************************************************************************************* Error strings for Lib3MF @@ -181,13 +186,18 @@ inline const char * LIB3MF_GETERRORSTRING (Lib3MFResult nErrorCode) { case LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: return "A progress identifier is unknown"; case LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: return "An element buffer exceeds its spec limit"; case LIB3MF_ERROR_INVALIDRESOURCE: return "A resource is invalid"; + case LIB3MF_ERROR_INVALIDLEVELSET: return "A level set is invalid"; case LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: return "This object type is not valid for beamlattices"; case LIB3MF_ERROR_INVALIDKEYSTORE: return "The keystore object is invalid"; case LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: return "The consumer keystore object is invalid"; case LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND: return "A consumer has not been found"; case LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: return "A resource data has not been found"; case LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: return "A Key or Conentent encryption callback has not been registered"; - case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key siue is invalid"; + case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key size is invalid"; + case LIB3MF_ERROR_INCOMPATIBLEPORTTYPES: return "Link could not be added, the port types are incompatible"; + case LIB3MF_ERROR_GRAPHISCYCLIC: return "The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted."; + case LIB3MF_ERROR_INPUTNOTSET: return "The input of a node is not set."; + case LIB3MF_ERROR_INVALIDNODECONFIGURATION: return "The selected node configuration is not supported"; default: return "unknown error"; } } @@ -212,11 +222,21 @@ typedef Lib3MFHandle Lib3MF_ColorGroupIterator; typedef Lib3MFHandle Lib3MF_Texture2DGroupIterator; typedef Lib3MFHandle Lib3MF_CompositeMaterialsIterator; typedef Lib3MFHandle Lib3MF_MultiPropertyGroupIterator; +typedef Lib3MFHandle Lib3MF_Image3DIterator; +typedef Lib3MFHandle Lib3MF_FunctionIterator; +typedef Lib3MFHandle Lib3MF_LevelSetIterator; typedef Lib3MFHandle Lib3MF_MetaData; typedef Lib3MFHandle Lib3MF_MetaDataGroup; typedef Lib3MFHandle Lib3MF_Object; typedef Lib3MFHandle Lib3MF_MeshObject; +typedef Lib3MFHandle Lib3MF_LevelSet; typedef Lib3MFHandle Lib3MF_BeamLattice; +typedef Lib3MFHandle Lib3MF_FunctionReference; +typedef Lib3MFHandle Lib3MF_VolumeDataColor; +typedef Lib3MFHandle Lib3MF_MaterialMapping; +typedef Lib3MFHandle Lib3MF_VolumeDataComposite; +typedef Lib3MFHandle Lib3MF_VolumeDataProperty; +typedef Lib3MFHandle Lib3MF_VolumeData; typedef Lib3MFHandle Lib3MF_Component; typedef Lib3MFHandle Lib3MF_ComponentsObject; typedef Lib3MFHandle Lib3MF_BeamSet; @@ -225,8 +245,71 @@ typedef Lib3MFHandle Lib3MF_ColorGroup; typedef Lib3MFHandle Lib3MF_Texture2DGroup; typedef Lib3MFHandle Lib3MF_CompositeMaterials; typedef Lib3MFHandle Lib3MF_MultiPropertyGroup; +typedef Lib3MFHandle Lib3MF_Image3D; +typedef Lib3MFHandle Lib3MF_ImageStack; typedef Lib3MFHandle Lib3MF_Attachment; typedef Lib3MFHandle Lib3MF_Texture2D; +typedef Lib3MFHandle Lib3MF_ImplicitPort; +typedef Lib3MFHandle Lib3MF_Iterator; +typedef Lib3MFHandle Lib3MF_ImplicitPortIterator; +typedef Lib3MFHandle Lib3MF_ImplicitNode; +typedef Lib3MFHandle Lib3MF_OneInputNode; +typedef Lib3MFHandle Lib3MF_SinNode; +typedef Lib3MFHandle Lib3MF_CosNode; +typedef Lib3MFHandle Lib3MF_TanNode; +typedef Lib3MFHandle Lib3MF_ArcSinNode; +typedef Lib3MFHandle Lib3MF_ArcCosNode; +typedef Lib3MFHandle Lib3MF_ArcTanNode; +typedef Lib3MFHandle Lib3MF_SinhNode; +typedef Lib3MFHandle Lib3MF_CoshNode; +typedef Lib3MFHandle Lib3MF_TanhNode; +typedef Lib3MFHandle Lib3MF_RoundNode; +typedef Lib3MFHandle Lib3MF_CeilNode; +typedef Lib3MFHandle Lib3MF_FloorNode; +typedef Lib3MFHandle Lib3MF_SignNode; +typedef Lib3MFHandle Lib3MF_FractNode; +typedef Lib3MFHandle Lib3MF_AbsNode; +typedef Lib3MFHandle Lib3MF_ExpNode; +typedef Lib3MFHandle Lib3MF_LogNode; +typedef Lib3MFHandle Lib3MF_Log2Node; +typedef Lib3MFHandle Lib3MF_Log10Node; +typedef Lib3MFHandle Lib3MF_LengthNode; +typedef Lib3MFHandle Lib3MF_TransposeNode; +typedef Lib3MFHandle Lib3MF_InverseNode; +typedef Lib3MFHandle Lib3MF_SqrtNode; +typedef Lib3MFHandle Lib3MF_ResourceIdNode; +typedef Lib3MFHandle Lib3MF_TwoInputNode; +typedef Lib3MFHandle Lib3MF_AdditionNode; +typedef Lib3MFHandle Lib3MF_SubtractionNode; +typedef Lib3MFHandle Lib3MF_MultiplicationNode; +typedef Lib3MFHandle Lib3MF_DivisionNode; +typedef Lib3MFHandle Lib3MF_DotNode; +typedef Lib3MFHandle Lib3MF_CrossNode; +typedef Lib3MFHandle Lib3MF_ArcTan2Node; +typedef Lib3MFHandle Lib3MF_MatVecMultiplicationNode; +typedef Lib3MFHandle Lib3MF_MinNode; +typedef Lib3MFHandle Lib3MF_MaxNode; +typedef Lib3MFHandle Lib3MF_FmodNode; +typedef Lib3MFHandle Lib3MF_ModNode; +typedef Lib3MFHandle Lib3MF_PowNode; +typedef Lib3MFHandle Lib3MF_SelectNode; +typedef Lib3MFHandle Lib3MF_ClampNode; +typedef Lib3MFHandle Lib3MF_ComposeVectorNode; +typedef Lib3MFHandle Lib3MF_VectorFromScalarNode; +typedef Lib3MFHandle Lib3MF_DecomposeVectorNode; +typedef Lib3MFHandle Lib3MF_ComposeMatrixNode; +typedef Lib3MFHandle Lib3MF_MatrixFromRowsNode; +typedef Lib3MFHandle Lib3MF_MatrixFromColumnsNode; +typedef Lib3MFHandle Lib3MF_ConstantNode; +typedef Lib3MFHandle Lib3MF_ConstVecNode; +typedef Lib3MFHandle Lib3MF_ConstMatNode; +typedef Lib3MFHandle Lib3MF_MeshNode; +typedef Lib3MFHandle Lib3MF_UnsignedMeshNode; +typedef Lib3MFHandle Lib3MF_FunctionCallNode; +typedef Lib3MFHandle Lib3MF_NodeIterator; +typedef Lib3MFHandle Lib3MF_Function; +typedef Lib3MFHandle Lib3MF_ImplicitFunction; +typedef Lib3MFHandle Lib3MF_FunctionFromImage3D; typedef Lib3MFHandle Lib3MF_BuildItem; typedef Lib3MFHandle Lib3MF_BuildItemIterator; typedef Lib3MFHandle Lib3MF_Slice; @@ -305,7 +388,7 @@ typedef enum eLib3MFBeamLatticeClipMode { } eLib3MFBeamLatticeClipMode; typedef enum eLib3MFBeamLatticeBallMode { - eBeamLatticeBallModeNone = 0, + eBeamLatticeBallModeBeamLatticeBallModeNone = 0, eBeamLatticeBallModeMixed = 1, eBeamLatticeBallModeAll = 2 } eLib3MFBeamLatticeBallMode; @@ -343,6 +426,103 @@ typedef enum eLib3MFBlendMethod { eBlendMethodMultiply = 2 } eLib3MFBlendMethod; +typedef enum eLib3MFChannelName { + eChannelNameRed = 0, + eChannelNameGreen = 1, + eChannelNameBlue = 2, + eChannelNameAlpha = 3 +} eLib3MFChannelName; + +typedef enum eLib3MFCompositionMethod { + eCompositionMethodWeightedSum = 0, + eCompositionMethodMultiply = 1, + eCompositionMethodMin = 2, + eCompositionMethodMax = 3, + eCompositionMethodMask = 4 +} eLib3MFCompositionMethod; + +typedef enum eLib3MFCompositionSpace { + eCompositionSpaceRaw = 0, + eCompositionSpaceLinearColor = 1 +} eLib3MFCompositionSpace; + +/** +* enum eLib3MFImplicitNodeType - The type of the node +*/ +typedef enum eLib3MFImplicitNodeType { + eImplicitNodeTypeAddition = 1, /** Adds to values (scalar or vector) */ + eImplicitNodeTypeSubtraction = 2, /** Subtracts two values (scalar or vector) */ + eImplicitNodeTypeMultiplication = 3, /** Multiplies two values (scalar or vector) */ + eImplicitNodeTypeDivision = 4, /** Divides two values (scalar or vector) */ + eImplicitNodeTypeConstant = 5, /** A constant scalar value */ + eImplicitNodeTypeConstVec = 6, /** A constant vector value */ + eImplicitNodeTypeConstMat = 7, /** A constant matrix value */ + eImplicitNodeTypeComposeVector = 8, /** Creates a vector from three scalar values */ + eImplicitNodeTypeDecomposeVector = 9, /** Decomposes a vector into three scalar values */ + eImplicitNodeTypeComposeMatrix = 10, /** Creates a matrix from nine scalar values */ + eImplicitNodeTypeMatrixFromColumns = 11, /** Creates a matrix from three column vector values */ + eImplicitNodeTypeMatrixFromRows = 12, /** Creates a matrix from three row vector values */ + eImplicitNodeTypeDot = 13, /** Calculates the dot product of two vector values */ + eImplicitNodeTypeCross = 14, /** Calculates the cross product of two vector values */ + eImplicitNodeTypeMatVecMultiplication = 15, /** Multiplies a matrix with a vector */ + eImplicitNodeTypeTranspose = 16, /** Transposes a matrix */ + eImplicitNodeTypeInverse = 17, /** Computes the inverse of a matrix */ + eImplicitNodeTypeSinus = 18, /** Calculates the sinus */ + eImplicitNodeTypeCosinus = 19, /** Calculates the cosinus */ + eImplicitNodeTypeTan = 20, /** Calculates the tangent */ + eImplicitNodeTypeArcSin = 21, /** Calculates the arcsinus */ + eImplicitNodeTypeArcCos = 22, /** Calculates the arccosinus */ + eImplicitNodeTypeArcTan = 23, /** Calculates the arctangent */ + eImplicitNodeTypeArcTan2 = 24, /** Calculates the arctangent */ + eImplicitNodeTypeMin = 25, /** Calculates the minimum tow values */ + eImplicitNodeTypeMax = 26, /** Calculates the maximum of two values */ + eImplicitNodeTypeAbs = 27, /** Calcul the absolute value */ + eImplicitNodeTypeFmod = 28, /** Computes the remainder of the divison of the inputs (same behavior as C fmod) */ + eImplicitNodeTypePow = 29, /** Calculates the power A^B */ + eImplicitNodeTypeSqrt = 30, /** Calculates the square root */ + eImplicitNodeTypeExp = 31, /** Exponential function */ + eImplicitNodeTypeLog = 32, /** Natural logarithmus */ + eImplicitNodeTypeLog2 = 33, /** Logarithmus to the base 2 */ + eImplicitNodeTypeLog10 = 34, /** Logarithmus to the base 10 */ + eImplicitNodeTypeSelect = 35, /** If A is less B returns C, else D */ + eImplicitNodeTypeClamp = 36, /** Clamps the input value to min and max */ + eImplicitNodeTypeSinh = 37, /** Calculates the hyperbolic sine */ + eImplicitNodeTypeCosh = 38, /** Calculates the hyperbolic cosine */ + eImplicitNodeTypeTanh = 39, /** Calculates the hyperbolic tangent */ + eImplicitNodeTypeRound = 40, /** Rounds a scalar value to the nearest integer */ + eImplicitNodeTypeCeil = 41, /** Rounds a scalar value up to the nearest integer */ + eImplicitNodeTypeFloor = 42, /** Rounds a scalar value down to the nearest integer */ + eImplicitNodeTypeSign = 43, /** Returns the sign */ + eImplicitNodeTypeFract = 44, /** Returns the fractional part */ + eImplicitNodeTypeFunctionCall = 45, /** Calls a function */ + eImplicitNodeTypeMesh = 46, /** Calculates the signed distance to a mesh */ + eImplicitNodeTypeLength = 47, /** Calculates the length of a vector */ + eImplicitNodeTypeConstResourceID = 48, /** Selects a resource (function, mesh etc.) */ + eImplicitNodeTypeVectorFromScalar = 49, /** Creates a vector from one scalar values */ + eImplicitNodeTypeUnsignedMesh = 50, /** Calculates the unsigned distance to a mesh */ + eImplicitNodeTypeMod = 51 /** Calculates the modulo of two values (same behaviour as glsl mod) */ +} eLib3MFImplicitNodeType; + +/** +* enum eLib3MFImplicitPortType - The type of the port +*/ +typedef enum eLib3MFImplicitPortType { + eImplicitPortTypeScalar = 1, /** Scalar */ + eImplicitPortTypeVector = 2, /** Vector */ + eImplicitPortTypeMatrix = 3, /** 4x4 Matrix */ + eImplicitPortTypeResourceID = 4 /** Resource ID */ +} eLib3MFImplicitPortType; + +/** +* enum eLib3MFImplicitNodeConfiguration - Defines the input and output types of a node +*/ +typedef enum eLib3MFImplicitNodeConfiguration { + eImplicitNodeConfigurationDefault = 1, /** Default */ + eImplicitNodeConfigurationScalarToScalar = 2, /** Scalar -> Scalar */ + eImplicitNodeConfigurationVectorToVector = 3, /** Vector -> Vector */ + eImplicitNodeConfigurationMatrixToMatrix = 4 /** Matrix -> Matrix */ +} eLib3MFImplicitNodeConfiguration; + typedef enum eLib3MFEncryptionAlgorithm { eEncryptionAlgorithmAES256_GCM = 1 /** http://www.w3.org/2009/xmlenc11#aes256-gcm */ } eLib3MFEncryptionAlgorithm; @@ -433,6 +613,36 @@ typedef union { int m_code; } structEnumLib3MFBlendMethod; +typedef union { + eLib3MFChannelName m_enum; + int m_code; +} structEnumLib3MFChannelName; + +typedef union { + eLib3MFCompositionMethod m_enum; + int m_code; +} structEnumLib3MFCompositionMethod; + +typedef union { + eLib3MFCompositionSpace m_enum; + int m_code; +} structEnumLib3MFCompositionSpace; + +typedef union { + eLib3MFImplicitNodeType m_enum; + int m_code; +} structEnumLib3MFImplicitNodeType; + +typedef union { + eLib3MFImplicitPortType m_enum; + int m_code; +} structEnumLib3MFImplicitPortType; + +typedef union { + eLib3MFImplicitNodeConfiguration m_enum; + int m_code; +} structEnumLib3MFImplicitNodeConfiguration; + typedef union { eLib3MFEncryptionAlgorithm m_enum; int m_code; @@ -523,6 +733,14 @@ typedef struct sLib3MFBall { Lib3MF_double m_Radius; } sLib3MFBall; +typedef struct sLib3MFVector { + Lib3MF_double m_Coordinates[3]; +} sLib3MFVector; + +typedef struct sLib3MFMatrix4x4 { + Lib3MF_double m_Field[4][4]; +} sLib3MFMatrix4x4; + #pragma pack () /************************************************************************************************************************* diff --git a/Autogenerated/Bindings/NodeJS/lib3mf_dynamic.cc b/Autogenerated/Bindings/NodeJS/lib3mf_dynamic.cc index e1cec341d..2bef1bdf1 100644 --- a/Autogenerated/Bindings/NodeJS/lib3mf_dynamic.cc +++ b/Autogenerated/Bindings/NodeJS/lib3mf_dynamic.cc @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated plain C Header file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -96,6 +96,9 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Texture2DGroupIterator_GetCurrentTexture2DGroup = NULL; pWrapperTable->m_CompositeMaterialsIterator_GetCurrentCompositeMaterials = NULL; pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup = NULL; + pWrapperTable->m_Image3DIterator_GetCurrentImage3D = NULL; + pWrapperTable->m_FunctionIterator_GetCurrentFunction = NULL; + pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet = NULL; pWrapperTable->m_MetaData_GetNameSpace = NULL; pWrapperTable->m_MetaData_SetNameSpace = NULL; pWrapperTable->m_MetaData_GetName = NULL; @@ -121,6 +124,7 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Object_SetPartNumber = NULL; pWrapperTable->m_Object_IsMeshObject = NULL; pWrapperTable->m_Object_IsComponentsObject = NULL; + pWrapperTable->m_Object_IsLevelSetObject = NULL; pWrapperTable->m_Object_IsValid = NULL; pWrapperTable->m_Object_SetAttachmentAsThumbnail = NULL; pWrapperTable->m_Object_GetThumbnailAttachment = NULL; @@ -155,6 +159,24 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_MeshObject_SetGeometry = NULL; pWrapperTable->m_MeshObject_IsManifoldAndOriented = NULL; pWrapperTable->m_MeshObject_BeamLattice = NULL; + pWrapperTable->m_MeshObject_GetVolumeData = NULL; + pWrapperTable->m_MeshObject_SetVolumeData = NULL; + pWrapperTable->m_LevelSet_GetFunction = NULL; + pWrapperTable->m_LevelSet_SetFunction = NULL; + pWrapperTable->m_LevelSet_GetTransform = NULL; + pWrapperTable->m_LevelSet_SetTransform = NULL; + pWrapperTable->m_LevelSet_GetChannelName = NULL; + pWrapperTable->m_LevelSet_SetChannelName = NULL; + pWrapperTable->m_LevelSet_SetMinFeatureSize = NULL; + pWrapperTable->m_LevelSet_GetMinFeatureSize = NULL; + pWrapperTable->m_LevelSet_SetFallBackValue = NULL; + pWrapperTable->m_LevelSet_GetFallBackValue = NULL; + pWrapperTable->m_LevelSet_SetMeshBBoxOnly = NULL; + pWrapperTable->m_LevelSet_GetMeshBBoxOnly = NULL; + pWrapperTable->m_LevelSet_SetMesh = NULL; + pWrapperTable->m_LevelSet_GetMesh = NULL; + pWrapperTable->m_LevelSet_GetVolumeData = NULL; + pWrapperTable->m_LevelSet_SetVolumeData = NULL; pWrapperTable->m_BeamLattice_GetMinLength = NULL; pWrapperTable->m_BeamLattice_SetMinLength = NULL; pWrapperTable->m_BeamLattice_GetClipping = NULL; @@ -178,6 +200,35 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_BeamLattice_GetBeamSetCount = NULL; pWrapperTable->m_BeamLattice_AddBeamSet = NULL; pWrapperTable->m_BeamLattice_GetBeamSet = NULL; + pWrapperTable->m_FunctionReference_GetFunctionResourceID = NULL; + pWrapperTable->m_FunctionReference_SetFunctionResourceID = NULL; + pWrapperTable->m_FunctionReference_GetTransform = NULL; + pWrapperTable->m_FunctionReference_SetTransform = NULL; + pWrapperTable->m_FunctionReference_GetChannelName = NULL; + pWrapperTable->m_FunctionReference_SetChannelName = NULL; + pWrapperTable->m_FunctionReference_SetMinFeatureSize = NULL; + pWrapperTable->m_FunctionReference_GetMinFeatureSize = NULL; + pWrapperTable->m_FunctionReference_SetFallBackValue = NULL; + pWrapperTable->m_FunctionReference_GetFallBackValue = NULL; + pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup = NULL; + pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup = NULL; + pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount = NULL; + pWrapperTable->m_VolumeDataComposite_GetMaterialMapping = NULL; + pWrapperTable->m_VolumeDataComposite_AddMaterialMapping = NULL; + pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping = NULL; + pWrapperTable->m_VolumeDataProperty_GetName = NULL; + pWrapperTable->m_VolumeDataProperty_SetIsRequired = NULL; + pWrapperTable->m_VolumeDataProperty_IsRequired = NULL; + pWrapperTable->m_VolumeData_GetComposite = NULL; + pWrapperTable->m_VolumeData_CreateNewComposite = NULL; + pWrapperTable->m_VolumeData_RemoveComposite = NULL; + pWrapperTable->m_VolumeData_GetColor = NULL; + pWrapperTable->m_VolumeData_CreateNewColor = NULL; + pWrapperTable->m_VolumeData_RemoveColor = NULL; + pWrapperTable->m_VolumeData_GetPropertyCount = NULL; + pWrapperTable->m_VolumeData_GetProperty = NULL; + pWrapperTable->m_VolumeData_AddPropertyFromFunction = NULL; + pWrapperTable->m_VolumeData_RemoveProperty = NULL; pWrapperTable->m_Component_GetObjectResource = NULL; pWrapperTable->m_Component_GetObjectResourceID = NULL; pWrapperTable->m_Component_GetUUID = NULL; @@ -234,6 +285,19 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_MultiPropertyGroup_AddLayer = NULL; pWrapperTable->m_MultiPropertyGroup_GetLayer = NULL; pWrapperTable->m_MultiPropertyGroup_RemoveLayer = NULL; + pWrapperTable->m_Image3D_GetName = NULL; + pWrapperTable->m_Image3D_SetName = NULL; + pWrapperTable->m_Image3D_IsImageStack = NULL; + pWrapperTable->m_ImageStack_GetRowCount = NULL; + pWrapperTable->m_ImageStack_SetRowCount = NULL; + pWrapperTable->m_ImageStack_GetColumnCount = NULL; + pWrapperTable->m_ImageStack_SetColumnCount = NULL; + pWrapperTable->m_ImageStack_GetSheetCount = NULL; + pWrapperTable->m_ImageStack_GetSheet = NULL; + pWrapperTable->m_ImageStack_SetSheet = NULL; + pWrapperTable->m_ImageStack_CreateEmptySheet = NULL; + pWrapperTable->m_ImageStack_CreateSheetFromBuffer = NULL; + pWrapperTable->m_ImageStack_CreateSheetFromFile = NULL; pWrapperTable->m_Attachment_GetPath = NULL; pWrapperTable->m_Attachment_SetPath = NULL; pWrapperTable->m_Attachment_PackagePart = NULL; @@ -253,6 +317,173 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Texture2D_SetTileStyleUV = NULL; pWrapperTable->m_Texture2D_GetFilter = NULL; pWrapperTable->m_Texture2D_SetFilter = NULL; + pWrapperTable->m_ImplicitPort_GetIdentifier = NULL; + pWrapperTable->m_ImplicitPort_SetIdentifier = NULL; + pWrapperTable->m_ImplicitPort_GetDisplayName = NULL; + pWrapperTable->m_ImplicitPort_SetDisplayName = NULL; + pWrapperTable->m_ImplicitPort_SetType = NULL; + pWrapperTable->m_ImplicitPort_GetType = NULL; + pWrapperTable->m_ImplicitPort_GetReference = NULL; + pWrapperTable->m_ImplicitPort_SetReference = NULL; + pWrapperTable->m_Iterator_MoveNext = NULL; + pWrapperTable->m_Iterator_MovePrevious = NULL; + pWrapperTable->m_Iterator_Count = NULL; + pWrapperTable->m_ImplicitPortIterator_GetCurrent = NULL; + pWrapperTable->m_ImplicitNode_GetIdentifier = NULL; + pWrapperTable->m_ImplicitNode_SetIdentifier = NULL; + pWrapperTable->m_ImplicitNode_GetDisplayName = NULL; + pWrapperTable->m_ImplicitNode_SetDisplayName = NULL; + pWrapperTable->m_ImplicitNode_GetTag = NULL; + pWrapperTable->m_ImplicitNode_SetTag = NULL; + pWrapperTable->m_ImplicitNode_GetNodeType = NULL; + pWrapperTable->m_ImplicitNode_AddInput = NULL; + pWrapperTable->m_ImplicitNode_GetInputs = NULL; + pWrapperTable->m_ImplicitNode_AddOutput = NULL; + pWrapperTable->m_ImplicitNode_GetOutputs = NULL; + pWrapperTable->m_ImplicitNode_FindInput = NULL; + pWrapperTable->m_ImplicitNode_FindOutput = NULL; + pWrapperTable->m_ImplicitNode_AreTypesValid = NULL; + pWrapperTable->m_OneInputNode_GetInputA = NULL; + pWrapperTable->m_OneInputNode_GetOutputResult = NULL; + pWrapperTable->m_ResourceIdNode_SetResource = NULL; + pWrapperTable->m_ResourceIdNode_GetResource = NULL; + pWrapperTable->m_ResourceIdNode_GetOutputValue = NULL; + pWrapperTable->m_TwoInputNode_GetInputB = NULL; + pWrapperTable->m_SelectNode_GetInputB = NULL; + pWrapperTable->m_SelectNode_GetInputC = NULL; + pWrapperTable->m_SelectNode_GetInputD = NULL; + pWrapperTable->m_ClampNode_GetInputMin = NULL; + pWrapperTable->m_ClampNode_GetInputMax = NULL; + pWrapperTable->m_ComposeVectorNode_GetInputX = NULL; + pWrapperTable->m_ComposeVectorNode_GetInputY = NULL; + pWrapperTable->m_ComposeVectorNode_GetInputZ = NULL; + pWrapperTable->m_ComposeVectorNode_GetOutputResult = NULL; + pWrapperTable->m_DecomposeVectorNode_GetInputA = NULL; + pWrapperTable->m_DecomposeVectorNode_GetOutputX = NULL; + pWrapperTable->m_DecomposeVectorNode_GetOutputY = NULL; + pWrapperTable->m_DecomposeVectorNode_GetOutputZ = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM00 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM01 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM02 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM03 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM10 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM11 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM12 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM13 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM20 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM21 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM22 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM23 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM30 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM31 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM32 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetInputM33 = NULL; + pWrapperTable->m_ComposeMatrixNode_GetOutputResult = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetInputA = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetInputB = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetInputC = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetInputD = NULL; + pWrapperTable->m_MatrixFromRowsNode_GetOutputResult = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetInputA = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetInputB = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetInputC = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetInputD = NULL; + pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult = NULL; + pWrapperTable->m_ConstantNode_SetConstant = NULL; + pWrapperTable->m_ConstantNode_GetConstant = NULL; + pWrapperTable->m_ConstantNode_GetOutputValue = NULL; + pWrapperTable->m_ConstVecNode_SetVector = NULL; + pWrapperTable->m_ConstVecNode_GetVector = NULL; + pWrapperTable->m_ConstVecNode_GetOutputVector = NULL; + pWrapperTable->m_ConstMatNode_SetMatrix = NULL; + pWrapperTable->m_ConstMatNode_GetMatrix = NULL; + pWrapperTable->m_ConstMatNode_GetOutputMatrix = NULL; + pWrapperTable->m_MeshNode_GetInputMesh = NULL; + pWrapperTable->m_MeshNode_GetInputPos = NULL; + pWrapperTable->m_MeshNode_GetOutputDistance = NULL; + pWrapperTable->m_UnsignedMeshNode_GetInputMesh = NULL; + pWrapperTable->m_UnsignedMeshNode_GetInputPos = NULL; + pWrapperTable->m_UnsignedMeshNode_GetOutputDistance = NULL; + pWrapperTable->m_FunctionCallNode_GetInputFunctionID = NULL; + pWrapperTable->m_NodeIterator_GetCurrent = NULL; + pWrapperTable->m_Function_GetDisplayName = NULL; + pWrapperTable->m_Function_SetDisplayName = NULL; + pWrapperTable->m_Function_AddInput = NULL; + pWrapperTable->m_Function_GetInputs = NULL; + pWrapperTable->m_Function_RemoveInput = NULL; + pWrapperTable->m_Function_AddOutput = NULL; + pWrapperTable->m_Function_GetOutputs = NULL; + pWrapperTable->m_Function_RemoveOutput = NULL; + pWrapperTable->m_Function_FindInput = NULL; + pWrapperTable->m_Function_FindOutput = NULL; + pWrapperTable->m_ImplicitFunction_GetIdentifier = NULL; + pWrapperTable->m_ImplicitFunction_SetIdentifier = NULL; + pWrapperTable->m_ImplicitFunction_AddNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSinNode = NULL; + pWrapperTable->m_ImplicitFunction_AddCosNode = NULL; + pWrapperTable->m_ImplicitFunction_AddTanNode = NULL; + pWrapperTable->m_ImplicitFunction_AddArcSinNode = NULL; + pWrapperTable->m_ImplicitFunction_AddArcCosNode = NULL; + pWrapperTable->m_ImplicitFunction_AddArcTan2Node = NULL; + pWrapperTable->m_ImplicitFunction_AddSinhNode = NULL; + pWrapperTable->m_ImplicitFunction_AddCoshNode = NULL; + pWrapperTable->m_ImplicitFunction_AddTanhNode = NULL; + pWrapperTable->m_ImplicitFunction_AddRoundNode = NULL; + pWrapperTable->m_ImplicitFunction_AddCeilNode = NULL; + pWrapperTable->m_ImplicitFunction_AddFloorNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSignNode = NULL; + pWrapperTable->m_ImplicitFunction_AddFractNode = NULL; + pWrapperTable->m_ImplicitFunction_AddAbsNode = NULL; + pWrapperTable->m_ImplicitFunction_AddExpNode = NULL; + pWrapperTable->m_ImplicitFunction_AddLogNode = NULL; + pWrapperTable->m_ImplicitFunction_AddLog2Node = NULL; + pWrapperTable->m_ImplicitFunction_AddLog10Node = NULL; + pWrapperTable->m_ImplicitFunction_AddLengthNode = NULL; + pWrapperTable->m_ImplicitFunction_AddTransposeNode = NULL; + pWrapperTable->m_ImplicitFunction_InverseNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSqrtNode = NULL; + pWrapperTable->m_ImplicitFunction_AddResourceIdNode = NULL; + pWrapperTable->m_ImplicitFunction_AddAdditionNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSubtractionNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMultiplicationNode = NULL; + pWrapperTable->m_ImplicitFunction_AddDivisionNode = NULL; + pWrapperTable->m_ImplicitFunction_AddDotNode = NULL; + pWrapperTable->m_ImplicitFunction_AddCrossNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMinNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMaxNode = NULL; + pWrapperTable->m_ImplicitFunction_AddFmodNode = NULL; + pWrapperTable->m_ImplicitFunction_AddPowNode = NULL; + pWrapperTable->m_ImplicitFunction_AddSelectNode = NULL; + pWrapperTable->m_ImplicitFunction_AddClampNode = NULL; + pWrapperTable->m_ImplicitFunction_AddComposeVectorNode = NULL; + pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode = NULL; + pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode = NULL; + pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode = NULL; + pWrapperTable->m_ImplicitFunction_AddConstantNode = NULL; + pWrapperTable->m_ImplicitFunction_AddConstVecNode = NULL; + pWrapperTable->m_ImplicitFunction_AddConstMatNode = NULL; + pWrapperTable->m_ImplicitFunction_AddMeshNode = NULL; + pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode = NULL; + pWrapperTable->m_ImplicitFunction_AddFunctionCallNode = NULL; + pWrapperTable->m_ImplicitFunction_GetNodes = NULL; + pWrapperTable->m_ImplicitFunction_RemoveNode = NULL; + pWrapperTable->m_ImplicitFunction_AddLink = NULL; + pWrapperTable->m_ImplicitFunction_AddLinkByNames = NULL; + pWrapperTable->m_ImplicitFunction_Clear = NULL; + pWrapperTable->m_ImplicitFunction_SortNodesTopologically = NULL; + pWrapperTable->m_FunctionFromImage3D_GetImage3D = NULL; + pWrapperTable->m_FunctionFromImage3D_SetImage3D = NULL; + pWrapperTable->m_FunctionFromImage3D_SetFilter = NULL; + pWrapperTable->m_FunctionFromImage3D_GetFilter = NULL; + pWrapperTable->m_FunctionFromImage3D_SetTileStyles = NULL; + pWrapperTable->m_FunctionFromImage3D_GetTileStyles = NULL; + pWrapperTable->m_FunctionFromImage3D_GetOffset = NULL; + pWrapperTable->m_FunctionFromImage3D_SetOffset = NULL; + pWrapperTable->m_FunctionFromImage3D_GetScale = NULL; + pWrapperTable->m_FunctionFromImage3D_SetScale = NULL; pWrapperTable->m_BuildItem_GetObjectResource = NULL; pWrapperTable->m_BuildItem_GetUUID = NULL; pWrapperTable->m_BuildItem_SetUUID = NULL; @@ -347,6 +578,7 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Model_GetComponentsObjectByID = NULL; pWrapperTable->m_Model_GetColorGroupByID = NULL; pWrapperTable->m_Model_GetSliceStackByID = NULL; + pWrapperTable->m_Model_GetLevelSetByID = NULL; pWrapperTable->m_Model_GetBuildUUID = NULL; pWrapperTable->m_Model_SetBuildUUID = NULL; pWrapperTable->m_Model_GetBuildItems = NULL; @@ -362,7 +594,9 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Model_GetCompositeMaterials = NULL; pWrapperTable->m_Model_GetMultiPropertyGroups = NULL; pWrapperTable->m_Model_GetSliceStacks = NULL; + pWrapperTable->m_Model_GetImage3Ds = NULL; pWrapperTable->m_Model_MergeToModel = NULL; + pWrapperTable->m_Model_MergeFromModel = NULL; pWrapperTable->m_Model_AddMeshObject = NULL; pWrapperTable->m_Model_AddComponentsObject = NULL; pWrapperTable->m_Model_AddSliceStack = NULL; @@ -372,6 +606,8 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Model_AddTexture2DGroup = NULL; pWrapperTable->m_Model_AddCompositeMaterials = NULL; pWrapperTable->m_Model_AddMultiPropertyGroup = NULL; + pWrapperTable->m_Model_AddImageStack = NULL; + pWrapperTable->m_Model_GetImageStackByID = NULL; pWrapperTable->m_Model_AddBuildItem = NULL; pWrapperTable->m_Model_RemoveBuildItem = NULL; pWrapperTable->m_Model_GetMetaDataGroup = NULL; @@ -388,6 +624,13 @@ Lib3MFResult InitLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable) pWrapperTable->m_Model_RemoveCustomContentType = NULL; pWrapperTable->m_Model_SetRandomNumberCallback = NULL; pWrapperTable->m_Model_GetKeyStore = NULL; + pWrapperTable->m_Model_GetFunctions = NULL; + pWrapperTable->m_Model_AddImplicitFunction = NULL; + pWrapperTable->m_Model_AddFunctionFromImage3D = NULL; + pWrapperTable->m_Model_AddVolumeData = NULL; + pWrapperTable->m_Model_AddLevelSet = NULL; + pWrapperTable->m_Model_GetLevelSets = NULL; + pWrapperTable->m_Model_RemoveResource = NULL; pWrapperTable->m_GetLibraryVersion = NULL; pWrapperTable->m_GetPrereleaseInformation = NULL; pWrapperTable->m_GetBuildInformation = NULL; @@ -893,6 +1136,33 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Image3DIterator_GetCurrentImage3D = (PLib3MFImage3DIterator_GetCurrentImage3DPtr) GetProcAddress(hLibrary, "lib3mf_image3diterator_getcurrentimage3d"); + #else // _WIN32 + pWrapperTable->m_Image3DIterator_GetCurrentImage3D = (PLib3MFImage3DIterator_GetCurrentImage3DPtr) dlsym(hLibrary, "lib3mf_image3diterator_getcurrentimage3d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3DIterator_GetCurrentImage3D == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionIterator_GetCurrentFunction = (PLib3MFFunctionIterator_GetCurrentFunctionPtr) GetProcAddress(hLibrary, "lib3mf_functioniterator_getcurrentfunction"); + #else // _WIN32 + pWrapperTable->m_FunctionIterator_GetCurrentFunction = (PLib3MFFunctionIterator_GetCurrentFunctionPtr) dlsym(hLibrary, "lib3mf_functioniterator_getcurrentfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionIterator_GetCurrentFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet = (PLib3MFLevelSetIterator_GetCurrentLevelSetPtr) GetProcAddress(hLibrary, "lib3mf_levelsetiterator_getcurrentlevelset"); + #else // _WIN32 + pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet = (PLib3MFLevelSetIterator_GetCurrentLevelSetPtr) dlsym(hLibrary, "lib3mf_levelsetiterator_getcurrentlevelset"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSetIterator_GetCurrentLevelSet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_MetaData_GetNameSpace = (PLib3MFMetaData_GetNameSpacePtr) GetProcAddress(hLibrary, "lib3mf_metadata_getnamespace"); #else // _WIN32 @@ -1118,6 +1388,15 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Object_IsComponentsObject == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Object_IsLevelSetObject = (PLib3MFObject_IsLevelSetObjectPtr) GetProcAddress(hLibrary, "lib3mf_object_islevelsetobject"); + #else // _WIN32 + pWrapperTable->m_Object_IsLevelSetObject = (PLib3MFObject_IsLevelSetObjectPtr) dlsym(hLibrary, "lib3mf_object_islevelsetobject"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Object_IsLevelSetObject == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Object_IsValid = (PLib3MFObject_IsValidPtr) GetProcAddress(hLibrary, "lib3mf_object_isvalid"); #else // _WIN32 @@ -1424,6 +1703,168 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_MeshObject_BeamLattice == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_MeshObject_GetVolumeData = (PLib3MFMeshObject_GetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_getvolumedata"); + #else // _WIN32 + pWrapperTable->m_MeshObject_GetVolumeData = (PLib3MFMeshObject_GetVolumeDataPtr) dlsym(hLibrary, "lib3mf_meshobject_getvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_GetVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshObject_SetVolumeData = (PLib3MFMeshObject_SetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_meshobject_setvolumedata"); + #else // _WIN32 + pWrapperTable->m_MeshObject_SetVolumeData = (PLib3MFMeshObject_SetVolumeDataPtr) dlsym(hLibrary, "lib3mf_meshobject_setvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshObject_SetVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetFunction = (PLib3MFLevelSet_GetFunctionPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getfunction"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetFunction = (PLib3MFLevelSet_GetFunctionPtr) dlsym(hLibrary, "lib3mf_levelset_getfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetFunction = (PLib3MFLevelSet_SetFunctionPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setfunction"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetFunction = (PLib3MFLevelSet_SetFunctionPtr) dlsym(hLibrary, "lib3mf_levelset_setfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetTransform = (PLib3MFLevelSet_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_levelset_gettransform"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetTransform = (PLib3MFLevelSet_GetTransformPtr) dlsym(hLibrary, "lib3mf_levelset_gettransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetTransform = (PLib3MFLevelSet_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_levelset_settransform"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetTransform = (PLib3MFLevelSet_SetTransformPtr) dlsym(hLibrary, "lib3mf_levelset_settransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetChannelName = (PLib3MFLevelSet_GetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_levelset_getchannelname"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetChannelName = (PLib3MFLevelSet_GetChannelNamePtr) dlsym(hLibrary, "lib3mf_levelset_getchannelname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetChannelName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetChannelName = (PLib3MFLevelSet_SetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_levelset_setchannelname"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetChannelName = (PLib3MFLevelSet_SetChannelNamePtr) dlsym(hLibrary, "lib3mf_levelset_setchannelname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetChannelName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetMinFeatureSize = (PLib3MFLevelSet_SetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_levelset_setminfeaturesize"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetMinFeatureSize = (PLib3MFLevelSet_SetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_levelset_setminfeaturesize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetMinFeatureSize == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetMinFeatureSize = (PLib3MFLevelSet_GetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_levelset_getminfeaturesize"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetMinFeatureSize = (PLib3MFLevelSet_GetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_levelset_getminfeaturesize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetMinFeatureSize == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetFallBackValue = (PLib3MFLevelSet_SetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_levelset_setfallbackvalue"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetFallBackValue = (PLib3MFLevelSet_SetFallBackValuePtr) dlsym(hLibrary, "lib3mf_levelset_setfallbackvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetFallBackValue == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetFallBackValue = (PLib3MFLevelSet_GetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_levelset_getfallbackvalue"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetFallBackValue = (PLib3MFLevelSet_GetFallBackValuePtr) dlsym(hLibrary, "lib3mf_levelset_getfallbackvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetFallBackValue == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetMeshBBoxOnly = (PLib3MFLevelSet_SetMeshBBoxOnlyPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setmeshbboxonly"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetMeshBBoxOnly = (PLib3MFLevelSet_SetMeshBBoxOnlyPtr) dlsym(hLibrary, "lib3mf_levelset_setmeshbboxonly"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetMeshBBoxOnly == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetMeshBBoxOnly = (PLib3MFLevelSet_GetMeshBBoxOnlyPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getmeshbboxonly"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetMeshBBoxOnly = (PLib3MFLevelSet_GetMeshBBoxOnlyPtr) dlsym(hLibrary, "lib3mf_levelset_getmeshbboxonly"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetMeshBBoxOnly == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetMesh = (PLib3MFLevelSet_SetMeshPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setmesh"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetMesh = (PLib3MFLevelSet_SetMeshPtr) dlsym(hLibrary, "lib3mf_levelset_setmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetMesh == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetMesh = (PLib3MFLevelSet_GetMeshPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getmesh"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetMesh = (PLib3MFLevelSet_GetMeshPtr) dlsym(hLibrary, "lib3mf_levelset_getmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetMesh == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_GetVolumeData = (PLib3MFLevelSet_GetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_levelset_getvolumedata"); + #else // _WIN32 + pWrapperTable->m_LevelSet_GetVolumeData = (PLib3MFLevelSet_GetVolumeDataPtr) dlsym(hLibrary, "lib3mf_levelset_getvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_GetVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_LevelSet_SetVolumeData = (PLib3MFLevelSet_SetVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_levelset_setvolumedata"); + #else // _WIN32 + pWrapperTable->m_LevelSet_SetVolumeData = (PLib3MFLevelSet_SetVolumeDataPtr) dlsym(hLibrary, "lib3mf_levelset_setvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_LevelSet_SetVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_BeamLattice_GetMinLength = (PLib3MFBeamLattice_GetMinLengthPtr) GetProcAddress(hLibrary, "lib3mf_beamlattice_getminlength"); #else // _WIN32 @@ -1632,678 +2073,2559 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresource"); + pWrapperTable->m_FunctionReference_GetFunctionResourceID = (PLib3MFFunctionReference_GetFunctionResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getfunctionresourceid"); #else // _WIN32 - pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) dlsym(hLibrary, "lib3mf_component_getobjectresource"); + pWrapperTable->m_FunctionReference_GetFunctionResourceID = (PLib3MFFunctionReference_GetFunctionResourceIDPtr) dlsym(hLibrary, "lib3mf_functionreference_getfunctionresourceid"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_GetObjectResource == NULL) + if (pWrapperTable->m_FunctionReference_GetFunctionResourceID == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresourceid"); + pWrapperTable->m_FunctionReference_SetFunctionResourceID = (PLib3MFFunctionReference_SetFunctionResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setfunctionresourceid"); #else // _WIN32 - pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) dlsym(hLibrary, "lib3mf_component_getobjectresourceid"); + pWrapperTable->m_FunctionReference_SetFunctionResourceID = (PLib3MFFunctionReference_SetFunctionResourceIDPtr) dlsym(hLibrary, "lib3mf_functionreference_setfunctionresourceid"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_GetObjectResourceID == NULL) + if (pWrapperTable->m_FunctionReference_SetFunctionResourceID == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getuuid"); + pWrapperTable->m_FunctionReference_GetTransform = (PLib3MFFunctionReference_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_gettransform"); #else // _WIN32 - pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) dlsym(hLibrary, "lib3mf_component_getuuid"); + pWrapperTable->m_FunctionReference_GetTransform = (PLib3MFFunctionReference_GetTransformPtr) dlsym(hLibrary, "lib3mf_functionreference_gettransform"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_GetUUID == NULL) + if (pWrapperTable->m_FunctionReference_GetTransform == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_setuuid"); + pWrapperTable->m_FunctionReference_SetTransform = (PLib3MFFunctionReference_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_functionreference_settransform"); #else // _WIN32 - pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) dlsym(hLibrary, "lib3mf_component_setuuid"); + pWrapperTable->m_FunctionReference_SetTransform = (PLib3MFFunctionReference_SetTransformPtr) dlsym(hLibrary, "lib3mf_functionreference_settransform"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_SetUUID == NULL) + if (pWrapperTable->m_FunctionReference_SetTransform == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_hastransform"); + pWrapperTable->m_FunctionReference_GetChannelName = (PLib3MFFunctionReference_GetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getchannelname"); #else // _WIN32 - pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) dlsym(hLibrary, "lib3mf_component_hastransform"); + pWrapperTable->m_FunctionReference_GetChannelName = (PLib3MFFunctionReference_GetChannelNamePtr) dlsym(hLibrary, "lib3mf_functionreference_getchannelname"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_HasTransform == NULL) + if (pWrapperTable->m_FunctionReference_GetChannelName == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_gettransform"); + pWrapperTable->m_FunctionReference_SetChannelName = (PLib3MFFunctionReference_SetChannelNamePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setchannelname"); #else // _WIN32 - pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) dlsym(hLibrary, "lib3mf_component_gettransform"); + pWrapperTable->m_FunctionReference_SetChannelName = (PLib3MFFunctionReference_SetChannelNamePtr) dlsym(hLibrary, "lib3mf_functionreference_setchannelname"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_GetTransform == NULL) + if (pWrapperTable->m_FunctionReference_SetChannelName == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_settransform"); + pWrapperTable->m_FunctionReference_SetMinFeatureSize = (PLib3MFFunctionReference_SetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setminfeaturesize"); #else // _WIN32 - pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) dlsym(hLibrary, "lib3mf_component_settransform"); + pWrapperTable->m_FunctionReference_SetMinFeatureSize = (PLib3MFFunctionReference_SetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_functionreference_setminfeaturesize"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Component_SetTransform == NULL) + if (pWrapperTable->m_FunctionReference_SetMinFeatureSize == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_addcomponent"); + pWrapperTable->m_FunctionReference_GetMinFeatureSize = (PLib3MFFunctionReference_GetMinFeatureSizePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getminfeaturesize"); #else // _WIN32 - pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_addcomponent"); + pWrapperTable->m_FunctionReference_GetMinFeatureSize = (PLib3MFFunctionReference_GetMinFeatureSizePtr) dlsym(hLibrary, "lib3mf_functionreference_getminfeaturesize"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ComponentsObject_AddComponent == NULL) + if (pWrapperTable->m_FunctionReference_GetMinFeatureSize == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponent"); + pWrapperTable->m_FunctionReference_SetFallBackValue = (PLib3MFFunctionReference_SetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_setfallbackvalue"); #else // _WIN32 - pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponent"); + pWrapperTable->m_FunctionReference_SetFallBackValue = (PLib3MFFunctionReference_SetFallBackValuePtr) dlsym(hLibrary, "lib3mf_functionreference_setfallbackvalue"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ComponentsObject_GetComponent == NULL) + if (pWrapperTable->m_FunctionReference_SetFallBackValue == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + pWrapperTable->m_FunctionReference_GetFallBackValue = (PLib3MFFunctionReference_GetFallBackValuePtr) GetProcAddress(hLibrary, "lib3mf_functionreference_getfallbackvalue"); #else // _WIN32 - pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + pWrapperTable->m_FunctionReference_GetFallBackValue = (PLib3MFFunctionReference_GetFallBackValuePtr) dlsym(hLibrary, "lib3mf_functionreference_getfallbackvalue"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ComponentsObject_GetComponentCount == NULL) + if (pWrapperTable->m_FunctionReference_GetFallBackValue == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_setname"); + pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup = (PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_getbasematerialgroup"); #else // _WIN32 - pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) dlsym(hLibrary, "lib3mf_beamset_setname"); + pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup = (PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_getbasematerialgroup"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetName == NULL) + if (pWrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_getname"); + pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup = (PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_setbasematerialgroup"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) dlsym(hLibrary, "lib3mf_beamset_getname"); + pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup = (PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_setbasematerialgroup"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetName == NULL) + if (pWrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setidentifier"); + pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount = (PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_getmaterialmappingcount"); #else // _WIN32 - pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_setidentifier"); + pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount = (PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_getmaterialmappingcount"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetIdentifier == NULL) + if (pWrapperTable->m_VolumeDataComposite_GetMaterialMappingCount == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getidentifier"); + pWrapperTable->m_VolumeDataComposite_GetMaterialMapping = (PLib3MFVolumeDataComposite_GetMaterialMappingPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_getmaterialmapping"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_getidentifier"); + pWrapperTable->m_VolumeDataComposite_GetMaterialMapping = (PLib3MFVolumeDataComposite_GetMaterialMappingPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_getmaterialmapping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_GetMaterialMapping == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataComposite_AddMaterialMapping = (PLib3MFVolumeDataComposite_AddMaterialMappingPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_addmaterialmapping"); + #else // _WIN32 + pWrapperTable->m_VolumeDataComposite_AddMaterialMapping = (PLib3MFVolumeDataComposite_AddMaterialMappingPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_addmaterialmapping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_AddMaterialMapping == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping = (PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr) GetProcAddress(hLibrary, "lib3mf_volumedatacomposite_removematerialmapping"); + #else // _WIN32 + pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping = (PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr) dlsym(hLibrary, "lib3mf_volumedatacomposite_removematerialmapping"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataComposite_RemoveMaterialMapping == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataProperty_GetName = (PLib3MFVolumeDataProperty_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_volumedataproperty_getname"); + #else // _WIN32 + pWrapperTable->m_VolumeDataProperty_GetName = (PLib3MFVolumeDataProperty_GetNamePtr) dlsym(hLibrary, "lib3mf_volumedataproperty_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataProperty_GetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataProperty_SetIsRequired = (PLib3MFVolumeDataProperty_SetIsRequiredPtr) GetProcAddress(hLibrary, "lib3mf_volumedataproperty_setisrequired"); + #else // _WIN32 + pWrapperTable->m_VolumeDataProperty_SetIsRequired = (PLib3MFVolumeDataProperty_SetIsRequiredPtr) dlsym(hLibrary, "lib3mf_volumedataproperty_setisrequired"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataProperty_SetIsRequired == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeDataProperty_IsRequired = (PLib3MFVolumeDataProperty_IsRequiredPtr) GetProcAddress(hLibrary, "lib3mf_volumedataproperty_isrequired"); + #else // _WIN32 + pWrapperTable->m_VolumeDataProperty_IsRequired = (PLib3MFVolumeDataProperty_IsRequiredPtr) dlsym(hLibrary, "lib3mf_volumedataproperty_isrequired"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeDataProperty_IsRequired == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetComposite = (PLib3MFVolumeData_GetCompositePtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getcomposite"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetComposite = (PLib3MFVolumeData_GetCompositePtr) dlsym(hLibrary, "lib3mf_volumedata_getcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_CreateNewComposite = (PLib3MFVolumeData_CreateNewCompositePtr) GetProcAddress(hLibrary, "lib3mf_volumedata_createnewcomposite"); + #else // _WIN32 + pWrapperTable->m_VolumeData_CreateNewComposite = (PLib3MFVolumeData_CreateNewCompositePtr) dlsym(hLibrary, "lib3mf_volumedata_createnewcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_CreateNewComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_RemoveComposite = (PLib3MFVolumeData_RemoveCompositePtr) GetProcAddress(hLibrary, "lib3mf_volumedata_removecomposite"); + #else // _WIN32 + pWrapperTable->m_VolumeData_RemoveComposite = (PLib3MFVolumeData_RemoveCompositePtr) dlsym(hLibrary, "lib3mf_volumedata_removecomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_RemoveComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetColor = (PLib3MFVolumeData_GetColorPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getcolor"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetColor = (PLib3MFVolumeData_GetColorPtr) dlsym(hLibrary, "lib3mf_volumedata_getcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_CreateNewColor = (PLib3MFVolumeData_CreateNewColorPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_createnewcolor"); + #else // _WIN32 + pWrapperTable->m_VolumeData_CreateNewColor = (PLib3MFVolumeData_CreateNewColorPtr) dlsym(hLibrary, "lib3mf_volumedata_createnewcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_CreateNewColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_RemoveColor = (PLib3MFVolumeData_RemoveColorPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_removecolor"); + #else // _WIN32 + pWrapperTable->m_VolumeData_RemoveColor = (PLib3MFVolumeData_RemoveColorPtr) dlsym(hLibrary, "lib3mf_volumedata_removecolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_RemoveColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetPropertyCount = (PLib3MFVolumeData_GetPropertyCountPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getpropertycount"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetPropertyCount = (PLib3MFVolumeData_GetPropertyCountPtr) dlsym(hLibrary, "lib3mf_volumedata_getpropertycount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetPropertyCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_GetProperty = (PLib3MFVolumeData_GetPropertyPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_getproperty"); + #else // _WIN32 + pWrapperTable->m_VolumeData_GetProperty = (PLib3MFVolumeData_GetPropertyPtr) dlsym(hLibrary, "lib3mf_volumedata_getproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_GetProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_AddPropertyFromFunction = (PLib3MFVolumeData_AddPropertyFromFunctionPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_addpropertyfromfunction"); + #else // _WIN32 + pWrapperTable->m_VolumeData_AddPropertyFromFunction = (PLib3MFVolumeData_AddPropertyFromFunctionPtr) dlsym(hLibrary, "lib3mf_volumedata_addpropertyfromfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_AddPropertyFromFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_VolumeData_RemoveProperty = (PLib3MFVolumeData_RemovePropertyPtr) GetProcAddress(hLibrary, "lib3mf_volumedata_removeproperty"); + #else // _WIN32 + pWrapperTable->m_VolumeData_RemoveProperty = (PLib3MFVolumeData_RemovePropertyPtr) dlsym(hLibrary, "lib3mf_volumedata_removeproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_VolumeData_RemoveProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresource"); + #else // _WIN32 + pWrapperTable->m_Component_GetObjectResource = (PLib3MFComponent_GetObjectResourcePtr) dlsym(hLibrary, "lib3mf_component_getobjectresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetObjectResource == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getobjectresourceid"); + #else // _WIN32 + pWrapperTable->m_Component_GetObjectResourceID = (PLib3MFComponent_GetObjectResourceIDPtr) dlsym(hLibrary, "lib3mf_component_getobjectresourceid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetObjectResourceID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_getuuid"); + #else // _WIN32 + pWrapperTable->m_Component_GetUUID = (PLib3MFComponent_GetUUIDPtr) dlsym(hLibrary, "lib3mf_component_getuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetUUID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) GetProcAddress(hLibrary, "lib3mf_component_setuuid"); + #else // _WIN32 + pWrapperTable->m_Component_SetUUID = (PLib3MFComponent_SetUUIDPtr) dlsym(hLibrary, "lib3mf_component_setuuid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_SetUUID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_hastransform"); + #else // _WIN32 + pWrapperTable->m_Component_HasTransform = (PLib3MFComponent_HasTransformPtr) dlsym(hLibrary, "lib3mf_component_hastransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_HasTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_gettransform"); + #else // _WIN32 + pWrapperTable->m_Component_GetTransform = (PLib3MFComponent_GetTransformPtr) dlsym(hLibrary, "lib3mf_component_gettransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_GetTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) GetProcAddress(hLibrary, "lib3mf_component_settransform"); + #else // _WIN32 + pWrapperTable->m_Component_SetTransform = (PLib3MFComponent_SetTransformPtr) dlsym(hLibrary, "lib3mf_component_settransform"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Component_SetTransform == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_addcomponent"); + #else // _WIN32 + pWrapperTable->m_ComponentsObject_AddComponent = (PLib3MFComponentsObject_AddComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_addcomponent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComponentsObject_AddComponent == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponent"); + #else // _WIN32 + pWrapperTable->m_ComponentsObject_GetComponent = (PLib3MFComponentsObject_GetComponentPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComponentsObject_GetComponent == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) GetProcAddress(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + #else // _WIN32 + pWrapperTable->m_ComponentsObject_GetComponentCount = (PLib3MFComponentsObject_GetComponentCountPtr) dlsym(hLibrary, "lib3mf_componentsobject_getcomponentcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComponentsObject_GetComponentCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_setname"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetName = (PLib3MFBeamSet_SetNamePtr) dlsym(hLibrary, "lib3mf_beamset_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_beamset_getname"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetName = (PLib3MFBeamSet_GetNamePtr) dlsym(hLibrary, "lib3mf_beamset_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setidentifier"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetIdentifier = (PLib3MFBeamSet_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getidentifier"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetIdentifier = (PLib3MFBeamSet_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_beamset_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferencecount"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getreferencecount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetReferenceCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetReferences == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetReferences == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferencecount"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferencecount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetBallReferenceCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setballreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setballreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_SetBallReferences == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferences"); + #else // _WIN32 + pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferences"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BeamSet_GetBallReferences == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getcount"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_AddMaterial == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_removematerial"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_removematerial"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_RemoveMaterial == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getname"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setname"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_SetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_SetDisplayColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + #else // _WIN32 + pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_BaseMaterialGroup_GetDisplayColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcount"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_addcolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_addcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_AddColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_removecolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_removecolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_RemoveColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_setcolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_setcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_SetColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcolor"); + #else // _WIN32 + pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcolor"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ColorGroup_GetColor == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getcount"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_AddTex2Coord == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetTex2Coord == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_RemoveTex2Coord == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + #else // _WIN32 + pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2DGroup_GetTexture2D == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcount"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) dlsym(hLibrary, "lib3mf_compositematerials_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_addcomposite"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_addcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_AddComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_removecomposite"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_removecomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_RemoveComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcomposite"); + #else // _WIN32 + pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_getcomposite"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_CompositeMaterials_GetComposite == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getcount"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_AddMultiProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_SetMultiProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetMultiProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetLayerCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addlayer"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addlayer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_AddLayer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayer"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_GetLayer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removelayer"); + #else // _WIN32 + pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removelayer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MultiPropertyGroup_RemoveLayer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Image3D_GetName = (PLib3MFImage3D_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_image3d_getname"); + #else // _WIN32 + pWrapperTable->m_Image3D_GetName = (PLib3MFImage3D_GetNamePtr) dlsym(hLibrary, "lib3mf_image3d_getname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3D_GetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Image3D_SetName = (PLib3MFImage3D_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_image3d_setname"); + #else // _WIN32 + pWrapperTable->m_Image3D_SetName = (PLib3MFImage3D_SetNamePtr) dlsym(hLibrary, "lib3mf_image3d_setname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3D_SetName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Image3D_IsImageStack = (PLib3MFImage3D_IsImageStackPtr) GetProcAddress(hLibrary, "lib3mf_image3d_isimagestack"); + #else // _WIN32 + pWrapperTable->m_Image3D_IsImageStack = (PLib3MFImage3D_IsImageStackPtr) dlsym(hLibrary, "lib3mf_image3d_isimagestack"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Image3D_IsImageStack == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetRowCount = (PLib3MFImageStack_GetRowCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getrowcount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetRowCount = (PLib3MFImageStack_GetRowCountPtr) dlsym(hLibrary, "lib3mf_imagestack_getrowcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetRowCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_SetRowCount = (PLib3MFImageStack_SetRowCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_setrowcount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_SetRowCount = (PLib3MFImageStack_SetRowCountPtr) dlsym(hLibrary, "lib3mf_imagestack_setrowcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_SetRowCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetColumnCount = (PLib3MFImageStack_GetColumnCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getcolumncount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetColumnCount = (PLib3MFImageStack_GetColumnCountPtr) dlsym(hLibrary, "lib3mf_imagestack_getcolumncount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetColumnCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_SetColumnCount = (PLib3MFImageStack_SetColumnCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_setcolumncount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_SetColumnCount = (PLib3MFImageStack_SetColumnCountPtr) dlsym(hLibrary, "lib3mf_imagestack_setcolumncount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_SetColumnCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetSheetCount = (PLib3MFImageStack_GetSheetCountPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getsheetcount"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetSheetCount = (PLib3MFImageStack_GetSheetCountPtr) dlsym(hLibrary, "lib3mf_imagestack_getsheetcount"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetSheetCount == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_GetSheet = (PLib3MFImageStack_GetSheetPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_getsheet"); + #else // _WIN32 + pWrapperTable->m_ImageStack_GetSheet = (PLib3MFImageStack_GetSheetPtr) dlsym(hLibrary, "lib3mf_imagestack_getsheet"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_GetSheet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_SetSheet = (PLib3MFImageStack_SetSheetPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_setsheet"); + #else // _WIN32 + pWrapperTable->m_ImageStack_SetSheet = (PLib3MFImageStack_SetSheetPtr) dlsym(hLibrary, "lib3mf_imagestack_setsheet"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_SetSheet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_CreateEmptySheet = (PLib3MFImageStack_CreateEmptySheetPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_createemptysheet"); + #else // _WIN32 + pWrapperTable->m_ImageStack_CreateEmptySheet = (PLib3MFImageStack_CreateEmptySheetPtr) dlsym(hLibrary, "lib3mf_imagestack_createemptysheet"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_CreateEmptySheet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromBuffer = (PLib3MFImageStack_CreateSheetFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_imagestack_createsheetfrombuffer"); + #else // _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromBuffer = (PLib3MFImageStack_CreateSheetFromBufferPtr) dlsym(hLibrary, "lib3mf_imagestack_createsheetfrombuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_CreateSheetFromBuffer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromFile = (PLib3MFImageStack_CreateSheetFromFilePtr) GetProcAddress(hLibrary, "lib3mf_imagestack_createsheetfromfile"); + #else // _WIN32 + pWrapperTable->m_ImageStack_CreateSheetFromFile = (PLib3MFImageStack_CreateSheetFromFilePtr) dlsym(hLibrary, "lib3mf_imagestack_createsheetfromfile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImageStack_CreateSheetFromFile == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_getpath"); + #else // _WIN32 + pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) dlsym(hLibrary, "lib3mf_attachment_getpath"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_GetPath == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_setpath"); + #else // _WIN32 + pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) dlsym(hLibrary, "lib3mf_attachment_setpath"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_SetPath == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) GetProcAddress(hLibrary, "lib3mf_attachment_packagepart"); + #else // _WIN32 + pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) dlsym(hLibrary, "lib3mf_attachment_packagepart"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_PackagePart == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getrelationshiptype"); + #else // _WIN32 + pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_getrelationshiptype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_GetRelationShipType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_setrelationshiptype"); + #else // _WIN32 + pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_setrelationshiptype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_SetRelationShipType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetofile"); + #else // _WIN32 + pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) dlsym(hLibrary, "lib3mf_attachment_writetofile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_WriteToFile == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromfile"); + #else // _WIN32 + pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) dlsym(hLibrary, "lib3mf_attachment_readfromfile"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_ReadFromFile == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromcallback"); + #else // _WIN32 + pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) dlsym(hLibrary, "lib3mf_attachment_readfromcallback"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_ReadFromCallback == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getstreamsize"); + #else // _WIN32 + pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) dlsym(hLibrary, "lib3mf_attachment_getstreamsize"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_GetStreamSize == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetobuffer"); + #else // _WIN32 + pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) dlsym(hLibrary, "lib3mf_attachment_writetobuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_WriteToBuffer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfrombuffer"); + #else // _WIN32 + pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) dlsym(hLibrary, "lib3mf_attachment_readfrombuffer"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Attachment_ReadFromBuffer == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getattachment"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_getattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetAttachment == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setattachment"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_setattachment"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetAttachment == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getcontenttype"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_getcontenttype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetContentType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setcontenttype"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_setcontenttype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetContentType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetTileStyleUV == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_settilestyleuv"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_settilestyleuv"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetTileStyleUV == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getfilter"); + #else // _WIN32 + pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_getfilter"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_GetFilter == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setfilter"); + #else // _WIN32 + pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_setfilter"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Texture2D_SetFilter == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetIdentifier = (PLib3MFImplicitPort_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitport_getidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetIdentifier = (PLib3MFImplicitPort_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitport_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetIdentifier = (PLib3MFImplicitPort_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitport_setidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetIdentifier = (PLib3MFImplicitPort_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitport_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetDisplayName = (PLib3MFImplicitPort_GetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_getdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetDisplayName = (PLib3MFImplicitPort_GetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitport_getdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetDisplayName = (PLib3MFImplicitPort_SetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_setdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetDisplayName = (PLib3MFImplicitPort_SetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitport_setdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetType = (PLib3MFImplicitPort_SetTypePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_settype"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetType = (PLib3MFImplicitPort_SetTypePtr) dlsym(hLibrary, "lib3mf_implicitport_settype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetType = (PLib3MFImplicitPort_GetTypePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_gettype"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetType = (PLib3MFImplicitPort_GetTypePtr) dlsym(hLibrary, "lib3mf_implicitport_gettype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_GetReference = (PLib3MFImplicitPort_GetReferencePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_getreference"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_GetReference = (PLib3MFImplicitPort_GetReferencePtr) dlsym(hLibrary, "lib3mf_implicitport_getreference"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_GetReference == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPort_SetReference = (PLib3MFImplicitPort_SetReferencePtr) GetProcAddress(hLibrary, "lib3mf_implicitport_setreference"); + #else // _WIN32 + pWrapperTable->m_ImplicitPort_SetReference = (PLib3MFImplicitPort_SetReferencePtr) dlsym(hLibrary, "lib3mf_implicitport_setreference"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPort_SetReference == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Iterator_MoveNext = (PLib3MFIterator_MoveNextPtr) GetProcAddress(hLibrary, "lib3mf_iterator_movenext"); + #else // _WIN32 + pWrapperTable->m_Iterator_MoveNext = (PLib3MFIterator_MoveNextPtr) dlsym(hLibrary, "lib3mf_iterator_movenext"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Iterator_MoveNext == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Iterator_MovePrevious = (PLib3MFIterator_MovePreviousPtr) GetProcAddress(hLibrary, "lib3mf_iterator_moveprevious"); + #else // _WIN32 + pWrapperTable->m_Iterator_MovePrevious = (PLib3MFIterator_MovePreviousPtr) dlsym(hLibrary, "lib3mf_iterator_moveprevious"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Iterator_MovePrevious == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Iterator_Count = (PLib3MFIterator_CountPtr) GetProcAddress(hLibrary, "lib3mf_iterator_count"); + #else // _WIN32 + pWrapperTable->m_Iterator_Count = (PLib3MFIterator_CountPtr) dlsym(hLibrary, "lib3mf_iterator_count"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Iterator_Count == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitPortIterator_GetCurrent = (PLib3MFImplicitPortIterator_GetCurrentPtr) GetProcAddress(hLibrary, "lib3mf_implicitportiterator_getcurrent"); + #else // _WIN32 + pWrapperTable->m_ImplicitPortIterator_GetCurrent = (PLib3MFImplicitPortIterator_GetCurrentPtr) dlsym(hLibrary, "lib3mf_implicitportiterator_getcurrent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitPortIterator_GetCurrent == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetIdentifier = (PLib3MFImplicitNode_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetIdentifier = (PLib3MFImplicitNode_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitnode_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_SetIdentifier = (PLib3MFImplicitNode_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_setidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_SetIdentifier = (PLib3MFImplicitNode_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitnode_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_SetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetDisplayName = (PLib3MFImplicitNode_GetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetDisplayName = (PLib3MFImplicitNode_GetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitnode_getdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_SetDisplayName = (PLib3MFImplicitNode_SetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_setdisplayname"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_SetDisplayName = (PLib3MFImplicitNode_SetDisplayNamePtr) dlsym(hLibrary, "lib3mf_implicitnode_setdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_SetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetTag = (PLib3MFImplicitNode_GetTagPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_gettag"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetTag = (PLib3MFImplicitNode_GetTagPtr) dlsym(hLibrary, "lib3mf_implicitnode_gettag"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetTag == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_SetTag = (PLib3MFImplicitNode_SetTagPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_settag"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_SetTag = (PLib3MFImplicitNode_SetTagPtr) dlsym(hLibrary, "lib3mf_implicitnode_settag"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_SetTag == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetNodeType = (PLib3MFImplicitNode_GetNodeTypePtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getnodetype"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetNodeType = (PLib3MFImplicitNode_GetNodeTypePtr) dlsym(hLibrary, "lib3mf_implicitnode_getnodetype"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetNodeType == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_AddInput = (PLib3MFImplicitNode_AddInputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_addinput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_AddInput = (PLib3MFImplicitNode_AddInputPtr) dlsym(hLibrary, "lib3mf_implicitnode_addinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_AddInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetInputs = (PLib3MFImplicitNode_GetInputsPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getinputs"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetInputs = (PLib3MFImplicitNode_GetInputsPtr) dlsym(hLibrary, "lib3mf_implicitnode_getinputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetInputs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_AddOutput = (PLib3MFImplicitNode_AddOutputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_addoutput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_AddOutput = (PLib3MFImplicitNode_AddOutputPtr) dlsym(hLibrary, "lib3mf_implicitnode_addoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_AddOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_GetOutputs = (PLib3MFImplicitNode_GetOutputsPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_getoutputs"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_GetOutputs = (PLib3MFImplicitNode_GetOutputsPtr) dlsym(hLibrary, "lib3mf_implicitnode_getoutputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_GetOutputs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_FindInput = (PLib3MFImplicitNode_FindInputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_findinput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_FindInput = (PLib3MFImplicitNode_FindInputPtr) dlsym(hLibrary, "lib3mf_implicitnode_findinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_FindInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_FindOutput = (PLib3MFImplicitNode_FindOutputPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_findoutput"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_FindOutput = (PLib3MFImplicitNode_FindOutputPtr) dlsym(hLibrary, "lib3mf_implicitnode_findoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_FindOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitNode_AreTypesValid = (PLib3MFImplicitNode_AreTypesValidPtr) GetProcAddress(hLibrary, "lib3mf_implicitnode_aretypesvalid"); + #else // _WIN32 + pWrapperTable->m_ImplicitNode_AreTypesValid = (PLib3MFImplicitNode_AreTypesValidPtr) dlsym(hLibrary, "lib3mf_implicitnode_aretypesvalid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitNode_AreTypesValid == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_OneInputNode_GetInputA = (PLib3MFOneInputNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_oneinputnode_getinputa"); + #else // _WIN32 + pWrapperTable->m_OneInputNode_GetInputA = (PLib3MFOneInputNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_oneinputnode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_OneInputNode_GetInputA == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_OneInputNode_GetOutputResult = (PLib3MFOneInputNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_oneinputnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_OneInputNode_GetOutputResult = (PLib3MFOneInputNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_oneinputnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_OneInputNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIdNode_SetResource = (PLib3MFResourceIdNode_SetResourcePtr) GetProcAddress(hLibrary, "lib3mf_resourceidnode_setresource"); + #else // _WIN32 + pWrapperTable->m_ResourceIdNode_SetResource = (PLib3MFResourceIdNode_SetResourcePtr) dlsym(hLibrary, "lib3mf_resourceidnode_setresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIdNode_SetResource == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIdNode_GetResource = (PLib3MFResourceIdNode_GetResourcePtr) GetProcAddress(hLibrary, "lib3mf_resourceidnode_getresource"); + #else // _WIN32 + pWrapperTable->m_ResourceIdNode_GetResource = (PLib3MFResourceIdNode_GetResourcePtr) dlsym(hLibrary, "lib3mf_resourceidnode_getresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIdNode_GetResource == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ResourceIdNode_GetOutputValue = (PLib3MFResourceIdNode_GetOutputValuePtr) GetProcAddress(hLibrary, "lib3mf_resourceidnode_getoutputvalue"); + #else // _WIN32 + pWrapperTable->m_ResourceIdNode_GetOutputValue = (PLib3MFResourceIdNode_GetOutputValuePtr) dlsym(hLibrary, "lib3mf_resourceidnode_getoutputvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ResourceIdNode_GetOutputValue == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_TwoInputNode_GetInputB = (PLib3MFTwoInputNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_twoinputnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_TwoInputNode_GetInputB = (PLib3MFTwoInputNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_twoinputnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_TwoInputNode_GetInputB == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SelectNode_GetInputB = (PLib3MFSelectNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_selectnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_SelectNode_GetInputB = (PLib3MFSelectNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_selectnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SelectNode_GetInputB == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SelectNode_GetInputC = (PLib3MFSelectNode_GetInputCPtr) GetProcAddress(hLibrary, "lib3mf_selectnode_getinputc"); + #else // _WIN32 + pWrapperTable->m_SelectNode_GetInputC = (PLib3MFSelectNode_GetInputCPtr) dlsym(hLibrary, "lib3mf_selectnode_getinputc"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SelectNode_GetInputC == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_SelectNode_GetInputD = (PLib3MFSelectNode_GetInputDPtr) GetProcAddress(hLibrary, "lib3mf_selectnode_getinputd"); + #else // _WIN32 + pWrapperTable->m_SelectNode_GetInputD = (PLib3MFSelectNode_GetInputDPtr) dlsym(hLibrary, "lib3mf_selectnode_getinputd"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_SelectNode_GetInputD == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ClampNode_GetInputMin = (PLib3MFClampNode_GetInputMinPtr) GetProcAddress(hLibrary, "lib3mf_clampnode_getinputmin"); + #else // _WIN32 + pWrapperTable->m_ClampNode_GetInputMin = (PLib3MFClampNode_GetInputMinPtr) dlsym(hLibrary, "lib3mf_clampnode_getinputmin"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ClampNode_GetInputMin == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ClampNode_GetInputMax = (PLib3MFClampNode_GetInputMaxPtr) GetProcAddress(hLibrary, "lib3mf_clampnode_getinputmax"); + #else // _WIN32 + pWrapperTable->m_ClampNode_GetInputMax = (PLib3MFClampNode_GetInputMaxPtr) dlsym(hLibrary, "lib3mf_clampnode_getinputmax"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ClampNode_GetInputMax == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputX = (PLib3MFComposeVectorNode_GetInputXPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getinputx"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputX = (PLib3MFComposeVectorNode_GetInputXPtr) dlsym(hLibrary, "lib3mf_composevectornode_getinputx"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetInputX == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputY = (PLib3MFComposeVectorNode_GetInputYPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getinputy"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputY = (PLib3MFComposeVectorNode_GetInputYPtr) dlsym(hLibrary, "lib3mf_composevectornode_getinputy"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetInputY == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputZ = (PLib3MFComposeVectorNode_GetInputZPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getinputz"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetInputZ = (PLib3MFComposeVectorNode_GetInputZPtr) dlsym(hLibrary, "lib3mf_composevectornode_getinputz"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetInputZ == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeVectorNode_GetOutputResult = (PLib3MFComposeVectorNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_composevectornode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_ComposeVectorNode_GetOutputResult = (PLib3MFComposeVectorNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_composevectornode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeVectorNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetInputA = (PLib3MFDecomposeVectorNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getinputa"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetInputA = (PLib3MFDecomposeVectorNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetInputA == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputX = (PLib3MFDecomposeVectorNode_GetOutputXPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getoutputx"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputX = (PLib3MFDecomposeVectorNode_GetOutputXPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getoutputx"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetOutputX == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputY = (PLib3MFDecomposeVectorNode_GetOutputYPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getoutputy"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputY = (PLib3MFDecomposeVectorNode_GetOutputYPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getoutputy"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetOutputY == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputZ = (PLib3MFDecomposeVectorNode_GetOutputZPtr) GetProcAddress(hLibrary, "lib3mf_decomposevectornode_getoutputz"); + #else // _WIN32 + pWrapperTable->m_DecomposeVectorNode_GetOutputZ = (PLib3MFDecomposeVectorNode_GetOutputZPtr) dlsym(hLibrary, "lib3mf_decomposevectornode_getoutputz"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_DecomposeVectorNode_GetOutputZ == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM00 = (PLib3MFComposeMatrixNode_GetInputM00Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm00"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM00 = (PLib3MFComposeMatrixNode_GetInputM00Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm00"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM00 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM01 = (PLib3MFComposeMatrixNode_GetInputM01Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm01"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM01 = (PLib3MFComposeMatrixNode_GetInputM01Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm01"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM01 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM02 = (PLib3MFComposeMatrixNode_GetInputM02Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm02"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM02 = (PLib3MFComposeMatrixNode_GetInputM02Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm02"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM02 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM03 = (PLib3MFComposeMatrixNode_GetInputM03Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm03"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM03 = (PLib3MFComposeMatrixNode_GetInputM03Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm03"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM03 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM10 = (PLib3MFComposeMatrixNode_GetInputM10Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm10"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM10 = (PLib3MFComposeMatrixNode_GetInputM10Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm10"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM10 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM11 = (PLib3MFComposeMatrixNode_GetInputM11Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm11"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM11 = (PLib3MFComposeMatrixNode_GetInputM11Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm11"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM11 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM12 = (PLib3MFComposeMatrixNode_GetInputM12Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm12"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM12 = (PLib3MFComposeMatrixNode_GetInputM12Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm12"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM12 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM13 = (PLib3MFComposeMatrixNode_GetInputM13Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm13"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM13 = (PLib3MFComposeMatrixNode_GetInputM13Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm13"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM13 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM20 = (PLib3MFComposeMatrixNode_GetInputM20Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm20"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM20 = (PLib3MFComposeMatrixNode_GetInputM20Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm20"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM20 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM21 = (PLib3MFComposeMatrixNode_GetInputM21Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm21"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM21 = (PLib3MFComposeMatrixNode_GetInputM21Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm21"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM21 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM22 = (PLib3MFComposeMatrixNode_GetInputM22Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm22"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM22 = (PLib3MFComposeMatrixNode_GetInputM22Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm22"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM22 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM23 = (PLib3MFComposeMatrixNode_GetInputM23Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm23"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM23 = (PLib3MFComposeMatrixNode_GetInputM23Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm23"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM23 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM30 = (PLib3MFComposeMatrixNode_GetInputM30Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm30"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM30 = (PLib3MFComposeMatrixNode_GetInputM30Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm30"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM30 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM31 = (PLib3MFComposeMatrixNode_GetInputM31Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm31"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM31 = (PLib3MFComposeMatrixNode_GetInputM31Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm31"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM31 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM32 = (PLib3MFComposeMatrixNode_GetInputM32Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm32"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM32 = (PLib3MFComposeMatrixNode_GetInputM32Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm32"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM32 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM33 = (PLib3MFComposeMatrixNode_GetInputM33Ptr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getinputm33"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetInputM33 = (PLib3MFComposeMatrixNode_GetInputM33Ptr) dlsym(hLibrary, "lib3mf_composematrixnode_getinputm33"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetInputM33 == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetOutputResult = (PLib3MFComposeMatrixNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_composematrixnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_ComposeMatrixNode_GetOutputResult = (PLib3MFComposeMatrixNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_composematrixnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ComposeMatrixNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputA = (PLib3MFMatrixFromRowsNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputa"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputA = (PLib3MFMatrixFromRowsNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputA == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputB = (PLib3MFMatrixFromRowsNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputB = (PLib3MFMatrixFromRowsNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputB == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputC = (PLib3MFMatrixFromRowsNode_GetInputCPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputc"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputC = (PLib3MFMatrixFromRowsNode_GetInputCPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputc"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputC == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputD = (PLib3MFMatrixFromRowsNode_GetInputDPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getinputd"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetInputD = (PLib3MFMatrixFromRowsNode_GetInputDPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getinputd"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetInputD == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetOutputResult = (PLib3MFMatrixFromRowsNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromrowsnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_MatrixFromRowsNode_GetOutputResult = (PLib3MFMatrixFromRowsNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_matrixfromrowsnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromRowsNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputA = (PLib3MFMatrixFromColumnsNode_GetInputAPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputa"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputA = (PLib3MFMatrixFromColumnsNode_GetInputAPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputa"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputA == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputB = (PLib3MFMatrixFromColumnsNode_GetInputBPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputb"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputB = (PLib3MFMatrixFromColumnsNode_GetInputBPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputb"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputB == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputC = (PLib3MFMatrixFromColumnsNode_GetInputCPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputc"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputC = (PLib3MFMatrixFromColumnsNode_GetInputCPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputc"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputC == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputD = (PLib3MFMatrixFromColumnsNode_GetInputDPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputd"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetInputD = (PLib3MFMatrixFromColumnsNode_GetInputDPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getinputd"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetInputD == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult = (PLib3MFMatrixFromColumnsNode_GetOutputResultPtr) GetProcAddress(hLibrary, "lib3mf_matrixfromcolumnsnode_getoutputresult"); + #else // _WIN32 + pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult = (PLib3MFMatrixFromColumnsNode_GetOutputResultPtr) dlsym(hLibrary, "lib3mf_matrixfromcolumnsnode_getoutputresult"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MatrixFromColumnsNode_GetOutputResult == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstantNode_SetConstant = (PLib3MFConstantNode_SetConstantPtr) GetProcAddress(hLibrary, "lib3mf_constantnode_setconstant"); + #else // _WIN32 + pWrapperTable->m_ConstantNode_SetConstant = (PLib3MFConstantNode_SetConstantPtr) dlsym(hLibrary, "lib3mf_constantnode_setconstant"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstantNode_SetConstant == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstantNode_GetConstant = (PLib3MFConstantNode_GetConstantPtr) GetProcAddress(hLibrary, "lib3mf_constantnode_getconstant"); + #else // _WIN32 + pWrapperTable->m_ConstantNode_GetConstant = (PLib3MFConstantNode_GetConstantPtr) dlsym(hLibrary, "lib3mf_constantnode_getconstant"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstantNode_GetConstant == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstantNode_GetOutputValue = (PLib3MFConstantNode_GetOutputValuePtr) GetProcAddress(hLibrary, "lib3mf_constantnode_getoutputvalue"); + #else // _WIN32 + pWrapperTable->m_ConstantNode_GetOutputValue = (PLib3MFConstantNode_GetOutputValuePtr) dlsym(hLibrary, "lib3mf_constantnode_getoutputvalue"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstantNode_GetOutputValue == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstVecNode_SetVector = (PLib3MFConstVecNode_SetVectorPtr) GetProcAddress(hLibrary, "lib3mf_constvecnode_setvector"); + #else // _WIN32 + pWrapperTable->m_ConstVecNode_SetVector = (PLib3MFConstVecNode_SetVectorPtr) dlsym(hLibrary, "lib3mf_constvecnode_setvector"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstVecNode_SetVector == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstVecNode_GetVector = (PLib3MFConstVecNode_GetVectorPtr) GetProcAddress(hLibrary, "lib3mf_constvecnode_getvector"); + #else // _WIN32 + pWrapperTable->m_ConstVecNode_GetVector = (PLib3MFConstVecNode_GetVectorPtr) dlsym(hLibrary, "lib3mf_constvecnode_getvector"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstVecNode_GetVector == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstVecNode_GetOutputVector = (PLib3MFConstVecNode_GetOutputVectorPtr) GetProcAddress(hLibrary, "lib3mf_constvecnode_getoutputvector"); + #else // _WIN32 + pWrapperTable->m_ConstVecNode_GetOutputVector = (PLib3MFConstVecNode_GetOutputVectorPtr) dlsym(hLibrary, "lib3mf_constvecnode_getoutputvector"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstVecNode_GetOutputVector == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstMatNode_SetMatrix = (PLib3MFConstMatNode_SetMatrixPtr) GetProcAddress(hLibrary, "lib3mf_constmatnode_setmatrix"); + #else // _WIN32 + pWrapperTable->m_ConstMatNode_SetMatrix = (PLib3MFConstMatNode_SetMatrixPtr) dlsym(hLibrary, "lib3mf_constmatnode_setmatrix"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstMatNode_SetMatrix == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstMatNode_GetMatrix = (PLib3MFConstMatNode_GetMatrixPtr) GetProcAddress(hLibrary, "lib3mf_constmatnode_getmatrix"); + #else // _WIN32 + pWrapperTable->m_ConstMatNode_GetMatrix = (PLib3MFConstMatNode_GetMatrixPtr) dlsym(hLibrary, "lib3mf_constmatnode_getmatrix"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstMatNode_GetMatrix == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ConstMatNode_GetOutputMatrix = (PLib3MFConstMatNode_GetOutputMatrixPtr) GetProcAddress(hLibrary, "lib3mf_constmatnode_getoutputmatrix"); + #else // _WIN32 + pWrapperTable->m_ConstMatNode_GetOutputMatrix = (PLib3MFConstMatNode_GetOutputMatrixPtr) dlsym(hLibrary, "lib3mf_constmatnode_getoutputmatrix"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ConstMatNode_GetOutputMatrix == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshNode_GetInputMesh = (PLib3MFMeshNode_GetInputMeshPtr) GetProcAddress(hLibrary, "lib3mf_meshnode_getinputmesh"); + #else // _WIN32 + pWrapperTable->m_MeshNode_GetInputMesh = (PLib3MFMeshNode_GetInputMeshPtr) dlsym(hLibrary, "lib3mf_meshnode_getinputmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshNode_GetInputMesh == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshNode_GetInputPos = (PLib3MFMeshNode_GetInputPosPtr) GetProcAddress(hLibrary, "lib3mf_meshnode_getinputpos"); + #else // _WIN32 + pWrapperTable->m_MeshNode_GetInputPos = (PLib3MFMeshNode_GetInputPosPtr) dlsym(hLibrary, "lib3mf_meshnode_getinputpos"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshNode_GetInputPos == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_MeshNode_GetOutputDistance = (PLib3MFMeshNode_GetOutputDistancePtr) GetProcAddress(hLibrary, "lib3mf_meshnode_getoutputdistance"); + #else // _WIN32 + pWrapperTable->m_MeshNode_GetOutputDistance = (PLib3MFMeshNode_GetOutputDistancePtr) dlsym(hLibrary, "lib3mf_meshnode_getoutputdistance"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_MeshNode_GetOutputDistance == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputMesh = (PLib3MFUnsignedMeshNode_GetInputMeshPtr) GetProcAddress(hLibrary, "lib3mf_unsignedmeshnode_getinputmesh"); + #else // _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputMesh = (PLib3MFUnsignedMeshNode_GetInputMeshPtr) dlsym(hLibrary, "lib3mf_unsignedmeshnode_getinputmesh"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_UnsignedMeshNode_GetInputMesh == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputPos = (PLib3MFUnsignedMeshNode_GetInputPosPtr) GetProcAddress(hLibrary, "lib3mf_unsignedmeshnode_getinputpos"); + #else // _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetInputPos = (PLib3MFUnsignedMeshNode_GetInputPosPtr) dlsym(hLibrary, "lib3mf_unsignedmeshnode_getinputpos"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_UnsignedMeshNode_GetInputPos == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetOutputDistance = (PLib3MFUnsignedMeshNode_GetOutputDistancePtr) GetProcAddress(hLibrary, "lib3mf_unsignedmeshnode_getoutputdistance"); + #else // _WIN32 + pWrapperTable->m_UnsignedMeshNode_GetOutputDistance = (PLib3MFUnsignedMeshNode_GetOutputDistancePtr) dlsym(hLibrary, "lib3mf_unsignedmeshnode_getoutputdistance"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_UnsignedMeshNode_GetOutputDistance == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_FunctionCallNode_GetInputFunctionID = (PLib3MFFunctionCallNode_GetInputFunctionIDPtr) GetProcAddress(hLibrary, "lib3mf_functioncallnode_getinputfunctionid"); + #else // _WIN32 + pWrapperTable->m_FunctionCallNode_GetInputFunctionID = (PLib3MFFunctionCallNode_GetInputFunctionIDPtr) dlsym(hLibrary, "lib3mf_functioncallnode_getinputfunctionid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_FunctionCallNode_GetInputFunctionID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_NodeIterator_GetCurrent = (PLib3MFNodeIterator_GetCurrentPtr) GetProcAddress(hLibrary, "lib3mf_nodeiterator_getcurrent"); + #else // _WIN32 + pWrapperTable->m_NodeIterator_GetCurrent = (PLib3MFNodeIterator_GetCurrentPtr) dlsym(hLibrary, "lib3mf_nodeiterator_getcurrent"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_NodeIterator_GetCurrent == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_GetDisplayName = (PLib3MFFunction_GetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_function_getdisplayname"); + #else // _WIN32 + pWrapperTable->m_Function_GetDisplayName = (PLib3MFFunction_GetDisplayNamePtr) dlsym(hLibrary, "lib3mf_function_getdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_GetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_SetDisplayName = (PLib3MFFunction_SetDisplayNamePtr) GetProcAddress(hLibrary, "lib3mf_function_setdisplayname"); + #else // _WIN32 + pWrapperTable->m_Function_SetDisplayName = (PLib3MFFunction_SetDisplayNamePtr) dlsym(hLibrary, "lib3mf_function_setdisplayname"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_SetDisplayName == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_AddInput = (PLib3MFFunction_AddInputPtr) GetProcAddress(hLibrary, "lib3mf_function_addinput"); + #else // _WIN32 + pWrapperTable->m_Function_AddInput = (PLib3MFFunction_AddInputPtr) dlsym(hLibrary, "lib3mf_function_addinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_AddInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_GetInputs = (PLib3MFFunction_GetInputsPtr) GetProcAddress(hLibrary, "lib3mf_function_getinputs"); + #else // _WIN32 + pWrapperTable->m_Function_GetInputs = (PLib3MFFunction_GetInputsPtr) dlsym(hLibrary, "lib3mf_function_getinputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_GetInputs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_RemoveInput = (PLib3MFFunction_RemoveInputPtr) GetProcAddress(hLibrary, "lib3mf_function_removeinput"); + #else // _WIN32 + pWrapperTable->m_Function_RemoveInput = (PLib3MFFunction_RemoveInputPtr) dlsym(hLibrary, "lib3mf_function_removeinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_RemoveInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_AddOutput = (PLib3MFFunction_AddOutputPtr) GetProcAddress(hLibrary, "lib3mf_function_addoutput"); + #else // _WIN32 + pWrapperTable->m_Function_AddOutput = (PLib3MFFunction_AddOutputPtr) dlsym(hLibrary, "lib3mf_function_addoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_AddOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_GetOutputs = (PLib3MFFunction_GetOutputsPtr) GetProcAddress(hLibrary, "lib3mf_function_getoutputs"); + #else // _WIN32 + pWrapperTable->m_Function_GetOutputs = (PLib3MFFunction_GetOutputsPtr) dlsym(hLibrary, "lib3mf_function_getoutputs"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_GetOutputs == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_RemoveOutput = (PLib3MFFunction_RemoveOutputPtr) GetProcAddress(hLibrary, "lib3mf_function_removeoutput"); + #else // _WIN32 + pWrapperTable->m_Function_RemoveOutput = (PLib3MFFunction_RemoveOutputPtr) dlsym(hLibrary, "lib3mf_function_removeoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_RemoveOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_FindInput = (PLib3MFFunction_FindInputPtr) GetProcAddress(hLibrary, "lib3mf_function_findinput"); + #else // _WIN32 + pWrapperTable->m_Function_FindInput = (PLib3MFFunction_FindInputPtr) dlsym(hLibrary, "lib3mf_function_findinput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_FindInput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Function_FindOutput = (PLib3MFFunction_FindOutputPtr) GetProcAddress(hLibrary, "lib3mf_function_findoutput"); + #else // _WIN32 + pWrapperTable->m_Function_FindOutput = (PLib3MFFunction_FindOutputPtr) dlsym(hLibrary, "lib3mf_function_findoutput"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Function_FindOutput == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_GetIdentifier = (PLib3MFImplicitFunction_GetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_getidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_GetIdentifier = (PLib3MFImplicitFunction_GetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitfunction_getidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_GetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_SetIdentifier = (PLib3MFImplicitFunction_SetIdentifierPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_setidentifier"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_SetIdentifier = (PLib3MFImplicitFunction_SetIdentifierPtr) dlsym(hLibrary, "lib3mf_implicitfunction_setidentifier"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_SetIdentifier == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddNode = (PLib3MFImplicitFunction_AddNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddNode = (PLib3MFImplicitFunction_AddNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddNode == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddSinNode = (PLib3MFImplicitFunction_AddSinNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsinnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddSinNode = (PLib3MFImplicitFunction_AddSinNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsinnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddSinNode == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddCosNode = (PLib3MFImplicitFunction_AddCosNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcosnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddCosNode = (PLib3MFImplicitFunction_AddCosNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcosnode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddCosNode == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddTanNode = (PLib3MFImplicitFunction_AddTanNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addtannode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddTanNode = (PLib3MFImplicitFunction_AddTanNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addtannode"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_ImplicitFunction_AddTanNode == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_ImplicitFunction_AddArcSinNode = (PLib3MFImplicitFunction_AddArcSinNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addarcsinnode"); + #else // _WIN32 + pWrapperTable->m_ImplicitFunction_AddArcSinNode = (PLib3MFImplicitFunction_AddArcSinNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addarcsinnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetIdentifier == NULL) + if (pWrapperTable->m_ImplicitFunction_AddArcSinNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferencecount"); + pWrapperTable->m_ImplicitFunction_AddArcCosNode = (PLib3MFImplicitFunction_AddArcCosNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addarccosnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetReferenceCount = (PLib3MFBeamSet_GetReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getreferencecount"); + pWrapperTable->m_ImplicitFunction_AddArcCosNode = (PLib3MFImplicitFunction_AddArcCosNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addarccosnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetReferenceCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddArcCosNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setreferences"); + pWrapperTable->m_ImplicitFunction_AddArcTan2Node = (PLib3MFImplicitFunction_AddArcTan2NodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addarctan2node"); #else // _WIN32 - pWrapperTable->m_BeamSet_SetReferences = (PLib3MFBeamSet_SetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setreferences"); + pWrapperTable->m_ImplicitFunction_AddArcTan2Node = (PLib3MFImplicitFunction_AddArcTan2NodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addarctan2node"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetReferences == NULL) + if (pWrapperTable->m_ImplicitFunction_AddArcTan2Node == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getreferences"); + pWrapperTable->m_ImplicitFunction_AddSinhNode = (PLib3MFImplicitFunction_AddSinhNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsinhnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetReferences = (PLib3MFBeamSet_GetReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getreferences"); + pWrapperTable->m_ImplicitFunction_AddSinhNode = (PLib3MFImplicitFunction_AddSinhNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsinhnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetReferences == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSinhNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferencecount"); + pWrapperTable->m_ImplicitFunction_AddCoshNode = (PLib3MFImplicitFunction_AddCoshNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcoshnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetBallReferenceCount = (PLib3MFBeamSet_GetBallReferenceCountPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferencecount"); + pWrapperTable->m_ImplicitFunction_AddCoshNode = (PLib3MFImplicitFunction_AddCoshNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcoshnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetBallReferenceCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddCoshNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_setballreferences"); + pWrapperTable->m_ImplicitFunction_AddTanhNode = (PLib3MFImplicitFunction_AddTanhNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addtanhnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_SetBallReferences = (PLib3MFBeamSet_SetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_setballreferences"); + pWrapperTable->m_ImplicitFunction_AddTanhNode = (PLib3MFImplicitFunction_AddTanhNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addtanhnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_SetBallReferences == NULL) + if (pWrapperTable->m_ImplicitFunction_AddTanhNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) GetProcAddress(hLibrary, "lib3mf_beamset_getballreferences"); + pWrapperTable->m_ImplicitFunction_AddRoundNode = (PLib3MFImplicitFunction_AddRoundNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addroundnode"); #else // _WIN32 - pWrapperTable->m_BeamSet_GetBallReferences = (PLib3MFBeamSet_GetBallReferencesPtr) dlsym(hLibrary, "lib3mf_beamset_getballreferences"); + pWrapperTable->m_ImplicitFunction_AddRoundNode = (PLib3MFImplicitFunction_AddRoundNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addroundnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BeamSet_GetBallReferences == NULL) + if (pWrapperTable->m_ImplicitFunction_AddRoundNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddCeilNode = (PLib3MFImplicitFunction_AddCeilNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addceilnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetCount = (PLib3MFBaseMaterialGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddCeilNode = (PLib3MFImplicitFunction_AddCeilNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addceilnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddCeilNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddFloorNode = (PLib3MFImplicitFunction_AddFloorNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfloornode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs = (PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddFloorNode = (PLib3MFImplicitFunction_AddFloorNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfloornode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddFloorNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + pWrapperTable->m_ImplicitFunction_AddSignNode = (PLib3MFImplicitFunction_AddSignNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsignnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_AddMaterial = (PLib3MFBaseMaterialGroup_AddMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_addmaterial"); + pWrapperTable->m_ImplicitFunction_AddSignNode = (PLib3MFImplicitFunction_AddSignNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsignnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_AddMaterial == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSignNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_removematerial"); + pWrapperTable->m_ImplicitFunction_AddFractNode = (PLib3MFImplicitFunction_AddFractNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfractnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_RemoveMaterial = (PLib3MFBaseMaterialGroup_RemoveMaterialPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_removematerial"); + pWrapperTable->m_ImplicitFunction_AddFractNode = (PLib3MFImplicitFunction_AddFractNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfractnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_RemoveMaterial == NULL) + if (pWrapperTable->m_ImplicitFunction_AddFractNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getname"); + pWrapperTable->m_ImplicitFunction_AddAbsNode = (PLib3MFImplicitFunction_AddAbsNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addabsnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetName = (PLib3MFBaseMaterialGroup_GetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getname"); + pWrapperTable->m_ImplicitFunction_AddAbsNode = (PLib3MFImplicitFunction_AddAbsNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addabsnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetName == NULL) + if (pWrapperTable->m_ImplicitFunction_AddAbsNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setname"); + pWrapperTable->m_ImplicitFunction_AddExpNode = (PLib3MFImplicitFunction_AddExpNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addexpnode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetName = (PLib3MFBaseMaterialGroup_SetNamePtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setname"); + pWrapperTable->m_ImplicitFunction_AddExpNode = (PLib3MFImplicitFunction_AddExpNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addexpnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_SetName == NULL) + if (pWrapperTable->m_ImplicitFunction_AddExpNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + pWrapperTable->m_ImplicitFunction_AddLogNode = (PLib3MFImplicitFunction_AddLogNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlognode"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_SetDisplayColor = (PLib3MFBaseMaterialGroup_SetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_setdisplaycolor"); + pWrapperTable->m_ImplicitFunction_AddLogNode = (PLib3MFImplicitFunction_AddLogNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlognode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_SetDisplayColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLogNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) GetProcAddress(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + pWrapperTable->m_ImplicitFunction_AddLog2Node = (PLib3MFImplicitFunction_AddLog2NodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlog2node"); #else // _WIN32 - pWrapperTable->m_BaseMaterialGroup_GetDisplayColor = (PLib3MFBaseMaterialGroup_GetDisplayColorPtr) dlsym(hLibrary, "lib3mf_basematerialgroup_getdisplaycolor"); + pWrapperTable->m_ImplicitFunction_AddLog2Node = (PLib3MFImplicitFunction_AddLog2NodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlog2node"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_BaseMaterialGroup_GetDisplayColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLog2Node == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddLog10Node = (PLib3MFImplicitFunction_AddLog10NodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlog10node"); #else // _WIN32 - pWrapperTable->m_ColorGroup_GetCount = (PLib3MFColorGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddLog10Node = (PLib3MFImplicitFunction_AddLog10NodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlog10node"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLog10Node == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddLengthNode = (PLib3MFImplicitFunction_AddLengthNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlengthnode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_GetAllPropertyIDs = (PLib3MFColorGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_colorgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddLengthNode = (PLib3MFImplicitFunction_AddLengthNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlengthnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLengthNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_addcolor"); + pWrapperTable->m_ImplicitFunction_AddTransposeNode = (PLib3MFImplicitFunction_AddTransposeNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addtransposenode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_AddColor = (PLib3MFColorGroup_AddColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_addcolor"); + pWrapperTable->m_ImplicitFunction_AddTransposeNode = (PLib3MFImplicitFunction_AddTransposeNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addtransposenode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_AddColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddTransposeNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_removecolor"); + pWrapperTable->m_ImplicitFunction_InverseNode = (PLib3MFImplicitFunction_InverseNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_inversenode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_RemoveColor = (PLib3MFColorGroup_RemoveColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_removecolor"); + pWrapperTable->m_ImplicitFunction_InverseNode = (PLib3MFImplicitFunction_InverseNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_inversenode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_RemoveColor == NULL) + if (pWrapperTable->m_ImplicitFunction_InverseNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_setcolor"); + pWrapperTable->m_ImplicitFunction_AddSqrtNode = (PLib3MFImplicitFunction_AddSqrtNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsqrtnode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_SetColor = (PLib3MFColorGroup_SetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_setcolor"); + pWrapperTable->m_ImplicitFunction_AddSqrtNode = (PLib3MFImplicitFunction_AddSqrtNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsqrtnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_SetColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSqrtNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) GetProcAddress(hLibrary, "lib3mf_colorgroup_getcolor"); + pWrapperTable->m_ImplicitFunction_AddResourceIdNode = (PLib3MFImplicitFunction_AddResourceIdNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addresourceidnode"); #else // _WIN32 - pWrapperTable->m_ColorGroup_GetColor = (PLib3MFColorGroup_GetColorPtr) dlsym(hLibrary, "lib3mf_colorgroup_getcolor"); + pWrapperTable->m_ImplicitFunction_AddResourceIdNode = (PLib3MFImplicitFunction_AddResourceIdNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addresourceidnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_ColorGroup_GetColor == NULL) + if (pWrapperTable->m_ImplicitFunction_AddResourceIdNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddAdditionNode = (PLib3MFImplicitFunction_AddAdditionNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addadditionnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetCount = (PLib3MFTexture2DGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddAdditionNode = (PLib3MFImplicitFunction_AddAdditionNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addadditionnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddAdditionNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddSubtractionNode = (PLib3MFImplicitFunction_AddSubtractionNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addsubtractionnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs = (PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddSubtractionNode = (PLib3MFImplicitFunction_AddSubtractionNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addsubtractionnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSubtractionNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + pWrapperTable->m_ImplicitFunction_AddMultiplicationNode = (PLib3MFImplicitFunction_AddMultiplicationNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmultiplicationnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_AddTex2Coord = (PLib3MFTexture2DGroup_AddTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_addtex2coord"); + pWrapperTable->m_ImplicitFunction_AddMultiplicationNode = (PLib3MFImplicitFunction_AddMultiplicationNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmultiplicationnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_AddTex2Coord == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMultiplicationNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + pWrapperTable->m_ImplicitFunction_AddDivisionNode = (PLib3MFImplicitFunction_AddDivisionNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_adddivisionnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetTex2Coord = (PLib3MFTexture2DGroup_GetTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettex2coord"); + pWrapperTable->m_ImplicitFunction_AddDivisionNode = (PLib3MFImplicitFunction_AddDivisionNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_adddivisionnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetTex2Coord == NULL) + if (pWrapperTable->m_ImplicitFunction_AddDivisionNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + pWrapperTable->m_ImplicitFunction_AddDotNode = (PLib3MFImplicitFunction_AddDotNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_adddotnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_RemoveTex2Coord = (PLib3MFTexture2DGroup_RemoveTex2CoordPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_removetex2coord"); + pWrapperTable->m_ImplicitFunction_AddDotNode = (PLib3MFImplicitFunction_AddDotNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_adddotnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_RemoveTex2Coord == NULL) + if (pWrapperTable->m_ImplicitFunction_AddDotNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) GetProcAddress(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + pWrapperTable->m_ImplicitFunction_AddCrossNode = (PLib3MFImplicitFunction_AddCrossNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcrossnode"); #else // _WIN32 - pWrapperTable->m_Texture2DGroup_GetTexture2D = (PLib3MFTexture2DGroup_GetTexture2DPtr) dlsym(hLibrary, "lib3mf_texture2dgroup_gettexture2d"); + pWrapperTable->m_ImplicitFunction_AddCrossNode = (PLib3MFImplicitFunction_AddCrossNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcrossnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2DGroup_GetTexture2D == NULL) + if (pWrapperTable->m_ImplicitFunction_AddCrossNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcount"); + pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode = (PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmatvecmultiplicationnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetCount = (PLib3MFCompositeMaterials_GetCountPtr) dlsym(hLibrary, "lib3mf_compositematerials_getcount"); + pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode = (PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmatvecmultiplicationnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddMinNode = (PLib3MFImplicitFunction_AddMinNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addminnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs = (PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_compositematerials_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddMinNode = (PLib3MFImplicitFunction_AddMinNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addminnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMinNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + pWrapperTable->m_ImplicitFunction_AddMaxNode = (PLib3MFImplicitFunction_AddMaxNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmaxnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup = (PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) dlsym(hLibrary, "lib3mf_compositematerials_getbasematerialgroup"); + pWrapperTable->m_ImplicitFunction_AddMaxNode = (PLib3MFImplicitFunction_AddMaxNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmaxnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetBaseMaterialGroup == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMaxNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_addcomposite"); + pWrapperTable->m_ImplicitFunction_AddFmodNode = (PLib3MFImplicitFunction_AddFmodNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfmodnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_AddComposite = (PLib3MFCompositeMaterials_AddCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_addcomposite"); + pWrapperTable->m_ImplicitFunction_AddFmodNode = (PLib3MFImplicitFunction_AddFmodNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfmodnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_AddComposite == NULL) + if (pWrapperTable->m_ImplicitFunction_AddFmodNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_removecomposite"); + pWrapperTable->m_ImplicitFunction_AddPowNode = (PLib3MFImplicitFunction_AddPowNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addpownode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_RemoveComposite = (PLib3MFCompositeMaterials_RemoveCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_removecomposite"); + pWrapperTable->m_ImplicitFunction_AddPowNode = (PLib3MFImplicitFunction_AddPowNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addpownode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_RemoveComposite == NULL) + if (pWrapperTable->m_ImplicitFunction_AddPowNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) GetProcAddress(hLibrary, "lib3mf_compositematerials_getcomposite"); + pWrapperTable->m_ImplicitFunction_AddSelectNode = (PLib3MFImplicitFunction_AddSelectNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addselectnode"); #else // _WIN32 - pWrapperTable->m_CompositeMaterials_GetComposite = (PLib3MFCompositeMaterials_GetCompositePtr) dlsym(hLibrary, "lib3mf_compositematerials_getcomposite"); + pWrapperTable->m_ImplicitFunction_AddSelectNode = (PLib3MFImplicitFunction_AddSelectNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addselectnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_CompositeMaterials_GetComposite == NULL) + if (pWrapperTable->m_ImplicitFunction_AddSelectNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddClampNode = (PLib3MFImplicitFunction_AddClampNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addclampnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetCount = (PLib3MFMultiPropertyGroup_GetCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getcount"); + pWrapperTable->m_ImplicitFunction_AddClampNode = (PLib3MFImplicitFunction_AddClampNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addclampnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddClampNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddComposeVectorNode = (PLib3MFImplicitFunction_AddComposeVectorNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcomposevectornode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs = (PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getallpropertyids"); + pWrapperTable->m_ImplicitFunction_AddComposeVectorNode = (PLib3MFImplicitFunction_AddComposeVectorNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcomposevectornode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs == NULL) + if (pWrapperTable->m_ImplicitFunction_AddComposeVectorNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode = (PLib3MFImplicitFunction_AddVectorFromScalarNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addvectorfromscalarnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddMultiProperty = (PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode = (PLib3MFImplicitFunction_AddVectorFromScalarNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addvectorfromscalarnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_AddMultiProperty == NULL) + if (pWrapperTable->m_ImplicitFunction_AddVectorFromScalarNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode = (PLib3MFImplicitFunction_AddDecomposeVectorNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_adddecomposevectornode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_SetMultiProperty = (PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_setmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode = (PLib3MFImplicitFunction_AddDecomposeVectorNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_adddecomposevectornode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_SetMultiProperty == NULL) + if (pWrapperTable->m_ImplicitFunction_AddDecomposeVectorNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode = (PLib3MFImplicitFunction_AddComposeMatrixNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addcomposematrixnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetMultiProperty = (PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getmultiproperty"); + pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode = (PLib3MFImplicitFunction_AddComposeMatrixNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addcomposematrixnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetMultiProperty == NULL) + if (pWrapperTable->m_ImplicitFunction_AddComposeMatrixNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode = (PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmatrixfromrowsnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty = (PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removemultiproperty"); + pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode = (PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmatrixfromrowsnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_RemoveMultiProperty == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode = (PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmatrixfromcolumnsnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayerCount = (PLib3MFMultiPropertyGroup_GetLayerCountPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayercount"); + pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode = (PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmatrixfromcolumnsnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetLayerCount == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_addlayer"); + pWrapperTable->m_ImplicitFunction_AddConstantNode = (PLib3MFImplicitFunction_AddConstantNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addconstantnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_AddLayer = (PLib3MFMultiPropertyGroup_AddLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_addlayer"); + pWrapperTable->m_ImplicitFunction_AddConstantNode = (PLib3MFImplicitFunction_AddConstantNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addconstantnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_AddLayer == NULL) + if (pWrapperTable->m_ImplicitFunction_AddConstantNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_getlayer"); + pWrapperTable->m_ImplicitFunction_AddConstVecNode = (PLib3MFImplicitFunction_AddConstVecNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addconstvecnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_GetLayer = (PLib3MFMultiPropertyGroup_GetLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_getlayer"); + pWrapperTable->m_ImplicitFunction_AddConstVecNode = (PLib3MFImplicitFunction_AddConstVecNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addconstvecnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_GetLayer == NULL) + if (pWrapperTable->m_ImplicitFunction_AddConstVecNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) GetProcAddress(hLibrary, "lib3mf_multipropertygroup_removelayer"); + pWrapperTable->m_ImplicitFunction_AddConstMatNode = (PLib3MFImplicitFunction_AddConstMatNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addconstmatnode"); #else // _WIN32 - pWrapperTable->m_MultiPropertyGroup_RemoveLayer = (PLib3MFMultiPropertyGroup_RemoveLayerPtr) dlsym(hLibrary, "lib3mf_multipropertygroup_removelayer"); + pWrapperTable->m_ImplicitFunction_AddConstMatNode = (PLib3MFImplicitFunction_AddConstMatNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addconstmatnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_MultiPropertyGroup_RemoveLayer == NULL) + if (pWrapperTable->m_ImplicitFunction_AddConstMatNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_getpath"); + pWrapperTable->m_ImplicitFunction_AddMeshNode = (PLib3MFImplicitFunction_AddMeshNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addmeshnode"); #else // _WIN32 - pWrapperTable->m_Attachment_GetPath = (PLib3MFAttachment_GetPathPtr) dlsym(hLibrary, "lib3mf_attachment_getpath"); + pWrapperTable->m_ImplicitFunction_AddMeshNode = (PLib3MFImplicitFunction_AddMeshNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addmeshnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_GetPath == NULL) + if (pWrapperTable->m_ImplicitFunction_AddMeshNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) GetProcAddress(hLibrary, "lib3mf_attachment_setpath"); + pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode = (PLib3MFImplicitFunction_AddUnsignedMeshNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addunsignedmeshnode"); #else // _WIN32 - pWrapperTable->m_Attachment_SetPath = (PLib3MFAttachment_SetPathPtr) dlsym(hLibrary, "lib3mf_attachment_setpath"); + pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode = (PLib3MFImplicitFunction_AddUnsignedMeshNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addunsignedmeshnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_SetPath == NULL) + if (pWrapperTable->m_ImplicitFunction_AddUnsignedMeshNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) GetProcAddress(hLibrary, "lib3mf_attachment_packagepart"); + pWrapperTable->m_ImplicitFunction_AddFunctionCallNode = (PLib3MFImplicitFunction_AddFunctionCallNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addfunctioncallnode"); #else // _WIN32 - pWrapperTable->m_Attachment_PackagePart = (PLib3MFAttachment_PackagePartPtr) dlsym(hLibrary, "lib3mf_attachment_packagepart"); + pWrapperTable->m_ImplicitFunction_AddFunctionCallNode = (PLib3MFImplicitFunction_AddFunctionCallNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_addfunctioncallnode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_PackagePart == NULL) + if (pWrapperTable->m_ImplicitFunction_AddFunctionCallNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getrelationshiptype"); + pWrapperTable->m_ImplicitFunction_GetNodes = (PLib3MFImplicitFunction_GetNodesPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_getnodes"); #else // _WIN32 - pWrapperTable->m_Attachment_GetRelationShipType = (PLib3MFAttachment_GetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_getrelationshiptype"); + pWrapperTable->m_ImplicitFunction_GetNodes = (PLib3MFImplicitFunction_GetNodesPtr) dlsym(hLibrary, "lib3mf_implicitfunction_getnodes"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_GetRelationShipType == NULL) + if (pWrapperTable->m_ImplicitFunction_GetNodes == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) GetProcAddress(hLibrary, "lib3mf_attachment_setrelationshiptype"); + pWrapperTable->m_ImplicitFunction_RemoveNode = (PLib3MFImplicitFunction_RemoveNodePtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_removenode"); #else // _WIN32 - pWrapperTable->m_Attachment_SetRelationShipType = (PLib3MFAttachment_SetRelationShipTypePtr) dlsym(hLibrary, "lib3mf_attachment_setrelationshiptype"); + pWrapperTable->m_ImplicitFunction_RemoveNode = (PLib3MFImplicitFunction_RemoveNodePtr) dlsym(hLibrary, "lib3mf_implicitfunction_removenode"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_SetRelationShipType == NULL) + if (pWrapperTable->m_ImplicitFunction_RemoveNode == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetofile"); + pWrapperTable->m_ImplicitFunction_AddLink = (PLib3MFImplicitFunction_AddLinkPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlink"); #else // _WIN32 - pWrapperTable->m_Attachment_WriteToFile = (PLib3MFAttachment_WriteToFilePtr) dlsym(hLibrary, "lib3mf_attachment_writetofile"); + pWrapperTable->m_ImplicitFunction_AddLink = (PLib3MFImplicitFunction_AddLinkPtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlink"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_WriteToFile == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLink == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromfile"); + pWrapperTable->m_ImplicitFunction_AddLinkByNames = (PLib3MFImplicitFunction_AddLinkByNamesPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_addlinkbynames"); #else // _WIN32 - pWrapperTable->m_Attachment_ReadFromFile = (PLib3MFAttachment_ReadFromFilePtr) dlsym(hLibrary, "lib3mf_attachment_readfromfile"); + pWrapperTable->m_ImplicitFunction_AddLinkByNames = (PLib3MFImplicitFunction_AddLinkByNamesPtr) dlsym(hLibrary, "lib3mf_implicitfunction_addlinkbynames"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_ReadFromFile == NULL) + if (pWrapperTable->m_ImplicitFunction_AddLinkByNames == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfromcallback"); + pWrapperTable->m_ImplicitFunction_Clear = (PLib3MFImplicitFunction_ClearPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_clear"); #else // _WIN32 - pWrapperTable->m_Attachment_ReadFromCallback = (PLib3MFAttachment_ReadFromCallbackPtr) dlsym(hLibrary, "lib3mf_attachment_readfromcallback"); + pWrapperTable->m_ImplicitFunction_Clear = (PLib3MFImplicitFunction_ClearPtr) dlsym(hLibrary, "lib3mf_implicitfunction_clear"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_ReadFromCallback == NULL) + if (pWrapperTable->m_ImplicitFunction_Clear == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) GetProcAddress(hLibrary, "lib3mf_attachment_getstreamsize"); + pWrapperTable->m_ImplicitFunction_SortNodesTopologically = (PLib3MFImplicitFunction_SortNodesTopologicallyPtr) GetProcAddress(hLibrary, "lib3mf_implicitfunction_sortnodestopologically"); #else // _WIN32 - pWrapperTable->m_Attachment_GetStreamSize = (PLib3MFAttachment_GetStreamSizePtr) dlsym(hLibrary, "lib3mf_attachment_getstreamsize"); + pWrapperTable->m_ImplicitFunction_SortNodesTopologically = (PLib3MFImplicitFunction_SortNodesTopologicallyPtr) dlsym(hLibrary, "lib3mf_implicitfunction_sortnodestopologically"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_GetStreamSize == NULL) + if (pWrapperTable->m_ImplicitFunction_SortNodesTopologically == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_writetobuffer"); + pWrapperTable->m_FunctionFromImage3D_GetImage3D = (PLib3MFFunctionFromImage3D_GetImage3DPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getimage3d"); #else // _WIN32 - pWrapperTable->m_Attachment_WriteToBuffer = (PLib3MFAttachment_WriteToBufferPtr) dlsym(hLibrary, "lib3mf_attachment_writetobuffer"); + pWrapperTable->m_FunctionFromImage3D_GetImage3D = (PLib3MFFunctionFromImage3D_GetImage3DPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getimage3d"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_WriteToBuffer == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetImage3D == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) GetProcAddress(hLibrary, "lib3mf_attachment_readfrombuffer"); + pWrapperTable->m_FunctionFromImage3D_SetImage3D = (PLib3MFFunctionFromImage3D_SetImage3DPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setimage3d"); #else // _WIN32 - pWrapperTable->m_Attachment_ReadFromBuffer = (PLib3MFAttachment_ReadFromBufferPtr) dlsym(hLibrary, "lib3mf_attachment_readfrombuffer"); + pWrapperTable->m_FunctionFromImage3D_SetImage3D = (PLib3MFFunctionFromImage3D_SetImage3DPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setimage3d"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Attachment_ReadFromBuffer == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetImage3D == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getattachment"); + pWrapperTable->m_FunctionFromImage3D_SetFilter = (PLib3MFFunctionFromImage3D_SetFilterPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setfilter"); #else // _WIN32 - pWrapperTable->m_Texture2D_GetAttachment = (PLib3MFTexture2D_GetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_getattachment"); + pWrapperTable->m_FunctionFromImage3D_SetFilter = (PLib3MFFunctionFromImage3D_SetFilterPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setfilter"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetAttachment == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetFilter == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setattachment"); + pWrapperTable->m_FunctionFromImage3D_GetFilter = (PLib3MFFunctionFromImage3D_GetFilterPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getfilter"); #else // _WIN32 - pWrapperTable->m_Texture2D_SetAttachment = (PLib3MFTexture2D_SetAttachmentPtr) dlsym(hLibrary, "lib3mf_texture2d_setattachment"); + pWrapperTable->m_FunctionFromImage3D_GetFilter = (PLib3MFFunctionFromImage3D_GetFilterPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getfilter"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetAttachment == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetFilter == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getcontenttype"); + pWrapperTable->m_FunctionFromImage3D_SetTileStyles = (PLib3MFFunctionFromImage3D_SetTileStylesPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_settilestyles"); #else // _WIN32 - pWrapperTable->m_Texture2D_GetContentType = (PLib3MFTexture2D_GetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_getcontenttype"); + pWrapperTable->m_FunctionFromImage3D_SetTileStyles = (PLib3MFFunctionFromImage3D_SetTileStylesPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_settilestyles"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetContentType == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetTileStyles == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setcontenttype"); + pWrapperTable->m_FunctionFromImage3D_GetTileStyles = (PLib3MFFunctionFromImage3D_GetTileStylesPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_gettilestyles"); #else // _WIN32 - pWrapperTable->m_Texture2D_SetContentType = (PLib3MFTexture2D_SetContentTypePtr) dlsym(hLibrary, "lib3mf_texture2d_setcontenttype"); + pWrapperTable->m_FunctionFromImage3D_GetTileStyles = (PLib3MFFunctionFromImage3D_GetTileStylesPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_gettilestyles"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetContentType == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetTileStyles == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + pWrapperTable->m_FunctionFromImage3D_GetOffset = (PLib3MFFunctionFromImage3D_GetOffsetPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getoffset"); #else // _WIN32 - pWrapperTable->m_Texture2D_GetTileStyleUV = (PLib3MFTexture2D_GetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_gettilestyleuv"); + pWrapperTable->m_FunctionFromImage3D_GetOffset = (PLib3MFFunctionFromImage3D_GetOffsetPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getoffset"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetTileStyleUV == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetOffset == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_settilestyleuv"); + pWrapperTable->m_FunctionFromImage3D_SetOffset = (PLib3MFFunctionFromImage3D_SetOffsetPtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setoffset"); #else // _WIN32 - pWrapperTable->m_Texture2D_SetTileStyleUV = (PLib3MFTexture2D_SetTileStyleUVPtr) dlsym(hLibrary, "lib3mf_texture2d_settilestyleuv"); + pWrapperTable->m_FunctionFromImage3D_SetOffset = (PLib3MFFunctionFromImage3D_SetOffsetPtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setoffset"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetTileStyleUV == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetOffset == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_getfilter"); + pWrapperTable->m_FunctionFromImage3D_GetScale = (PLib3MFFunctionFromImage3D_GetScalePtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_getscale"); #else // _WIN32 - pWrapperTable->m_Texture2D_GetFilter = (PLib3MFTexture2D_GetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_getfilter"); + pWrapperTable->m_FunctionFromImage3D_GetScale = (PLib3MFFunctionFromImage3D_GetScalePtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_getscale"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_GetFilter == NULL) + if (pWrapperTable->m_FunctionFromImage3D_GetScale == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 - pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) GetProcAddress(hLibrary, "lib3mf_texture2d_setfilter"); + pWrapperTable->m_FunctionFromImage3D_SetScale = (PLib3MFFunctionFromImage3D_SetScalePtr) GetProcAddress(hLibrary, "lib3mf_functionfromimage3d_setscale"); #else // _WIN32 - pWrapperTable->m_Texture2D_SetFilter = (PLib3MFTexture2D_SetFilterPtr) dlsym(hLibrary, "lib3mf_texture2d_setfilter"); + pWrapperTable->m_FunctionFromImage3D_SetScale = (PLib3MFFunctionFromImage3D_SetScalePtr) dlsym(hLibrary, "lib3mf_functionfromimage3d_setscale"); dlerror(); #endif // _WIN32 - if (pWrapperTable->m_Texture2D_SetFilter == NULL) + if (pWrapperTable->m_FunctionFromImage3D_SetScale == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; #ifdef _WIN32 @@ -3152,6 +5474,15 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_GetSliceStackByID == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_GetLevelSetByID = (PLib3MFModel_GetLevelSetByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getlevelsetbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetLevelSetByID = (PLib3MFModel_GetLevelSetByIDPtr) dlsym(hLibrary, "lib3mf_model_getlevelsetbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetLevelSetByID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Model_GetBuildUUID = (PLib3MFModel_GetBuildUUIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getbuilduuid"); #else // _WIN32 @@ -3287,6 +5618,15 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_GetSliceStacks == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_GetImage3Ds = (PLib3MFModel_GetImage3DsPtr) GetProcAddress(hLibrary, "lib3mf_model_getimage3ds"); + #else // _WIN32 + pWrapperTable->m_Model_GetImage3Ds = (PLib3MFModel_GetImage3DsPtr) dlsym(hLibrary, "lib3mf_model_getimage3ds"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetImage3Ds == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Model_MergeToModel = (PLib3MFModel_MergeToModelPtr) GetProcAddress(hLibrary, "lib3mf_model_mergetomodel"); #else // _WIN32 @@ -3296,6 +5636,15 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_MergeToModel == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_MergeFromModel = (PLib3MFModel_MergeFromModelPtr) GetProcAddress(hLibrary, "lib3mf_model_mergefrommodel"); + #else // _WIN32 + pWrapperTable->m_Model_MergeFromModel = (PLib3MFModel_MergeFromModelPtr) dlsym(hLibrary, "lib3mf_model_mergefrommodel"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_MergeFromModel == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Model_AddMeshObject = (PLib3MFModel_AddMeshObjectPtr) GetProcAddress(hLibrary, "lib3mf_model_addmeshobject"); #else // _WIN32 @@ -3377,6 +5726,24 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_AddMultiPropertyGroup == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_AddImageStack = (PLib3MFModel_AddImageStackPtr) GetProcAddress(hLibrary, "lib3mf_model_addimagestack"); + #else // _WIN32 + pWrapperTable->m_Model_AddImageStack = (PLib3MFModel_AddImageStackPtr) dlsym(hLibrary, "lib3mf_model_addimagestack"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddImageStack == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetImageStackByID = (PLib3MFModel_GetImageStackByIDPtr) GetProcAddress(hLibrary, "lib3mf_model_getimagestackbyid"); + #else // _WIN32 + pWrapperTable->m_Model_GetImageStackByID = (PLib3MFModel_GetImageStackByIDPtr) dlsym(hLibrary, "lib3mf_model_getimagestackbyid"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetImageStackByID == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Model_AddBuildItem = (PLib3MFModel_AddBuildItemPtr) GetProcAddress(hLibrary, "lib3mf_model_addbuilditem"); #else // _WIN32 @@ -3521,6 +5888,69 @@ Lib3MFResult LoadLib3MFWrapperTable(sLib3MFDynamicWrapperTable * pWrapperTable, if (pWrapperTable->m_Model_GetKeyStore == NULL) return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Model_GetFunctions = (PLib3MFModel_GetFunctionsPtr) GetProcAddress(hLibrary, "lib3mf_model_getfunctions"); + #else // _WIN32 + pWrapperTable->m_Model_GetFunctions = (PLib3MFModel_GetFunctionsPtr) dlsym(hLibrary, "lib3mf_model_getfunctions"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetFunctions == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddImplicitFunction = (PLib3MFModel_AddImplicitFunctionPtr) GetProcAddress(hLibrary, "lib3mf_model_addimplicitfunction"); + #else // _WIN32 + pWrapperTable->m_Model_AddImplicitFunction = (PLib3MFModel_AddImplicitFunctionPtr) dlsym(hLibrary, "lib3mf_model_addimplicitfunction"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddImplicitFunction == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddFunctionFromImage3D = (PLib3MFModel_AddFunctionFromImage3DPtr) GetProcAddress(hLibrary, "lib3mf_model_addfunctionfromimage3d"); + #else // _WIN32 + pWrapperTable->m_Model_AddFunctionFromImage3D = (PLib3MFModel_AddFunctionFromImage3DPtr) dlsym(hLibrary, "lib3mf_model_addfunctionfromimage3d"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddFunctionFromImage3D == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddVolumeData = (PLib3MFModel_AddVolumeDataPtr) GetProcAddress(hLibrary, "lib3mf_model_addvolumedata"); + #else // _WIN32 + pWrapperTable->m_Model_AddVolumeData = (PLib3MFModel_AddVolumeDataPtr) dlsym(hLibrary, "lib3mf_model_addvolumedata"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddVolumeData == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_AddLevelSet = (PLib3MFModel_AddLevelSetPtr) GetProcAddress(hLibrary, "lib3mf_model_addlevelset"); + #else // _WIN32 + pWrapperTable->m_Model_AddLevelSet = (PLib3MFModel_AddLevelSetPtr) dlsym(hLibrary, "lib3mf_model_addlevelset"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_AddLevelSet == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_GetLevelSets = (PLib3MFModel_GetLevelSetsPtr) GetProcAddress(hLibrary, "lib3mf_model_getlevelsets"); + #else // _WIN32 + pWrapperTable->m_Model_GetLevelSets = (PLib3MFModel_GetLevelSetsPtr) dlsym(hLibrary, "lib3mf_model_getlevelsets"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_GetLevelSets == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Model_RemoveResource = (PLib3MFModel_RemoveResourcePtr) GetProcAddress(hLibrary, "lib3mf_model_removeresource"); + #else // _WIN32 + pWrapperTable->m_Model_RemoveResource = (PLib3MFModel_RemoveResourcePtr) dlsym(hLibrary, "lib3mf_model_removeresource"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Model_RemoveResource == NULL) + return LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_GetLibraryVersion = (PLib3MFGetLibraryVersionPtr) GetProcAddress(hLibrary, "lib3mf_getlibraryversion"); #else // _WIN32 diff --git a/Autogenerated/Bindings/NodeJS/lib3mf_dynamic.h b/Autogenerated/Bindings/NodeJS/lib3mf_dynamic.h index 044c754bb..d7fcaf59a 100644 --- a/Autogenerated/Bindings/NodeJS/lib3mf_dynamic.h +++ b/Autogenerated/Bindings/NodeJS/lib3mf_dynamic.h @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated plain C Header file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -562,6 +562,45 @@ typedef Lib3MFResult (*PLib3MFCompositeMaterialsIterator_GetCurrentCompositeMate */ typedef Lib3MFResult (*PLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupPtr) (Lib3MF_MultiPropertyGroupIterator pMultiPropertyGroupIterator, Lib3MF_MultiPropertyGroup * pResource); +/************************************************************************************************************************* + Class definition for Image3DIterator +**************************************************************************************************************************/ + +/** +* Returns the Image3D the iterator points at. +* +* @param[in] pImage3DIterator - Image3DIterator instance. +* @param[out] pResource - returns the Image3D instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3DIterator_GetCurrentImage3DPtr) (Lib3MF_Image3DIterator pImage3DIterator, Lib3MF_Image3D * pResource); + +/************************************************************************************************************************* + Class definition for FunctionIterator +**************************************************************************************************************************/ + +/** +* Returns the Function the iterator points at. +* +* @param[in] pFunctionIterator - FunctionIterator instance. +* @param[out] pResource - returns the Function instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionIterator_GetCurrentFunctionPtr) (Lib3MF_FunctionIterator pFunctionIterator, Lib3MF_Function * pResource); + +/************************************************************************************************************************* + Class definition for LevelSetIterator +**************************************************************************************************************************/ + +/** +* Returns the LevelSet the iterator points at. +* +* @param[in] pLevelSetIterator - LevelSetIterator instance. +* @param[out] pResource - returns the MeshObject instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSetIterator_GetCurrentLevelSetPtr) (Lib3MF_LevelSetIterator pLevelSetIterator, Lib3MF_LevelSet * pResource); + /************************************************************************************************************************* Class definition for MetaData **************************************************************************************************************************/ @@ -821,6 +860,15 @@ typedef Lib3MFResult (*PLib3MFObject_IsMeshObjectPtr) (Lib3MF_Object pObject, bo */ typedef Lib3MFResult (*PLib3MFObject_IsComponentsObjectPtr) (Lib3MF_Object pObject, bool * pIsComponentsObject); +/** +* Retrieves, if an object is a level set object +* +* @param[in] pObject - Object instance. +* @param[out] pIsLevelSetObject - returns, whether the object is a level set object +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFObject_IsLevelSetObjectPtr) (Lib3MF_Object pObject, bool * pIsLevelSetObject); + /** * Retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. * @@ -1153,6 +1201,174 @@ typedef Lib3MFResult (*PLib3MFMeshObject_IsManifoldAndOrientedPtr) (Lib3MF_MeshO */ typedef Lib3MFResult (*PLib3MFMeshObject_BeamLatticePtr) (Lib3MF_MeshObject pMeshObject, Lib3MF_BeamLattice * pTheBeamLattice); +/** +* Retrieves the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[out] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshObject_GetVolumeDataPtr) (Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshObject_SetVolumeDataPtr) (Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData pTheVolumeData); + +/************************************************************************************************************************* + Class definition for LevelSet +**************************************************************************************************************************/ + +/** +* Returns the function that is used as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetFunctionPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_Function * pTheFunction); + +/** +* Sets the function to use as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetFunctionPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_Function pTheFunction); + +/** +* Returns the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTransform - the transformation matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetTransformPtr) (Lib3MF_LevelSet pLevelSet, sLib3MFTransform * pTransform); + +/** +* Sets the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetTransformPtr) (Lib3MF_LevelSet pLevelSet, const sLib3MFTransform * pTransform); + +/** +* Returns the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetChannelNamePtr) (Lib3MF_LevelSet pLevelSet, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); + +/** +* Sets the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pChannelName - new name of the function output channel +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetChannelNamePtr) (Lib3MF_LevelSet pLevelSet, const char * pChannelName); + +/** +* Sets the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetMinFeatureSizePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double dMinFeatureSize); + +/** +* Returns the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetMinFeatureSizePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double * pMinFeatureSize); + +/** +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dFallBackValue - fallback value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetFallBackValuePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double dFallBackValue); + +/** +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pFallBackValue - fallback value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetFallBackValuePtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_double * pFallBackValue); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] bMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetMeshBBoxOnlyPtr) (Lib3MF_LevelSet pLevelSet, bool bMeshBBoxOnly); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetMeshBBoxOnlyPtr) (Lib3MF_LevelSet pLevelSet, bool * pMeshBBoxOnly); + +/** +* Sets the mesh to use as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetMeshPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject pTheMesh); + +/** +* Returns the mesh that is used as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetMeshPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject * pTheMesh); + +/** +* Retrieves the VolumeData this Object. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheVolumeData - the VolumeData of this Object +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_GetVolumeDataPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this LevelSet. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFLevelSet_SetVolumeDataPtr) (Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData pTheVolumeData); + /************************************************************************************************************************* Class definition for BeamLattice **************************************************************************************************************************/ @@ -1383,784 +1599,3179 @@ typedef Lib3MFResult (*PLib3MFBeamLattice_AddBeamSetPtr) (Lib3MF_BeamLattice pBe typedef Lib3MFResult (*PLib3MFBeamLattice_GetBeamSetPtr) (Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF_BeamSet * pBeamSet); /************************************************************************************************************************* - Class definition for Component + Class definition for FunctionReference **************************************************************************************************************************/ /** -* Returns the Resource Instance of the component. +* Returns the UniqueResourceID of the Function. Only functions with a 'pos'-input are allowed. * -* @param[in] pComponent - Component instance. -* @param[out] pObjectResource - filled with the Resource Instance. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourcePtr) (Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetFunctionResourceIDPtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 * pUniqueResourceID); /** -* Returns the UniqueResourceID of the component. +* Sets the UniqueResourceID to refer to. * -* @param[in] pComponent - Component instance. -* @param[out] pUniqueResourceID - returns the UniqueResourceID. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nUniqueResourceID - UniqueResourceID of the function * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourceIDPtr) (Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetFunctionResourceIDPtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 nUniqueResourceID); /** -* returns, whether a component has a UUID and, if true, the component's UUID +* Returns the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[out] pHasUUID - flag whether the component has a UUID -* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) -* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pTransform - the transformation matrix * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetUUIDPtr) (Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetTransformPtr) (Lib3MF_FunctionReference pFunctionReference, sLib3MFTransform * pTransform); /** -* sets the component's UUID +* Sets the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pTransform - new transformation matrix * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_SetUUIDPtr) (Lib3MF_Component pComponent, const char * pUUID); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetTransformPtr) (Lib3MF_FunctionReference pFunctionReference, const sLib3MFTransform * pTransform); /** -* Returns, if the component has a different transformation than the identity matrix +* Returns the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_HasTransformPtr) (Lib3MF_Component pComponent, bool * pHasTransform); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetChannelNamePtr) (Lib3MF_FunctionReference pFunctionReference, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); /** -* Returns the transformation matrix of the component. +* Sets the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pTransform - filled with the component transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pChannelName - new name of the function output channel * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_GetTransformPtr) (Lib3MF_Component pComponent, sLib3MFTransform * pTransform); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetChannelNamePtr) (Lib3MF_FunctionReference pFunctionReference, const char * pChannelName); /** -* Sets the transformation matrix of the component. +* Sets the minimal feature size as a hint for the function evaluator * -* @param[in] pComponent - Component instance. -* @param[in] pTransform - new transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponent_SetTransformPtr) (Lib3MF_Component pComponent, const sLib3MFTransform * pTransform); - -/************************************************************************************************************************* - Class definition for ComponentsObject -**************************************************************************************************************************/ +typedef Lib3MFResult (*PLib3MFFunctionReference_SetMinFeatureSizePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dMinFeatureSize); /** -* Adds a new component to a components object. +* Returns the minimal feature size as a hint for the function evaluator * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] pObjectResource - object to add as component. Must not lead to circular references! -* @param[in] pTransform - optional transform matrix for the component. -* @param[out] pComponentInstance - new component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponentsObject_AddComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const sLib3MFTransform * pTransform, Lib3MF_Component * pComponentInstance); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetMinFeatureSizePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pMinFeatureSize); /** -* Retrieves a component from a component object. +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) -* @param[out] pComponentInstance - component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dFallBackValue - fallback value * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); +typedef Lib3MFResult (*PLib3MFFunctionReference_SetFallBackValuePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dFallBackValue); /** -* Retrieves a component count of a component object. +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[out] pCount - returns the component count +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pFallBackValue - fallback value * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentCountPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFFunctionReference_GetFallBackValuePtr) (Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pFallBackValue); /************************************************************************************************************************* - Class definition for BeamSet + Class definition for VolumeDataColor **************************************************************************************************************************/ -/** -* Sets a beamset's name string -* -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pName - new name of the beamset. -* @return error code or 0 (success) -*/ -typedef Lib3MFResult (*PLib3MFBeamSet_SetNamePtr) (Lib3MF_BeamSet pBeamSet, const char * pName); +/************************************************************************************************************************* + Class definition for MaterialMapping +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for VolumeDataComposite +**************************************************************************************************************************/ /** -* Retrieves a beamset's name string +* Returns the BaseMaterialGroup used within this volume data item * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pBaseMaterialGroupInstance - The BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetNamePtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); /** -* Sets a beamset's identifier string +* Sets the BaseMaterialGroup to use within this volume data item. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pIdentifier - new name of the beamset. +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pBaseMaterialGroupInstance - The new BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_SetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const char * pIdentifier); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance); /** -* Retrieves a beamset's identifier string +* Returns the number of material mappings of this VolumeDataComposite element * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) -* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pCount - the number of material mappings. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 * pCount); /** -* Retrieves the reference count of a beamset +* Returns MaterialMappting with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the reference count +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - Index of the MaterialMapping in question. +* @param[out] pTheMaterialMapping - MaterialMapping used in this element * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_GetMaterialMappingPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Sets the references of a beamset +* Adds a the MaterialMapping * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pTransform - new transformation matrix +* @param[out] pTheMaterialMapping - The new MaterialMapping * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_SetReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_AddMaterialMappingPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, const sLib3MFTransform * pTransform, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Retrieves the references of a beamset +* Removes the MaterialMapping with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - The index of the MaterialMapping to be removed. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr) (Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex); + +/************************************************************************************************************************* + Class definition for VolumeDataProperty +**************************************************************************************************************************/ /** -* Retrieves the ball reference count of a beamset +* Gets the qualified name of this property. * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the ball reference count +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] nPropertyNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pPropertyNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPropertyNameBuffer - buffer of The qualified name of this property., may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFVolumeDataProperty_GetNamePtr) (Lib3MF_VolumeDataProperty pVolumeDataProperty, const Lib3MF_uint32 nPropertyNameBufferSize, Lib3MF_uint32* pPropertyNameNeededChars, char * pPropertyNameBuffer); /** -* Sets the ball references of a beamset +* Sets whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] bIsRequired - New value for whether this property is required to process this 3MF document instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_SetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataProperty_SetIsRequiredPtr) (Lib3MF_VolumeDataProperty pVolumeDataProperty, bool bIsRequired); /** -* Retrieves the ball references of a beamset +* Returns whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[out] pIsRequired - Is this property required to process this 3MF document instance? * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); +typedef Lib3MFResult (*PLib3MFVolumeDataProperty_IsRequiredPtr) (Lib3MF_VolumeDataProperty pVolumeDataProperty, bool * pIsRequired); /************************************************************************************************************************* - Class definition for BaseMaterialGroup + Class definition for VolumeData **************************************************************************************************************************/ /** -* Retrieves the count of base materials in the material group. +* Returns the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[out] pCount - returns the count of base materials. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - filled with the VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetCountPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFVolumeData_GetCompositePtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* returns all the PropertyIDs of all materials in this group +* Creates a new VolumeDataComposite for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - The new VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFVolumeData_CreateNewCompositePtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* Adds a new material to the material group +* Removes the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] pName - new name of the base material. -* @param[in] pDisplayColor - Display color of the material -* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_AddMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const sLib3MFColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFVolumeData_RemoveCompositePtr) (Lib3MF_VolumeData pVolumeData); /** -* Removes a material from the material group. +* Returns the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheColorData - filled with the VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_RemoveMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFVolumeData_GetColorPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataColor * pTheColorData); /** -* Returns the base material's name +* Creates a new VolumeDataColor for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheColorData - The new VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +typedef Lib3MFResult (*PLib3MFVolumeData_CreateNewColorPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataColor * pTheColorData); /** -* Sets a base material's name +* Removes the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pName - new name of the base material. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); +typedef Lib3MFResult (*PLib3MFVolumeData_RemoveColorPtr) (Lib3MF_VolumeData pVolumeData); /** -* Sets a base material's display color. +* Returns the number of VolumeDataProperty * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pCount - the number of VolumeDataProperty-elements within this VolumdeData * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); +typedef Lib3MFResult (*PLib3MFVolumeData_GetPropertyCountPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 * pCount); /** -* Returns a base material's display color. +* Returns the VolumeDataProperty at a given Index * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[out] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be returned. +* @param[out] pTheVolumeDataProperty - the VolumeDataProperty at the given index. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); +typedef Lib3MFResult (*PLib3MFVolumeData_GetPropertyPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Adds a new VolumeDataProperty from a Function +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pName - the qualified name (namespace+name) of the Property +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheVolumeDataProperty - the newly created VolumeDataProperty. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFVolumeData_AddPropertyFromFunctionPtr) (Lib3MF_VolumeData pVolumeData, const char * pName, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Removes the VolumeDataProperty with a given index +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be removed. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFVolumeData_RemovePropertyPtr) (Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex); /************************************************************************************************************************* - Class definition for ColorGroup + Class definition for Component **************************************************************************************************************************/ /** -* Retrieves the count of base materials in this Color Group. +* Returns the Resource Instance of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[out] pCount - returns the count of colors within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pObjectResource - filled with the Resource Instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_GetCountPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourcePtr) (Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); /** -* returns all the PropertyIDs of all colors within this group +* Returns the UniqueResourceID of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @param[in] pComponent - Component instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_GetAllPropertyIDsPtr) (Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFComponent_GetObjectResourceIDPtr) (Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); /** -* Adds a new value. +* returns, whether a component has a UUID and, if true, the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] pTheColor - The new color -* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pHasUUID - flag whether the component has a UUID +* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) +* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_AddColorPtr) (Lib3MF_ColorGroup pColorGroup, const sLib3MFColor * pTheColor, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFComponent_GetUUIDPtr) (Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); /** -* Removes a color from the color group. +* sets the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @param[in] pComponent - Component instance. +* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_RemoveColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFComponent_SetUUIDPtr) (Lib3MF_Component pComponent, const char * pUUID); /** -* Sets a color value. +* Returns, if the component has a different transformation than the identity matrix * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[in] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_SetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); +typedef Lib3MFResult (*PLib3MFComponent_HasTransformPtr) (Lib3MF_Component pComponent, bool * pHasTransform); /** -* Sets a color value. +* Returns the transformation matrix of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[out] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pTransform - filled with the component transformation matrix * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFColorGroup_GetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); +typedef Lib3MFResult (*PLib3MFComponent_GetTransformPtr) (Lib3MF_Component pComponent, sLib3MFTransform * pTransform); + +/** +* Sets the transformation matrix of the component. +* +* @param[in] pComponent - Component instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComponent_SetTransformPtr) (Lib3MF_Component pComponent, const sLib3MFTransform * pTransform); /************************************************************************************************************************* - Class definition for Texture2DGroup + Class definition for ComponentsObject **************************************************************************************************************************/ /** -* Retrieves the count of tex2coords in the Texture2DGroup. +* Adds a new component to a components object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pCount - returns the count of tex2coords. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] pObjectResource - object to add as component. Must not lead to circular references! +* @param[in] pTransform - optional transform matrix for the component. +* @param[out] pComponentInstance - new component instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetCountPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFComponentsObject_AddComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const sLib3MFTransform * pTransform, Lib3MF_Component * pComponentInstance); /** -* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* Retrieves a component from a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) +* @param[out] pComponentInstance - component instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); /** -* Adds a new tex2coord to the Texture2DGroup +* Retrieves a component count of a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. -* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[out] pCount - returns the component count * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_AddTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const sLib3MFTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFComponentsObject_GetComponentCountPtr) (Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); + +/************************************************************************************************************************* + Class definition for BeamSet +**************************************************************************************************************************/ /** -* Obtains a tex2coord to the Texture2DGroup +* Sets a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. -* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pName - new name of the beamset. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, sLib3MFTex2Coord * pUVCoordinate); +typedef Lib3MFResult (*PLib3MFBeamSet_SetNamePtr) (Lib3MF_BeamSet pBeamSet, const char * pName); /** -* Removes a tex2coords from the Texture2DGroup. +* Retrieves a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_RemoveTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFBeamSet_GetNamePtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); /** -* Obtains the texture2D instance of this group. +* Sets a beamset's identifier string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pIdentifier - new name of the beamset. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTexture2DPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); +typedef Lib3MFResult (*PLib3MFBeamSet_SetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const char * pIdentifier); + +/** +* Retrieves a beamset's identifier string +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetIdentifierPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Retrieves the reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the reference count +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_SetReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the ball reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the ball reference count +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferenceCountPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_SetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); + +/** +* Retrieves the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBeamSet_GetBallReferencesPtr) (Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); /************************************************************************************************************************* - Class definition for CompositeMaterials + Class definition for BaseMaterialGroup **************************************************************************************************************************/ /** -* Retrieves the count of Composite-s in the CompositeMaterials. +* Retrieves the count of base materials in the material group. * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pCount - returns the count of Composite-s +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[out] pCount - returns the count of base materials. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCountPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetCountPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); /** -* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* returns all the PropertyIDs of all materials in this group * -* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetAllPropertyIDsPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new material to the material group +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] pName - new name of the base material. +* @param[in] pDisplayColor - Display color of the material +* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_AddMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const sLib3MFColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a material from the material group. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_RemoveMaterialPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); + +/** +* Returns the base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* Sets a base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pName - new name of the base material. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetNamePtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); + +/** +* Sets a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_SetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); + +/** +* Returns a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[out] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFBaseMaterialGroup_GetDisplayColorPtr) (Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); + +/************************************************************************************************************************* + Class definition for ColorGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of base materials in this Color Group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[out] pCount - returns the count of colors within this color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_GetCountPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all colors within this group +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_GetAllPropertyIDsPtr) (Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] pTheColor - The new color +* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_AddColorPtr) (Lib3MF_ColorGroup pColorGroup, const sLib3MFColor * pTheColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a color from the color group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_RemoveColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[in] pTheColor - The color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_SetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[out] pTheColor - The color +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFColorGroup_GetColorPtr) (Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor); + +/************************************************************************************************************************* + Class definition for Texture2DGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of tex2coords in the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pCount - returns the count of tex2coords. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetCountPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetAllPropertyIDsPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_AddTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, const sLib3MFTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); + +/** +* Obtains a tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. +* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, sLib3MFTex2Coord * pUVCoordinate); + +/** +* Removes a tex2coords from the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_RemoveTex2CoordPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); + +/** +* Obtains the texture2D instance of this group. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2DGroup_GetTexture2DPtr) (Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); + +/************************************************************************************************************************* + Class definition for CompositeMaterials +**************************************************************************************************************************/ + +/** +* Retrieves the count of Composite-s in the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pCount - returns the count of Composite-s +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCountPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. * @param[in] nPropertyIDsBufferSize - Number of elements in buffer * @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. * @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the Composite-Mixing Values in the CompositeMaterials. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetAllPropertyIDsPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); + +/** +* Adds a new Composite-Mixing Values to the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite +* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_AddCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const sLib3MFCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_RemoveCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); + +/** +* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, sLib3MFCompositeConstituent * pCompositeBuffer); + +/************************************************************************************************************************* + Class definition for MultiPropertyGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the count of MultiProperty-s +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new MultiProperty to the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. +* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Sets the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Removes a MultiProperty from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); + +/** +* Retrieves the number of layers of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the number of layers +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup +* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const sLib3MFMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); + +/** +* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried +* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, sLib3MFMultiPropertyLayer * pTheLayer); + +/** +* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); + +/************************************************************************************************************************* + Class definition for Image3D +**************************************************************************************************************************/ + +/** +* returns the name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of the name of this Image3D, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3D_GetNamePtr) (Lib3MF_Image3D pImage3D, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* sets a new name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] pName - the new name of this Image3D +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3D_SetNamePtr) (Lib3MF_Image3D pImage3D, const char * pName); + +/** +* Retrieves, if this Image3D is a ImageStack +* +* @param[in] pImage3D - Image3D instance. +* @param[out] pIsImageStack - returns, whether the Image3D is an ImageStack +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImage3D_IsImageStackPtr) (Lib3MF_Image3D pImage3D, bool * pIsImageStack); + +/************************************************************************************************************************* + Class definition for ImageStack +**************************************************************************************************************************/ + +/** +* Retrieves the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pRowCount - number of rows +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetRowCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pRowCount); + +/** +* Sets the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nRowCount - number of rows +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_SetRowCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nRowCount); + +/** +* Retrieves the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pColumnCount - number of columns +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetColumnCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pColumnCount); + +/** +* Sets the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nColumnCount - number of columns +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_SetColumnCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nColumnCount); + +/** +* Retrieves the number of images in the stack. +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pSheetCount - number of images +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetSheetCountPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pSheetCount); + +/** +* Retrieves a sheet of the stack. Raises an error if sheet is not set. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_GetSheetPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment * pSheet); + +/** +* Sets a sheet to an existing attachment. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_SetSheetPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment pSheet); + +/** +* Creates a new sheet attachment with empty data. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_CreateEmptySheetPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a memory buffer. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] nDataBufferSize - Number of elements in buffer +* @param[in] pDataBuffer - uint8 buffer of binary image data +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_CreateSheetFromBufferPtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_uint64 nDataBufferSize, const Lib3MF_uint8 * pDataBuffer, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a file on disk. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] pFileName - file name to read from +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImageStack_CreateSheetFromFilePtr) (Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, const char * pFileName, Lib3MF_Attachment * pSheet); + +/************************************************************************************************************************* + Class definition for Attachment +**************************************************************************************************************************/ + +/** +* Retrieves an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_GetPathPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new path of the attachment. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_SetPathPtr) (Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Returns the PackagePart that is this attachment. +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pPackagePart - The PackagePart of this attachment. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_PackagePartPtr) (Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); + +/** +* Retrieves an attachment's relationship type +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_GetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's relationship type. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new relationship type string. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_SetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Writes out the attachment as file. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to write into. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_WriteToFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to read from. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_ReadFromFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pTheReadCallback - Callback to call for reading a data chunk +* @param[in] nStreamSize - number of bytes the callback returns +* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. +* @param[in] pUserData - Userdata that is passed to the callback function +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_ReadFromCallbackPtr) (Lib3MF_Attachment pAttachment, Lib3MFReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MFSeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); + +/** +* Retrieves the size of the attachment stream +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pStreamSize - the stream size +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_GetStreamSizePtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); + +/** +* Writes out the attachment into a buffer +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_WriteToBufferPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); + +/** +* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFAttachment_ReadFromBufferPtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); + +/************************************************************************************************************************* + Class definition for Texture2D +**************************************************************************************************************************/ + +/** +* Retrieves the attachment located at the path of the texture. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); + +/** +* Sets the texture's package path to the path of the attachment. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pContentType - returns content type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetContentTypePtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureType * pContentType); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eContentType - new Content Type +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetContentTypePtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureType eContentType); + +/** +* Retrieves a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pTileStyleU - returns tilestyle type enum. +* @param[out] pTileStyleV - returns tilestyle type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV); + +/** +* Sets a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eTileStyleU - new tilestyle type enum. +* @param[in] eTileStyleV - new tilestyle type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV); + +/** +* Retrieves a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pFilter - returns filter type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_GetFilterPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter * pFilter); + +/** +* Sets a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eFilter - sets new filter type enum. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTexture2D_SetFilterPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter eFilter); + +/************************************************************************************************************************* + Class definition for ImplicitPort +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetIdentifierPtr) (Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetIdentifierPtr) (Lib3MF_ImplicitPort pImplicitPort, const char * pIdentifier); + +/** +* Retrieves the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetDisplayNamePtr) (Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetDisplayNamePtr) (Lib3MF_ImplicitPort pImplicitPort, const char * pDisplayName); + +/** +* Sets the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] eImplicitPortType - the type +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetTypePtr) (Lib3MF_ImplicitPort pImplicitPort, eLib3MFImplicitPortType eImplicitPortType); + +/** +* Retrieves the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[out] pImplicitPortType - the type +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetTypePtr) (Lib3MF_ImplicitPort pImplicitPort, eLib3MFImplicitPortType * pImplicitPortType); + +/** +* Retrieves the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nReferenceBufferSize - size of the buffer (including trailing 0) +* @param[out] pReferenceNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pReferenceBuffer - buffer of the reference, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_GetReferencePtr) (Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nReferenceBufferSize, Lib3MF_uint32* pReferenceNeededChars, char * pReferenceBuffer); + +/** +* Sets the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pReference - the reference +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPort_SetReferencePtr) (Lib3MF_ImplicitPort pImplicitPort, const char * pReference); + +/************************************************************************************************************************* + Class definition for Iterator +**************************************************************************************************************************/ + +/** +* Iterates to the next item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasNext - Iterates to the next item in the list. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFIterator_MoveNextPtr) (Lib3MF_Iterator pIterator, bool * pHasNext); + +/** +* Iterates to the previous item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasPrevious - Iterates to the previous item in the list. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFIterator_MovePreviousPtr) (Lib3MF_Iterator pIterator, bool * pHasPrevious); + +/** +* Returns the number of items the iterator captures. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pCount - returns the number of items the iterator captures. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFIterator_CountPtr) (Lib3MF_Iterator pIterator, Lib3MF_uint64 * pCount); + +/************************************************************************************************************************* + Class definition for ImplicitPortIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pImplicitPortIterator - ImplicitPortIterator instance. +* @param[out] pPort - The current element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitPortIterator_GetCurrentPtr) (Lib3MF_ImplicitPortIterator pImplicitPortIterator, Lib3MF_ImplicitPort * pPort); + +/************************************************************************************************************************* + Class definition for ImplicitNode +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetIdentifierPtr) (Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_SetIdentifierPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier); + +/** +* Retrieves the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetDisplayNamePtr) (Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_SetDisplayNamePtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pDisplayName); + +/** +* Retrieves the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nTagBufferSize - size of the buffer (including trailing 0) +* @param[out] pTagNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pTagBuffer - buffer of the tag, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetTagPtr) (Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nTagBufferSize, Lib3MF_uint32* pTagNeededChars, char * pTagBuffer); + +/** +* Sets the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pTag - the tag +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_SetTagPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pTag); + +/** +* Retrieves the type of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pType - the type of the node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetNodeTypePtr) (Lib3MF_ImplicitNode pImplicitNode, eLib3MFImplicitNodeType * pType); + +/** +* Add an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[out] pPort - +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_AddInputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator for the inputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetInputsPtr) (Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Add an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[out] pPort - +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_AddOutputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator the outputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_GetOutputsPtr) (Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Retrieves an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_FindInputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_FindOutputPtr) (Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/** +* Checks if the types of the input and output ports are valid for the node type +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pValid - true, if the types are valid +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitNode_AreTypesValidPtr) (Lib3MF_ImplicitNode pImplicitNode, bool * pValid); + +/************************************************************************************************************************* + Class definition for OneInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pInput - the input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFOneInputNode_GetInputAPtr) (Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves the output +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFOneInputNode_GetOutputResultPtr) (Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for SinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcSinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcCosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SinhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CoshNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for RoundNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CeilNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FloorNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SignNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FractNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for AbsNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ExpNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LogNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log10Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LengthNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TransposeNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for InverseNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SqrtNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ResourceIdNode +**************************************************************************************************************************/ + +/** +* Sets the Resource that the resourceid attribute of the node will point to +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[in] pResource - the resource +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFResourceIdNode_SetResourcePtr) (Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource pResource); + +/** +* Retrieves the resource of the node +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pResource - the resource +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFResourceIdNode_GetResourcePtr) (Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource * pResource); + +/** +* Retrieves the output +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFResourceIdNode_GetOutputValuePtr) (Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for TwoInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pTwoInputNode - TwoInputNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFTwoInputNode_GetInputBPtr) (Lib3MF_TwoInputNode pTwoInputNode, Lib3MF_ImplicitPort * pB); + +/************************************************************************************************************************* + Class definition for AdditionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SubtractionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DivisionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DotNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CrossNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTan2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MatVecMultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MaxNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FmodNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ModNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for PowNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SelectNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFSelectNode_GetInputBPtr) (Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pB); + +/** +* Retrieves the third input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pC - the third input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFSelectNode_GetInputCPtr) (Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pC); + +/** +* Retrieves the fourth input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pD - the fourth input +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFSelectNode_GetInputDPtr) (Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pD); + +/************************************************************************************************************************* + Class definition for ClampNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the lower limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMin - the input for the lower limit +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFClampNode_GetInputMinPtr) (Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMin); + +/** +* Retrieves the input for the upper limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMax - the input for the upper limit +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFClampNode_GetInputMaxPtr) (Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMax); + +/************************************************************************************************************************* + Class definition for ComposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the x component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pX - the input for the x component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetInputXPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the input for the y component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pY - the input for the y component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetInputYPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the input for the z component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pZ - the input for the z component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetInputZPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/** +* Retrieves the output +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeVectorNode_GetOutputResultPtr) (Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for VectorFromScalarNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DecomposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pA - the input port for the vector to decompose +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetInputAPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pA); + +/** +* Retrieves the output for the x component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pX - the output for the x component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetOutputXPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the output for the y component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pY - the output for the y component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetOutputYPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the output for the z component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pZ - the output for the z component +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFDecomposeVectorNode_GetOutputZPtr) (Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/************************************************************************************************************************* + Class definition for ComposeMatrixNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the element 0 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM00 - the input for the m00 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM00Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM00); + +/** +* Retrieves the input for the element 0 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM01 - the input for the m01 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM01Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM01); + +/** +* Retrieves the input for the element 0 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM02 - the input for the m02 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM02Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM02); + +/** +* Retrieves the input for the element 0 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM03 - the input for the m03 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM03Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM03); + +/** +* Retrieves the input for the element 1 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM10 - the input for the m10 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM10Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM10); + +/** +* Retrieves the input for the element 1 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM11 - the input for the m11 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM11Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM11); + +/** +* Retrieves the input for the element 1 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM12 - the input for the m12 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM12Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM12); + +/** +* Retrieves the input for the element 1 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM13 - the input for the m3 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM13Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM13); + +/** +* Retrieves the input for the element 2 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM20 - the input for the m2 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM20Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM20); + +/** +* Retrieves the input for the element 2 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM21 - +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM21Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM21); + +/** +* Retrieves the input for the element 2 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM22 - the input for the m22 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM22Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM22); + +/** +* Retrieves the input for the element 2 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM23 - the input for the m23 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM23Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM23); + +/** +* Retrieves the input for the element 3 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM30 - the input for the m30 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM30Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM30); + +/** +* Retrieves the input for the element 3 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM31 - the input for the m31 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM31Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM31); + +/** +* Retrieves the input for the element 3 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM32 - the input for the m32 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM32Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM32); + +/** +* Retrieves the input for the element 3 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM33 - the input for the m33 element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetInputM33Ptr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM33); + +/** +* Retrieves the output +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFComposeMatrixNode_GetOutputResultPtr) (Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromRowsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow0 - the input for the first row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputAPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow0); + +/** +* Retrieves the input for the second row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow1 - the input for the second row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputBPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow1); + +/** +* Retrieves the input for the third row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow2 - the input for the third row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputCPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow2); + +/** +* Retrieves the input for the fourth row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow3 - the input for the fourth row +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetInputDPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromRowsNode_GetOutputResultPtr) (Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromColumnsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn0 - the input for the first column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputAPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn0); + +/** +* Retrieves the input for the second column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn1 - the input for the second column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputBPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn1); + +/** +* Retrieves the input for the third column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn2 - the input for the third column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputCPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn2); + +/** +* Retrieves the input for the fourth column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn3 - the input for the fourth column +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetInputDPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMatrixFromColumnsNode_GetOutputResultPtr) (Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for ConstantNode +**************************************************************************************************************************/ + +/** +* Sets the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[in] dValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstantNode_SetConstantPtr) (Lib3MF_ConstantNode pConstantNode, Lib3MF_double dValue); + +/** +* Retrieves the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstantNode_GetConstantPtr) (Lib3MF_ConstantNode pConstantNode, Lib3MF_double * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstantNode_GetOutputValuePtr) (Lib3MF_ConstantNode pConstantNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for ConstVecNode +**************************************************************************************************************************/ + +/** +* Sets the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstVecNode_SetVectorPtr) (Lib3MF_ConstVecNode pConstVecNode, const sLib3MFVector * pValue); + +/** +* Retrieves the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstVecNode_GetVectorPtr) (Lib3MF_ConstVecNode pConstVecNode, sLib3MFVector * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pVector - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstVecNode_GetOutputVectorPtr) (Lib3MF_ConstVecNode pConstVecNode, Lib3MF_ImplicitPort * pVector); + +/************************************************************************************************************************* + Class definition for ConstMatNode +**************************************************************************************************************************/ + +/** +* Sets the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstMatNode_SetMatrixPtr) (Lib3MF_ConstMatNode pConstMatNode, const sLib3MFMatrix4x4 * pValue); + +/** +* Retrieves the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pValue - the matrix +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstMatNode_GetMatrixPtr) (Lib3MF_ConstMatNode pConstMatNode, sLib3MFMatrix4x4 * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pMatrix - the output +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFConstMatNode_GetOutputMatrixPtr) (Lib3MF_ConstMatNode pConstMatNode, Lib3MF_ImplicitPort * pMatrix); + +/************************************************************************************************************************* + Class definition for MeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshNode_GetInputMeshPtr) (Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshNode_GetInputPosPtr) (Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pDistance - the output port for the signed distance to the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFMeshNode_GetOutputDistancePtr) (Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for UnsignedMeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFUnsignedMeshNode_GetInputMeshPtr) (Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFUnsignedMeshNode_GetInputPosPtr) (Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pDistance - the output port for the unsigned distance to the mesh +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFUnsignedMeshNode_GetOutputDistancePtr) (Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for FunctionCallNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the function id +* +* @param[in] pFunctionCallNode - FunctionCallNode instance. +* @param[out] pFunction - the input port for the function +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionCallNode_GetInputFunctionIDPtr) (Lib3MF_FunctionCallNode pFunctionCallNode, Lib3MF_ImplicitPort * pFunction); + +/************************************************************************************************************************* + Class definition for NodeIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pNodeIterator - NodeIterator instance. +* @param[out] pNode - The current element +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFNodeIterator_GetCurrentPtr) (Lib3MF_NodeIterator pNodeIterator, Lib3MF_ImplicitNode * pNode); + +/************************************************************************************************************************* + Class definition for Function +**************************************************************************************************************************/ + +/** +* Retrieves the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_GetDisplayNamePtr) (Lib3MF_Function pFunction, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_SetDisplayNamePtr) (Lib3MF_Function pFunction, const char * pDisplayName); + +/** +* Add an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_AddInputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, eLib3MFImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the list of inputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_GetInputsPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an input +* +* @param[in] pFunction - Function instance. +* @param[in] pInput - The input to be removed +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_RemoveInputPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPort pInput); + +/** +* Add an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_AddOutputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, eLib3MFImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the outputs +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_GetOutputsPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an output +* +* @param[in] pFunction - Function instance. +* @param[in] pOutput - The output to be removed +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_RemoveOutputPtr) (Lib3MF_Function pFunction, Lib3MF_ImplicitPort pOutput); + +/** +* Retrieves an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_FindInputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunction_FindOutputPtr) (Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/************************************************************************************************************************* + Class definition for ImplicitFunction +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_GetIdentifierPtr) (Lib3MF_ImplicitFunction pImplicitFunction, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_SetIdentifierPtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier); + +/** +* Add a node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] eNodeType - the type of the node +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, eLib3MFImplicitNodeType eNodeType, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ImplicitNode * pNode); + +/** +* Add a SinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSinNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinNode * pNode); + +/** +* Add a CosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCosNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CosNode * pNode); + +/** +* Add a TanNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddTanNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanNode * pNode); + +/** +* Add a ArcSinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddArcSinNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcSinNode * pNode); + +/** +* Add a ArcCosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddArcCosNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcCosNode * pNode); + +/** +* Add a ArcTan2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddArcTan2NodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcTan2Node * pNode); + +/** +* Add a SinhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSinhNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinhNode * pNode); + +/** +* Add a CoshNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCoshNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CoshNode * pNode); + +/** +* Add a TanhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddTanhNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanhNode * pNode); + +/** +* Add a RoundNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddRoundNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_RoundNode * pNode); + +/** +* Add a CeilNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCeilNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CeilNode * pNode); + +/** +* Add a FloorNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFloorNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FloorNode * pNode); + +/** +* Add a SignNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSignNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SignNode * pNode); + +/** +* Add a FractNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFractNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FractNode * pNode); + +/** +* Add a AbsNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddAbsNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AbsNode * pNode); + +/** +* Add a ExpNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddExpNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ExpNode * pNode); + +/** +* Add a LogNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLogNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_LogNode * pNode); + +/** +* Add a Log2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLog2NodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log2Node * pNode); + +/** +* Add a Log10Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLog10NodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log10Node * pNode); + +/** +* Add a LengthNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLengthNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_LengthNode * pNode); + +/** +* Add a TransposeNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddTransposeNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TransposeNode * pNode); + +/** +* Add a InverseNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_InverseNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_InverseNode * pNode); + +/** +* Add a SqrtNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSqrtNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SqrtNode * pNode); + +/** +* Add a ResourceIdNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddResourceIdNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ResourceIdNode * pNode); + +/** +* Add an AdditionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddAdditionNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AdditionNode * pNode); + +/** +* Add a SubtractionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSubtractionNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SubtractionNode * pNode); + +/** +* Add a MultiplicationNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMultiplicationNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MultiplicationNode * pNode); + +/** +* Add a DivisionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddDivisionNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_DivisionNode * pNode); + +/** +* Add a DotNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddDotNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DotNode * pNode); + +/** +* Add a CrossNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddCrossNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_CrossNode * pNode); /** -* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* Add a MatVecMultiplicationNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetBaseMaterialGroupPtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatVecMultiplicationNode * pNode); /** -* Adds a new Composite-Mixing Values to the CompositeMaterials. +* Add a MinNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite -* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_AddCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const sLib3MFCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMinNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MinNode * pNode); /** -* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* Add a MaxNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_RemoveCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMaxNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MaxNode * pNode); /** -* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* Add a FmodNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFCompositeMaterials_GetCompositePtr) (Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, sLib3MFCompositeConstituent * pCompositeBuffer); - -/************************************************************************************************************************* - Class definition for MultiPropertyGroup -**************************************************************************************************************************/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFmodNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FmodNode * pNode); /** -* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* Add a PowNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the count of MultiProperty-s +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddPowNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_PowNode * pNode); /** -* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* Add a SelectNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetAllPropertyIDsPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddSelectNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SelectNode * pNode); /** -* Adds a new MultiProperty to the MultiPropertyGroup. +* Add a ClampNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. -* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddClampNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ClampNode * pNode); /** -* Sets the PropertyIDs of a MultiProperty. +* Add a ComposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_SetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddComposeVectorNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeVectorNode * pNode); /** -* Obtains the PropertyIDs of a MultiProperty. +* Add a VectorFromScalar * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddVectorFromScalarNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_VectorFromScalarNode * pNode); /** -* Removes a MultiProperty from this MultiPropertyGroup. +* Add a DecomposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveMultiPropertyPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddDecomposeVectorNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DecomposeVectorNode * pNode); /** -* Retrieves the number of layers of this MultiPropertyGroup. +* Add a ComposeMatrixNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the number of layers +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerCountPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddComposeMatrixNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeMatrixNode * pNode); /** -* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* Add a MatrixFromRowsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup -* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_AddLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const sLib3MFMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromRowsNode * pNode); /** -* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* Add a MatrixFromColumnsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried -* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_GetLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, sLib3MFMultiPropertyLayer * pTheLayer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromColumnsNode * pNode); /** -* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* Add a ConstantNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFMultiPropertyGroup_RemoveLayerPtr) (Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); - -/************************************************************************************************************************* - Class definition for Attachment -**************************************************************************************************************************/ +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddConstantNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstantNode * pNode); /** -* Retrieves an attachment's package path. This function will be removed in a later release. +* Add a ConstVecNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_GetPathPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddConstVecNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstVecNode * pNode); /** -* Sets an attachment's package path. This function will be removed in a later release. +* Add a ConstMatNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new path of the attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_SetPathPtr) (Lib3MF_Attachment pAttachment, const char * pPath); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddConstMatNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstMatNode * pNode); /** -* Returns the PackagePart that is this attachment. +* Add a MeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[out] pPackagePart - The PackagePart of this attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_PackagePartPtr) (Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddMeshNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MeshNode * pNode); /** -* Retrieves an attachment's relationship type +* Add a UnsignedMeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_GetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddUnsignedMeshNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_UnsignedMeshNode * pNode); /** -* Sets an attachment's relationship type. +* Add a FunctionCallNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new relationship type string. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_SetRelationShipTypePtr) (Lib3MF_Attachment pAttachment, const char * pPath); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddFunctionCallNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_FunctionCallNode * pNode); /** -* Writes out the attachment as file. +* Retrieves the nodes * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to write into. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[out] pIterator - iterator for the list of nodes * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_WriteToFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); +typedef Lib3MFResult (*PLib3MFImplicitFunction_GetNodesPtr) (Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_NodeIterator * pIterator); /** -* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Removes a node * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to read from. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pNode - The node to be removed * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_ReadFromFilePtr) (Lib3MF_Attachment pAttachment, const char * pFileName); +typedef Lib3MFResult (*PLib3MFImplicitFunction_RemoveNodePtr) (Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitNode pNode); /** -* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[in] pTheReadCallback - Callback to call for reading a data chunk -* @param[in] nStreamSize - number of bytes the callback returns -* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. -* @param[in] pUserData - Userdata that is passed to the callback function +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - the source port +* @param[in] pTarget - the target port * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_ReadFromCallbackPtr) (Lib3MF_Attachment pAttachment, Lib3MFReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MFSeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLinkPtr) (Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitPort pSource, Lib3MF_ImplicitPort pTarget); /** -* Retrieves the size of the attachment stream +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[out] pStreamSize - the stream size +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - name of the source port in the format nodename.portname +* @param[in] pTarget - name of the target port in the format nodename.portname * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_GetStreamSizePtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); +typedef Lib3MFResult (*PLib3MFImplicitFunction_AddLinkByNamesPtr) (Lib3MF_ImplicitFunction pImplicitFunction, const char * pSource, const char * pTarget); /** -* Writes out the attachment into a buffer +* Clears the function * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_WriteToBufferPtr) (Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_ClearPtr) (Lib3MF_ImplicitFunction pImplicitFunction); /** -* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* Sorts the nodes topologically * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFAttachment_ReadFromBufferPtr) (Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); +typedef Lib3MFResult (*PLib3MFImplicitFunction_SortNodesTopologicallyPtr) (Lib3MF_ImplicitFunction pImplicitFunction); /************************************************************************************************************************* - Class definition for Texture2D + Class definition for FunctionFromImage3D **************************************************************************************************************************/ /** -* Retrieves the attachment located at the path of the texture. +* Returns the selected 3D image. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pImage3D - image instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetImage3DPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D * pImage3D); /** -* Sets the texture's package path to the path of the attachment. +* Sets the 3D image of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] pImage3D - image instance * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetAttachmentPtr) (Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetImage3DPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D pImage3D); /** -* Retrieves a texture's content type. +* Sets the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pContentType - returns content type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eFilter - texture filter * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetContentTypePtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureType * pContentType); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetFilterPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureFilter eFilter); /** -* Retrieves a texture's content type. +* Returns the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eContentType - new Content Type +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pFilter - texture filter * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetContentTypePtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureType eContentType); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetFilterPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureFilter * pFilter); /** -* Retrieves a texture's tilestyle type. +* Sets the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pTileStyleU - returns tilestyle type enum. -* @param[out] pTileStyleV - returns tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eTileStyleU - tile style in U +* @param[in] eTileStyleV - tile style in V +* @param[in] eTileStyleW - tile style in W * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetTileStylesPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV, eLib3MFTextureTileStyle eTileStyleW); /** -* Sets a texture's tilestyle type. +* Retrieves the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eTileStyleU - new tilestyle type enum. -* @param[in] eTileStyleV - new tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pTileStyleU - tile style in U +* @param[out] pTileStyleV - tile style in V +* @param[out] pTileStyleW - tile style in W * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetTileStyleUVPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetTileStylesPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV, eLib3MFTextureTileStyle * pTileStyleW); /** -* Retrieves a texture's filter type. +* returns the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pFilter - returns filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_GetFilterPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter * pFilter); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetOffsetPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pOffset); /** -* Sets a texture's filter type. +* Sets the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eFilter - sets new filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -typedef Lib3MFResult (*PLib3MFTexture2D_SetFilterPtr) (Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter eFilter); +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetOffsetPtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dOffset); + +/** +* returns the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_GetScalePtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pScale); + +/** +* Sets the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFFunctionFromImage3D_SetScalePtr) (Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dScale); /************************************************************************************************************************* Class definition for BuildItem @@ -3132,6 +5743,16 @@ typedef Lib3MFResult (*PLib3MFModel_GetColorGroupByIDPtr) (Lib3MF_Model pModel, */ typedef Lib3MFResult (*PLib3MFModel_GetSliceStackByIDPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_SliceStack * pSliceStacInstance); +/** +* finds a level set object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pLevelSetObjectInstance - returns the level set object instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetLevelSetByIDPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_LevelSet * pLevelSetObjectInstance); + /** * returns, whether a build has a UUID and, if true, the build's UUID * @@ -3270,6 +5891,15 @@ typedef Lib3MFResult (*PLib3MFModel_GetMultiPropertyGroupsPtr) (Lib3MF_Model pMo */ typedef Lib3MFResult (*PLib3MFModel_GetSliceStacksPtr) (Lib3MF_Model pModel, Lib3MF_SliceStackIterator * pResourceIterator); +/** +* creates a resource iterator instance with all image3d resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetImage3DsPtr) (Lib3MF_Model pModel, Lib3MF_Image3DIterator * pResourceIterator); + /** * Merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. * @@ -3279,6 +5909,15 @@ typedef Lib3MFResult (*PLib3MFModel_GetSliceStacksPtr) (Lib3MF_Model pModel, Lib */ typedef Lib3MFResult (*PLib3MFModel_MergeToModelPtr) (Lib3MF_Model pModel, Lib3MF_Model * pMergedModelInstance); +/** +* Merges the given model into this model. +* +* @param[in] pModel - Model instance. +* @param[in] pModelInstance - model to be merged +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_MergeFromModelPtr) (Lib3MF_Model pModel, Lib3MF_Model pModelInstance); + /** * adds an empty mesh object to the model. * @@ -3364,6 +6003,28 @@ typedef Lib3MFResult (*PLib3MFModel_AddCompositeMaterialsPtr) (Lib3MF_Model pMod */ typedef Lib3MFResult (*PLib3MFModel_AddMultiPropertyGroupPtr) (Lib3MF_Model pModel, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance); +/** +* creates a new 3D Image Resource +* +* @param[in] pModel - Model instance. +* @param[in] nColumnCount - the number of columns in each sheet. +* @param[in] nRowCount - the number of rows in each sheet. +* @param[in] nSheetCount - the number of sheets in the image stack. +* @param[out] pInstance - returns the new ImageStack instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddImageStackPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nColumnCount, Lib3MF_uint32 nRowCount, Lib3MF_uint32 nSheetCount, Lib3MF_ImageStack * pInstance); + +/** +* finds an ImageStack object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pImageStackInstance - returns the image stack instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetImageStackByIDPtr) (Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ImageStack * pImageStackInstance); + /** * adds a build item to the model. * @@ -3515,6 +6176,70 @@ typedef Lib3MFResult (*PLib3MFModel_SetRandomNumberCallbackPtr) (Lib3MF_Model pM */ typedef Lib3MFResult (*PLib3MFModel_GetKeyStorePtr) (Lib3MF_Model pModel, Lib3MF_KeyStore * pKeyStore); +/** +* creates a resource iterator for all functions +* +* @param[in] pModel - Model instance. +* @param[out] pTheResourceIterator - returns the resource iterator +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetFunctionsPtr) (Lib3MF_Model pModel, Lib3MF_FunctionIterator * pTheResourceIterator); + +/** +* adds a function described by nodes to the model +* +* @param[in] pModel - Model instance. +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddImplicitFunctionPtr) (Lib3MF_Model pModel, Lib3MF_ImplicitFunction * pFunctionInstance); + +/** +* adds a function defined by an image3d to the model +* +* @param[in] pModel - Model instance. +* @param[in] pImage3DInstance - the Image3D-instance used for this function +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddFunctionFromImage3DPtr) (Lib3MF_Model pModel, Lib3MF_Image3D pImage3DInstance, Lib3MF_FunctionFromImage3D * pFunctionInstance); + +/** +* adds a volume data resource to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pVolumeDataInstance - returns the new volume data instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddVolumeDataPtr) (Lib3MF_Model pModel, Lib3MF_VolumeData * pVolumeDataInstance); + +/** +* adds an empty boundary shape object to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pLevelSetInstance - returns the mesh object instance +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_AddLevelSetPtr) (Lib3MF_Model pModel, Lib3MF_LevelSet * pLevelSetInstance); + +/** +* creates a resource iterator instance with all boundary shape resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_GetLevelSetsPtr) (Lib3MF_Model pModel, Lib3MF_LevelSetIterator * pResourceIterator); + +/** +* Removes a resource from the model +* +* @param[in] pModel - Model instance. +* @param[in] pResource - The resource to remove +* @return error code or 0 (success) +*/ +typedef Lib3MFResult (*PLib3MFModel_RemoveResourcePtr) (Lib3MF_Model pModel, Lib3MF_Resource pResource); + /************************************************************************************************************************* Global functions **************************************************************************************************************************/ @@ -3767,6 +6492,9 @@ typedef struct { PLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupPtr m_Texture2DGroupIterator_GetCurrentTexture2DGroup; PLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsPtr m_CompositeMaterialsIterator_GetCurrentCompositeMaterials; PLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupPtr m_MultiPropertyGroupIterator_GetCurrentMultiPropertyGroup; + PLib3MFImage3DIterator_GetCurrentImage3DPtr m_Image3DIterator_GetCurrentImage3D; + PLib3MFFunctionIterator_GetCurrentFunctionPtr m_FunctionIterator_GetCurrentFunction; + PLib3MFLevelSetIterator_GetCurrentLevelSetPtr m_LevelSetIterator_GetCurrentLevelSet; PLib3MFMetaData_GetNameSpacePtr m_MetaData_GetNameSpace; PLib3MFMetaData_SetNameSpacePtr m_MetaData_SetNameSpace; PLib3MFMetaData_GetNamePtr m_MetaData_GetName; @@ -3792,6 +6520,7 @@ typedef struct { PLib3MFObject_SetPartNumberPtr m_Object_SetPartNumber; PLib3MFObject_IsMeshObjectPtr m_Object_IsMeshObject; PLib3MFObject_IsComponentsObjectPtr m_Object_IsComponentsObject; + PLib3MFObject_IsLevelSetObjectPtr m_Object_IsLevelSetObject; PLib3MFObject_IsValidPtr m_Object_IsValid; PLib3MFObject_SetAttachmentAsThumbnailPtr m_Object_SetAttachmentAsThumbnail; PLib3MFObject_GetThumbnailAttachmentPtr m_Object_GetThumbnailAttachment; @@ -3826,6 +6555,24 @@ typedef struct { PLib3MFMeshObject_SetGeometryPtr m_MeshObject_SetGeometry; PLib3MFMeshObject_IsManifoldAndOrientedPtr m_MeshObject_IsManifoldAndOriented; PLib3MFMeshObject_BeamLatticePtr m_MeshObject_BeamLattice; + PLib3MFMeshObject_GetVolumeDataPtr m_MeshObject_GetVolumeData; + PLib3MFMeshObject_SetVolumeDataPtr m_MeshObject_SetVolumeData; + PLib3MFLevelSet_GetFunctionPtr m_LevelSet_GetFunction; + PLib3MFLevelSet_SetFunctionPtr m_LevelSet_SetFunction; + PLib3MFLevelSet_GetTransformPtr m_LevelSet_GetTransform; + PLib3MFLevelSet_SetTransformPtr m_LevelSet_SetTransform; + PLib3MFLevelSet_GetChannelNamePtr m_LevelSet_GetChannelName; + PLib3MFLevelSet_SetChannelNamePtr m_LevelSet_SetChannelName; + PLib3MFLevelSet_SetMinFeatureSizePtr m_LevelSet_SetMinFeatureSize; + PLib3MFLevelSet_GetMinFeatureSizePtr m_LevelSet_GetMinFeatureSize; + PLib3MFLevelSet_SetFallBackValuePtr m_LevelSet_SetFallBackValue; + PLib3MFLevelSet_GetFallBackValuePtr m_LevelSet_GetFallBackValue; + PLib3MFLevelSet_SetMeshBBoxOnlyPtr m_LevelSet_SetMeshBBoxOnly; + PLib3MFLevelSet_GetMeshBBoxOnlyPtr m_LevelSet_GetMeshBBoxOnly; + PLib3MFLevelSet_SetMeshPtr m_LevelSet_SetMesh; + PLib3MFLevelSet_GetMeshPtr m_LevelSet_GetMesh; + PLib3MFLevelSet_GetVolumeDataPtr m_LevelSet_GetVolumeData; + PLib3MFLevelSet_SetVolumeDataPtr m_LevelSet_SetVolumeData; PLib3MFBeamLattice_GetMinLengthPtr m_BeamLattice_GetMinLength; PLib3MFBeamLattice_SetMinLengthPtr m_BeamLattice_SetMinLength; PLib3MFBeamLattice_GetClippingPtr m_BeamLattice_GetClipping; @@ -3849,6 +6596,35 @@ typedef struct { PLib3MFBeamLattice_GetBeamSetCountPtr m_BeamLattice_GetBeamSetCount; PLib3MFBeamLattice_AddBeamSetPtr m_BeamLattice_AddBeamSet; PLib3MFBeamLattice_GetBeamSetPtr m_BeamLattice_GetBeamSet; + PLib3MFFunctionReference_GetFunctionResourceIDPtr m_FunctionReference_GetFunctionResourceID; + PLib3MFFunctionReference_SetFunctionResourceIDPtr m_FunctionReference_SetFunctionResourceID; + PLib3MFFunctionReference_GetTransformPtr m_FunctionReference_GetTransform; + PLib3MFFunctionReference_SetTransformPtr m_FunctionReference_SetTransform; + PLib3MFFunctionReference_GetChannelNamePtr m_FunctionReference_GetChannelName; + PLib3MFFunctionReference_SetChannelNamePtr m_FunctionReference_SetChannelName; + PLib3MFFunctionReference_SetMinFeatureSizePtr m_FunctionReference_SetMinFeatureSize; + PLib3MFFunctionReference_GetMinFeatureSizePtr m_FunctionReference_GetMinFeatureSize; + PLib3MFFunctionReference_SetFallBackValuePtr m_FunctionReference_SetFallBackValue; + PLib3MFFunctionReference_GetFallBackValuePtr m_FunctionReference_GetFallBackValue; + PLib3MFVolumeDataComposite_GetBaseMaterialGroupPtr m_VolumeDataComposite_GetBaseMaterialGroup; + PLib3MFVolumeDataComposite_SetBaseMaterialGroupPtr m_VolumeDataComposite_SetBaseMaterialGroup; + PLib3MFVolumeDataComposite_GetMaterialMappingCountPtr m_VolumeDataComposite_GetMaterialMappingCount; + PLib3MFVolumeDataComposite_GetMaterialMappingPtr m_VolumeDataComposite_GetMaterialMapping; + PLib3MFVolumeDataComposite_AddMaterialMappingPtr m_VolumeDataComposite_AddMaterialMapping; + PLib3MFVolumeDataComposite_RemoveMaterialMappingPtr m_VolumeDataComposite_RemoveMaterialMapping; + PLib3MFVolumeDataProperty_GetNamePtr m_VolumeDataProperty_GetName; + PLib3MFVolumeDataProperty_SetIsRequiredPtr m_VolumeDataProperty_SetIsRequired; + PLib3MFVolumeDataProperty_IsRequiredPtr m_VolumeDataProperty_IsRequired; + PLib3MFVolumeData_GetCompositePtr m_VolumeData_GetComposite; + PLib3MFVolumeData_CreateNewCompositePtr m_VolumeData_CreateNewComposite; + PLib3MFVolumeData_RemoveCompositePtr m_VolumeData_RemoveComposite; + PLib3MFVolumeData_GetColorPtr m_VolumeData_GetColor; + PLib3MFVolumeData_CreateNewColorPtr m_VolumeData_CreateNewColor; + PLib3MFVolumeData_RemoveColorPtr m_VolumeData_RemoveColor; + PLib3MFVolumeData_GetPropertyCountPtr m_VolumeData_GetPropertyCount; + PLib3MFVolumeData_GetPropertyPtr m_VolumeData_GetProperty; + PLib3MFVolumeData_AddPropertyFromFunctionPtr m_VolumeData_AddPropertyFromFunction; + PLib3MFVolumeData_RemovePropertyPtr m_VolumeData_RemoveProperty; PLib3MFComponent_GetObjectResourcePtr m_Component_GetObjectResource; PLib3MFComponent_GetObjectResourceIDPtr m_Component_GetObjectResourceID; PLib3MFComponent_GetUUIDPtr m_Component_GetUUID; @@ -3905,6 +6681,19 @@ typedef struct { PLib3MFMultiPropertyGroup_AddLayerPtr m_MultiPropertyGroup_AddLayer; PLib3MFMultiPropertyGroup_GetLayerPtr m_MultiPropertyGroup_GetLayer; PLib3MFMultiPropertyGroup_RemoveLayerPtr m_MultiPropertyGroup_RemoveLayer; + PLib3MFImage3D_GetNamePtr m_Image3D_GetName; + PLib3MFImage3D_SetNamePtr m_Image3D_SetName; + PLib3MFImage3D_IsImageStackPtr m_Image3D_IsImageStack; + PLib3MFImageStack_GetRowCountPtr m_ImageStack_GetRowCount; + PLib3MFImageStack_SetRowCountPtr m_ImageStack_SetRowCount; + PLib3MFImageStack_GetColumnCountPtr m_ImageStack_GetColumnCount; + PLib3MFImageStack_SetColumnCountPtr m_ImageStack_SetColumnCount; + PLib3MFImageStack_GetSheetCountPtr m_ImageStack_GetSheetCount; + PLib3MFImageStack_GetSheetPtr m_ImageStack_GetSheet; + PLib3MFImageStack_SetSheetPtr m_ImageStack_SetSheet; + PLib3MFImageStack_CreateEmptySheetPtr m_ImageStack_CreateEmptySheet; + PLib3MFImageStack_CreateSheetFromBufferPtr m_ImageStack_CreateSheetFromBuffer; + PLib3MFImageStack_CreateSheetFromFilePtr m_ImageStack_CreateSheetFromFile; PLib3MFAttachment_GetPathPtr m_Attachment_GetPath; PLib3MFAttachment_SetPathPtr m_Attachment_SetPath; PLib3MFAttachment_PackagePartPtr m_Attachment_PackagePart; @@ -3924,6 +6713,173 @@ typedef struct { PLib3MFTexture2D_SetTileStyleUVPtr m_Texture2D_SetTileStyleUV; PLib3MFTexture2D_GetFilterPtr m_Texture2D_GetFilter; PLib3MFTexture2D_SetFilterPtr m_Texture2D_SetFilter; + PLib3MFImplicitPort_GetIdentifierPtr m_ImplicitPort_GetIdentifier; + PLib3MFImplicitPort_SetIdentifierPtr m_ImplicitPort_SetIdentifier; + PLib3MFImplicitPort_GetDisplayNamePtr m_ImplicitPort_GetDisplayName; + PLib3MFImplicitPort_SetDisplayNamePtr m_ImplicitPort_SetDisplayName; + PLib3MFImplicitPort_SetTypePtr m_ImplicitPort_SetType; + PLib3MFImplicitPort_GetTypePtr m_ImplicitPort_GetType; + PLib3MFImplicitPort_GetReferencePtr m_ImplicitPort_GetReference; + PLib3MFImplicitPort_SetReferencePtr m_ImplicitPort_SetReference; + PLib3MFIterator_MoveNextPtr m_Iterator_MoveNext; + PLib3MFIterator_MovePreviousPtr m_Iterator_MovePrevious; + PLib3MFIterator_CountPtr m_Iterator_Count; + PLib3MFImplicitPortIterator_GetCurrentPtr m_ImplicitPortIterator_GetCurrent; + PLib3MFImplicitNode_GetIdentifierPtr m_ImplicitNode_GetIdentifier; + PLib3MFImplicitNode_SetIdentifierPtr m_ImplicitNode_SetIdentifier; + PLib3MFImplicitNode_GetDisplayNamePtr m_ImplicitNode_GetDisplayName; + PLib3MFImplicitNode_SetDisplayNamePtr m_ImplicitNode_SetDisplayName; + PLib3MFImplicitNode_GetTagPtr m_ImplicitNode_GetTag; + PLib3MFImplicitNode_SetTagPtr m_ImplicitNode_SetTag; + PLib3MFImplicitNode_GetNodeTypePtr m_ImplicitNode_GetNodeType; + PLib3MFImplicitNode_AddInputPtr m_ImplicitNode_AddInput; + PLib3MFImplicitNode_GetInputsPtr m_ImplicitNode_GetInputs; + PLib3MFImplicitNode_AddOutputPtr m_ImplicitNode_AddOutput; + PLib3MFImplicitNode_GetOutputsPtr m_ImplicitNode_GetOutputs; + PLib3MFImplicitNode_FindInputPtr m_ImplicitNode_FindInput; + PLib3MFImplicitNode_FindOutputPtr m_ImplicitNode_FindOutput; + PLib3MFImplicitNode_AreTypesValidPtr m_ImplicitNode_AreTypesValid; + PLib3MFOneInputNode_GetInputAPtr m_OneInputNode_GetInputA; + PLib3MFOneInputNode_GetOutputResultPtr m_OneInputNode_GetOutputResult; + PLib3MFResourceIdNode_SetResourcePtr m_ResourceIdNode_SetResource; + PLib3MFResourceIdNode_GetResourcePtr m_ResourceIdNode_GetResource; + PLib3MFResourceIdNode_GetOutputValuePtr m_ResourceIdNode_GetOutputValue; + PLib3MFTwoInputNode_GetInputBPtr m_TwoInputNode_GetInputB; + PLib3MFSelectNode_GetInputBPtr m_SelectNode_GetInputB; + PLib3MFSelectNode_GetInputCPtr m_SelectNode_GetInputC; + PLib3MFSelectNode_GetInputDPtr m_SelectNode_GetInputD; + PLib3MFClampNode_GetInputMinPtr m_ClampNode_GetInputMin; + PLib3MFClampNode_GetInputMaxPtr m_ClampNode_GetInputMax; + PLib3MFComposeVectorNode_GetInputXPtr m_ComposeVectorNode_GetInputX; + PLib3MFComposeVectorNode_GetInputYPtr m_ComposeVectorNode_GetInputY; + PLib3MFComposeVectorNode_GetInputZPtr m_ComposeVectorNode_GetInputZ; + PLib3MFComposeVectorNode_GetOutputResultPtr m_ComposeVectorNode_GetOutputResult; + PLib3MFDecomposeVectorNode_GetInputAPtr m_DecomposeVectorNode_GetInputA; + PLib3MFDecomposeVectorNode_GetOutputXPtr m_DecomposeVectorNode_GetOutputX; + PLib3MFDecomposeVectorNode_GetOutputYPtr m_DecomposeVectorNode_GetOutputY; + PLib3MFDecomposeVectorNode_GetOutputZPtr m_DecomposeVectorNode_GetOutputZ; + PLib3MFComposeMatrixNode_GetInputM00Ptr m_ComposeMatrixNode_GetInputM00; + PLib3MFComposeMatrixNode_GetInputM01Ptr m_ComposeMatrixNode_GetInputM01; + PLib3MFComposeMatrixNode_GetInputM02Ptr m_ComposeMatrixNode_GetInputM02; + PLib3MFComposeMatrixNode_GetInputM03Ptr m_ComposeMatrixNode_GetInputM03; + PLib3MFComposeMatrixNode_GetInputM10Ptr m_ComposeMatrixNode_GetInputM10; + PLib3MFComposeMatrixNode_GetInputM11Ptr m_ComposeMatrixNode_GetInputM11; + PLib3MFComposeMatrixNode_GetInputM12Ptr m_ComposeMatrixNode_GetInputM12; + PLib3MFComposeMatrixNode_GetInputM13Ptr m_ComposeMatrixNode_GetInputM13; + PLib3MFComposeMatrixNode_GetInputM20Ptr m_ComposeMatrixNode_GetInputM20; + PLib3MFComposeMatrixNode_GetInputM21Ptr m_ComposeMatrixNode_GetInputM21; + PLib3MFComposeMatrixNode_GetInputM22Ptr m_ComposeMatrixNode_GetInputM22; + PLib3MFComposeMatrixNode_GetInputM23Ptr m_ComposeMatrixNode_GetInputM23; + PLib3MFComposeMatrixNode_GetInputM30Ptr m_ComposeMatrixNode_GetInputM30; + PLib3MFComposeMatrixNode_GetInputM31Ptr m_ComposeMatrixNode_GetInputM31; + PLib3MFComposeMatrixNode_GetInputM32Ptr m_ComposeMatrixNode_GetInputM32; + PLib3MFComposeMatrixNode_GetInputM33Ptr m_ComposeMatrixNode_GetInputM33; + PLib3MFComposeMatrixNode_GetOutputResultPtr m_ComposeMatrixNode_GetOutputResult; + PLib3MFMatrixFromRowsNode_GetInputAPtr m_MatrixFromRowsNode_GetInputA; + PLib3MFMatrixFromRowsNode_GetInputBPtr m_MatrixFromRowsNode_GetInputB; + PLib3MFMatrixFromRowsNode_GetInputCPtr m_MatrixFromRowsNode_GetInputC; + PLib3MFMatrixFromRowsNode_GetInputDPtr m_MatrixFromRowsNode_GetInputD; + PLib3MFMatrixFromRowsNode_GetOutputResultPtr m_MatrixFromRowsNode_GetOutputResult; + PLib3MFMatrixFromColumnsNode_GetInputAPtr m_MatrixFromColumnsNode_GetInputA; + PLib3MFMatrixFromColumnsNode_GetInputBPtr m_MatrixFromColumnsNode_GetInputB; + PLib3MFMatrixFromColumnsNode_GetInputCPtr m_MatrixFromColumnsNode_GetInputC; + PLib3MFMatrixFromColumnsNode_GetInputDPtr m_MatrixFromColumnsNode_GetInputD; + PLib3MFMatrixFromColumnsNode_GetOutputResultPtr m_MatrixFromColumnsNode_GetOutputResult; + PLib3MFConstantNode_SetConstantPtr m_ConstantNode_SetConstant; + PLib3MFConstantNode_GetConstantPtr m_ConstantNode_GetConstant; + PLib3MFConstantNode_GetOutputValuePtr m_ConstantNode_GetOutputValue; + PLib3MFConstVecNode_SetVectorPtr m_ConstVecNode_SetVector; + PLib3MFConstVecNode_GetVectorPtr m_ConstVecNode_GetVector; + PLib3MFConstVecNode_GetOutputVectorPtr m_ConstVecNode_GetOutputVector; + PLib3MFConstMatNode_SetMatrixPtr m_ConstMatNode_SetMatrix; + PLib3MFConstMatNode_GetMatrixPtr m_ConstMatNode_GetMatrix; + PLib3MFConstMatNode_GetOutputMatrixPtr m_ConstMatNode_GetOutputMatrix; + PLib3MFMeshNode_GetInputMeshPtr m_MeshNode_GetInputMesh; + PLib3MFMeshNode_GetInputPosPtr m_MeshNode_GetInputPos; + PLib3MFMeshNode_GetOutputDistancePtr m_MeshNode_GetOutputDistance; + PLib3MFUnsignedMeshNode_GetInputMeshPtr m_UnsignedMeshNode_GetInputMesh; + PLib3MFUnsignedMeshNode_GetInputPosPtr m_UnsignedMeshNode_GetInputPos; + PLib3MFUnsignedMeshNode_GetOutputDistancePtr m_UnsignedMeshNode_GetOutputDistance; + PLib3MFFunctionCallNode_GetInputFunctionIDPtr m_FunctionCallNode_GetInputFunctionID; + PLib3MFNodeIterator_GetCurrentPtr m_NodeIterator_GetCurrent; + PLib3MFFunction_GetDisplayNamePtr m_Function_GetDisplayName; + PLib3MFFunction_SetDisplayNamePtr m_Function_SetDisplayName; + PLib3MFFunction_AddInputPtr m_Function_AddInput; + PLib3MFFunction_GetInputsPtr m_Function_GetInputs; + PLib3MFFunction_RemoveInputPtr m_Function_RemoveInput; + PLib3MFFunction_AddOutputPtr m_Function_AddOutput; + PLib3MFFunction_GetOutputsPtr m_Function_GetOutputs; + PLib3MFFunction_RemoveOutputPtr m_Function_RemoveOutput; + PLib3MFFunction_FindInputPtr m_Function_FindInput; + PLib3MFFunction_FindOutputPtr m_Function_FindOutput; + PLib3MFImplicitFunction_GetIdentifierPtr m_ImplicitFunction_GetIdentifier; + PLib3MFImplicitFunction_SetIdentifierPtr m_ImplicitFunction_SetIdentifier; + PLib3MFImplicitFunction_AddNodePtr m_ImplicitFunction_AddNode; + PLib3MFImplicitFunction_AddSinNodePtr m_ImplicitFunction_AddSinNode; + PLib3MFImplicitFunction_AddCosNodePtr m_ImplicitFunction_AddCosNode; + PLib3MFImplicitFunction_AddTanNodePtr m_ImplicitFunction_AddTanNode; + PLib3MFImplicitFunction_AddArcSinNodePtr m_ImplicitFunction_AddArcSinNode; + PLib3MFImplicitFunction_AddArcCosNodePtr m_ImplicitFunction_AddArcCosNode; + PLib3MFImplicitFunction_AddArcTan2NodePtr m_ImplicitFunction_AddArcTan2Node; + PLib3MFImplicitFunction_AddSinhNodePtr m_ImplicitFunction_AddSinhNode; + PLib3MFImplicitFunction_AddCoshNodePtr m_ImplicitFunction_AddCoshNode; + PLib3MFImplicitFunction_AddTanhNodePtr m_ImplicitFunction_AddTanhNode; + PLib3MFImplicitFunction_AddRoundNodePtr m_ImplicitFunction_AddRoundNode; + PLib3MFImplicitFunction_AddCeilNodePtr m_ImplicitFunction_AddCeilNode; + PLib3MFImplicitFunction_AddFloorNodePtr m_ImplicitFunction_AddFloorNode; + PLib3MFImplicitFunction_AddSignNodePtr m_ImplicitFunction_AddSignNode; + PLib3MFImplicitFunction_AddFractNodePtr m_ImplicitFunction_AddFractNode; + PLib3MFImplicitFunction_AddAbsNodePtr m_ImplicitFunction_AddAbsNode; + PLib3MFImplicitFunction_AddExpNodePtr m_ImplicitFunction_AddExpNode; + PLib3MFImplicitFunction_AddLogNodePtr m_ImplicitFunction_AddLogNode; + PLib3MFImplicitFunction_AddLog2NodePtr m_ImplicitFunction_AddLog2Node; + PLib3MFImplicitFunction_AddLog10NodePtr m_ImplicitFunction_AddLog10Node; + PLib3MFImplicitFunction_AddLengthNodePtr m_ImplicitFunction_AddLengthNode; + PLib3MFImplicitFunction_AddTransposeNodePtr m_ImplicitFunction_AddTransposeNode; + PLib3MFImplicitFunction_InverseNodePtr m_ImplicitFunction_InverseNode; + PLib3MFImplicitFunction_AddSqrtNodePtr m_ImplicitFunction_AddSqrtNode; + PLib3MFImplicitFunction_AddResourceIdNodePtr m_ImplicitFunction_AddResourceIdNode; + PLib3MFImplicitFunction_AddAdditionNodePtr m_ImplicitFunction_AddAdditionNode; + PLib3MFImplicitFunction_AddSubtractionNodePtr m_ImplicitFunction_AddSubtractionNode; + PLib3MFImplicitFunction_AddMultiplicationNodePtr m_ImplicitFunction_AddMultiplicationNode; + PLib3MFImplicitFunction_AddDivisionNodePtr m_ImplicitFunction_AddDivisionNode; + PLib3MFImplicitFunction_AddDotNodePtr m_ImplicitFunction_AddDotNode; + PLib3MFImplicitFunction_AddCrossNodePtr m_ImplicitFunction_AddCrossNode; + PLib3MFImplicitFunction_AddMatVecMultiplicationNodePtr m_ImplicitFunction_AddMatVecMultiplicationNode; + PLib3MFImplicitFunction_AddMinNodePtr m_ImplicitFunction_AddMinNode; + PLib3MFImplicitFunction_AddMaxNodePtr m_ImplicitFunction_AddMaxNode; + PLib3MFImplicitFunction_AddFmodNodePtr m_ImplicitFunction_AddFmodNode; + PLib3MFImplicitFunction_AddPowNodePtr m_ImplicitFunction_AddPowNode; + PLib3MFImplicitFunction_AddSelectNodePtr m_ImplicitFunction_AddSelectNode; + PLib3MFImplicitFunction_AddClampNodePtr m_ImplicitFunction_AddClampNode; + PLib3MFImplicitFunction_AddComposeVectorNodePtr m_ImplicitFunction_AddComposeVectorNode; + PLib3MFImplicitFunction_AddVectorFromScalarNodePtr m_ImplicitFunction_AddVectorFromScalarNode; + PLib3MFImplicitFunction_AddDecomposeVectorNodePtr m_ImplicitFunction_AddDecomposeVectorNode; + PLib3MFImplicitFunction_AddComposeMatrixNodePtr m_ImplicitFunction_AddComposeMatrixNode; + PLib3MFImplicitFunction_AddMatrixFromRowsNodePtr m_ImplicitFunction_AddMatrixFromRowsNode; + PLib3MFImplicitFunction_AddMatrixFromColumnsNodePtr m_ImplicitFunction_AddMatrixFromColumnsNode; + PLib3MFImplicitFunction_AddConstantNodePtr m_ImplicitFunction_AddConstantNode; + PLib3MFImplicitFunction_AddConstVecNodePtr m_ImplicitFunction_AddConstVecNode; + PLib3MFImplicitFunction_AddConstMatNodePtr m_ImplicitFunction_AddConstMatNode; + PLib3MFImplicitFunction_AddMeshNodePtr m_ImplicitFunction_AddMeshNode; + PLib3MFImplicitFunction_AddUnsignedMeshNodePtr m_ImplicitFunction_AddUnsignedMeshNode; + PLib3MFImplicitFunction_AddFunctionCallNodePtr m_ImplicitFunction_AddFunctionCallNode; + PLib3MFImplicitFunction_GetNodesPtr m_ImplicitFunction_GetNodes; + PLib3MFImplicitFunction_RemoveNodePtr m_ImplicitFunction_RemoveNode; + PLib3MFImplicitFunction_AddLinkPtr m_ImplicitFunction_AddLink; + PLib3MFImplicitFunction_AddLinkByNamesPtr m_ImplicitFunction_AddLinkByNames; + PLib3MFImplicitFunction_ClearPtr m_ImplicitFunction_Clear; + PLib3MFImplicitFunction_SortNodesTopologicallyPtr m_ImplicitFunction_SortNodesTopologically; + PLib3MFFunctionFromImage3D_GetImage3DPtr m_FunctionFromImage3D_GetImage3D; + PLib3MFFunctionFromImage3D_SetImage3DPtr m_FunctionFromImage3D_SetImage3D; + PLib3MFFunctionFromImage3D_SetFilterPtr m_FunctionFromImage3D_SetFilter; + PLib3MFFunctionFromImage3D_GetFilterPtr m_FunctionFromImage3D_GetFilter; + PLib3MFFunctionFromImage3D_SetTileStylesPtr m_FunctionFromImage3D_SetTileStyles; + PLib3MFFunctionFromImage3D_GetTileStylesPtr m_FunctionFromImage3D_GetTileStyles; + PLib3MFFunctionFromImage3D_GetOffsetPtr m_FunctionFromImage3D_GetOffset; + PLib3MFFunctionFromImage3D_SetOffsetPtr m_FunctionFromImage3D_SetOffset; + PLib3MFFunctionFromImage3D_GetScalePtr m_FunctionFromImage3D_GetScale; + PLib3MFFunctionFromImage3D_SetScalePtr m_FunctionFromImage3D_SetScale; PLib3MFBuildItem_GetObjectResourcePtr m_BuildItem_GetObjectResource; PLib3MFBuildItem_GetUUIDPtr m_BuildItem_GetUUID; PLib3MFBuildItem_SetUUIDPtr m_BuildItem_SetUUID; @@ -4018,6 +6974,7 @@ typedef struct { PLib3MFModel_GetComponentsObjectByIDPtr m_Model_GetComponentsObjectByID; PLib3MFModel_GetColorGroupByIDPtr m_Model_GetColorGroupByID; PLib3MFModel_GetSliceStackByIDPtr m_Model_GetSliceStackByID; + PLib3MFModel_GetLevelSetByIDPtr m_Model_GetLevelSetByID; PLib3MFModel_GetBuildUUIDPtr m_Model_GetBuildUUID; PLib3MFModel_SetBuildUUIDPtr m_Model_SetBuildUUID; PLib3MFModel_GetBuildItemsPtr m_Model_GetBuildItems; @@ -4033,7 +6990,9 @@ typedef struct { PLib3MFModel_GetCompositeMaterialsPtr m_Model_GetCompositeMaterials; PLib3MFModel_GetMultiPropertyGroupsPtr m_Model_GetMultiPropertyGroups; PLib3MFModel_GetSliceStacksPtr m_Model_GetSliceStacks; + PLib3MFModel_GetImage3DsPtr m_Model_GetImage3Ds; PLib3MFModel_MergeToModelPtr m_Model_MergeToModel; + PLib3MFModel_MergeFromModelPtr m_Model_MergeFromModel; PLib3MFModel_AddMeshObjectPtr m_Model_AddMeshObject; PLib3MFModel_AddComponentsObjectPtr m_Model_AddComponentsObject; PLib3MFModel_AddSliceStackPtr m_Model_AddSliceStack; @@ -4043,6 +7002,8 @@ typedef struct { PLib3MFModel_AddTexture2DGroupPtr m_Model_AddTexture2DGroup; PLib3MFModel_AddCompositeMaterialsPtr m_Model_AddCompositeMaterials; PLib3MFModel_AddMultiPropertyGroupPtr m_Model_AddMultiPropertyGroup; + PLib3MFModel_AddImageStackPtr m_Model_AddImageStack; + PLib3MFModel_GetImageStackByIDPtr m_Model_GetImageStackByID; PLib3MFModel_AddBuildItemPtr m_Model_AddBuildItem; PLib3MFModel_RemoveBuildItemPtr m_Model_RemoveBuildItem; PLib3MFModel_GetMetaDataGroupPtr m_Model_GetMetaDataGroup; @@ -4059,6 +7020,13 @@ typedef struct { PLib3MFModel_RemoveCustomContentTypePtr m_Model_RemoveCustomContentType; PLib3MFModel_SetRandomNumberCallbackPtr m_Model_SetRandomNumberCallback; PLib3MFModel_GetKeyStorePtr m_Model_GetKeyStore; + PLib3MFModel_GetFunctionsPtr m_Model_GetFunctions; + PLib3MFModel_AddImplicitFunctionPtr m_Model_AddImplicitFunction; + PLib3MFModel_AddFunctionFromImage3DPtr m_Model_AddFunctionFromImage3D; + PLib3MFModel_AddVolumeDataPtr m_Model_AddVolumeData; + PLib3MFModel_AddLevelSetPtr m_Model_AddLevelSet; + PLib3MFModel_GetLevelSetsPtr m_Model_GetLevelSets; + PLib3MFModel_RemoveResourcePtr m_Model_RemoveResource; PLib3MFGetLibraryVersionPtr m_GetLibraryVersion; PLib3MFGetPrereleaseInformationPtr m_GetPrereleaseInformation; PLib3MFGetBuildInformationPtr m_GetBuildInformation; diff --git a/Autogenerated/Bindings/NodeJS/lib3mf_nodeaddon.cc b/Autogenerated/Bindings/NodeJS/lib3mf_nodeaddon.cc index 96e56c3d9..5e403cfd6 100644 --- a/Autogenerated/Bindings/NodeJS/lib3mf_nodeaddon.cc +++ b/Autogenerated/Bindings/NodeJS/lib3mf_nodeaddon.cc @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++ Implementation file for the Node addon class of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -64,11 +64,21 @@ void InitAll(v8::Local exports, v8::Local module) CLib3MFTexture2DGroupIterator::Init(); CLib3MFCompositeMaterialsIterator::Init(); CLib3MFMultiPropertyGroupIterator::Init(); + CLib3MFImage3DIterator::Init(); + CLib3MFFunctionIterator::Init(); + CLib3MFLevelSetIterator::Init(); CLib3MFMetaData::Init(); CLib3MFMetaDataGroup::Init(); CLib3MFObject::Init(); CLib3MFMeshObject::Init(); + CLib3MFLevelSet::Init(); CLib3MFBeamLattice::Init(); + CLib3MFFunctionReference::Init(); + CLib3MFVolumeDataColor::Init(); + CLib3MFMaterialMapping::Init(); + CLib3MFVolumeDataComposite::Init(); + CLib3MFVolumeDataProperty::Init(); + CLib3MFVolumeData::Init(); CLib3MFComponent::Init(); CLib3MFComponentsObject::Init(); CLib3MFBeamSet::Init(); @@ -77,8 +87,71 @@ void InitAll(v8::Local exports, v8::Local module) CLib3MFTexture2DGroup::Init(); CLib3MFCompositeMaterials::Init(); CLib3MFMultiPropertyGroup::Init(); + CLib3MFImage3D::Init(); + CLib3MFImageStack::Init(); CLib3MFAttachment::Init(); CLib3MFTexture2D::Init(); + CLib3MFImplicitPort::Init(); + CLib3MFIterator::Init(); + CLib3MFImplicitPortIterator::Init(); + CLib3MFImplicitNode::Init(); + CLib3MFOneInputNode::Init(); + CLib3MFSinNode::Init(); + CLib3MFCosNode::Init(); + CLib3MFTanNode::Init(); + CLib3MFArcSinNode::Init(); + CLib3MFArcCosNode::Init(); + CLib3MFArcTanNode::Init(); + CLib3MFSinhNode::Init(); + CLib3MFCoshNode::Init(); + CLib3MFTanhNode::Init(); + CLib3MFRoundNode::Init(); + CLib3MFCeilNode::Init(); + CLib3MFFloorNode::Init(); + CLib3MFSignNode::Init(); + CLib3MFFractNode::Init(); + CLib3MFAbsNode::Init(); + CLib3MFExpNode::Init(); + CLib3MFLogNode::Init(); + CLib3MFLog2Node::Init(); + CLib3MFLog10Node::Init(); + CLib3MFLengthNode::Init(); + CLib3MFTransposeNode::Init(); + CLib3MFInverseNode::Init(); + CLib3MFSqrtNode::Init(); + CLib3MFResourceIdNode::Init(); + CLib3MFTwoInputNode::Init(); + CLib3MFAdditionNode::Init(); + CLib3MFSubtractionNode::Init(); + CLib3MFMultiplicationNode::Init(); + CLib3MFDivisionNode::Init(); + CLib3MFDotNode::Init(); + CLib3MFCrossNode::Init(); + CLib3MFArcTan2Node::Init(); + CLib3MFMatVecMultiplicationNode::Init(); + CLib3MFMinNode::Init(); + CLib3MFMaxNode::Init(); + CLib3MFFmodNode::Init(); + CLib3MFModNode::Init(); + CLib3MFPowNode::Init(); + CLib3MFSelectNode::Init(); + CLib3MFClampNode::Init(); + CLib3MFComposeVectorNode::Init(); + CLib3MFVectorFromScalarNode::Init(); + CLib3MFDecomposeVectorNode::Init(); + CLib3MFComposeMatrixNode::Init(); + CLib3MFMatrixFromRowsNode::Init(); + CLib3MFMatrixFromColumnsNode::Init(); + CLib3MFConstantNode::Init(); + CLib3MFConstVecNode::Init(); + CLib3MFConstMatNode::Init(); + CLib3MFMeshNode::Init(); + CLib3MFUnsignedMeshNode::Init(); + CLib3MFFunctionCallNode::Init(); + CLib3MFNodeIterator::Init(); + CLib3MFFunction::Init(); + CLib3MFImplicitFunction::Init(); + CLib3MFFunctionFromImage3D::Init(); CLib3MFBuildItem::Init(); CLib3MFBuildItemIterator::Init(); CLib3MFSlice::Init(); diff --git a/Autogenerated/Bindings/NodeJS/lib3mf_nodewrapper.cc b/Autogenerated/Bindings/NodeJS/lib3mf_nodewrapper.cc index 36b978e15..2ed51aabd 100644 --- a/Autogenerated/Bindings/NodeJS/lib3mf_nodewrapper.cc +++ b/Autogenerated/Bindings/NodeJS/lib3mf_nodewrapper.cc @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++ Implementation file for the Node wrapper class of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -57,11 +57,21 @@ Persistent CLib3MFColorGroupIterator::constructor; Persistent CLib3MFTexture2DGroupIterator::constructor; Persistent CLib3MFCompositeMaterialsIterator::constructor; Persistent CLib3MFMultiPropertyGroupIterator::constructor; +Persistent CLib3MFImage3DIterator::constructor; +Persistent CLib3MFFunctionIterator::constructor; +Persistent CLib3MFLevelSetIterator::constructor; Persistent CLib3MFMetaData::constructor; Persistent CLib3MFMetaDataGroup::constructor; Persistent CLib3MFObject::constructor; Persistent CLib3MFMeshObject::constructor; +Persistent CLib3MFLevelSet::constructor; Persistent CLib3MFBeamLattice::constructor; +Persistent CLib3MFFunctionReference::constructor; +Persistent CLib3MFVolumeDataColor::constructor; +Persistent CLib3MFMaterialMapping::constructor; +Persistent CLib3MFVolumeDataComposite::constructor; +Persistent CLib3MFVolumeDataProperty::constructor; +Persistent CLib3MFVolumeData::constructor; Persistent CLib3MFComponent::constructor; Persistent CLib3MFComponentsObject::constructor; Persistent CLib3MFBeamSet::constructor; @@ -70,8 +80,71 @@ Persistent CLib3MFColorGroup::constructor; Persistent CLib3MFTexture2DGroup::constructor; Persistent CLib3MFCompositeMaterials::constructor; Persistent CLib3MFMultiPropertyGroup::constructor; +Persistent CLib3MFImage3D::constructor; +Persistent CLib3MFImageStack::constructor; Persistent CLib3MFAttachment::constructor; Persistent CLib3MFTexture2D::constructor; +Persistent CLib3MFImplicitPort::constructor; +Persistent CLib3MFIterator::constructor; +Persistent CLib3MFImplicitPortIterator::constructor; +Persistent CLib3MFImplicitNode::constructor; +Persistent CLib3MFOneInputNode::constructor; +Persistent CLib3MFSinNode::constructor; +Persistent CLib3MFCosNode::constructor; +Persistent CLib3MFTanNode::constructor; +Persistent CLib3MFArcSinNode::constructor; +Persistent CLib3MFArcCosNode::constructor; +Persistent CLib3MFArcTanNode::constructor; +Persistent CLib3MFSinhNode::constructor; +Persistent CLib3MFCoshNode::constructor; +Persistent CLib3MFTanhNode::constructor; +Persistent CLib3MFRoundNode::constructor; +Persistent CLib3MFCeilNode::constructor; +Persistent CLib3MFFloorNode::constructor; +Persistent CLib3MFSignNode::constructor; +Persistent CLib3MFFractNode::constructor; +Persistent CLib3MFAbsNode::constructor; +Persistent CLib3MFExpNode::constructor; +Persistent CLib3MFLogNode::constructor; +Persistent CLib3MFLog2Node::constructor; +Persistent CLib3MFLog10Node::constructor; +Persistent CLib3MFLengthNode::constructor; +Persistent CLib3MFTransposeNode::constructor; +Persistent CLib3MFInverseNode::constructor; +Persistent CLib3MFSqrtNode::constructor; +Persistent CLib3MFResourceIdNode::constructor; +Persistent CLib3MFTwoInputNode::constructor; +Persistent CLib3MFAdditionNode::constructor; +Persistent CLib3MFSubtractionNode::constructor; +Persistent CLib3MFMultiplicationNode::constructor; +Persistent CLib3MFDivisionNode::constructor; +Persistent CLib3MFDotNode::constructor; +Persistent CLib3MFCrossNode::constructor; +Persistent CLib3MFArcTan2Node::constructor; +Persistent CLib3MFMatVecMultiplicationNode::constructor; +Persistent CLib3MFMinNode::constructor; +Persistent CLib3MFMaxNode::constructor; +Persistent CLib3MFFmodNode::constructor; +Persistent CLib3MFModNode::constructor; +Persistent CLib3MFPowNode::constructor; +Persistent CLib3MFSelectNode::constructor; +Persistent CLib3MFClampNode::constructor; +Persistent CLib3MFComposeVectorNode::constructor; +Persistent CLib3MFVectorFromScalarNode::constructor; +Persistent CLib3MFDecomposeVectorNode::constructor; +Persistent CLib3MFComposeMatrixNode::constructor; +Persistent CLib3MFMatrixFromRowsNode::constructor; +Persistent CLib3MFMatrixFromColumnsNode::constructor; +Persistent CLib3MFConstantNode::constructor; +Persistent CLib3MFConstVecNode::constructor; +Persistent CLib3MFConstMatNode::constructor; +Persistent CLib3MFMeshNode::constructor; +Persistent CLib3MFUnsignedMeshNode::constructor; +Persistent CLib3MFFunctionCallNode::constructor; +Persistent CLib3MFNodeIterator::constructor; +Persistent CLib3MFFunction::constructor; +Persistent CLib3MFImplicitFunction::constructor; +Persistent CLib3MFFunctionFromImage3D::constructor; Persistent CLib3MFBuildItem::constructor; Persistent CLib3MFBuildItemIterator::constructor; Persistent CLib3MFSlice::constructor; @@ -1088,6 +1161,167 @@ Local convertLib3MFBallToObject(Isolate* isolate, sLib3MFBall sBall) return returnInstance; } +/************************************************************************************************************************* + Class sLib3MFVector Conversion +**************************************************************************************************************************/ +sLib3MFVector convertObjectToLib3MFVector(Isolate* isolate, const Local & pParamValue) +{ + sLib3MFVector sVector; + Local context = isolate->GetCurrentContext(); + int rowIndex; + + for (rowIndex = 0; rowIndex < 3; rowIndex++) + sVector.m_Coordinates[rowIndex] = 0.0; + + if (pParamValue->IsObject()) { + MaybeLocal maybeObject = pParamValue->ToObject(context); + + if (!maybeObject.IsEmpty()) { + Local obj = maybeObject.ToLocalChecked(); + + // Coordinates Member + MaybeLocal maybeValCoordinates = obj->Get(context, String::NewFromUtf8(isolate, "Coordinates")); + if (!maybeValCoordinates.IsEmpty()) { + Local valCoordinates = maybeValCoordinates.ToLocalChecked(); + if (valCoordinates->IsArray()) { + Local arrayCoordinates = Local::Cast(valCoordinates); + for (int rowIndex = 0; rowIndex < 3; rowIndex++) { + MaybeLocal mlocalValue = arrayCoordinates->Get(context, rowIndex); + Local localValue; + if (mlocalValue.ToLocal(&localValue)) { + if (localValue->IsNumber()) { + MaybeLocal localNumber = localValue->ToNumber(context); + sVector.m_Coordinates[rowIndex] = localNumber.ToLocalChecked()->NumberValue(isolate->GetCurrentContext()).ToChecked(); + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Coordinates array entry is not a number" ))); + } + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Coordinates array entry is invalid" ))); + } + } + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Coordinates member is not an array" ))); + } + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Coordinates member not found in object" ))); + } + + + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "invalid object passed." ))); + } + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "expected object parameter." ))); + } + + return sVector; +} + + + +Local convertLib3MFVectorToObject(Isolate* isolate, sLib3MFVector sVector) +{ + Local returnInstance = Object::New(isolate); + Local newCoordinates = Array::New(isolate, 3); + for (int rowIndex = 0; rowIndex < 3; rowIndex++) { + newCoordinates->Set(rowIndex, Number::New(isolate, sVector.m_Coordinates[rowIndex])); + } + returnInstance->Set(String::NewFromUtf8(isolate, "Coordinates"), newCoordinates); + + + return returnInstance; +} + +/************************************************************************************************************************* + Class sLib3MFMatrix4x4 Conversion +**************************************************************************************************************************/ +sLib3MFMatrix4x4 convertObjectToLib3MFMatrix4x4(Isolate* isolate, const Local & pParamValue) +{ + sLib3MFMatrix4x4 sMatrix4x4; + Local context = isolate->GetCurrentContext(); + int rowIndex; + int columnIndex; + + for (columnIndex = 0; columnIndex < 4; columnIndex++) + for (rowIndex = 0; rowIndex < 4; rowIndex++) + sMatrix4x4.m_Field[columnIndex][rowIndex] = 0.0; + + if (pParamValue->IsObject()) { + MaybeLocal maybeObject = pParamValue->ToObject(context); + + if (!maybeObject.IsEmpty()) { + Local obj = maybeObject.ToLocalChecked(); + + // Field Member + MaybeLocal maybeValField = obj->Get(context, String::NewFromUtf8(isolate, "Field")); + if (!maybeValField.IsEmpty()) { + Local valField = maybeValField.ToLocalChecked(); + if (valField->IsArray()) { + Local arrayField = Local::Cast(valField); + for (int colIndex = 0; colIndex < 4; colIndex++) { + MaybeLocal mlocalCol = arrayField->Get(context, colIndex); + Local localCol; + if (mlocalCol.ToLocal(&localCol)) { + if (localCol->IsArray()) { + Local localColArray = Local::Cast(localCol); + for (int rowIndex = 0; rowIndex < 4; rowIndex++) { + MaybeLocal mlocalValue = localColArray->Get(context, rowIndex); + Local localValue; + if (mlocalValue.ToLocal(&localValue)) { + if (localValue->IsNumber()) { + MaybeLocal localNumber = localValue->ToNumber(context); + sMatrix4x4.m_Field[colIndex][rowIndex] = localNumber.ToLocalChecked()->NumberValue(isolate->GetCurrentContext()).ToChecked(); + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Field array entry is not a number" ))); + } + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Field array entry is invalid" ))); + } + } + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Field array entry is not an array" ))); + } + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Field array entry is invalid" ))); + } + } + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Field member is not an array" ))); + } + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Field member not found in object" ))); + } + + + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "invalid object passed." ))); + } + } else { + isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "expected object parameter." ))); + } + + return sMatrix4x4; +} + + + +Local convertLib3MFMatrix4x4ToObject(Isolate* isolate, sLib3MFMatrix4x4 sMatrix4x4) +{ + Local returnInstance = Object::New(isolate); + Local newField = Array::New(isolate, 4); + for (int colIndex = 0; colIndex < 4; colIndex++) { + Local colArray = Array::New(isolate, 4); + for (int rowIndex = 0; rowIndex < 4; rowIndex++) { + colArray->Set(rowIndex, Number::New(isolate, sMatrix4x4.m_Field[colIndex][rowIndex])); + } + newField->Set(colIndex, colArray); + } + returnInstance->Set(String::NewFromUtf8(isolate, "Field"), newField); + + + return returnInstance; +} + /************************************************************************************************************************* Class CLib3MFBaseClass Implementation **************************************************************************************************************************/ @@ -3248,59 +3482,49 @@ void CLib3MFMultiPropertyGroupIterator::GetCurrentMultiPropertyGroup(const Funct } /************************************************************************************************************************* - Class CLib3MFMetaData Implementation + Class CLib3MFImage3DIterator Implementation **************************************************************************************************************************/ -CLib3MFMetaData::CLib3MFMetaData() +CLib3MFImage3DIterator::CLib3MFImage3DIterator() : CLib3MFBaseClass() { } -CLib3MFMetaData::~CLib3MFMetaData() +CLib3MFImage3DIterator::~CLib3MFImage3DIterator() { } -void CLib3MFMetaData::Init() +void CLib3MFImage3DIterator::Init() { Isolate* isolate = Isolate::GetCurrent(); // Prepare constructor template Local tpl = FunctionTemplate::New(isolate, New); - tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFMetaData")); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFImage3DIterator")); tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); // Prototype - NODE_SET_PROTOTYPE_METHOD(tpl, "GetNameSpace", GetNameSpace); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetNameSpace", SetNameSpace); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetName", GetName); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetName", SetName); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetKey", GetKey); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetMustPreserve", GetMustPreserve); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetMustPreserve", SetMustPreserve); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetType", GetType); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetType", SetType); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetValue", GetValue); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetValue", SetValue); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetCurrentImage3D", GetCurrentImage3D); constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); } -void CLib3MFMetaData::New(const FunctionCallbackInfo& args) +void CLib3MFImage3DIterator::New(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); if (args.IsConstructCall()) { CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); - CLib3MFMetaData * metadataInstance = new CLib3MFMetaData(); - metadataInstance->Wrap(args.This()); + CLib3MFImage3DIterator * image3diteratorInstance = new CLib3MFImage3DIterator(); + image3diteratorInstance->Wrap(args.This()); args.GetReturnValue().Set(args.This()); } else { - RaiseError(isolate, "Lib3MFMetaData: Invalid call to Constructor"); + RaiseError(isolate, "Lib3MFImage3DIterator: Invalid call to Constructor"); } } -Local CLib3MFMetaData::NewInstance(Local pParent, Lib3MFHandle pHandle) +Local CLib3MFImage3DIterator::NewInstance(Local pParent, Lib3MFHandle pHandle) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); @@ -3314,121 +3538,368 @@ Local CLib3MFMetaData::NewInstance(Local pParent, Lib3MFHandle p } -void CLib3MFMetaData::GetNameSpace(const FunctionCallbackInfo& args) +void CLib3MFImage3DIterator::GetCurrentImage3D(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int bytesNeededNameSpace = 0; - unsigned int bytesWrittenNameSpace = 0; + Lib3MFHandle hReturnResource = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetNameSpace."); - if (wrapperTable->m_MetaData_GetNameSpace == nullptr) - throw std::runtime_error("Could not call Lib3MF method MetaData::GetNameSpace."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCurrentImage3D."); + if (wrapperTable->m_Image3DIterator_GetCurrentImage3D == nullptr) + throw std::runtime_error("Could not call Lib3MF method Image3DIterator::GetCurrentImage3D."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult initErrorCode = wrapperTable->m_MetaData_GetNameSpace(instanceHandle, 0, &bytesNeededNameSpace, nullptr); - CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); - std::vector bufferNameSpace; - bufferNameSpace.resize(bytesNeededNameSpace); - Lib3MFResult errorCode = wrapperTable->m_MetaData_GetNameSpace(instanceHandle, bytesNeededNameSpace, &bytesWrittenNameSpace, &bufferNameSpace[0]); + Lib3MFResult errorCode = wrapperTable->m_Image3DIterator_GetCurrentImage3D(instanceHandle, &hReturnResource); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferNameSpace[0])); + Local instanceObjResource = CLib3MFImage3D::NewInstance(args.Holder(), hReturnResource); + args.GetReturnValue().Set(instanceObjResource); } catch (std::exception & E) { RaiseError(isolate, E.what()); } } +/************************************************************************************************************************* + Class CLib3MFFunctionIterator Implementation +**************************************************************************************************************************/ -void CLib3MFMetaData::SetNameSpace(const FunctionCallbackInfo& args) +CLib3MFFunctionIterator::CLib3MFFunctionIterator() + : CLib3MFBaseClass() { - Isolate* isolate = args.GetIsolate(); - HandleScope scope(isolate); - try { - if (!args[0]->IsString()) { - throw std::runtime_error("Expected string parameter 0 (NameSpace)"); - } - v8::String::Utf8Value sutf8NameSpace(isolate, args[0]); - std::string sNameSpace = *sutf8NameSpace; - sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); - if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetNameSpace."); - if (wrapperTable->m_MetaData_SetNameSpace == nullptr) - throw std::runtime_error("Could not call Lib3MF method MetaData::SetNameSpace."); - Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_MetaData_SetNameSpace(instanceHandle, sNameSpace.c_str()); - CheckError(isolate, wrapperTable, instanceHandle, errorCode); +} - } catch (std::exception & E) { - RaiseError(isolate, E.what()); - } +CLib3MFFunctionIterator::~CLib3MFFunctionIterator() +{ } +void CLib3MFFunctionIterator::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); -void CLib3MFMetaData::GetName(const FunctionCallbackInfo& args) + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFFunctionIterator")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetCurrentFunction", GetCurrentFunction); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFFunctionIterator::New(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); - try { - unsigned int bytesNeededName = 0; - unsigned int bytesWrittenName = 0; - sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); - if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetName."); - if (wrapperTable->m_MetaData_GetName == nullptr) - throw std::runtime_error("Could not call Lib3MF method MetaData::GetName."); - Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult initErrorCode = wrapperTable->m_MetaData_GetName(instanceHandle, 0, &bytesNeededName, nullptr); - CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); - std::vector bufferName; - bufferName.resize(bytesNeededName); - Lib3MFResult errorCode = wrapperTable->m_MetaData_GetName(instanceHandle, bytesNeededName, &bytesWrittenName, &bufferName[0]); - CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferName[0])); - } catch (std::exception & E) { - RaiseError(isolate, E.what()); + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFFunctionIterator * functioniteratorInstance = new CLib3MFFunctionIterator(); + functioniteratorInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFFunctionIterator: Invalid call to Constructor"); + } +} + +Local CLib3MFFunctionIterator::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); } + return instance; } -void CLib3MFMetaData::SetName(const FunctionCallbackInfo& args) +void CLib3MFFunctionIterator::GetCurrentFunction(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsString()) { - throw std::runtime_error("Expected string parameter 0 (Name)"); - } - v8::String::Utf8Value sutf8Name(isolate, args[0]); - std::string sName = *sutf8Name; + Lib3MFHandle hReturnResource = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetName."); - if (wrapperTable->m_MetaData_SetName == nullptr) - throw std::runtime_error("Could not call Lib3MF method MetaData::SetName."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCurrentFunction."); + if (wrapperTable->m_FunctionIterator_GetCurrentFunction == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionIterator::GetCurrentFunction."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_MetaData_SetName(instanceHandle, sName.c_str()); + Lib3MFResult errorCode = wrapperTable->m_FunctionIterator_GetCurrentFunction(instanceHandle, &hReturnResource); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjResource = CLib3MFFunction::NewInstance(args.Holder(), hReturnResource); + args.GetReturnValue().Set(instanceObjResource); } catch (std::exception & E) { RaiseError(isolate, E.what()); } } +/************************************************************************************************************************* + Class CLib3MFLevelSetIterator Implementation +**************************************************************************************************************************/ -void CLib3MFMetaData::GetKey(const FunctionCallbackInfo& args) +CLib3MFLevelSetIterator::CLib3MFLevelSetIterator() + : CLib3MFBaseClass() { - Isolate* isolate = args.GetIsolate(); - HandleScope scope(isolate); - try { - unsigned int bytesNeededKey = 0; - unsigned int bytesWrittenKey = 0; - sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); - if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetKey."); - if (wrapperTable->m_MetaData_GetKey == nullptr) +} + +CLib3MFLevelSetIterator::~CLib3MFLevelSetIterator() +{ +} + +void CLib3MFLevelSetIterator::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFLevelSetIterator")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetCurrentLevelSet", GetCurrentLevelSet); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFLevelSetIterator::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFLevelSetIterator * levelsetiteratorInstance = new CLib3MFLevelSetIterator(); + levelsetiteratorInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFLevelSetIterator: Invalid call to Constructor"); + } +} + +Local CLib3MFLevelSetIterator::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFLevelSetIterator::GetCurrentLevelSet(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnResource = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCurrentLevelSet."); + if (wrapperTable->m_LevelSetIterator_GetCurrentLevelSet == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSetIterator::GetCurrentLevelSet."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_LevelSetIterator_GetCurrentLevelSet(instanceHandle, &hReturnResource); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjResource = CLib3MFLevelSet::NewInstance(args.Holder(), hReturnResource); + args.GetReturnValue().Set(instanceObjResource); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFMetaData Implementation +**************************************************************************************************************************/ + +CLib3MFMetaData::CLib3MFMetaData() + : CLib3MFBaseClass() +{ +} + +CLib3MFMetaData::~CLib3MFMetaData() +{ +} + +void CLib3MFMetaData::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFMetaData")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetNameSpace", GetNameSpace); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetNameSpace", SetNameSpace); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetName", GetName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetName", SetName); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetKey", GetKey); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetMustPreserve", GetMustPreserve); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetMustPreserve", SetMustPreserve); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetType", GetType); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetType", SetType); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetValue", GetValue); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetValue", SetValue); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFMetaData::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFMetaData * metadataInstance = new CLib3MFMetaData(); + metadataInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFMetaData: Invalid call to Constructor"); + } +} + +Local CLib3MFMetaData::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFMetaData::GetNameSpace(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededNameSpace = 0; + unsigned int bytesWrittenNameSpace = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetNameSpace."); + if (wrapperTable->m_MetaData_GetNameSpace == nullptr) + throw std::runtime_error("Could not call Lib3MF method MetaData::GetNameSpace."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_MetaData_GetNameSpace(instanceHandle, 0, &bytesNeededNameSpace, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferNameSpace; + bufferNameSpace.resize(bytesNeededNameSpace); + Lib3MFResult errorCode = wrapperTable->m_MetaData_GetNameSpace(instanceHandle, bytesNeededNameSpace, &bytesWrittenNameSpace, &bufferNameSpace[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferNameSpace[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMetaData::SetNameSpace(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (NameSpace)"); + } + v8::String::Utf8Value sutf8NameSpace(isolate, args[0]); + std::string sNameSpace = *sutf8NameSpace; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetNameSpace."); + if (wrapperTable->m_MetaData_SetNameSpace == nullptr) + throw std::runtime_error("Could not call Lib3MF method MetaData::SetNameSpace."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MetaData_SetNameSpace(instanceHandle, sNameSpace.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMetaData::GetName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededName = 0; + unsigned int bytesWrittenName = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetName."); + if (wrapperTable->m_MetaData_GetName == nullptr) + throw std::runtime_error("Could not call Lib3MF method MetaData::GetName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_MetaData_GetName(instanceHandle, 0, &bytesNeededName, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferName; + bufferName.resize(bytesNeededName); + Lib3MFResult errorCode = wrapperTable->m_MetaData_GetName(instanceHandle, bytesNeededName, &bytesWrittenName, &bufferName[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferName[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMetaData::SetName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Name)"); + } + v8::String::Utf8Value sutf8Name(isolate, args[0]); + std::string sName = *sutf8Name; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetName."); + if (wrapperTable->m_MetaData_SetName == nullptr) + throw std::runtime_error("Could not call Lib3MF method MetaData::SetName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MetaData_SetName(instanceHandle, sName.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMetaData::GetKey(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededKey = 0; + unsigned int bytesWrittenKey = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetKey."); + if (wrapperTable->m_MetaData_GetKey == nullptr) throw std::runtime_error("Could not call Lib3MF method MetaData::GetKey."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); Lib3MFResult initErrorCode = wrapperTable->m_MetaData_GetKey(instanceHandle, 0, &bytesNeededKey, nullptr); @@ -3867,6 +4338,7 @@ void CLib3MFObject::Init() NODE_SET_PROTOTYPE_METHOD(tpl, "SetPartNumber", SetPartNumber); NODE_SET_PROTOTYPE_METHOD(tpl, "IsMeshObject", IsMeshObject); NODE_SET_PROTOTYPE_METHOD(tpl, "IsComponentsObject", IsComponentsObject); + NODE_SET_PROTOTYPE_METHOD(tpl, "IsLevelSetObject", IsLevelSetObject); NODE_SET_PROTOTYPE_METHOD(tpl, "IsValid", IsValid); NODE_SET_PROTOTYPE_METHOD(tpl, "SetAttachmentAsThumbnail", SetAttachmentAsThumbnail); NODE_SET_PROTOTYPE_METHOD(tpl, "GetThumbnailAttachment", GetThumbnailAttachment); @@ -4108,6 +4580,28 @@ void CLib3MFObject::IsComponentsObject(const FunctionCallbackInfo& args) } +void CLib3MFObject::IsLevelSetObject(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + bool bReturnIsLevelSetObject = false; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method IsLevelSetObject."); + if (wrapperTable->m_Object_IsLevelSetObject == nullptr) + throw std::runtime_error("Could not call Lib3MF method Object::IsLevelSetObject."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Object_IsLevelSetObject(instanceHandle, &bReturnIsLevelSetObject); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Boolean::New(isolate, bReturnIsLevelSetObject)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + void CLib3MFObject::IsValid(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); @@ -4487,6 +4981,8 @@ void CLib3MFMeshObject::Init() NODE_SET_PROTOTYPE_METHOD(tpl, "SetGeometry", SetGeometry); NODE_SET_PROTOTYPE_METHOD(tpl, "IsManifoldAndOriented", IsManifoldAndOriented); NODE_SET_PROTOTYPE_METHOD(tpl, "BeamLattice", BeamLattice); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetVolumeData", GetVolumeData); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetVolumeData", SetVolumeData); constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); } @@ -4998,72 +5494,116 @@ void CLib3MFMeshObject::BeamLattice(const FunctionCallbackInfo& args) } } -/************************************************************************************************************************* - Class CLib3MFBeamLattice Implementation + +void CLib3MFMeshObject::GetVolumeData(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnTheVolumeData = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetVolumeData."); + if (wrapperTable->m_MeshObject_GetVolumeData == nullptr) + throw std::runtime_error("Could not call Lib3MF method MeshObject::GetVolumeData."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MeshObject_GetVolumeData(instanceHandle, &hReturnTheVolumeData); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjTheVolumeData = CLib3MFVolumeData::NewInstance(args.Holder(), hReturnTheVolumeData); + args.GetReturnValue().Set(instanceObjTheVolumeData); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMeshObject::SetVolumeData(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (TheVolumeData)"); + } + Local objTheVolumeData = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFVolumeData * instanceTheVolumeData = ObjectWrap::Unwrap(objTheVolumeData); + if (instanceTheVolumeData == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (TheVolumeData)"); + Lib3MFHandle hTheVolumeData = instanceTheVolumeData->getHandle( objTheVolumeData ); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetVolumeData."); + if (wrapperTable->m_MeshObject_SetVolumeData == nullptr) + throw std::runtime_error("Could not call Lib3MF method MeshObject::SetVolumeData."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MeshObject_SetVolumeData(instanceHandle, hTheVolumeData); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFLevelSet Implementation **************************************************************************************************************************/ -CLib3MFBeamLattice::CLib3MFBeamLattice() +CLib3MFLevelSet::CLib3MFLevelSet() : CLib3MFBaseClass() { } -CLib3MFBeamLattice::~CLib3MFBeamLattice() +CLib3MFLevelSet::~CLib3MFLevelSet() { } -void CLib3MFBeamLattice::Init() +void CLib3MFLevelSet::Init() { Isolate* isolate = Isolate::GetCurrent(); // Prepare constructor template Local tpl = FunctionTemplate::New(isolate, New); - tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFBeamLattice")); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFLevelSet")); tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); // Prototype - NODE_SET_PROTOTYPE_METHOD(tpl, "GetMinLength", GetMinLength); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetMinLength", SetMinLength); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetClipping", GetClipping); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetClipping", SetClipping); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetRepresentation", GetRepresentation); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetRepresentation", SetRepresentation); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetBallOptions", GetBallOptions); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetBallOptions", SetBallOptions); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetBeamCount", GetBeamCount); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetBeam", GetBeam); - NODE_SET_PROTOTYPE_METHOD(tpl, "AddBeam", AddBeam); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetBeam", SetBeam); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetBeams", SetBeams); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetBeams", GetBeams); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetBallCount", GetBallCount); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetBall", GetBall); - NODE_SET_PROTOTYPE_METHOD(tpl, "AddBall", AddBall); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetBall", SetBall); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetBalls", SetBalls); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetBalls", GetBalls); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetBeamSetCount", GetBeamSetCount); - NODE_SET_PROTOTYPE_METHOD(tpl, "AddBeamSet", AddBeamSet); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetBeamSet", GetBeamSet); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetFunction", GetFunction); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetFunction", SetFunction); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetTransform", GetTransform); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetTransform", SetTransform); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetChannelName", GetChannelName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetChannelName", SetChannelName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetMinFeatureSize", SetMinFeatureSize); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetMinFeatureSize", GetMinFeatureSize); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetFallBackValue", SetFallBackValue); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetFallBackValue", GetFallBackValue); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetMeshBBoxOnly", SetMeshBBoxOnly); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetMeshBBoxOnly", GetMeshBBoxOnly); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetMesh", SetMesh); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetMesh", GetMesh); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetVolumeData", GetVolumeData); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetVolumeData", SetVolumeData); constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); } -void CLib3MFBeamLattice::New(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::New(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); if (args.IsConstructCall()) { CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); - CLib3MFBeamLattice * beamlatticeInstance = new CLib3MFBeamLattice(); - beamlatticeInstance->Wrap(args.This()); + CLib3MFLevelSet * levelsetInstance = new CLib3MFLevelSet(); + levelsetInstance->Wrap(args.This()); args.GetReturnValue().Set(args.This()); } else { - RaiseError(isolate, "Lib3MFBeamLattice: Invalid call to Constructor"); + RaiseError(isolate, "Lib3MFLevelSet: Invalid call to Constructor"); } } -Local CLib3MFBeamLattice::NewInstance(Local pParent, Lib3MFHandle pHandle) +Local CLib3MFLevelSet::NewInstance(Local pParent, Lib3MFHandle pHandle) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); @@ -5077,21 +5617,22 @@ Local CLib3MFBeamLattice::NewInstance(Local pParent, Lib3MFHandl } -void CLib3MFBeamLattice::GetMinLength(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::GetFunction(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - double dReturnMinLength = 0.0; + Lib3MFHandle hReturnTheFunction = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetMinLength."); - if (wrapperTable->m_BeamLattice_GetMinLength == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetMinLength."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetFunction."); + if (wrapperTable->m_LevelSet_GetFunction == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::GetFunction."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetMinLength(instanceHandle, &dReturnMinLength); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_GetFunction(instanceHandle, &hReturnTheFunction); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Number::New(isolate, dReturnMinLength)); + Local instanceObjTheFunction = CLib3MFFunction::NewInstance(args.Holder(), hReturnTheFunction); + args.GetReturnValue().Set(instanceObjTheFunction); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5099,22 +5640,26 @@ void CLib3MFBeamLattice::GetMinLength(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::SetMinLength(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::SetFunction(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsNumber()) { - throw std::runtime_error("Expected double parameter 0 (MinLength)"); + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (TheFunction)"); } - double dMinLength = (double) args[0]->NumberValue(isolate->GetCurrentContext()).ToChecked(); + Local objTheFunction = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFFunction * instanceTheFunction = ObjectWrap::Unwrap(objTheFunction); + if (instanceTheFunction == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (TheFunction)"); + Lib3MFHandle hTheFunction = instanceTheFunction->getHandle( objTheFunction ); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetMinLength."); - if (wrapperTable->m_BeamLattice_SetMinLength == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetMinLength."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetFunction."); + if (wrapperTable->m_LevelSet_SetFunction == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::SetFunction."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetMinLength(instanceHandle, dMinLength); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_SetFunction(instanceHandle, hTheFunction); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -5123,25 +5668,21 @@ void CLib3MFBeamLattice::SetMinLength(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::GetClipping(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::GetTransform(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - Local outObject = Object::New(isolate); - eLib3MFBeamLatticeClipMode eReturnClipMode; - unsigned int nReturnUniqueResourceID = 0; + sLib3MFTransform sReturnTransform; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetClipping."); - if (wrapperTable->m_BeamLattice_GetClipping == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetClipping."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetTransform."); + if (wrapperTable->m_LevelSet_GetTransform == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::GetTransform."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetClipping(instanceHandle, &eReturnClipMode, &nReturnUniqueResourceID); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_GetTransform(instanceHandle, &sReturnTransform); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "ClipMode"), Integer::New(isolate, (int)eReturnClipMode)); - outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "UniqueResourceID"), Integer::NewFromUnsigned(isolate, nReturnUniqueResourceID)); - args.GetReturnValue().Set(outObject); + args.GetReturnValue().Set(convertLib3MFTransformToObject(isolate, sReturnTransform)); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5149,26 +5690,22 @@ void CLib3MFBeamLattice::GetClipping(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::SetClipping(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::SetTransform(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected enum parameter 0 (ClipMode)"); - } - if (!args[1]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 1 (UniqueResourceID)"); + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected struct parameter 0 (Transform)"); } - unsigned int eClipMode = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - unsigned int nUniqueResourceID = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFTransform sTransform = convertObjectToLib3MFTransform(isolate, args[0]); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetClipping."); - if (wrapperTable->m_BeamLattice_SetClipping == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetClipping."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetTransform."); + if (wrapperTable->m_LevelSet_SetTransform == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::SetTransform."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetClipping(instanceHandle, (eLib3MFBeamLatticeClipMode) eClipMode, nUniqueResourceID); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_SetTransform(instanceHandle, &sTransform); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -5177,25 +5714,26 @@ void CLib3MFBeamLattice::SetClipping(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::GetRepresentation(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::GetChannelName(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - Local outObject = Object::New(isolate); - bool bReturnHasRepresentation = false; - unsigned int nReturnUniqueResourceID = 0; + unsigned int bytesNeededChannelName = 0; + unsigned int bytesWrittenChannelName = 0; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetRepresentation."); - if (wrapperTable->m_BeamLattice_GetRepresentation == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetRepresentation."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetChannelName."); + if (wrapperTable->m_LevelSet_GetChannelName == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::GetChannelName."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetRepresentation(instanceHandle, &bReturnHasRepresentation, &nReturnUniqueResourceID); + Lib3MFResult initErrorCode = wrapperTable->m_LevelSet_GetChannelName(instanceHandle, 0, &bytesNeededChannelName, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferChannelName; + bufferChannelName.resize(bytesNeededChannelName); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_GetChannelName(instanceHandle, bytesNeededChannelName, &bytesWrittenChannelName, &bufferChannelName[0]); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "HasRepresentation"), Boolean::New(isolate, bReturnHasRepresentation)); - outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "UniqueResourceID"), Integer::NewFromUnsigned(isolate, nReturnUniqueResourceID)); - args.GetReturnValue().Set(outObject); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferChannelName[0])); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5203,49 +5741,24 @@ void CLib3MFBeamLattice::GetRepresentation(const FunctionCallbackInfo& ar } -void CLib3MFBeamLattice::SetRepresentation(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::SetChannelName(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (UniqueResourceID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (ChannelName)"); } - unsigned int nUniqueResourceID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); - if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetRepresentation."); - if (wrapperTable->m_BeamLattice_SetRepresentation == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetRepresentation."); - Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetRepresentation(instanceHandle, nUniqueResourceID); - CheckError(isolate, wrapperTable, instanceHandle, errorCode); - - } catch (std::exception & E) { - RaiseError(isolate, E.what()); - } -} - - -void CLib3MFBeamLattice::GetBallOptions(const FunctionCallbackInfo& args) -{ - Isolate* isolate = args.GetIsolate(); - HandleScope scope(isolate); - try { - Local outObject = Object::New(isolate); - eLib3MFBeamLatticeBallMode eReturnBallMode; - double dReturnBallRadius = 0.0; + v8::String::Utf8Value sutf8ChannelName(isolate, args[0]); + std::string sChannelName = *sutf8ChannelName; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBallOptions."); - if (wrapperTable->m_BeamLattice_GetBallOptions == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBallOptions."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetChannelName."); + if (wrapperTable->m_LevelSet_SetChannelName == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::SetChannelName."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBallOptions(instanceHandle, &eReturnBallMode, &dReturnBallRadius); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_SetChannelName(instanceHandle, sChannelName.c_str()); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "BallMode"), Integer::New(isolate, (int)eReturnBallMode)); - outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "BallRadius"), Number::New(isolate, dReturnBallRadius)); - args.GetReturnValue().Set(outObject); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5253,26 +5766,22 @@ void CLib3MFBeamLattice::GetBallOptions(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::SetBallOptions(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::SetMinFeatureSize(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected enum parameter 0 (BallMode)"); - } - if (!args[1]->IsNumber()) { - throw std::runtime_error("Expected double parameter 1 (BallRadius)"); + if (!args[0]->IsNumber()) { + throw std::runtime_error("Expected double parameter 0 (MinFeatureSize)"); } - unsigned int eBallMode = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - double dBallRadius = (double) args[1]->NumberValue(isolate->GetCurrentContext()).ToChecked(); + double dMinFeatureSize = (double) args[0]->NumberValue(isolate->GetCurrentContext()).ToChecked(); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetBallOptions."); - if (wrapperTable->m_BeamLattice_SetBallOptions == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetBallOptions."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetMinFeatureSize."); + if (wrapperTable->m_LevelSet_SetMinFeatureSize == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::SetMinFeatureSize."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetBallOptions(instanceHandle, (eLib3MFBeamLatticeBallMode) eBallMode, dBallRadius); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_SetMinFeatureSize(instanceHandle, dMinFeatureSize); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -5281,21 +5790,21 @@ void CLib3MFBeamLattice::SetBallOptions(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::GetBeamCount(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::GetMinFeatureSize(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnCount = 0; + double dReturnMinFeatureSize = 0.0; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBeamCount."); - if (wrapperTable->m_BeamLattice_GetBeamCount == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBeamCount."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetMinFeatureSize."); + if (wrapperTable->m_LevelSet_GetMinFeatureSize == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::GetMinFeatureSize."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBeamCount(instanceHandle, &nReturnCount); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_GetMinFeatureSize(instanceHandle, &dReturnMinFeatureSize); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + args.GetReturnValue().Set(Number::New(isolate, dReturnMinFeatureSize)); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5303,25 +5812,23 @@ void CLib3MFBeamLattice::GetBeamCount(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::GetBeam(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::SetFallBackValue(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + if (!args[0]->IsNumber()) { + throw std::runtime_error("Expected double parameter 0 (FallBackValue)"); } - unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - sLib3MFBeam sReturnBeamInfo; + double dFallBackValue = (double) args[0]->NumberValue(isolate->GetCurrentContext()).ToChecked(); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBeam."); - if (wrapperTable->m_BeamLattice_GetBeam == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBeam."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetFallBackValue."); + if (wrapperTable->m_LevelSet_SetFallBackValue == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::SetFallBackValue."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBeam(instanceHandle, nIndex, &sReturnBeamInfo); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_SetFallBackValue(instanceHandle, dFallBackValue); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(convertLib3MFBeamToObject(isolate, sReturnBeamInfo)); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5329,25 +5836,21 @@ void CLib3MFBeamLattice::GetBeam(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::AddBeam(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::GetFallBackValue(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsObject()) { - throw std::runtime_error("Expected struct parameter 0 (BeamInfo)"); - } - sLib3MFBeam sBeamInfo = convertObjectToLib3MFBeam(isolate, args[0]); - unsigned int nReturnIndex = 0; + double dReturnFallBackValue = 0.0; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method AddBeam."); - if (wrapperTable->m_BeamLattice_AddBeam == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::AddBeam."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetFallBackValue."); + if (wrapperTable->m_LevelSet_GetFallBackValue == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::GetFallBackValue."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_AddBeam(instanceHandle, &sBeamInfo, &nReturnIndex); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_GetFallBackValue(instanceHandle, &dReturnFallBackValue); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnIndex)); + args.GetReturnValue().Set(Number::New(isolate, dReturnFallBackValue)); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5355,26 +5858,22 @@ void CLib3MFBeamLattice::AddBeam(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::SetBeam(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::SetMeshBBoxOnly(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (Index)"); - } - if (!args[1]->IsObject()) { - throw std::runtime_error("Expected struct parameter 1 (BeamInfo)"); + if (!args[0]->IsBoolean()) { + throw std::runtime_error("Expected bool parameter 0 (MeshBBoxOnly)"); } - unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - sLib3MFBeam sBeamInfo = convertObjectToLib3MFBeam(isolate, args[1]); + bool bMeshBBoxOnly = args[0]->BooleanValue(isolate->GetCurrentContext()).ToChecked(); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetBeam."); - if (wrapperTable->m_BeamLattice_SetBeam == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetBeam."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetMeshBBoxOnly."); + if (wrapperTable->m_LevelSet_SetMeshBBoxOnly == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::SetMeshBBoxOnly."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetBeam(instanceHandle, nIndex, &sBeamInfo); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_SetMeshBBoxOnly(instanceHandle, bMeshBBoxOnly); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -5383,19 +5882,21 @@ void CLib3MFBeamLattice::SetBeam(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::SetBeams(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::GetMeshBBoxOnly(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { + bool bReturnMeshBBoxOnly = false; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetBeams."); - if (wrapperTable->m_BeamLattice_SetBeams == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetBeams."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetMeshBBoxOnly."); + if (wrapperTable->m_LevelSet_GetMeshBBoxOnly == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::GetMeshBBoxOnly."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetBeams(instanceHandle, 0, nullptr); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_GetMeshBBoxOnly(instanceHandle, &bReturnMeshBBoxOnly); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Boolean::New(isolate, bReturnMeshBBoxOnly)); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5403,18 +5904,26 @@ void CLib3MFBeamLattice::SetBeams(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::GetBeams(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::SetMesh(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (TheMesh)"); + } + Local objTheMesh = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFMeshObject * instanceTheMesh = ObjectWrap::Unwrap(objTheMesh); + if (instanceTheMesh == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (TheMesh)"); + Lib3MFHandle hTheMesh = instanceTheMesh->getHandle( objTheMesh ); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBeams."); - if (wrapperTable->m_BeamLattice_GetBeams == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBeams."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetMesh."); + if (wrapperTable->m_LevelSet_SetMesh == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::SetMesh."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBeams(instanceHandle, 0, nullptr, nullptr); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_SetMesh(instanceHandle, hTheMesh); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -5423,21 +5932,22 @@ void CLib3MFBeamLattice::GetBeams(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::GetBallCount(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::GetMesh(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnCount = 0; + Lib3MFHandle hReturnTheMesh = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBallCount."); - if (wrapperTable->m_BeamLattice_GetBallCount == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBallCount."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetMesh."); + if (wrapperTable->m_LevelSet_GetMesh == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::GetMesh."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBallCount(instanceHandle, &nReturnCount); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_GetMesh(instanceHandle, &hReturnTheMesh); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + Local instanceObjTheMesh = CLib3MFMeshObject::NewInstance(args.Holder(), hReturnTheMesh); + args.GetReturnValue().Set(instanceObjTheMesh); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5445,25 +5955,22 @@ void CLib3MFBeamLattice::GetBallCount(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::GetBall(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::GetVolumeData(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (Index)"); - } - unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - sLib3MFBall sReturnBallInfo; + Lib3MFHandle hReturnTheVolumeData = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBall."); - if (wrapperTable->m_BeamLattice_GetBall == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBall."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetVolumeData."); + if (wrapperTable->m_LevelSet_GetVolumeData == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::GetVolumeData."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBall(instanceHandle, nIndex, &sReturnBallInfo); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_GetVolumeData(instanceHandle, &hReturnTheVolumeData); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(convertLib3MFBallToObject(isolate, sReturnBallInfo)); + Local instanceObjTheVolumeData = CLib3MFVolumeData::NewInstance(args.Holder(), hReturnTheVolumeData); + args.GetReturnValue().Set(instanceObjTheVolumeData); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5471,115 +5978,9580 @@ void CLib3MFBeamLattice::GetBall(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::AddBall(const FunctionCallbackInfo& args) +void CLib3MFLevelSet::SetVolumeData(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { if (!args[0]->IsObject()) { - throw std::runtime_error("Expected struct parameter 0 (BallInfo)"); + throw std::runtime_error("Expected class parameter 0 (TheVolumeData)"); } - sLib3MFBall sBallInfo = convertObjectToLib3MFBall(isolate, args[0]); - unsigned int nReturnIndex = 0; + Local objTheVolumeData = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFVolumeData * instanceTheVolumeData = ObjectWrap::Unwrap(objTheVolumeData); + if (instanceTheVolumeData == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (TheVolumeData)"); + Lib3MFHandle hTheVolumeData = instanceTheVolumeData->getHandle( objTheVolumeData ); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method AddBall."); - if (wrapperTable->m_BeamLattice_AddBall == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::AddBall."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetVolumeData."); + if (wrapperTable->m_LevelSet_SetVolumeData == nullptr) + throw std::runtime_error("Could not call Lib3MF method LevelSet::SetVolumeData."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_AddBall(instanceHandle, &sBallInfo, &nReturnIndex); + Lib3MFResult errorCode = wrapperTable->m_LevelSet_SetVolumeData(instanceHandle, hTheVolumeData); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnIndex)); } catch (std::exception & E) { RaiseError(isolate, E.what()); } } - -void CLib3MFBeamLattice::SetBall(const FunctionCallbackInfo& args) +/************************************************************************************************************************* + Class CLib3MFBeamLattice Implementation +**************************************************************************************************************************/ + +CLib3MFBeamLattice::CLib3MFBeamLattice() + : CLib3MFBaseClass() +{ +} + +CLib3MFBeamLattice::~CLib3MFBeamLattice() +{ +} + +void CLib3MFBeamLattice::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFBeamLattice")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetMinLength", GetMinLength); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetMinLength", SetMinLength); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetClipping", GetClipping); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetClipping", SetClipping); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetRepresentation", GetRepresentation); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetRepresentation", SetRepresentation); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetBallOptions", GetBallOptions); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetBallOptions", SetBallOptions); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetBeamCount", GetBeamCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetBeam", GetBeam); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddBeam", AddBeam); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetBeam", SetBeam); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetBeams", SetBeams); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetBeams", GetBeams); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetBallCount", GetBallCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetBall", GetBall); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddBall", AddBall); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetBall", SetBall); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetBalls", SetBalls); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetBalls", GetBalls); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetBeamSetCount", GetBeamSetCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddBeamSet", AddBeamSet); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetBeamSet", GetBeamSet); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFBeamLattice::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFBeamLattice * beamlatticeInstance = new CLib3MFBeamLattice(); + beamlatticeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFBeamLattice: Invalid call to Constructor"); + } +} + +Local CLib3MFBeamLattice::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFBeamLattice::GetMinLength(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + double dReturnMinLength = 0.0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetMinLength."); + if (wrapperTable->m_BeamLattice_GetMinLength == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetMinLength."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetMinLength(instanceHandle, &dReturnMinLength); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Number::New(isolate, dReturnMinLength)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::SetMinLength(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsNumber()) { + throw std::runtime_error("Expected double parameter 0 (MinLength)"); + } + double dMinLength = (double) args[0]->NumberValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetMinLength."); + if (wrapperTable->m_BeamLattice_SetMinLength == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetMinLength."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetMinLength(instanceHandle, dMinLength); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::GetClipping(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Local outObject = Object::New(isolate); + eLib3MFBeamLatticeClipMode eReturnClipMode; + unsigned int nReturnUniqueResourceID = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetClipping."); + if (wrapperTable->m_BeamLattice_GetClipping == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetClipping."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetClipping(instanceHandle, &eReturnClipMode, &nReturnUniqueResourceID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "ClipMode"), Integer::New(isolate, (int)eReturnClipMode)); + outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "UniqueResourceID"), Integer::NewFromUnsigned(isolate, nReturnUniqueResourceID)); + args.GetReturnValue().Set(outObject); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::SetClipping(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + throw std::runtime_error("Expected enum parameter 0 (ClipMode)"); } - if (!args[1]->IsObject()) { - throw std::runtime_error("Expected struct parameter 1 (BallInfo)"); + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 1 (UniqueResourceID)"); } - unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - sLib3MFBall sBallInfo = convertObjectToLib3MFBall(isolate, args[1]); + unsigned int eClipMode = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + unsigned int nUniqueResourceID = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetBall."); - if (wrapperTable->m_BeamLattice_SetBall == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetBall."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetClipping."); + if (wrapperTable->m_BeamLattice_SetClipping == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetClipping."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetBall(instanceHandle, nIndex, &sBallInfo); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetClipping(instanceHandle, (eLib3MFBeamLatticeClipMode) eClipMode, nUniqueResourceID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::GetRepresentation(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Local outObject = Object::New(isolate); + bool bReturnHasRepresentation = false; + unsigned int nReturnUniqueResourceID = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetRepresentation."); + if (wrapperTable->m_BeamLattice_GetRepresentation == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetRepresentation."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetRepresentation(instanceHandle, &bReturnHasRepresentation, &nReturnUniqueResourceID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "HasRepresentation"), Boolean::New(isolate, bReturnHasRepresentation)); + outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "UniqueResourceID"), Integer::NewFromUnsigned(isolate, nReturnUniqueResourceID)); + args.GetReturnValue().Set(outObject); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::SetRepresentation(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (UniqueResourceID)"); + } + unsigned int nUniqueResourceID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetRepresentation."); + if (wrapperTable->m_BeamLattice_SetRepresentation == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetRepresentation."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetRepresentation(instanceHandle, nUniqueResourceID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::GetBallOptions(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Local outObject = Object::New(isolate); + eLib3MFBeamLatticeBallMode eReturnBallMode; + double dReturnBallRadius = 0.0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBallOptions."); + if (wrapperTable->m_BeamLattice_GetBallOptions == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBallOptions."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBallOptions(instanceHandle, &eReturnBallMode, &dReturnBallRadius); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "BallMode"), Integer::New(isolate, (int)eReturnBallMode)); + outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "BallRadius"), Number::New(isolate, dReturnBallRadius)); + args.GetReturnValue().Set(outObject); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::SetBallOptions(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 0 (BallMode)"); + } + if (!args[1]->IsNumber()) { + throw std::runtime_error("Expected double parameter 1 (BallRadius)"); + } + unsigned int eBallMode = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + double dBallRadius = (double) args[1]->NumberValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetBallOptions."); + if (wrapperTable->m_BeamLattice_SetBallOptions == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetBallOptions."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetBallOptions(instanceHandle, (eLib3MFBeamLatticeBallMode) eBallMode, dBallRadius); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::GetBeamCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBeamCount."); + if (wrapperTable->m_BeamLattice_GetBeamCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBeamCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBeamCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::GetBeam(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFBeam sReturnBeamInfo; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBeam."); + if (wrapperTable->m_BeamLattice_GetBeam == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBeam."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBeam(instanceHandle, nIndex, &sReturnBeamInfo); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(convertLib3MFBeamToObject(isolate, sReturnBeamInfo)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::AddBeam(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected struct parameter 0 (BeamInfo)"); + } + sLib3MFBeam sBeamInfo = convertObjectToLib3MFBeam(isolate, args[0]); + unsigned int nReturnIndex = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddBeam."); + if (wrapperTable->m_BeamLattice_AddBeam == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::AddBeam."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_AddBeam(instanceHandle, &sBeamInfo, &nReturnIndex); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnIndex)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::SetBeam(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + if (!args[1]->IsObject()) { + throw std::runtime_error("Expected struct parameter 1 (BeamInfo)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFBeam sBeamInfo = convertObjectToLib3MFBeam(isolate, args[1]); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetBeam."); + if (wrapperTable->m_BeamLattice_SetBeam == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetBeam."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetBeam(instanceHandle, nIndex, &sBeamInfo); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::SetBeams(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetBeams."); + if (wrapperTable->m_BeamLattice_SetBeams == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetBeams."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetBeams(instanceHandle, 0, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::GetBeams(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBeams."); + if (wrapperTable->m_BeamLattice_GetBeams == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBeams."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBeams(instanceHandle, 0, nullptr, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::GetBallCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBallCount."); + if (wrapperTable->m_BeamLattice_GetBallCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBallCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBallCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::GetBall(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFBall sReturnBallInfo; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBall."); + if (wrapperTable->m_BeamLattice_GetBall == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBall."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBall(instanceHandle, nIndex, &sReturnBallInfo); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(convertLib3MFBallToObject(isolate, sReturnBallInfo)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::AddBall(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected struct parameter 0 (BallInfo)"); + } + sLib3MFBall sBallInfo = convertObjectToLib3MFBall(isolate, args[0]); + unsigned int nReturnIndex = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddBall."); + if (wrapperTable->m_BeamLattice_AddBall == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::AddBall."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_AddBall(instanceHandle, &sBallInfo, &nReturnIndex); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnIndex)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::SetBall(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + if (!args[1]->IsObject()) { + throw std::runtime_error("Expected struct parameter 1 (BallInfo)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFBall sBallInfo = convertObjectToLib3MFBall(isolate, args[1]); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetBall."); + if (wrapperTable->m_BeamLattice_SetBall == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetBall."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetBall(instanceHandle, nIndex, &sBallInfo); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::SetBalls(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetBalls."); + if (wrapperTable->m_BeamLattice_SetBalls == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetBalls."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetBalls(instanceHandle, 0, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::GetBalls(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBalls."); + if (wrapperTable->m_BeamLattice_GetBalls == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBalls."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBalls(instanceHandle, 0, nullptr, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::GetBeamSetCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBeamSetCount."); + if (wrapperTable->m_BeamLattice_GetBeamSetCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBeamSetCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBeamSetCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::AddBeamSet(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnBeamSet = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddBeamSet."); + if (wrapperTable->m_BeamLattice_AddBeamSet == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::AddBeamSet."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_AddBeamSet(instanceHandle, &hReturnBeamSet); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjBeamSet = CLib3MFBeamSet::NewInstance(args.Holder(), hReturnBeamSet); + args.GetReturnValue().Set(instanceObjBeamSet); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamLattice::GetBeamSet(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + Lib3MFHandle hReturnBeamSet = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBeamSet."); + if (wrapperTable->m_BeamLattice_GetBeamSet == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBeamSet."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBeamSet(instanceHandle, nIndex, &hReturnBeamSet); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjBeamSet = CLib3MFBeamSet::NewInstance(args.Holder(), hReturnBeamSet); + args.GetReturnValue().Set(instanceObjBeamSet); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFFunctionReference Implementation +**************************************************************************************************************************/ + +CLib3MFFunctionReference::CLib3MFFunctionReference() + : CLib3MFBaseClass() +{ +} + +CLib3MFFunctionReference::~CLib3MFFunctionReference() +{ +} + +void CLib3MFFunctionReference::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFFunctionReference")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetFunctionResourceID", GetFunctionResourceID); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetFunctionResourceID", SetFunctionResourceID); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetTransform", GetTransform); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetTransform", SetTransform); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetChannelName", GetChannelName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetChannelName", SetChannelName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetMinFeatureSize", SetMinFeatureSize); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetMinFeatureSize", GetMinFeatureSize); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetFallBackValue", SetFallBackValue); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetFallBackValue", GetFallBackValue); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFFunctionReference::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFFunctionReference * functionreferenceInstance = new CLib3MFFunctionReference(); + functionreferenceInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFFunctionReference: Invalid call to Constructor"); + } +} + +Local CLib3MFFunctionReference::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFFunctionReference::GetFunctionResourceID(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnUniqueResourceID = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetFunctionResourceID."); + if (wrapperTable->m_FunctionReference_GetFunctionResourceID == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionReference::GetFunctionResourceID."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_FunctionReference_GetFunctionResourceID(instanceHandle, &nReturnUniqueResourceID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnUniqueResourceID)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFFunctionReference::SetFunctionResourceID(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (UniqueResourceID)"); + } + unsigned int nUniqueResourceID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetFunctionResourceID."); + if (wrapperTable->m_FunctionReference_SetFunctionResourceID == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionReference::SetFunctionResourceID."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_FunctionReference_SetFunctionResourceID(instanceHandle, nUniqueResourceID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFFunctionReference::GetTransform(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFTransform sReturnTransform; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetTransform."); + if (wrapperTable->m_FunctionReference_GetTransform == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionReference::GetTransform."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_FunctionReference_GetTransform(instanceHandle, &sReturnTransform); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(convertLib3MFTransformToObject(isolate, sReturnTransform)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFFunctionReference::SetTransform(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected struct parameter 0 (Transform)"); + } + sLib3MFTransform sTransform = convertObjectToLib3MFTransform(isolate, args[0]); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetTransform."); + if (wrapperTable->m_FunctionReference_SetTransform == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionReference::SetTransform."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_FunctionReference_SetTransform(instanceHandle, &sTransform); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFFunctionReference::GetChannelName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededChannelName = 0; + unsigned int bytesWrittenChannelName = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetChannelName."); + if (wrapperTable->m_FunctionReference_GetChannelName == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionReference::GetChannelName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_FunctionReference_GetChannelName(instanceHandle, 0, &bytesNeededChannelName, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferChannelName; + bufferChannelName.resize(bytesNeededChannelName); + Lib3MFResult errorCode = wrapperTable->m_FunctionReference_GetChannelName(instanceHandle, bytesNeededChannelName, &bytesWrittenChannelName, &bufferChannelName[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferChannelName[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFFunctionReference::SetChannelName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (ChannelName)"); + } + v8::String::Utf8Value sutf8ChannelName(isolate, args[0]); + std::string sChannelName = *sutf8ChannelName; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetChannelName."); + if (wrapperTable->m_FunctionReference_SetChannelName == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionReference::SetChannelName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_FunctionReference_SetChannelName(instanceHandle, sChannelName.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFFunctionReference::SetMinFeatureSize(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsNumber()) { + throw std::runtime_error("Expected double parameter 0 (MinFeatureSize)"); + } + double dMinFeatureSize = (double) args[0]->NumberValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetMinFeatureSize."); + if (wrapperTable->m_FunctionReference_SetMinFeatureSize == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionReference::SetMinFeatureSize."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_FunctionReference_SetMinFeatureSize(instanceHandle, dMinFeatureSize); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFFunctionReference::GetMinFeatureSize(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + double dReturnMinFeatureSize = 0.0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetMinFeatureSize."); + if (wrapperTable->m_FunctionReference_GetMinFeatureSize == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionReference::GetMinFeatureSize."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_FunctionReference_GetMinFeatureSize(instanceHandle, &dReturnMinFeatureSize); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Number::New(isolate, dReturnMinFeatureSize)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFFunctionReference::SetFallBackValue(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsNumber()) { + throw std::runtime_error("Expected double parameter 0 (FallBackValue)"); + } + double dFallBackValue = (double) args[0]->NumberValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetFallBackValue."); + if (wrapperTable->m_FunctionReference_SetFallBackValue == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionReference::SetFallBackValue."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_FunctionReference_SetFallBackValue(instanceHandle, dFallBackValue); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFFunctionReference::GetFallBackValue(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + double dReturnFallBackValue = 0.0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetFallBackValue."); + if (wrapperTable->m_FunctionReference_GetFallBackValue == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionReference::GetFallBackValue."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_FunctionReference_GetFallBackValue(instanceHandle, &dReturnFallBackValue); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Number::New(isolate, dReturnFallBackValue)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFVolumeDataColor Implementation +**************************************************************************************************************************/ + +CLib3MFVolumeDataColor::CLib3MFVolumeDataColor() + : CLib3MFBaseClass() +{ +} + +CLib3MFVolumeDataColor::~CLib3MFVolumeDataColor() +{ +} + +void CLib3MFVolumeDataColor::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFVolumeDataColor")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFVolumeDataColor::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFVolumeDataColor * volumedatacolorInstance = new CLib3MFVolumeDataColor(); + volumedatacolorInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFVolumeDataColor: Invalid call to Constructor"); + } +} + +Local CLib3MFVolumeDataColor::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFMaterialMapping Implementation +**************************************************************************************************************************/ + +CLib3MFMaterialMapping::CLib3MFMaterialMapping() + : CLib3MFBaseClass() +{ +} + +CLib3MFMaterialMapping::~CLib3MFMaterialMapping() +{ +} + +void CLib3MFMaterialMapping::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFMaterialMapping")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFMaterialMapping::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFMaterialMapping * materialmappingInstance = new CLib3MFMaterialMapping(); + materialmappingInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFMaterialMapping: Invalid call to Constructor"); + } +} + +Local CLib3MFMaterialMapping::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFVolumeDataComposite Implementation +**************************************************************************************************************************/ + +CLib3MFVolumeDataComposite::CLib3MFVolumeDataComposite() + : CLib3MFBaseClass() +{ +} + +CLib3MFVolumeDataComposite::~CLib3MFVolumeDataComposite() +{ +} + +void CLib3MFVolumeDataComposite::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFVolumeDataComposite")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetBaseMaterialGroup", GetBaseMaterialGroup); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetBaseMaterialGroup", SetBaseMaterialGroup); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetMaterialMappingCount", GetMaterialMappingCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetMaterialMapping", GetMaterialMapping); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddMaterialMapping", AddMaterialMapping); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveMaterialMapping", RemoveMaterialMapping); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFVolumeDataComposite::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFVolumeDataComposite * volumedatacompositeInstance = new CLib3MFVolumeDataComposite(); + volumedatacompositeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFVolumeDataComposite: Invalid call to Constructor"); + } +} + +Local CLib3MFVolumeDataComposite::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFVolumeDataComposite::GetBaseMaterialGroup(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnBaseMaterialGroupInstance = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBaseMaterialGroup."); + if (wrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeDataComposite::GetBaseMaterialGroup."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeDataComposite_GetBaseMaterialGroup(instanceHandle, &hReturnBaseMaterialGroupInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjBaseMaterialGroupInstance = CLib3MFBaseMaterialGroup::NewInstance(args.Holder(), hReturnBaseMaterialGroupInstance); + args.GetReturnValue().Set(instanceObjBaseMaterialGroupInstance); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeDataComposite::SetBaseMaterialGroup(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (BaseMaterialGroupInstance)"); + } + Local objBaseMaterialGroupInstance = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFBaseMaterialGroup * instanceBaseMaterialGroupInstance = ObjectWrap::Unwrap(objBaseMaterialGroupInstance); + if (instanceBaseMaterialGroupInstance == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (BaseMaterialGroupInstance)"); + Lib3MFHandle hBaseMaterialGroupInstance = instanceBaseMaterialGroupInstance->getHandle( objBaseMaterialGroupInstance ); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetBaseMaterialGroup."); + if (wrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeDataComposite::SetBaseMaterialGroup."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeDataComposite_SetBaseMaterialGroup(instanceHandle, hBaseMaterialGroupInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeDataComposite::GetMaterialMappingCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetMaterialMappingCount."); + if (wrapperTable->m_VolumeDataComposite_GetMaterialMappingCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeDataComposite::GetMaterialMappingCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeDataComposite_GetMaterialMappingCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeDataComposite::GetMaterialMapping(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + Lib3MFHandle hReturnTheMaterialMapping = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetMaterialMapping."); + if (wrapperTable->m_VolumeDataComposite_GetMaterialMapping == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeDataComposite::GetMaterialMapping."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeDataComposite_GetMaterialMapping(instanceHandle, nIndex, &hReturnTheMaterialMapping); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjTheMaterialMapping = CLib3MFMaterialMapping::NewInstance(args.Holder(), hReturnTheMaterialMapping); + args.GetReturnValue().Set(instanceObjTheMaterialMapping); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeDataComposite::AddMaterialMapping(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected struct parameter 0 (Transform)"); + } + sLib3MFTransform sTransform = convertObjectToLib3MFTransform(isolate, args[0]); + Lib3MFHandle hReturnTheMaterialMapping = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddMaterialMapping."); + if (wrapperTable->m_VolumeDataComposite_AddMaterialMapping == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeDataComposite::AddMaterialMapping."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeDataComposite_AddMaterialMapping(instanceHandle, &sTransform, &hReturnTheMaterialMapping); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjTheMaterialMapping = CLib3MFMaterialMapping::NewInstance(args.Holder(), hReturnTheMaterialMapping); + args.GetReturnValue().Set(instanceObjTheMaterialMapping); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeDataComposite::RemoveMaterialMapping(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveMaterialMapping."); + if (wrapperTable->m_VolumeDataComposite_RemoveMaterialMapping == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeDataComposite::RemoveMaterialMapping."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeDataComposite_RemoveMaterialMapping(instanceHandle, nIndex); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFVolumeDataProperty Implementation +**************************************************************************************************************************/ + +CLib3MFVolumeDataProperty::CLib3MFVolumeDataProperty() + : CLib3MFBaseClass() +{ +} + +CLib3MFVolumeDataProperty::~CLib3MFVolumeDataProperty() +{ +} + +void CLib3MFVolumeDataProperty::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFVolumeDataProperty")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetName", GetName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetIsRequired", SetIsRequired); + NODE_SET_PROTOTYPE_METHOD(tpl, "IsRequired", IsRequired); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFVolumeDataProperty::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFVolumeDataProperty * volumedatapropertyInstance = new CLib3MFVolumeDataProperty(); + volumedatapropertyInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFVolumeDataProperty: Invalid call to Constructor"); + } +} + +Local CLib3MFVolumeDataProperty::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFVolumeDataProperty::GetName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededPropertyName = 0; + unsigned int bytesWrittenPropertyName = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetName."); + if (wrapperTable->m_VolumeDataProperty_GetName == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeDataProperty::GetName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_VolumeDataProperty_GetName(instanceHandle, 0, &bytesNeededPropertyName, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferPropertyName; + bufferPropertyName.resize(bytesNeededPropertyName); + Lib3MFResult errorCode = wrapperTable->m_VolumeDataProperty_GetName(instanceHandle, bytesNeededPropertyName, &bytesWrittenPropertyName, &bufferPropertyName[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferPropertyName[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeDataProperty::SetIsRequired(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsBoolean()) { + throw std::runtime_error("Expected bool parameter 0 (IsRequired)"); + } + bool bIsRequired = args[0]->BooleanValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetIsRequired."); + if (wrapperTable->m_VolumeDataProperty_SetIsRequired == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeDataProperty::SetIsRequired."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeDataProperty_SetIsRequired(instanceHandle, bIsRequired); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeDataProperty::IsRequired(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + bool bReturnIsRequired = false; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method IsRequired."); + if (wrapperTable->m_VolumeDataProperty_IsRequired == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeDataProperty::IsRequired."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeDataProperty_IsRequired(instanceHandle, &bReturnIsRequired); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Boolean::New(isolate, bReturnIsRequired)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFVolumeData Implementation +**************************************************************************************************************************/ + +CLib3MFVolumeData::CLib3MFVolumeData() + : CLib3MFBaseClass() +{ +} + +CLib3MFVolumeData::~CLib3MFVolumeData() +{ +} + +void CLib3MFVolumeData::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFVolumeData")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetComposite", GetComposite); + NODE_SET_PROTOTYPE_METHOD(tpl, "CreateNewComposite", CreateNewComposite); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveComposite", RemoveComposite); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetColor", GetColor); + NODE_SET_PROTOTYPE_METHOD(tpl, "CreateNewColor", CreateNewColor); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveColor", RemoveColor); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetPropertyCount", GetPropertyCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetProperty", GetProperty); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddPropertyFromFunction", AddPropertyFromFunction); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveProperty", RemoveProperty); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFVolumeData::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFVolumeData * volumedataInstance = new CLib3MFVolumeData(); + volumedataInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFVolumeData: Invalid call to Constructor"); + } +} + +Local CLib3MFVolumeData::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFVolumeData::GetComposite(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnTheCompositeData = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetComposite."); + if (wrapperTable->m_VolumeData_GetComposite == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeData::GetComposite."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeData_GetComposite(instanceHandle, &hReturnTheCompositeData); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjTheCompositeData = CLib3MFVolumeDataComposite::NewInstance(args.Holder(), hReturnTheCompositeData); + args.GetReturnValue().Set(instanceObjTheCompositeData); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeData::CreateNewComposite(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnTheCompositeData = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method CreateNewComposite."); + if (wrapperTable->m_VolumeData_CreateNewComposite == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeData::CreateNewComposite."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeData_CreateNewComposite(instanceHandle, &hReturnTheCompositeData); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjTheCompositeData = CLib3MFVolumeDataComposite::NewInstance(args.Holder(), hReturnTheCompositeData); + args.GetReturnValue().Set(instanceObjTheCompositeData); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeData::RemoveComposite(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveComposite."); + if (wrapperTable->m_VolumeData_RemoveComposite == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeData::RemoveComposite."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeData_RemoveComposite(instanceHandle); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeData::GetColor(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnTheColorData = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetColor."); + if (wrapperTable->m_VolumeData_GetColor == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeData::GetColor."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeData_GetColor(instanceHandle, &hReturnTheColorData); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjTheColorData = CLib3MFVolumeDataColor::NewInstance(args.Holder(), hReturnTheColorData); + args.GetReturnValue().Set(instanceObjTheColorData); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeData::CreateNewColor(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (TheFunction)"); + } + Local objTheFunction = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFFunction * instanceTheFunction = ObjectWrap::Unwrap(objTheFunction); + if (instanceTheFunction == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (TheFunction)"); + Lib3MFHandle hTheFunction = instanceTheFunction->getHandle( objTheFunction ); + Lib3MFHandle hReturnTheColorData = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method CreateNewColor."); + if (wrapperTable->m_VolumeData_CreateNewColor == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeData::CreateNewColor."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeData_CreateNewColor(instanceHandle, hTheFunction, &hReturnTheColorData); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjTheColorData = CLib3MFVolumeDataColor::NewInstance(args.Holder(), hReturnTheColorData); + args.GetReturnValue().Set(instanceObjTheColorData); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeData::RemoveColor(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveColor."); + if (wrapperTable->m_VolumeData_RemoveColor == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeData::RemoveColor."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeData_RemoveColor(instanceHandle); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeData::GetPropertyCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetPropertyCount."); + if (wrapperTable->m_VolumeData_GetPropertyCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeData::GetPropertyCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeData_GetPropertyCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeData::GetProperty(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + Lib3MFHandle hReturnTheVolumeDataProperty = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetProperty."); + if (wrapperTable->m_VolumeData_GetProperty == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeData::GetProperty."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeData_GetProperty(instanceHandle, nIndex, &hReturnTheVolumeDataProperty); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjTheVolumeDataProperty = CLib3MFVolumeDataProperty::NewInstance(args.Holder(), hReturnTheVolumeDataProperty); + args.GetReturnValue().Set(instanceObjTheVolumeDataProperty); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeData::AddPropertyFromFunction(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Name)"); + } + if (!args[1]->IsObject()) { + throw std::runtime_error("Expected class parameter 1 (TheFunction)"); + } + v8::String::Utf8Value sutf8Name(isolate, args[0]); + std::string sName = *sutf8Name; + Local objTheFunction = args[1]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFFunction * instanceTheFunction = ObjectWrap::Unwrap(objTheFunction); + if (instanceTheFunction == nullptr) + throw std::runtime_error("Invalid Object parameter 1 (TheFunction)"); + Lib3MFHandle hTheFunction = instanceTheFunction->getHandle( objTheFunction ); + Lib3MFHandle hReturnTheVolumeDataProperty = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddPropertyFromFunction."); + if (wrapperTable->m_VolumeData_AddPropertyFromFunction == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeData::AddPropertyFromFunction."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeData_AddPropertyFromFunction(instanceHandle, sName.c_str(), hTheFunction, &hReturnTheVolumeDataProperty); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjTheVolumeDataProperty = CLib3MFVolumeDataProperty::NewInstance(args.Holder(), hReturnTheVolumeDataProperty); + args.GetReturnValue().Set(instanceObjTheVolumeDataProperty); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFVolumeData::RemoveProperty(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveProperty."); + if (wrapperTable->m_VolumeData_RemoveProperty == nullptr) + throw std::runtime_error("Could not call Lib3MF method VolumeData::RemoveProperty."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_VolumeData_RemoveProperty(instanceHandle, nIndex); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFComponent Implementation +**************************************************************************************************************************/ + +CLib3MFComponent::CLib3MFComponent() + : CLib3MFBaseClass() +{ +} + +CLib3MFComponent::~CLib3MFComponent() +{ +} + +void CLib3MFComponent::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFComponent")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetObjectResource", GetObjectResource); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetObjectResourceID", GetObjectResourceID); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetUUID", GetUUID); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetUUID", SetUUID); + NODE_SET_PROTOTYPE_METHOD(tpl, "HasTransform", HasTransform); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetTransform", GetTransform); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetTransform", SetTransform); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFComponent::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFComponent * componentInstance = new CLib3MFComponent(); + componentInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFComponent: Invalid call to Constructor"); + } +} + +Local CLib3MFComponent::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFComponent::GetObjectResource(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnObjectResource = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetObjectResource."); + if (wrapperTable->m_Component_GetObjectResource == nullptr) + throw std::runtime_error("Could not call Lib3MF method Component::GetObjectResource."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Component_GetObjectResource(instanceHandle, &hReturnObjectResource); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjObjectResource = CLib3MFObject::NewInstance(args.Holder(), hReturnObjectResource); + args.GetReturnValue().Set(instanceObjObjectResource); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComponent::GetObjectResourceID(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnUniqueResourceID = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetObjectResourceID."); + if (wrapperTable->m_Component_GetObjectResourceID == nullptr) + throw std::runtime_error("Could not call Lib3MF method Component::GetObjectResourceID."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Component_GetObjectResourceID(instanceHandle, &nReturnUniqueResourceID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnUniqueResourceID)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComponent::GetUUID(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Local outObject = Object::New(isolate); + bool bReturnHasUUID = false; + unsigned int bytesNeededUUID = 0; + unsigned int bytesWrittenUUID = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetUUID."); + if (wrapperTable->m_Component_GetUUID == nullptr) + throw std::runtime_error("Could not call Lib3MF method Component::GetUUID."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_Component_GetUUID(instanceHandle, &bReturnHasUUID, 0, &bytesNeededUUID, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferUUID; + bufferUUID.resize(bytesNeededUUID); + Lib3MFResult errorCode = wrapperTable->m_Component_GetUUID(instanceHandle, &bReturnHasUUID, bytesNeededUUID, &bytesWrittenUUID, &bufferUUID[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "HasUUID"), Boolean::New(isolate, bReturnHasUUID)); + outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "UUID"), String::NewFromUtf8(isolate, &bufferUUID[0])); + args.GetReturnValue().Set(outObject); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComponent::SetUUID(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (UUID)"); + } + v8::String::Utf8Value sutf8UUID(isolate, args[0]); + std::string sUUID = *sutf8UUID; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetUUID."); + if (wrapperTable->m_Component_SetUUID == nullptr) + throw std::runtime_error("Could not call Lib3MF method Component::SetUUID."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Component_SetUUID(instanceHandle, sUUID.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComponent::HasTransform(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + bool bReturnHasTransform = false; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method HasTransform."); + if (wrapperTable->m_Component_HasTransform == nullptr) + throw std::runtime_error("Could not call Lib3MF method Component::HasTransform."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Component_HasTransform(instanceHandle, &bReturnHasTransform); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Boolean::New(isolate, bReturnHasTransform)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComponent::GetTransform(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFTransform sReturnTransform; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetTransform."); + if (wrapperTable->m_Component_GetTransform == nullptr) + throw std::runtime_error("Could not call Lib3MF method Component::GetTransform."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Component_GetTransform(instanceHandle, &sReturnTransform); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(convertLib3MFTransformToObject(isolate, sReturnTransform)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComponent::SetTransform(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected struct parameter 0 (Transform)"); + } + sLib3MFTransform sTransform = convertObjectToLib3MFTransform(isolate, args[0]); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetTransform."); + if (wrapperTable->m_Component_SetTransform == nullptr) + throw std::runtime_error("Could not call Lib3MF method Component::SetTransform."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Component_SetTransform(instanceHandle, &sTransform); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFComponentsObject Implementation +**************************************************************************************************************************/ + +CLib3MFComponentsObject::CLib3MFComponentsObject() + : CLib3MFBaseClass() +{ +} + +CLib3MFComponentsObject::~CLib3MFComponentsObject() +{ +} + +void CLib3MFComponentsObject::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFComponentsObject")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "AddComponent", AddComponent); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetComponent", GetComponent); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetComponentCount", GetComponentCount); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFComponentsObject::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFComponentsObject * componentsobjectInstance = new CLib3MFComponentsObject(); + componentsobjectInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFComponentsObject: Invalid call to Constructor"); + } +} + +Local CLib3MFComponentsObject::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFComponentsObject::AddComponent(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (ObjectResource)"); + } + if (!args[1]->IsObject()) { + throw std::runtime_error("Expected struct parameter 1 (Transform)"); + } + Local objObjectResource = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFObject * instanceObjectResource = ObjectWrap::Unwrap(objObjectResource); + if (instanceObjectResource == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (ObjectResource)"); + Lib3MFHandle hObjectResource = instanceObjectResource->getHandle( objObjectResource ); + sLib3MFTransform sTransform = convertObjectToLib3MFTransform(isolate, args[1]); + Lib3MFHandle hReturnComponentInstance = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddComponent."); + if (wrapperTable->m_ComponentsObject_AddComponent == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComponentsObject::AddComponent."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComponentsObject_AddComponent(instanceHandle, hObjectResource, &sTransform, &hReturnComponentInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjComponentInstance = CLib3MFComponent::NewInstance(args.Holder(), hReturnComponentInstance); + args.GetReturnValue().Set(instanceObjComponentInstance); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComponentsObject::GetComponent(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + Lib3MFHandle hReturnComponentInstance = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetComponent."); + if (wrapperTable->m_ComponentsObject_GetComponent == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComponentsObject::GetComponent."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComponentsObject_GetComponent(instanceHandle, nIndex, &hReturnComponentInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjComponentInstance = CLib3MFComponent::NewInstance(args.Holder(), hReturnComponentInstance); + args.GetReturnValue().Set(instanceObjComponentInstance); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComponentsObject::GetComponentCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetComponentCount."); + if (wrapperTable->m_ComponentsObject_GetComponentCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComponentsObject::GetComponentCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComponentsObject_GetComponentCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFBeamSet Implementation +**************************************************************************************************************************/ + +CLib3MFBeamSet::CLib3MFBeamSet() + : CLib3MFBaseClass() +{ +} + +CLib3MFBeamSet::~CLib3MFBeamSet() +{ +} + +void CLib3MFBeamSet::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFBeamSet")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "SetName", SetName); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetName", GetName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetIdentifier", SetIdentifier); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetIdentifier", GetIdentifier); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetReferenceCount", GetReferenceCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetReferences", SetReferences); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetReferences", GetReferences); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetBallReferenceCount", GetBallReferenceCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetBallReferences", SetBallReferences); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetBallReferences", GetBallReferences); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFBeamSet::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFBeamSet * beamsetInstance = new CLib3MFBeamSet(); + beamsetInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFBeamSet: Invalid call to Constructor"); + } +} + +Local CLib3MFBeamSet::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFBeamSet::SetName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Name)"); + } + v8::String::Utf8Value sutf8Name(isolate, args[0]); + std::string sName = *sutf8Name; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetName."); + if (wrapperTable->m_BeamSet_SetName == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamSet::SetName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamSet_SetName(instanceHandle, sName.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamSet::GetName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededName = 0; + unsigned int bytesWrittenName = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetName."); + if (wrapperTable->m_BeamSet_GetName == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamSet::GetName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_BeamSet_GetName(instanceHandle, 0, &bytesNeededName, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferName; + bufferName.resize(bytesNeededName); + Lib3MFResult errorCode = wrapperTable->m_BeamSet_GetName(instanceHandle, bytesNeededName, &bytesWrittenName, &bufferName[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferName[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamSet::SetIdentifier(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetIdentifier."); + if (wrapperTable->m_BeamSet_SetIdentifier == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamSet::SetIdentifier."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamSet_SetIdentifier(instanceHandle, sIdentifier.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamSet::GetIdentifier(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededIdentifier = 0; + unsigned int bytesWrittenIdentifier = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetIdentifier."); + if (wrapperTable->m_BeamSet_GetIdentifier == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamSet::GetIdentifier."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_BeamSet_GetIdentifier(instanceHandle, 0, &bytesNeededIdentifier, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferIdentifier; + bufferIdentifier.resize(bytesNeededIdentifier); + Lib3MFResult errorCode = wrapperTable->m_BeamSet_GetIdentifier(instanceHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferIdentifier[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamSet::GetReferenceCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetReferenceCount."); + if (wrapperTable->m_BeamSet_GetReferenceCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamSet::GetReferenceCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamSet_GetReferenceCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamSet::SetReferences(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetReferences."); + if (wrapperTable->m_BeamSet_SetReferences == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamSet::SetReferences."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamSet_SetReferences(instanceHandle, 0, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamSet::GetReferences(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetReferences."); + if (wrapperTable->m_BeamSet_GetReferences == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamSet::GetReferences."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamSet_GetReferences(instanceHandle, 0, nullptr, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamSet::GetBallReferenceCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBallReferenceCount."); + if (wrapperTable->m_BeamSet_GetBallReferenceCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamSet::GetBallReferenceCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamSet_GetBallReferenceCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamSet::SetBallReferences(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetBallReferences."); + if (wrapperTable->m_BeamSet_SetBallReferences == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamSet::SetBallReferences."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamSet_SetBallReferences(instanceHandle, 0, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBeamSet::GetBallReferences(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBallReferences."); + if (wrapperTable->m_BeamSet_GetBallReferences == nullptr) + throw std::runtime_error("Could not call Lib3MF method BeamSet::GetBallReferences."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BeamSet_GetBallReferences(instanceHandle, 0, nullptr, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFBaseMaterialGroup Implementation +**************************************************************************************************************************/ + +CLib3MFBaseMaterialGroup::CLib3MFBaseMaterialGroup() + : CLib3MFBaseClass() +{ +} + +CLib3MFBaseMaterialGroup::~CLib3MFBaseMaterialGroup() +{ +} + +void CLib3MFBaseMaterialGroup::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFBaseMaterialGroup")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetCount", GetCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetAllPropertyIDs", GetAllPropertyIDs); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddMaterial", AddMaterial); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveMaterial", RemoveMaterial); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetName", GetName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetName", SetName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetDisplayColor", SetDisplayColor); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetDisplayColor", GetDisplayColor); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFBaseMaterialGroup::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFBaseMaterialGroup * basematerialgroupInstance = new CLib3MFBaseMaterialGroup(); + basematerialgroupInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFBaseMaterialGroup: Invalid call to Constructor"); + } +} + +Local CLib3MFBaseMaterialGroup::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFBaseMaterialGroup::GetCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCount."); + if (wrapperTable->m_BaseMaterialGroup_GetCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::GetCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_GetCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBaseMaterialGroup::GetAllPropertyIDs(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetAllPropertyIDs."); + if (wrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs == nullptr) + throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::GetAllPropertyIDs."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs(instanceHandle, 0, nullptr, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBaseMaterialGroup::AddMaterial(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Name)"); + } + if (!args[1]->IsObject()) { + throw std::runtime_error("Expected struct parameter 1 (DisplayColor)"); + } + v8::String::Utf8Value sutf8Name(isolate, args[0]); + std::string sName = *sutf8Name; + sLib3MFColor sDisplayColor = convertObjectToLib3MFColor(isolate, args[1]); + unsigned int nReturnPropertyID = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddMaterial."); + if (wrapperTable->m_BaseMaterialGroup_AddMaterial == nullptr) + throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::AddMaterial."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_AddMaterial(instanceHandle, sName.c_str(), &sDisplayColor, &nReturnPropertyID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnPropertyID)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBaseMaterialGroup::RemoveMaterial(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveMaterial."); + if (wrapperTable->m_BaseMaterialGroup_RemoveMaterial == nullptr) + throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::RemoveMaterial."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_RemoveMaterial(instanceHandle, nPropertyID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBaseMaterialGroup::GetName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + unsigned int bytesNeededName = 0; + unsigned int bytesWrittenName = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetName."); + if (wrapperTable->m_BaseMaterialGroup_GetName == nullptr) + throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::GetName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_BaseMaterialGroup_GetName(instanceHandle, nPropertyID, 0, &bytesNeededName, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferName; + bufferName.resize(bytesNeededName); + Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_GetName(instanceHandle, nPropertyID, bytesNeededName, &bytesWrittenName, &bufferName[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferName[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBaseMaterialGroup::SetName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (Name)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8Name(isolate, args[1]); + std::string sName = *sutf8Name; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetName."); + if (wrapperTable->m_BaseMaterialGroup_SetName == nullptr) + throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::SetName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_SetName(instanceHandle, nPropertyID, sName.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBaseMaterialGroup::SetDisplayColor(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + if (!args[1]->IsObject()) { + throw std::runtime_error("Expected struct parameter 1 (TheColor)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFColor sTheColor = convertObjectToLib3MFColor(isolate, args[1]); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetDisplayColor."); + if (wrapperTable->m_BaseMaterialGroup_SetDisplayColor == nullptr) + throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::SetDisplayColor."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_SetDisplayColor(instanceHandle, nPropertyID, &sTheColor); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFBaseMaterialGroup::GetDisplayColor(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFColor sReturnTheColor; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetDisplayColor."); + if (wrapperTable->m_BaseMaterialGroup_GetDisplayColor == nullptr) + throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::GetDisplayColor."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_GetDisplayColor(instanceHandle, nPropertyID, &sReturnTheColor); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(convertLib3MFColorToObject(isolate, sReturnTheColor)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFColorGroup Implementation +**************************************************************************************************************************/ + +CLib3MFColorGroup::CLib3MFColorGroup() + : CLib3MFBaseClass() +{ +} + +CLib3MFColorGroup::~CLib3MFColorGroup() +{ +} + +void CLib3MFColorGroup::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFColorGroup")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetCount", GetCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetAllPropertyIDs", GetAllPropertyIDs); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddColor", AddColor); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveColor", RemoveColor); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetColor", SetColor); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetColor", GetColor); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFColorGroup::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFColorGroup * colorgroupInstance = new CLib3MFColorGroup(); + colorgroupInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFColorGroup: Invalid call to Constructor"); + } +} + +Local CLib3MFColorGroup::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFColorGroup::GetCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCount."); + if (wrapperTable->m_ColorGroup_GetCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method ColorGroup::GetCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ColorGroup_GetCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFColorGroup::GetAllPropertyIDs(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetAllPropertyIDs."); + if (wrapperTable->m_ColorGroup_GetAllPropertyIDs == nullptr) + throw std::runtime_error("Could not call Lib3MF method ColorGroup::GetAllPropertyIDs."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ColorGroup_GetAllPropertyIDs(instanceHandle, 0, nullptr, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFColorGroup::AddColor(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected struct parameter 0 (TheColor)"); + } + sLib3MFColor sTheColor = convertObjectToLib3MFColor(isolate, args[0]); + unsigned int nReturnPropertyID = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddColor."); + if (wrapperTable->m_ColorGroup_AddColor == nullptr) + throw std::runtime_error("Could not call Lib3MF method ColorGroup::AddColor."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ColorGroup_AddColor(instanceHandle, &sTheColor, &nReturnPropertyID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnPropertyID)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFColorGroup::RemoveColor(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveColor."); + if (wrapperTable->m_ColorGroup_RemoveColor == nullptr) + throw std::runtime_error("Could not call Lib3MF method ColorGroup::RemoveColor."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ColorGroup_RemoveColor(instanceHandle, nPropertyID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFColorGroup::SetColor(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + if (!args[1]->IsObject()) { + throw std::runtime_error("Expected struct parameter 1 (TheColor)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFColor sTheColor = convertObjectToLib3MFColor(isolate, args[1]); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetColor."); + if (wrapperTable->m_ColorGroup_SetColor == nullptr) + throw std::runtime_error("Could not call Lib3MF method ColorGroup::SetColor."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ColorGroup_SetColor(instanceHandle, nPropertyID, &sTheColor); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFColorGroup::GetColor(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFColor sReturnTheColor; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetColor."); + if (wrapperTable->m_ColorGroup_GetColor == nullptr) + throw std::runtime_error("Could not call Lib3MF method ColorGroup::GetColor."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ColorGroup_GetColor(instanceHandle, nPropertyID, &sReturnTheColor); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(convertLib3MFColorToObject(isolate, sReturnTheColor)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFTexture2DGroup Implementation +**************************************************************************************************************************/ + +CLib3MFTexture2DGroup::CLib3MFTexture2DGroup() + : CLib3MFBaseClass() +{ +} + +CLib3MFTexture2DGroup::~CLib3MFTexture2DGroup() +{ +} + +void CLib3MFTexture2DGroup::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFTexture2DGroup")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetCount", GetCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetAllPropertyIDs", GetAllPropertyIDs); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddTex2Coord", AddTex2Coord); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetTex2Coord", GetTex2Coord); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveTex2Coord", RemoveTex2Coord); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetTexture2D", GetTexture2D); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFTexture2DGroup::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFTexture2DGroup * texture2dgroupInstance = new CLib3MFTexture2DGroup(); + texture2dgroupInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFTexture2DGroup: Invalid call to Constructor"); + } +} + +Local CLib3MFTexture2DGroup::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFTexture2DGroup::GetCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCount."); + if (wrapperTable->m_Texture2DGroup_GetCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2DGroup::GetCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2DGroup_GetCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFTexture2DGroup::GetAllPropertyIDs(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetAllPropertyIDs."); + if (wrapperTable->m_Texture2DGroup_GetAllPropertyIDs == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2DGroup::GetAllPropertyIDs."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2DGroup_GetAllPropertyIDs(instanceHandle, 0, nullptr, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFTexture2DGroup::AddTex2Coord(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected struct parameter 0 (UVCoordinate)"); + } + sLib3MFTex2Coord sUVCoordinate = convertObjectToLib3MFTex2Coord(isolate, args[0]); + unsigned int nReturnPropertyID = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddTex2Coord."); + if (wrapperTable->m_Texture2DGroup_AddTex2Coord == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2DGroup::AddTex2Coord."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2DGroup_AddTex2Coord(instanceHandle, &sUVCoordinate, &nReturnPropertyID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnPropertyID)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFTexture2DGroup::GetTex2Coord(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFTex2Coord sReturnUVCoordinate; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetTex2Coord."); + if (wrapperTable->m_Texture2DGroup_GetTex2Coord == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2DGroup::GetTex2Coord."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2DGroup_GetTex2Coord(instanceHandle, nPropertyID, &sReturnUVCoordinate); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(convertLib3MFTex2CoordToObject(isolate, sReturnUVCoordinate)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFTexture2DGroup::RemoveTex2Coord(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveTex2Coord."); + if (wrapperTable->m_Texture2DGroup_RemoveTex2Coord == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2DGroup::RemoveTex2Coord."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2DGroup_RemoveTex2Coord(instanceHandle, nPropertyID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFTexture2DGroup::GetTexture2D(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnTexture2DInstance = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetTexture2D."); + if (wrapperTable->m_Texture2DGroup_GetTexture2D == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2DGroup::GetTexture2D."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2DGroup_GetTexture2D(instanceHandle, &hReturnTexture2DInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjTexture2DInstance = CLib3MFTexture2D::NewInstance(args.Holder(), hReturnTexture2DInstance); + args.GetReturnValue().Set(instanceObjTexture2DInstance); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFCompositeMaterials Implementation +**************************************************************************************************************************/ + +CLib3MFCompositeMaterials::CLib3MFCompositeMaterials() + : CLib3MFBaseClass() +{ +} + +CLib3MFCompositeMaterials::~CLib3MFCompositeMaterials() +{ +} + +void CLib3MFCompositeMaterials::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFCompositeMaterials")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetCount", GetCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetAllPropertyIDs", GetAllPropertyIDs); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetBaseMaterialGroup", GetBaseMaterialGroup); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddComposite", AddComposite); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveComposite", RemoveComposite); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetComposite", GetComposite); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFCompositeMaterials::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFCompositeMaterials * compositematerialsInstance = new CLib3MFCompositeMaterials(); + compositematerialsInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFCompositeMaterials: Invalid call to Constructor"); + } +} + +Local CLib3MFCompositeMaterials::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFCompositeMaterials::GetCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCount."); + if (wrapperTable->m_CompositeMaterials_GetCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method CompositeMaterials::GetCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_CompositeMaterials_GetCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFCompositeMaterials::GetAllPropertyIDs(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetAllPropertyIDs."); + if (wrapperTable->m_CompositeMaterials_GetAllPropertyIDs == nullptr) + throw std::runtime_error("Could not call Lib3MF method CompositeMaterials::GetAllPropertyIDs."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_CompositeMaterials_GetAllPropertyIDs(instanceHandle, 0, nullptr, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFCompositeMaterials::GetBaseMaterialGroup(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnBaseMaterialGroupInstance = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBaseMaterialGroup."); + if (wrapperTable->m_CompositeMaterials_GetBaseMaterialGroup == nullptr) + throw std::runtime_error("Could not call Lib3MF method CompositeMaterials::GetBaseMaterialGroup."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_CompositeMaterials_GetBaseMaterialGroup(instanceHandle, &hReturnBaseMaterialGroupInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjBaseMaterialGroupInstance = CLib3MFBaseMaterialGroup::NewInstance(args.Holder(), hReturnBaseMaterialGroupInstance); + args.GetReturnValue().Set(instanceObjBaseMaterialGroupInstance); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFCompositeMaterials::AddComposite(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnPropertyID = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddComposite."); + if (wrapperTable->m_CompositeMaterials_AddComposite == nullptr) + throw std::runtime_error("Could not call Lib3MF method CompositeMaterials::AddComposite."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_CompositeMaterials_AddComposite(instanceHandle, 0, nullptr, &nReturnPropertyID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnPropertyID)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFCompositeMaterials::RemoveComposite(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveComposite."); + if (wrapperTable->m_CompositeMaterials_RemoveComposite == nullptr) + throw std::runtime_error("Could not call Lib3MF method CompositeMaterials::RemoveComposite."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_CompositeMaterials_RemoveComposite(instanceHandle, nPropertyID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFCompositeMaterials::GetComposite(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetComposite."); + if (wrapperTable->m_CompositeMaterials_GetComposite == nullptr) + throw std::runtime_error("Could not call Lib3MF method CompositeMaterials::GetComposite."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_CompositeMaterials_GetComposite(instanceHandle, nPropertyID, 0, nullptr, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFMultiPropertyGroup Implementation +**************************************************************************************************************************/ + +CLib3MFMultiPropertyGroup::CLib3MFMultiPropertyGroup() + : CLib3MFBaseClass() +{ +} + +CLib3MFMultiPropertyGroup::~CLib3MFMultiPropertyGroup() +{ +} + +void CLib3MFMultiPropertyGroup::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFMultiPropertyGroup")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetCount", GetCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetAllPropertyIDs", GetAllPropertyIDs); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddMultiProperty", AddMultiProperty); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetMultiProperty", SetMultiProperty); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetMultiProperty", GetMultiProperty); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveMultiProperty", RemoveMultiProperty); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetLayerCount", GetLayerCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddLayer", AddLayer); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetLayer", GetLayer); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveLayer", RemoveLayer); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFMultiPropertyGroup::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFMultiPropertyGroup * multipropertygroupInstance = new CLib3MFMultiPropertyGroup(); + multipropertygroupInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFMultiPropertyGroup: Invalid call to Constructor"); + } +} + +Local CLib3MFMultiPropertyGroup::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFMultiPropertyGroup::GetCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCount."); + if (wrapperTable->m_MultiPropertyGroup_GetCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::GetCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_GetCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMultiPropertyGroup::GetAllPropertyIDs(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetAllPropertyIDs."); + if (wrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs == nullptr) + throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::GetAllPropertyIDs."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs(instanceHandle, 0, nullptr, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMultiPropertyGroup::AddMultiProperty(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnPropertyID = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddMultiProperty."); + if (wrapperTable->m_MultiPropertyGroup_AddMultiProperty == nullptr) + throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::AddMultiProperty."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_AddMultiProperty(instanceHandle, 0, nullptr, &nReturnPropertyID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnPropertyID)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMultiPropertyGroup::SetMultiProperty(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetMultiProperty."); + if (wrapperTable->m_MultiPropertyGroup_SetMultiProperty == nullptr) + throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::SetMultiProperty."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_SetMultiProperty(instanceHandle, nPropertyID, 0, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMultiPropertyGroup::GetMultiProperty(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetMultiProperty."); + if (wrapperTable->m_MultiPropertyGroup_GetMultiProperty == nullptr) + throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::GetMultiProperty."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_GetMultiProperty(instanceHandle, nPropertyID, 0, nullptr, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMultiPropertyGroup::RemoveMultiProperty(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + } + unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveMultiProperty."); + if (wrapperTable->m_MultiPropertyGroup_RemoveMultiProperty == nullptr) + throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::RemoveMultiProperty."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_RemoveMultiProperty(instanceHandle, nPropertyID); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMultiPropertyGroup::GetLayerCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetLayerCount."); + if (wrapperTable->m_MultiPropertyGroup_GetLayerCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::GetLayerCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_GetLayerCount(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMultiPropertyGroup::AddLayer(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected struct parameter 0 (TheLayer)"); + } + sLib3MFMultiPropertyLayer sTheLayer = convertObjectToLib3MFMultiPropertyLayer(isolate, args[0]); + unsigned int nReturnLayerIndex = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddLayer."); + if (wrapperTable->m_MultiPropertyGroup_AddLayer == nullptr) + throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::AddLayer."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_AddLayer(instanceHandle, &sTheLayer, &nReturnLayerIndex); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnLayerIndex)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMultiPropertyGroup::GetLayer(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (LayerIndex)"); + } + unsigned int nLayerIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFMultiPropertyLayer sReturnTheLayer; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetLayer."); + if (wrapperTable->m_MultiPropertyGroup_GetLayer == nullptr) + throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::GetLayer."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_GetLayer(instanceHandle, nLayerIndex, &sReturnTheLayer); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(convertLib3MFMultiPropertyLayerToObject(isolate, sReturnTheLayer)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMultiPropertyGroup::RemoveLayer(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (LayerIndex)"); + } + unsigned int nLayerIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveLayer."); + if (wrapperTable->m_MultiPropertyGroup_RemoveLayer == nullptr) + throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::RemoveLayer."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_RemoveLayer(instanceHandle, nLayerIndex); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFImage3D Implementation +**************************************************************************************************************************/ + +CLib3MFImage3D::CLib3MFImage3D() + : CLib3MFBaseClass() +{ +} + +CLib3MFImage3D::~CLib3MFImage3D() +{ +} + +void CLib3MFImage3D::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFImage3D")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetName", GetName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetName", SetName); + NODE_SET_PROTOTYPE_METHOD(tpl, "IsImageStack", IsImageStack); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFImage3D::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFImage3D * image3dInstance = new CLib3MFImage3D(); + image3dInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFImage3D: Invalid call to Constructor"); + } +} + +Local CLib3MFImage3D::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFImage3D::GetName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededName = 0; + unsigned int bytesWrittenName = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetName."); + if (wrapperTable->m_Image3D_GetName == nullptr) + throw std::runtime_error("Could not call Lib3MF method Image3D::GetName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_Image3D_GetName(instanceHandle, 0, &bytesNeededName, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferName; + bufferName.resize(bytesNeededName); + Lib3MFResult errorCode = wrapperTable->m_Image3D_GetName(instanceHandle, bytesNeededName, &bytesWrittenName, &bufferName[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferName[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImage3D::SetName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Name)"); + } + v8::String::Utf8Value sutf8Name(isolate, args[0]); + std::string sName = *sutf8Name; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetName."); + if (wrapperTable->m_Image3D_SetName == nullptr) + throw std::runtime_error("Could not call Lib3MF method Image3D::SetName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Image3D_SetName(instanceHandle, sName.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImage3D::IsImageStack(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + bool bReturnIsImageStack = false; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method IsImageStack."); + if (wrapperTable->m_Image3D_IsImageStack == nullptr) + throw std::runtime_error("Could not call Lib3MF method Image3D::IsImageStack."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Image3D_IsImageStack(instanceHandle, &bReturnIsImageStack); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Boolean::New(isolate, bReturnIsImageStack)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFImageStack Implementation +**************************************************************************************************************************/ + +CLib3MFImageStack::CLib3MFImageStack() + : CLib3MFBaseClass() +{ +} + +CLib3MFImageStack::~CLib3MFImageStack() +{ +} + +void CLib3MFImageStack::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFImageStack")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetRowCount", GetRowCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetRowCount", SetRowCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetColumnCount", GetColumnCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetColumnCount", SetColumnCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetSheetCount", GetSheetCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetSheet", GetSheet); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetSheet", SetSheet); + NODE_SET_PROTOTYPE_METHOD(tpl, "CreateEmptySheet", CreateEmptySheet); + NODE_SET_PROTOTYPE_METHOD(tpl, "CreateSheetFromBuffer", CreateSheetFromBuffer); + NODE_SET_PROTOTYPE_METHOD(tpl, "CreateSheetFromFile", CreateSheetFromFile); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFImageStack::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFImageStack * imagestackInstance = new CLib3MFImageStack(); + imagestackInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFImageStack: Invalid call to Constructor"); + } +} + +Local CLib3MFImageStack::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFImageStack::GetRowCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnRowCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetRowCount."); + if (wrapperTable->m_ImageStack_GetRowCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImageStack::GetRowCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImageStack_GetRowCount(instanceHandle, &nReturnRowCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnRowCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImageStack::SetRowCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (RowCount)"); + } + unsigned int nRowCount = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetRowCount."); + if (wrapperTable->m_ImageStack_SetRowCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImageStack::SetRowCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImageStack_SetRowCount(instanceHandle, nRowCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImageStack::GetColumnCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnColumnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetColumnCount."); + if (wrapperTable->m_ImageStack_GetColumnCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImageStack::GetColumnCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImageStack_GetColumnCount(instanceHandle, &nReturnColumnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnColumnCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImageStack::SetColumnCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (ColumnCount)"); + } + unsigned int nColumnCount = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetColumnCount."); + if (wrapperTable->m_ImageStack_SetColumnCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImageStack::SetColumnCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImageStack_SetColumnCount(instanceHandle, nColumnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImageStack::GetSheetCount(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int nReturnSheetCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetSheetCount."); + if (wrapperTable->m_ImageStack_GetSheetCount == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImageStack::GetSheetCount."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImageStack_GetSheetCount(instanceHandle, &nReturnSheetCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnSheetCount)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImageStack::GetSheet(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + Lib3MFHandle hReturnSheet = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetSheet."); + if (wrapperTable->m_ImageStack_GetSheet == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImageStack::GetSheet."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImageStack_GetSheet(instanceHandle, nIndex, &hReturnSheet); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjSheet = CLib3MFAttachment::NewInstance(args.Holder(), hReturnSheet); + args.GetReturnValue().Set(instanceObjSheet); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImageStack::SetSheet(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + if (!args[1]->IsObject()) { + throw std::runtime_error("Expected class parameter 1 (Sheet)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + Local objSheet = args[1]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFAttachment * instanceSheet = ObjectWrap::Unwrap(objSheet); + if (instanceSheet == nullptr) + throw std::runtime_error("Invalid Object parameter 1 (Sheet)"); + Lib3MFHandle hSheet = instanceSheet->getHandle( objSheet ); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetSheet."); + if (wrapperTable->m_ImageStack_SetSheet == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImageStack::SetSheet."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImageStack_SetSheet(instanceHandle, nIndex, hSheet); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImageStack::CreateEmptySheet(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (Path)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8Path(isolate, args[1]); + std::string sPath = *sutf8Path; + Lib3MFHandle hReturnSheet = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method CreateEmptySheet."); + if (wrapperTable->m_ImageStack_CreateEmptySheet == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImageStack::CreateEmptySheet."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImageStack_CreateEmptySheet(instanceHandle, nIndex, sPath.c_str(), &hReturnSheet); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjSheet = CLib3MFAttachment::NewInstance(args.Holder(), hReturnSheet); + args.GetReturnValue().Set(instanceObjSheet); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImageStack::CreateSheetFromBuffer(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (Path)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8Path(isolate, args[1]); + std::string sPath = *sutf8Path; + Lib3MFHandle hReturnSheet = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method CreateSheetFromBuffer."); + if (wrapperTable->m_ImageStack_CreateSheetFromBuffer == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImageStack::CreateSheetFromBuffer."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImageStack_CreateSheetFromBuffer(instanceHandle, nIndex, sPath.c_str(), 0, nullptr, &hReturnSheet); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjSheet = CLib3MFAttachment::NewInstance(args.Holder(), hReturnSheet); + args.GetReturnValue().Set(instanceObjSheet); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImageStack::CreateSheetFromFile(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (Index)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (Path)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (FileName)"); + } + unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8Path(isolate, args[1]); + std::string sPath = *sutf8Path; + v8::String::Utf8Value sutf8FileName(isolate, args[2]); + std::string sFileName = *sutf8FileName; + Lib3MFHandle hReturnSheet = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method CreateSheetFromFile."); + if (wrapperTable->m_ImageStack_CreateSheetFromFile == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImageStack::CreateSheetFromFile."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImageStack_CreateSheetFromFile(instanceHandle, nIndex, sPath.c_str(), sFileName.c_str(), &hReturnSheet); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjSheet = CLib3MFAttachment::NewInstance(args.Holder(), hReturnSheet); + args.GetReturnValue().Set(instanceObjSheet); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFAttachment Implementation +**************************************************************************************************************************/ + +CLib3MFAttachment::CLib3MFAttachment() + : CLib3MFBaseClass() +{ +} + +CLib3MFAttachment::~CLib3MFAttachment() +{ +} + +void CLib3MFAttachment::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFAttachment")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetPath", GetPath); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetPath", SetPath); + NODE_SET_PROTOTYPE_METHOD(tpl, "PackagePart", PackagePart); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetRelationShipType", GetRelationShipType); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetRelationShipType", SetRelationShipType); + NODE_SET_PROTOTYPE_METHOD(tpl, "WriteToFile", WriteToFile); + NODE_SET_PROTOTYPE_METHOD(tpl, "ReadFromFile", ReadFromFile); + NODE_SET_PROTOTYPE_METHOD(tpl, "ReadFromCallback", ReadFromCallback); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetStreamSize", GetStreamSize); + NODE_SET_PROTOTYPE_METHOD(tpl, "WriteToBuffer", WriteToBuffer); + NODE_SET_PROTOTYPE_METHOD(tpl, "ReadFromBuffer", ReadFromBuffer); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFAttachment::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFAttachment * attachmentInstance = new CLib3MFAttachment(); + attachmentInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFAttachment: Invalid call to Constructor"); + } +} + +Local CLib3MFAttachment::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFAttachment::GetPath(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededPath = 0; + unsigned int bytesWrittenPath = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetPath."); + if (wrapperTable->m_Attachment_GetPath == nullptr) + throw std::runtime_error("Could not call Lib3MF method Attachment::GetPath."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_Attachment_GetPath(instanceHandle, 0, &bytesNeededPath, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferPath; + bufferPath.resize(bytesNeededPath); + Lib3MFResult errorCode = wrapperTable->m_Attachment_GetPath(instanceHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferPath[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFAttachment::SetPath(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Path)"); + } + v8::String::Utf8Value sutf8Path(isolate, args[0]); + std::string sPath = *sutf8Path; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetPath."); + if (wrapperTable->m_Attachment_SetPath == nullptr) + throw std::runtime_error("Could not call Lib3MF method Attachment::SetPath."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Attachment_SetPath(instanceHandle, sPath.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFAttachment::PackagePart(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnPackagePart = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method PackagePart."); + if (wrapperTable->m_Attachment_PackagePart == nullptr) + throw std::runtime_error("Could not call Lib3MF method Attachment::PackagePart."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Attachment_PackagePart(instanceHandle, &hReturnPackagePart); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjPackagePart = CLib3MFPackagePart::NewInstance(args.Holder(), hReturnPackagePart); + args.GetReturnValue().Set(instanceObjPackagePart); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFAttachment::GetRelationShipType(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededPath = 0; + unsigned int bytesWrittenPath = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetRelationShipType."); + if (wrapperTable->m_Attachment_GetRelationShipType == nullptr) + throw std::runtime_error("Could not call Lib3MF method Attachment::GetRelationShipType."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_Attachment_GetRelationShipType(instanceHandle, 0, &bytesNeededPath, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferPath; + bufferPath.resize(bytesNeededPath); + Lib3MFResult errorCode = wrapperTable->m_Attachment_GetRelationShipType(instanceHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferPath[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFAttachment::SetRelationShipType(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Path)"); + } + v8::String::Utf8Value sutf8Path(isolate, args[0]); + std::string sPath = *sutf8Path; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetRelationShipType."); + if (wrapperTable->m_Attachment_SetRelationShipType == nullptr) + throw std::runtime_error("Could not call Lib3MF method Attachment::SetRelationShipType."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Attachment_SetRelationShipType(instanceHandle, sPath.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFAttachment::WriteToFile(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (FileName)"); + } + v8::String::Utf8Value sutf8FileName(isolate, args[0]); + std::string sFileName = *sutf8FileName; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method WriteToFile."); + if (wrapperTable->m_Attachment_WriteToFile == nullptr) + throw std::runtime_error("Could not call Lib3MF method Attachment::WriteToFile."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Attachment_WriteToFile(instanceHandle, sFileName.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFAttachment::ReadFromFile(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (FileName)"); + } + v8::String::Utf8Value sutf8FileName(isolate, args[0]); + std::string sFileName = *sutf8FileName; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method ReadFromFile."); + if (wrapperTable->m_Attachment_ReadFromFile == nullptr) + throw std::runtime_error("Could not call Lib3MF method Attachment::ReadFromFile."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Attachment_ReadFromFile(instanceHandle, sFileName.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFAttachment::ReadFromCallback(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[1]->IsString()) { + throw std::runtime_error("Expected uint64 parameter 1 (StreamSize)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected pointer parameter 3 (UserData)"); + } + v8::String::Utf8Value sutf8StreamSize(isolate, args[1]); + std::string sStreamSize = *sutf8StreamSize; + uint64_t nStreamSize = stoull(sStreamSize); + v8::String::Utf8Value sutf8UserData(isolate, args[3]); + std::string sUserData = *sutf8UserData; + uint64_t nUserData = stoull(sUserData); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method ReadFromCallback."); + if (wrapperTable->m_Attachment_ReadFromCallback == nullptr) + throw std::runtime_error("Could not call Lib3MF method Attachment::ReadFromCallback."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Attachment_ReadFromCallback(instanceHandle, nullptr, nStreamSize, nullptr, (void*) nUserData); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFAttachment::GetStreamSize(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + uint64_t nReturnStreamSize = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetStreamSize."); + if (wrapperTable->m_Attachment_GetStreamSize == nullptr) + throw std::runtime_error("Could not call Lib3MF method Attachment::GetStreamSize."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Attachment_GetStreamSize(instanceHandle, &nReturnStreamSize); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, std::to_string(nReturnStreamSize).c_str())); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFAttachment::WriteToBuffer(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method WriteToBuffer."); + if (wrapperTable->m_Attachment_WriteToBuffer == nullptr) + throw std::runtime_error("Could not call Lib3MF method Attachment::WriteToBuffer."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Attachment_WriteToBuffer(instanceHandle, 0, nullptr, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFAttachment::ReadFromBuffer(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method ReadFromBuffer."); + if (wrapperTable->m_Attachment_ReadFromBuffer == nullptr) + throw std::runtime_error("Could not call Lib3MF method Attachment::ReadFromBuffer."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Attachment_ReadFromBuffer(instanceHandle, 0, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFTexture2D Implementation +**************************************************************************************************************************/ + +CLib3MFTexture2D::CLib3MFTexture2D() + : CLib3MFBaseClass() +{ +} + +CLib3MFTexture2D::~CLib3MFTexture2D() +{ +} + +void CLib3MFTexture2D::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFTexture2D")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetAttachment", GetAttachment); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetAttachment", SetAttachment); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetContentType", GetContentType); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetContentType", SetContentType); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetTileStyleUV", GetTileStyleUV); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetTileStyleUV", SetTileStyleUV); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetFilter", GetFilter); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetFilter", SetFilter); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFTexture2D::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFTexture2D * texture2dInstance = new CLib3MFTexture2D(); + texture2dInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFTexture2D: Invalid call to Constructor"); + } +} + +Local CLib3MFTexture2D::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFTexture2D::GetAttachment(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnAttachment = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetAttachment."); + if (wrapperTable->m_Texture2D_GetAttachment == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2D::GetAttachment."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2D_GetAttachment(instanceHandle, &hReturnAttachment); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjAttachment = CLib3MFAttachment::NewInstance(args.Holder(), hReturnAttachment); + args.GetReturnValue().Set(instanceObjAttachment); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFTexture2D::SetAttachment(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (Attachment)"); + } + Local objAttachment = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFAttachment * instanceAttachment = ObjectWrap::Unwrap(objAttachment); + if (instanceAttachment == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (Attachment)"); + Lib3MFHandle hAttachment = instanceAttachment->getHandle( objAttachment ); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetAttachment."); + if (wrapperTable->m_Texture2D_SetAttachment == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2D::SetAttachment."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2D_SetAttachment(instanceHandle, hAttachment); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFTexture2D::GetContentType(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + eLib3MFTextureType eReturnContentType; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetContentType."); + if (wrapperTable->m_Texture2D_GetContentType == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2D::GetContentType."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2D_GetContentType(instanceHandle, &eReturnContentType); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::New(isolate, (int)eReturnContentType)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFTexture2D::SetContentType(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 0 (ContentType)"); + } + unsigned int eContentType = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetContentType."); + if (wrapperTable->m_Texture2D_SetContentType == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2D::SetContentType."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2D_SetContentType(instanceHandle, (eLib3MFTextureType) eContentType); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFTexture2D::GetTileStyleUV(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Local outObject = Object::New(isolate); + eLib3MFTextureTileStyle eReturnTileStyleU; + eLib3MFTextureTileStyle eReturnTileStyleV; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetTileStyleUV."); + if (wrapperTable->m_Texture2D_GetTileStyleUV == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2D::GetTileStyleUV."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2D_GetTileStyleUV(instanceHandle, &eReturnTileStyleU, &eReturnTileStyleV); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "TileStyleU"), Integer::New(isolate, (int)eReturnTileStyleU)); + outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "TileStyleV"), Integer::New(isolate, (int)eReturnTileStyleV)); + args.GetReturnValue().Set(outObject); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFTexture2D::SetTileStyleUV(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 0 (TileStyleU)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (TileStyleV)"); + } + unsigned int eTileStyleU = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + unsigned int eTileStyleV = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetTileStyleUV."); + if (wrapperTable->m_Texture2D_SetTileStyleUV == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2D::SetTileStyleUV."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2D_SetTileStyleUV(instanceHandle, (eLib3MFTextureTileStyle) eTileStyleU, (eLib3MFTextureTileStyle) eTileStyleV); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFTexture2D::GetFilter(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + eLib3MFTextureFilter eReturnFilter; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetFilter."); + if (wrapperTable->m_Texture2D_GetFilter == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2D::GetFilter."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2D_GetFilter(instanceHandle, &eReturnFilter); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::New(isolate, (int)eReturnFilter)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFTexture2D::SetFilter(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 0 (Filter)"); + } + unsigned int eFilter = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetFilter."); + if (wrapperTable->m_Texture2D_SetFilter == nullptr) + throw std::runtime_error("Could not call Lib3MF method Texture2D::SetFilter."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Texture2D_SetFilter(instanceHandle, (eLib3MFTextureFilter) eFilter); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFImplicitPort Implementation +**************************************************************************************************************************/ + +CLib3MFImplicitPort::CLib3MFImplicitPort() + : CLib3MFBaseClass() +{ +} + +CLib3MFImplicitPort::~CLib3MFImplicitPort() +{ +} + +void CLib3MFImplicitPort::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFImplicitPort")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetIdentifier", GetIdentifier); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetIdentifier", SetIdentifier); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetDisplayName", GetDisplayName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetDisplayName", SetDisplayName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetType", SetType); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetType", GetType); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetReference", GetReference); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetReference", SetReference); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFImplicitPort::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFImplicitPort * implicitportInstance = new CLib3MFImplicitPort(); + implicitportInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFImplicitPort: Invalid call to Constructor"); + } +} + +Local CLib3MFImplicitPort::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFImplicitPort::GetIdentifier(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededIdentifier = 0; + unsigned int bytesWrittenIdentifier = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetIdentifier."); + if (wrapperTable->m_ImplicitPort_GetIdentifier == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitPort::GetIdentifier."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_ImplicitPort_GetIdentifier(instanceHandle, 0, &bytesNeededIdentifier, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferIdentifier; + bufferIdentifier.resize(bytesNeededIdentifier); + Lib3MFResult errorCode = wrapperTable->m_ImplicitPort_GetIdentifier(instanceHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferIdentifier[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitPort::SetIdentifier(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetIdentifier."); + if (wrapperTable->m_ImplicitPort_SetIdentifier == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitPort::SetIdentifier."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitPort_SetIdentifier(instanceHandle, sIdentifier.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitPort::GetDisplayName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededDisplayName = 0; + unsigned int bytesWrittenDisplayName = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetDisplayName."); + if (wrapperTable->m_ImplicitPort_GetDisplayName == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitPort::GetDisplayName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_ImplicitPort_GetDisplayName(instanceHandle, 0, &bytesNeededDisplayName, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferDisplayName; + bufferDisplayName.resize(bytesNeededDisplayName); + Lib3MFResult errorCode = wrapperTable->m_ImplicitPort_GetDisplayName(instanceHandle, bytesNeededDisplayName, &bytesWrittenDisplayName, &bufferDisplayName[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferDisplayName[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitPort::SetDisplayName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (DisplayName)"); + } + v8::String::Utf8Value sutf8DisplayName(isolate, args[0]); + std::string sDisplayName = *sutf8DisplayName; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetDisplayName."); + if (wrapperTable->m_ImplicitPort_SetDisplayName == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitPort::SetDisplayName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitPort_SetDisplayName(instanceHandle, sDisplayName.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitPort::SetType(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 0 (ImplicitPortType)"); + } + unsigned int eImplicitPortType = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetType."); + if (wrapperTable->m_ImplicitPort_SetType == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitPort::SetType."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitPort_SetType(instanceHandle, (eLib3MFImplicitPortType) eImplicitPortType); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitPort::GetType(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + eLib3MFImplicitPortType eReturnImplicitPortType; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetType."); + if (wrapperTable->m_ImplicitPort_GetType == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitPort::GetType."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitPort_GetType(instanceHandle, &eReturnImplicitPortType); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::New(isolate, (int)eReturnImplicitPortType)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitPort::GetReference(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededReference = 0; + unsigned int bytesWrittenReference = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetReference."); + if (wrapperTable->m_ImplicitPort_GetReference == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitPort::GetReference."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_ImplicitPort_GetReference(instanceHandle, 0, &bytesNeededReference, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferReference; + bufferReference.resize(bytesNeededReference); + Lib3MFResult errorCode = wrapperTable->m_ImplicitPort_GetReference(instanceHandle, bytesNeededReference, &bytesWrittenReference, &bufferReference[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferReference[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitPort::SetReference(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Reference)"); + } + v8::String::Utf8Value sutf8Reference(isolate, args[0]); + std::string sReference = *sutf8Reference; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetReference."); + if (wrapperTable->m_ImplicitPort_SetReference == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitPort::SetReference."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitPort_SetReference(instanceHandle, sReference.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFIterator Implementation +**************************************************************************************************************************/ + +CLib3MFIterator::CLib3MFIterator() + : CLib3MFBaseClass() +{ +} + +CLib3MFIterator::~CLib3MFIterator() +{ +} + +void CLib3MFIterator::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFIterator")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "MoveNext", MoveNext); + NODE_SET_PROTOTYPE_METHOD(tpl, "MovePrevious", MovePrevious); + NODE_SET_PROTOTYPE_METHOD(tpl, "Count", Count); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFIterator::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFIterator * iteratorInstance = new CLib3MFIterator(); + iteratorInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFIterator: Invalid call to Constructor"); + } +} + +Local CLib3MFIterator::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFIterator::MoveNext(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + bool bReturnHasNext = false; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method MoveNext."); + if (wrapperTable->m_Iterator_MoveNext == nullptr) + throw std::runtime_error("Could not call Lib3MF method Iterator::MoveNext."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Iterator_MoveNext(instanceHandle, &bReturnHasNext); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Boolean::New(isolate, bReturnHasNext)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFIterator::MovePrevious(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + bool bReturnHasPrevious = false; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method MovePrevious."); + if (wrapperTable->m_Iterator_MovePrevious == nullptr) + throw std::runtime_error("Could not call Lib3MF method Iterator::MovePrevious."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Iterator_MovePrevious(instanceHandle, &bReturnHasPrevious); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Boolean::New(isolate, bReturnHasPrevious)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFIterator::Count(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + uint64_t nReturnCount = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method Count."); + if (wrapperTable->m_Iterator_Count == nullptr) + throw std::runtime_error("Could not call Lib3MF method Iterator::Count."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Iterator_Count(instanceHandle, &nReturnCount); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, std::to_string(nReturnCount).c_str())); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFImplicitPortIterator Implementation +**************************************************************************************************************************/ + +CLib3MFImplicitPortIterator::CLib3MFImplicitPortIterator() + : CLib3MFBaseClass() +{ +} + +CLib3MFImplicitPortIterator::~CLib3MFImplicitPortIterator() +{ +} + +void CLib3MFImplicitPortIterator::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFImplicitPortIterator")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetCurrent", GetCurrent); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFImplicitPortIterator::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFImplicitPortIterator * implicitportiteratorInstance = new CLib3MFImplicitPortIterator(); + implicitportiteratorInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFImplicitPortIterator: Invalid call to Constructor"); + } +} + +Local CLib3MFImplicitPortIterator::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFImplicitPortIterator::GetCurrent(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnPort = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCurrent."); + if (wrapperTable->m_ImplicitPortIterator_GetCurrent == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitPortIterator::GetCurrent."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitPortIterator_GetCurrent(instanceHandle, &hReturnPort); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjPort = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnPort); + args.GetReturnValue().Set(instanceObjPort); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFImplicitNode Implementation +**************************************************************************************************************************/ + +CLib3MFImplicitNode::CLib3MFImplicitNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFImplicitNode::~CLib3MFImplicitNode() +{ +} + +void CLib3MFImplicitNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFImplicitNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetIdentifier", GetIdentifier); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetIdentifier", SetIdentifier); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetDisplayName", GetDisplayName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetDisplayName", SetDisplayName); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetTag", GetTag); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetTag", SetTag); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetNodeType", GetNodeType); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddInput", AddInput); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputs", GetInputs); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddOutput", AddOutput); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputs", GetOutputs); + NODE_SET_PROTOTYPE_METHOD(tpl, "FindInput", FindInput); + NODE_SET_PROTOTYPE_METHOD(tpl, "FindOutput", FindOutput); + NODE_SET_PROTOTYPE_METHOD(tpl, "AreTypesValid", AreTypesValid); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFImplicitNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFImplicitNode * implicitnodeInstance = new CLib3MFImplicitNode(); + implicitnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFImplicitNode: Invalid call to Constructor"); + } +} + +Local CLib3MFImplicitNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFImplicitNode::GetIdentifier(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededIdentifier = 0; + unsigned int bytesWrittenIdentifier = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetIdentifier."); + if (wrapperTable->m_ImplicitNode_GetIdentifier == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::GetIdentifier."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_ImplicitNode_GetIdentifier(instanceHandle, 0, &bytesNeededIdentifier, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferIdentifier; + bufferIdentifier.resize(bytesNeededIdentifier); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_GetIdentifier(instanceHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferIdentifier[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitNode::SetIdentifier(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetIdentifier."); + if (wrapperTable->m_ImplicitNode_SetIdentifier == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::SetIdentifier."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_SetIdentifier(instanceHandle, sIdentifier.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitNode::GetDisplayName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededDisplayName = 0; + unsigned int bytesWrittenDisplayName = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetDisplayName."); + if (wrapperTable->m_ImplicitNode_GetDisplayName == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::GetDisplayName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_ImplicitNode_GetDisplayName(instanceHandle, 0, &bytesNeededDisplayName, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferDisplayName; + bufferDisplayName.resize(bytesNeededDisplayName); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_GetDisplayName(instanceHandle, bytesNeededDisplayName, &bytesWrittenDisplayName, &bufferDisplayName[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferDisplayName[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitNode::SetDisplayName(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (DisplayName)"); + } + v8::String::Utf8Value sutf8DisplayName(isolate, args[0]); + std::string sDisplayName = *sutf8DisplayName; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetDisplayName."); + if (wrapperTable->m_ImplicitNode_SetDisplayName == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::SetDisplayName."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_SetDisplayName(instanceHandle, sDisplayName.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitNode::GetTag(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + unsigned int bytesNeededTag = 0; + unsigned int bytesWrittenTag = 0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetTag."); + if (wrapperTable->m_ImplicitNode_GetTag == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::GetTag."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult initErrorCode = wrapperTable->m_ImplicitNode_GetTag(instanceHandle, 0, &bytesNeededTag, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferTag; + bufferTag.resize(bytesNeededTag); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_GetTag(instanceHandle, bytesNeededTag, &bytesWrittenTag, &bufferTag[0]); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferTag[0])); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitNode::SetTag(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Tag)"); + } + v8::String::Utf8Value sutf8Tag(isolate, args[0]); + std::string sTag = *sutf8Tag; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetTag."); + if (wrapperTable->m_ImplicitNode_SetTag == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::SetTag."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_SetTag(instanceHandle, sTag.c_str()); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitNode::GetNodeType(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + eLib3MFImplicitNodeType eReturnType; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetNodeType."); + if (wrapperTable->m_ImplicitNode_GetNodeType == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::GetNodeType."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_GetNodeType(instanceHandle, &eReturnType); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::New(isolate, (int)eReturnType)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitNode::AddInput(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + Lib3MFHandle hReturnPort = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddInput."); + if (wrapperTable->m_ImplicitNode_AddInput == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::AddInput."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_AddInput(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), &hReturnPort); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjPort = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnPort); + args.GetReturnValue().Set(instanceObjPort); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitNode::GetInputs(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnIterator = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputs."); + if (wrapperTable->m_ImplicitNode_GetInputs == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::GetInputs."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_GetInputs(instanceHandle, &hReturnIterator); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjIterator = CLib3MFImplicitPortIterator::NewInstance(args.Holder(), hReturnIterator); + args.GetReturnValue().Set(instanceObjIterator); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitNode::AddOutput(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + Lib3MFHandle hReturnPort = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddOutput."); + if (wrapperTable->m_ImplicitNode_AddOutput == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::AddOutput."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_AddOutput(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), &hReturnPort); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjPort = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnPort); + args.GetReturnValue().Set(instanceObjPort); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitNode::GetOutputs(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnIterator = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputs."); + if (wrapperTable->m_ImplicitNode_GetOutputs == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::GetOutputs."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_GetOutputs(instanceHandle, &hReturnIterator); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjIterator = CLib3MFImplicitPortIterator::NewInstance(args.Holder(), hReturnIterator); + args.GetReturnValue().Set(instanceObjIterator); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitNode::FindInput(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + Lib3MFHandle hReturnInput = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method FindInput."); + if (wrapperTable->m_ImplicitNode_FindInput == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::FindInput."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_FindInput(instanceHandle, sIdentifier.c_str(), &hReturnInput); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjInput = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnInput); + args.GetReturnValue().Set(instanceObjInput); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitNode::FindOutput(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + Lib3MFHandle hReturnOutput = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method FindOutput."); + if (wrapperTable->m_ImplicitNode_FindOutput == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::FindOutput."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_FindOutput(instanceHandle, sIdentifier.c_str(), &hReturnOutput); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjOutput = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnOutput); + args.GetReturnValue().Set(instanceObjOutput); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitNode::AreTypesValid(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + bool bReturnValid = false; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AreTypesValid."); + if (wrapperTable->m_ImplicitNode_AreTypesValid == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitNode::AreTypesValid."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitNode_AreTypesValid(instanceHandle, &bReturnValid); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Boolean::New(isolate, bReturnValid)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFOneInputNode Implementation +**************************************************************************************************************************/ + +CLib3MFOneInputNode::CLib3MFOneInputNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFOneInputNode::~CLib3MFOneInputNode() +{ +} + +void CLib3MFOneInputNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFOneInputNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputA", GetInputA); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputResult", GetOutputResult); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFOneInputNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFOneInputNode * oneinputnodeInstance = new CLib3MFOneInputNode(); + oneinputnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFOneInputNode: Invalid call to Constructor"); + } +} + +Local CLib3MFOneInputNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFOneInputNode::GetInputA(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnInput = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputA."); + if (wrapperTable->m_OneInputNode_GetInputA == nullptr) + throw std::runtime_error("Could not call Lib3MF method OneInputNode::GetInputA."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_OneInputNode_GetInputA(instanceHandle, &hReturnInput); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjInput = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnInput); + args.GetReturnValue().Set(instanceObjInput); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFOneInputNode::GetOutputResult(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnResult = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputResult."); + if (wrapperTable->m_OneInputNode_GetOutputResult == nullptr) + throw std::runtime_error("Could not call Lib3MF method OneInputNode::GetOutputResult."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_OneInputNode_GetOutputResult(instanceHandle, &hReturnResult); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjResult = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnResult); + args.GetReturnValue().Set(instanceObjResult); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFSinNode Implementation +**************************************************************************************************************************/ + +CLib3MFSinNode::CLib3MFSinNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFSinNode::~CLib3MFSinNode() +{ +} + +void CLib3MFSinNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFSinNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFSinNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFSinNode * sinnodeInstance = new CLib3MFSinNode(); + sinnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFSinNode: Invalid call to Constructor"); + } +} + +Local CLib3MFSinNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFCosNode Implementation +**************************************************************************************************************************/ + +CLib3MFCosNode::CLib3MFCosNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFCosNode::~CLib3MFCosNode() +{ +} + +void CLib3MFCosNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFCosNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFCosNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFCosNode * cosnodeInstance = new CLib3MFCosNode(); + cosnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFCosNode: Invalid call to Constructor"); + } +} + +Local CLib3MFCosNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFTanNode Implementation +**************************************************************************************************************************/ + +CLib3MFTanNode::CLib3MFTanNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFTanNode::~CLib3MFTanNode() +{ +} + +void CLib3MFTanNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFTanNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFTanNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFTanNode * tannodeInstance = new CLib3MFTanNode(); + tannodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFTanNode: Invalid call to Constructor"); + } +} + +Local CLib3MFTanNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFArcSinNode Implementation +**************************************************************************************************************************/ + +CLib3MFArcSinNode::CLib3MFArcSinNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFArcSinNode::~CLib3MFArcSinNode() +{ +} + +void CLib3MFArcSinNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFArcSinNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFArcSinNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFArcSinNode * arcsinnodeInstance = new CLib3MFArcSinNode(); + arcsinnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFArcSinNode: Invalid call to Constructor"); + } +} + +Local CLib3MFArcSinNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFArcCosNode Implementation +**************************************************************************************************************************/ + +CLib3MFArcCosNode::CLib3MFArcCosNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFArcCosNode::~CLib3MFArcCosNode() +{ +} + +void CLib3MFArcCosNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFArcCosNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFArcCosNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFArcCosNode * arccosnodeInstance = new CLib3MFArcCosNode(); + arccosnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFArcCosNode: Invalid call to Constructor"); + } +} + +Local CLib3MFArcCosNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFArcTanNode Implementation +**************************************************************************************************************************/ + +CLib3MFArcTanNode::CLib3MFArcTanNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFArcTanNode::~CLib3MFArcTanNode() +{ +} + +void CLib3MFArcTanNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFArcTanNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFArcTanNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFArcTanNode * arctannodeInstance = new CLib3MFArcTanNode(); + arctannodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFArcTanNode: Invalid call to Constructor"); + } +} + +Local CLib3MFArcTanNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFSinhNode Implementation +**************************************************************************************************************************/ + +CLib3MFSinhNode::CLib3MFSinhNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFSinhNode::~CLib3MFSinhNode() +{ +} + +void CLib3MFSinhNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFSinhNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFSinhNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFSinhNode * sinhnodeInstance = new CLib3MFSinhNode(); + sinhnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFSinhNode: Invalid call to Constructor"); + } +} + +Local CLib3MFSinhNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFCoshNode Implementation +**************************************************************************************************************************/ + +CLib3MFCoshNode::CLib3MFCoshNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFCoshNode::~CLib3MFCoshNode() +{ +} + +void CLib3MFCoshNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFCoshNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFCoshNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFCoshNode * coshnodeInstance = new CLib3MFCoshNode(); + coshnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFCoshNode: Invalid call to Constructor"); + } +} + +Local CLib3MFCoshNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFTanhNode Implementation +**************************************************************************************************************************/ + +CLib3MFTanhNode::CLib3MFTanhNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFTanhNode::~CLib3MFTanhNode() +{ +} + +void CLib3MFTanhNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFTanhNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFTanhNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFTanhNode * tanhnodeInstance = new CLib3MFTanhNode(); + tanhnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFTanhNode: Invalid call to Constructor"); + } +} + +Local CLib3MFTanhNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFRoundNode Implementation +**************************************************************************************************************************/ + +CLib3MFRoundNode::CLib3MFRoundNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFRoundNode::~CLib3MFRoundNode() +{ +} + +void CLib3MFRoundNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFRoundNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFRoundNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFRoundNode * roundnodeInstance = new CLib3MFRoundNode(); + roundnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFRoundNode: Invalid call to Constructor"); + } +} + +Local CLib3MFRoundNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFCeilNode Implementation +**************************************************************************************************************************/ + +CLib3MFCeilNode::CLib3MFCeilNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFCeilNode::~CLib3MFCeilNode() +{ +} + +void CLib3MFCeilNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFCeilNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFCeilNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFCeilNode * ceilnodeInstance = new CLib3MFCeilNode(); + ceilnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFCeilNode: Invalid call to Constructor"); + } +} + +Local CLib3MFCeilNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFFloorNode Implementation +**************************************************************************************************************************/ + +CLib3MFFloorNode::CLib3MFFloorNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFFloorNode::~CLib3MFFloorNode() +{ +} + +void CLib3MFFloorNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFFloorNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFFloorNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFFloorNode * floornodeInstance = new CLib3MFFloorNode(); + floornodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFFloorNode: Invalid call to Constructor"); + } +} + +Local CLib3MFFloorNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFSignNode Implementation +**************************************************************************************************************************/ + +CLib3MFSignNode::CLib3MFSignNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFSignNode::~CLib3MFSignNode() +{ +} + +void CLib3MFSignNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFSignNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFSignNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFSignNode * signnodeInstance = new CLib3MFSignNode(); + signnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFSignNode: Invalid call to Constructor"); + } +} + +Local CLib3MFSignNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFFractNode Implementation +**************************************************************************************************************************/ + +CLib3MFFractNode::CLib3MFFractNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFFractNode::~CLib3MFFractNode() +{ +} + +void CLib3MFFractNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFFractNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFFractNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFFractNode * fractnodeInstance = new CLib3MFFractNode(); + fractnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFFractNode: Invalid call to Constructor"); + } +} + +Local CLib3MFFractNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFAbsNode Implementation +**************************************************************************************************************************/ + +CLib3MFAbsNode::CLib3MFAbsNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFAbsNode::~CLib3MFAbsNode() +{ +} + +void CLib3MFAbsNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFAbsNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFAbsNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFAbsNode * absnodeInstance = new CLib3MFAbsNode(); + absnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFAbsNode: Invalid call to Constructor"); + } +} + +Local CLib3MFAbsNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFExpNode Implementation +**************************************************************************************************************************/ + +CLib3MFExpNode::CLib3MFExpNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFExpNode::~CLib3MFExpNode() +{ +} + +void CLib3MFExpNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFExpNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFExpNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFExpNode * expnodeInstance = new CLib3MFExpNode(); + expnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFExpNode: Invalid call to Constructor"); + } +} + +Local CLib3MFExpNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFLogNode Implementation +**************************************************************************************************************************/ + +CLib3MFLogNode::CLib3MFLogNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFLogNode::~CLib3MFLogNode() +{ +} + +void CLib3MFLogNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFLogNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFLogNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFLogNode * lognodeInstance = new CLib3MFLogNode(); + lognodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFLogNode: Invalid call to Constructor"); + } +} + +Local CLib3MFLogNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFLog2Node Implementation +**************************************************************************************************************************/ + +CLib3MFLog2Node::CLib3MFLog2Node() + : CLib3MFBaseClass() +{ +} + +CLib3MFLog2Node::~CLib3MFLog2Node() +{ +} + +void CLib3MFLog2Node::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFLog2Node")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFLog2Node::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFLog2Node * log2nodeInstance = new CLib3MFLog2Node(); + log2nodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFLog2Node: Invalid call to Constructor"); + } +} + +Local CLib3MFLog2Node::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFLog10Node Implementation +**************************************************************************************************************************/ + +CLib3MFLog10Node::CLib3MFLog10Node() + : CLib3MFBaseClass() +{ +} + +CLib3MFLog10Node::~CLib3MFLog10Node() +{ +} + +void CLib3MFLog10Node::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFLog10Node")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFLog10Node::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFLog10Node * log10nodeInstance = new CLib3MFLog10Node(); + log10nodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFLog10Node: Invalid call to Constructor"); + } +} + +Local CLib3MFLog10Node::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFLengthNode Implementation +**************************************************************************************************************************/ + +CLib3MFLengthNode::CLib3MFLengthNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFLengthNode::~CLib3MFLengthNode() +{ +} + +void CLib3MFLengthNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFLengthNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFLengthNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFLengthNode * lengthnodeInstance = new CLib3MFLengthNode(); + lengthnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFLengthNode: Invalid call to Constructor"); + } +} + +Local CLib3MFLengthNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFTransposeNode Implementation +**************************************************************************************************************************/ + +CLib3MFTransposeNode::CLib3MFTransposeNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFTransposeNode::~CLib3MFTransposeNode() +{ +} + +void CLib3MFTransposeNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFTransposeNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFTransposeNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFTransposeNode * transposenodeInstance = new CLib3MFTransposeNode(); + transposenodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFTransposeNode: Invalid call to Constructor"); + } +} + +Local CLib3MFTransposeNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFInverseNode Implementation +**************************************************************************************************************************/ + +CLib3MFInverseNode::CLib3MFInverseNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFInverseNode::~CLib3MFInverseNode() +{ +} + +void CLib3MFInverseNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFInverseNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFInverseNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFInverseNode * inversenodeInstance = new CLib3MFInverseNode(); + inversenodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFInverseNode: Invalid call to Constructor"); + } +} + +Local CLib3MFInverseNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFSqrtNode Implementation +**************************************************************************************************************************/ + +CLib3MFSqrtNode::CLib3MFSqrtNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFSqrtNode::~CLib3MFSqrtNode() +{ +} + +void CLib3MFSqrtNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFSqrtNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFSqrtNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFSqrtNode * sqrtnodeInstance = new CLib3MFSqrtNode(); + sqrtnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFSqrtNode: Invalid call to Constructor"); + } +} + +Local CLib3MFSqrtNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFResourceIdNode Implementation +**************************************************************************************************************************/ + +CLib3MFResourceIdNode::CLib3MFResourceIdNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFResourceIdNode::~CLib3MFResourceIdNode() +{ +} + +void CLib3MFResourceIdNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFResourceIdNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "SetResource", SetResource); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetResource", GetResource); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputValue", GetOutputValue); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFResourceIdNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFResourceIdNode * resourceidnodeInstance = new CLib3MFResourceIdNode(); + resourceidnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFResourceIdNode: Invalid call to Constructor"); + } +} + +Local CLib3MFResourceIdNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFResourceIdNode::SetResource(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (Resource)"); + } + Local objResource = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFResource * instanceResource = ObjectWrap::Unwrap(objResource); + if (instanceResource == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (Resource)"); + Lib3MFHandle hResource = instanceResource->getHandle( objResource ); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetResource."); + if (wrapperTable->m_ResourceIdNode_SetResource == nullptr) + throw std::runtime_error("Could not call Lib3MF method ResourceIdNode::SetResource."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ResourceIdNode_SetResource(instanceHandle, hResource); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFResourceIdNode::GetResource(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnResource = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetResource."); + if (wrapperTable->m_ResourceIdNode_GetResource == nullptr) + throw std::runtime_error("Could not call Lib3MF method ResourceIdNode::GetResource."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ResourceIdNode_GetResource(instanceHandle, &hReturnResource); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjResource = CLib3MFResource::NewInstance(args.Holder(), hReturnResource); + args.GetReturnValue().Set(instanceObjResource); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFResourceIdNode::GetOutputValue(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnValue = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputValue."); + if (wrapperTable->m_ResourceIdNode_GetOutputValue == nullptr) + throw std::runtime_error("Could not call Lib3MF method ResourceIdNode::GetOutputValue."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ResourceIdNode_GetOutputValue(instanceHandle, &hReturnValue); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjValue = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnValue); + args.GetReturnValue().Set(instanceObjValue); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFTwoInputNode Implementation +**************************************************************************************************************************/ + +CLib3MFTwoInputNode::CLib3MFTwoInputNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFTwoInputNode::~CLib3MFTwoInputNode() +{ +} + +void CLib3MFTwoInputNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFTwoInputNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputB", GetInputB); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFTwoInputNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFTwoInputNode * twoinputnodeInstance = new CLib3MFTwoInputNode(); + twoinputnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFTwoInputNode: Invalid call to Constructor"); + } +} + +Local CLib3MFTwoInputNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFTwoInputNode::GetInputB(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnB = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputB."); + if (wrapperTable->m_TwoInputNode_GetInputB == nullptr) + throw std::runtime_error("Could not call Lib3MF method TwoInputNode::GetInputB."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_TwoInputNode_GetInputB(instanceHandle, &hReturnB); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjB = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnB); + args.GetReturnValue().Set(instanceObjB); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFAdditionNode Implementation +**************************************************************************************************************************/ + +CLib3MFAdditionNode::CLib3MFAdditionNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFAdditionNode::~CLib3MFAdditionNode() +{ +} + +void CLib3MFAdditionNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFAdditionNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFAdditionNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFAdditionNode * additionnodeInstance = new CLib3MFAdditionNode(); + additionnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFAdditionNode: Invalid call to Constructor"); + } +} + +Local CLib3MFAdditionNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFSubtractionNode Implementation +**************************************************************************************************************************/ + +CLib3MFSubtractionNode::CLib3MFSubtractionNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFSubtractionNode::~CLib3MFSubtractionNode() +{ +} + +void CLib3MFSubtractionNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFSubtractionNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFSubtractionNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFSubtractionNode * subtractionnodeInstance = new CLib3MFSubtractionNode(); + subtractionnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFSubtractionNode: Invalid call to Constructor"); + } +} + +Local CLib3MFSubtractionNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFMultiplicationNode Implementation +**************************************************************************************************************************/ + +CLib3MFMultiplicationNode::CLib3MFMultiplicationNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFMultiplicationNode::~CLib3MFMultiplicationNode() +{ +} + +void CLib3MFMultiplicationNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFMultiplicationNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFMultiplicationNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFMultiplicationNode * multiplicationnodeInstance = new CLib3MFMultiplicationNode(); + multiplicationnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFMultiplicationNode: Invalid call to Constructor"); + } +} + +Local CLib3MFMultiplicationNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFDivisionNode Implementation +**************************************************************************************************************************/ + +CLib3MFDivisionNode::CLib3MFDivisionNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFDivisionNode::~CLib3MFDivisionNode() +{ +} + +void CLib3MFDivisionNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFDivisionNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFDivisionNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFDivisionNode * divisionnodeInstance = new CLib3MFDivisionNode(); + divisionnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFDivisionNode: Invalid call to Constructor"); + } +} + +Local CLib3MFDivisionNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFDotNode Implementation +**************************************************************************************************************************/ + +CLib3MFDotNode::CLib3MFDotNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFDotNode::~CLib3MFDotNode() +{ +} + +void CLib3MFDotNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFDotNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFDotNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFDotNode * dotnodeInstance = new CLib3MFDotNode(); + dotnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFDotNode: Invalid call to Constructor"); + } +} + +Local CLib3MFDotNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFCrossNode Implementation +**************************************************************************************************************************/ + +CLib3MFCrossNode::CLib3MFCrossNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFCrossNode::~CLib3MFCrossNode() +{ +} + +void CLib3MFCrossNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFCrossNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFCrossNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFCrossNode * crossnodeInstance = new CLib3MFCrossNode(); + crossnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFCrossNode: Invalid call to Constructor"); + } +} + +Local CLib3MFCrossNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFArcTan2Node Implementation +**************************************************************************************************************************/ + +CLib3MFArcTan2Node::CLib3MFArcTan2Node() + : CLib3MFBaseClass() +{ +} + +CLib3MFArcTan2Node::~CLib3MFArcTan2Node() +{ +} + +void CLib3MFArcTan2Node::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFArcTan2Node")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFArcTan2Node::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFArcTan2Node * arctan2nodeInstance = new CLib3MFArcTan2Node(); + arctan2nodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFArcTan2Node: Invalid call to Constructor"); + } +} + +Local CLib3MFArcTan2Node::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFMatVecMultiplicationNode Implementation +**************************************************************************************************************************/ + +CLib3MFMatVecMultiplicationNode::CLib3MFMatVecMultiplicationNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFMatVecMultiplicationNode::~CLib3MFMatVecMultiplicationNode() +{ +} + +void CLib3MFMatVecMultiplicationNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFMatVecMultiplicationNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFMatVecMultiplicationNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFMatVecMultiplicationNode * matvecmultiplicationnodeInstance = new CLib3MFMatVecMultiplicationNode(); + matvecmultiplicationnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFMatVecMultiplicationNode: Invalid call to Constructor"); + } +} + +Local CLib3MFMatVecMultiplicationNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFMinNode Implementation +**************************************************************************************************************************/ + +CLib3MFMinNode::CLib3MFMinNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFMinNode::~CLib3MFMinNode() +{ +} + +void CLib3MFMinNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFMinNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFMinNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFMinNode * minnodeInstance = new CLib3MFMinNode(); + minnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFMinNode: Invalid call to Constructor"); + } +} + +Local CLib3MFMinNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFMaxNode Implementation +**************************************************************************************************************************/ + +CLib3MFMaxNode::CLib3MFMaxNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFMaxNode::~CLib3MFMaxNode() +{ +} + +void CLib3MFMaxNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFMaxNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFMaxNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFMaxNode * maxnodeInstance = new CLib3MFMaxNode(); + maxnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFMaxNode: Invalid call to Constructor"); + } +} + +Local CLib3MFMaxNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFFmodNode Implementation +**************************************************************************************************************************/ + +CLib3MFFmodNode::CLib3MFFmodNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFFmodNode::~CLib3MFFmodNode() +{ +} + +void CLib3MFFmodNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFFmodNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFFmodNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFFmodNode * fmodnodeInstance = new CLib3MFFmodNode(); + fmodnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFFmodNode: Invalid call to Constructor"); + } +} + +Local CLib3MFFmodNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFModNode Implementation +**************************************************************************************************************************/ + +CLib3MFModNode::CLib3MFModNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFModNode::~CLib3MFModNode() +{ +} + +void CLib3MFModNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFModNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFModNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFModNode * modnodeInstance = new CLib3MFModNode(); + modnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFModNode: Invalid call to Constructor"); + } +} + +Local CLib3MFModNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFPowNode Implementation +**************************************************************************************************************************/ + +CLib3MFPowNode::CLib3MFPowNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFPowNode::~CLib3MFPowNode() +{ +} + +void CLib3MFPowNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFPowNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFPowNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFPowNode * pownodeInstance = new CLib3MFPowNode(); + pownodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFPowNode: Invalid call to Constructor"); + } +} + +Local CLib3MFPowNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFSelectNode Implementation +**************************************************************************************************************************/ + +CLib3MFSelectNode::CLib3MFSelectNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFSelectNode::~CLib3MFSelectNode() +{ +} + +void CLib3MFSelectNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFSelectNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputB", GetInputB); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputC", GetInputC); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputD", GetInputD); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFSelectNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFSelectNode * selectnodeInstance = new CLib3MFSelectNode(); + selectnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFSelectNode: Invalid call to Constructor"); + } +} + +Local CLib3MFSelectNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFSelectNode::GetInputB(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnB = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputB."); + if (wrapperTable->m_SelectNode_GetInputB == nullptr) + throw std::runtime_error("Could not call Lib3MF method SelectNode::GetInputB."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_SelectNode_GetInputB(instanceHandle, &hReturnB); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjB = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnB); + args.GetReturnValue().Set(instanceObjB); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFSelectNode::GetInputC(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnC = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputC."); + if (wrapperTable->m_SelectNode_GetInputC == nullptr) + throw std::runtime_error("Could not call Lib3MF method SelectNode::GetInputC."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_SelectNode_GetInputC(instanceHandle, &hReturnC); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjC = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnC); + args.GetReturnValue().Set(instanceObjC); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFSelectNode::GetInputD(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnD = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputD."); + if (wrapperTable->m_SelectNode_GetInputD == nullptr) + throw std::runtime_error("Could not call Lib3MF method SelectNode::GetInputD."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_SelectNode_GetInputD(instanceHandle, &hReturnD); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjD = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnD); + args.GetReturnValue().Set(instanceObjD); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFClampNode Implementation +**************************************************************************************************************************/ + +CLib3MFClampNode::CLib3MFClampNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFClampNode::~CLib3MFClampNode() +{ +} + +void CLib3MFClampNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFClampNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputMin", GetInputMin); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputMax", GetInputMax); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFClampNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFClampNode * clampnodeInstance = new CLib3MFClampNode(); + clampnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFClampNode: Invalid call to Constructor"); + } +} + +Local CLib3MFClampNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFClampNode::GetInputMin(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnMin = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputMin."); + if (wrapperTable->m_ClampNode_GetInputMin == nullptr) + throw std::runtime_error("Could not call Lib3MF method ClampNode::GetInputMin."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ClampNode_GetInputMin(instanceHandle, &hReturnMin); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjMin = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnMin); + args.GetReturnValue().Set(instanceObjMin); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFClampNode::GetInputMax(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnMax = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputMax."); + if (wrapperTable->m_ClampNode_GetInputMax == nullptr) + throw std::runtime_error("Could not call Lib3MF method ClampNode::GetInputMax."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ClampNode_GetInputMax(instanceHandle, &hReturnMax); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjMax = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnMax); + args.GetReturnValue().Set(instanceObjMax); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFComposeVectorNode Implementation +**************************************************************************************************************************/ + +CLib3MFComposeVectorNode::CLib3MFComposeVectorNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFComposeVectorNode::~CLib3MFComposeVectorNode() +{ +} + +void CLib3MFComposeVectorNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFComposeVectorNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputX", GetInputX); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputY", GetInputY); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputZ", GetInputZ); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputResult", GetOutputResult); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFComposeVectorNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFComposeVectorNode * composevectornodeInstance = new CLib3MFComposeVectorNode(); + composevectornodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFComposeVectorNode: Invalid call to Constructor"); + } +} + +Local CLib3MFComposeVectorNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFComposeVectorNode::GetInputX(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnX = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputX."); + if (wrapperTable->m_ComposeVectorNode_GetInputX == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeVectorNode::GetInputX."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeVectorNode_GetInputX(instanceHandle, &hReturnX); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjX = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnX); + args.GetReturnValue().Set(instanceObjX); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeVectorNode::GetInputY(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnY = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputY."); + if (wrapperTable->m_ComposeVectorNode_GetInputY == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeVectorNode::GetInputY."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeVectorNode_GetInputY(instanceHandle, &hReturnY); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjY = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnY); + args.GetReturnValue().Set(instanceObjY); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeVectorNode::GetInputZ(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnZ = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputZ."); + if (wrapperTable->m_ComposeVectorNode_GetInputZ == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeVectorNode::GetInputZ."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeVectorNode_GetInputZ(instanceHandle, &hReturnZ); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjZ = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnZ); + args.GetReturnValue().Set(instanceObjZ); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeVectorNode::GetOutputResult(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnResult = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputResult."); + if (wrapperTable->m_ComposeVectorNode_GetOutputResult == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeVectorNode::GetOutputResult."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeVectorNode_GetOutputResult(instanceHandle, &hReturnResult); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjResult = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnResult); + args.GetReturnValue().Set(instanceObjResult); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFVectorFromScalarNode Implementation +**************************************************************************************************************************/ + +CLib3MFVectorFromScalarNode::CLib3MFVectorFromScalarNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFVectorFromScalarNode::~CLib3MFVectorFromScalarNode() +{ +} + +void CLib3MFVectorFromScalarNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFVectorFromScalarNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFVectorFromScalarNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFVectorFromScalarNode * vectorfromscalarnodeInstance = new CLib3MFVectorFromScalarNode(); + vectorfromscalarnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFVectorFromScalarNode: Invalid call to Constructor"); + } +} + +Local CLib3MFVectorFromScalarNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + +/************************************************************************************************************************* + Class CLib3MFDecomposeVectorNode Implementation +**************************************************************************************************************************/ + +CLib3MFDecomposeVectorNode::CLib3MFDecomposeVectorNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFDecomposeVectorNode::~CLib3MFDecomposeVectorNode() +{ +} + +void CLib3MFDecomposeVectorNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFDecomposeVectorNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputA", GetInputA); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputX", GetOutputX); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputY", GetOutputY); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputZ", GetOutputZ); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFDecomposeVectorNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFDecomposeVectorNode * decomposevectornodeInstance = new CLib3MFDecomposeVectorNode(); + decomposevectornodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFDecomposeVectorNode: Invalid call to Constructor"); + } +} + +Local CLib3MFDecomposeVectorNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFDecomposeVectorNode::GetInputA(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnA = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputA."); + if (wrapperTable->m_DecomposeVectorNode_GetInputA == nullptr) + throw std::runtime_error("Could not call Lib3MF method DecomposeVectorNode::GetInputA."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_DecomposeVectorNode_GetInputA(instanceHandle, &hReturnA); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjA = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnA); + args.GetReturnValue().Set(instanceObjA); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFDecomposeVectorNode::GetOutputX(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnX = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputX."); + if (wrapperTable->m_DecomposeVectorNode_GetOutputX == nullptr) + throw std::runtime_error("Could not call Lib3MF method DecomposeVectorNode::GetOutputX."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_DecomposeVectorNode_GetOutputX(instanceHandle, &hReturnX); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjX = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnX); + args.GetReturnValue().Set(instanceObjX); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFDecomposeVectorNode::GetOutputY(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnY = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputY."); + if (wrapperTable->m_DecomposeVectorNode_GetOutputY == nullptr) + throw std::runtime_error("Could not call Lib3MF method DecomposeVectorNode::GetOutputY."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_DecomposeVectorNode_GetOutputY(instanceHandle, &hReturnY); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjY = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnY); + args.GetReturnValue().Set(instanceObjY); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFDecomposeVectorNode::GetOutputZ(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnZ = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputZ."); + if (wrapperTable->m_DecomposeVectorNode_GetOutputZ == nullptr) + throw std::runtime_error("Could not call Lib3MF method DecomposeVectorNode::GetOutputZ."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_DecomposeVectorNode_GetOutputZ(instanceHandle, &hReturnZ); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjZ = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnZ); + args.GetReturnValue().Set(instanceObjZ); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFComposeMatrixNode Implementation +**************************************************************************************************************************/ + +CLib3MFComposeMatrixNode::CLib3MFComposeMatrixNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFComposeMatrixNode::~CLib3MFComposeMatrixNode() +{ +} + +void CLib3MFComposeMatrixNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFComposeMatrixNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM00", GetInputM00); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM01", GetInputM01); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM02", GetInputM02); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM03", GetInputM03); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM10", GetInputM10); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM11", GetInputM11); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM12", GetInputM12); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM13", GetInputM13); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM20", GetInputM20); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM21", GetInputM21); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM22", GetInputM22); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM23", GetInputM23); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM30", GetInputM30); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM31", GetInputM31); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM32", GetInputM32); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputM33", GetInputM33); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputResult", GetOutputResult); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFComposeMatrixNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFComposeMatrixNode * composematrixnodeInstance = new CLib3MFComposeMatrixNode(); + composematrixnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFComposeMatrixNode: Invalid call to Constructor"); + } +} + +Local CLib3MFComposeMatrixNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFComposeMatrixNode::GetInputM00(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM00 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM00."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM00 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM00."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM00(instanceHandle, &hReturnM00); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM00 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM00); + args.GetReturnValue().Set(instanceObjM00); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM01(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM01 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM01."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM01 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM01."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM01(instanceHandle, &hReturnM01); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM01 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM01); + args.GetReturnValue().Set(instanceObjM01); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM02(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM02 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM02."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM02 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM02."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM02(instanceHandle, &hReturnM02); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM02 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM02); + args.GetReturnValue().Set(instanceObjM02); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM03(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM03 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM03."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM03 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM03."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM03(instanceHandle, &hReturnM03); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM03 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM03); + args.GetReturnValue().Set(instanceObjM03); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM10(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM10 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM10."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM10 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM10."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM10(instanceHandle, &hReturnM10); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM10 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM10); + args.GetReturnValue().Set(instanceObjM10); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM11(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM11 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM11."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM11 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM11."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM11(instanceHandle, &hReturnM11); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM11 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM11); + args.GetReturnValue().Set(instanceObjM11); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM12(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM12 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM12."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM12 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM12."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM12(instanceHandle, &hReturnM12); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM12 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM12); + args.GetReturnValue().Set(instanceObjM12); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM13(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM13 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM13."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM13 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM13."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM13(instanceHandle, &hReturnM13); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM13 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM13); + args.GetReturnValue().Set(instanceObjM13); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM20(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM20 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM20."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM20 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM20."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM20(instanceHandle, &hReturnM20); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM20 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM20); + args.GetReturnValue().Set(instanceObjM20); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM21(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM21 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM21."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM21 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM21."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM21(instanceHandle, &hReturnM21); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM21 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM21); + args.GetReturnValue().Set(instanceObjM21); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM22(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM22 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM22."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM22 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM22."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM22(instanceHandle, &hReturnM22); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM22 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM22); + args.GetReturnValue().Set(instanceObjM22); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM23(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM23 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM23."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM23 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM23."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM23(instanceHandle, &hReturnM23); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM23 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM23); + args.GetReturnValue().Set(instanceObjM23); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM30(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM30 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM30."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM30 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM30."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM30(instanceHandle, &hReturnM30); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM30 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM30); + args.GetReturnValue().Set(instanceObjM30); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM31(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM31 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM31."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM31 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM31."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM31(instanceHandle, &hReturnM31); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM31 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM31); + args.GetReturnValue().Set(instanceObjM31); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM32(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM32 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM32."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM32 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM32."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM32(instanceHandle, &hReturnM32); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM32 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM32); + args.GetReturnValue().Set(instanceObjM32); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetInputM33(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnM33 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputM33."); + if (wrapperTable->m_ComposeMatrixNode_GetInputM33 == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetInputM33."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetInputM33(instanceHandle, &hReturnM33); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjM33 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnM33); + args.GetReturnValue().Set(instanceObjM33); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFComposeMatrixNode::GetOutputResult(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnResult = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputResult."); + if (wrapperTable->m_ComposeMatrixNode_GetOutputResult == nullptr) + throw std::runtime_error("Could not call Lib3MF method ComposeMatrixNode::GetOutputResult."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ComposeMatrixNode_GetOutputResult(instanceHandle, &hReturnResult); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjResult = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnResult); + args.GetReturnValue().Set(instanceObjResult); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFMatrixFromRowsNode Implementation +**************************************************************************************************************************/ + +CLib3MFMatrixFromRowsNode::CLib3MFMatrixFromRowsNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFMatrixFromRowsNode::~CLib3MFMatrixFromRowsNode() +{ +} + +void CLib3MFMatrixFromRowsNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFMatrixFromRowsNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputA", GetInputA); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputB", GetInputB); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputC", GetInputC); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputD", GetInputD); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputResult", GetOutputResult); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFMatrixFromRowsNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFMatrixFromRowsNode * matrixfromrowsnodeInstance = new CLib3MFMatrixFromRowsNode(); + matrixfromrowsnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFMatrixFromRowsNode: Invalid call to Constructor"); + } +} + +Local CLib3MFMatrixFromRowsNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFMatrixFromRowsNode::GetInputA(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnRow0 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputA."); + if (wrapperTable->m_MatrixFromRowsNode_GetInputA == nullptr) + throw std::runtime_error("Could not call Lib3MF method MatrixFromRowsNode::GetInputA."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MatrixFromRowsNode_GetInputA(instanceHandle, &hReturnRow0); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjRow0 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnRow0); + args.GetReturnValue().Set(instanceObjRow0); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMatrixFromRowsNode::GetInputB(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnRow1 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputB."); + if (wrapperTable->m_MatrixFromRowsNode_GetInputB == nullptr) + throw std::runtime_error("Could not call Lib3MF method MatrixFromRowsNode::GetInputB."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MatrixFromRowsNode_GetInputB(instanceHandle, &hReturnRow1); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjRow1 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnRow1); + args.GetReturnValue().Set(instanceObjRow1); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMatrixFromRowsNode::GetInputC(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnRow2 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputC."); + if (wrapperTable->m_MatrixFromRowsNode_GetInputC == nullptr) + throw std::runtime_error("Could not call Lib3MF method MatrixFromRowsNode::GetInputC."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MatrixFromRowsNode_GetInputC(instanceHandle, &hReturnRow2); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjRow2 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnRow2); + args.GetReturnValue().Set(instanceObjRow2); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMatrixFromRowsNode::GetInputD(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnRow3 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputD."); + if (wrapperTable->m_MatrixFromRowsNode_GetInputD == nullptr) + throw std::runtime_error("Could not call Lib3MF method MatrixFromRowsNode::GetInputD."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MatrixFromRowsNode_GetInputD(instanceHandle, &hReturnRow3); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjRow3 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnRow3); + args.GetReturnValue().Set(instanceObjRow3); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMatrixFromRowsNode::GetOutputResult(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnResult = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputResult."); + if (wrapperTable->m_MatrixFromRowsNode_GetOutputResult == nullptr) + throw std::runtime_error("Could not call Lib3MF method MatrixFromRowsNode::GetOutputResult."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MatrixFromRowsNode_GetOutputResult(instanceHandle, &hReturnResult); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjResult = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnResult); + args.GetReturnValue().Set(instanceObjResult); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFMatrixFromColumnsNode Implementation +**************************************************************************************************************************/ + +CLib3MFMatrixFromColumnsNode::CLib3MFMatrixFromColumnsNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFMatrixFromColumnsNode::~CLib3MFMatrixFromColumnsNode() +{ +} + +void CLib3MFMatrixFromColumnsNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFMatrixFromColumnsNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputA", GetInputA); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputB", GetInputB); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputC", GetInputC); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputD", GetInputD); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputResult", GetOutputResult); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFMatrixFromColumnsNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFMatrixFromColumnsNode * matrixfromcolumnsnodeInstance = new CLib3MFMatrixFromColumnsNode(); + matrixfromcolumnsnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFMatrixFromColumnsNode: Invalid call to Constructor"); + } +} + +Local CLib3MFMatrixFromColumnsNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFMatrixFromColumnsNode::GetInputA(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnColumn0 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputA."); + if (wrapperTable->m_MatrixFromColumnsNode_GetInputA == nullptr) + throw std::runtime_error("Could not call Lib3MF method MatrixFromColumnsNode::GetInputA."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MatrixFromColumnsNode_GetInputA(instanceHandle, &hReturnColumn0); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjColumn0 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnColumn0); + args.GetReturnValue().Set(instanceObjColumn0); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMatrixFromColumnsNode::GetInputB(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnColumn1 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputB."); + if (wrapperTable->m_MatrixFromColumnsNode_GetInputB == nullptr) + throw std::runtime_error("Could not call Lib3MF method MatrixFromColumnsNode::GetInputB."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MatrixFromColumnsNode_GetInputB(instanceHandle, &hReturnColumn1); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjColumn1 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnColumn1); + args.GetReturnValue().Set(instanceObjColumn1); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMatrixFromColumnsNode::GetInputC(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnColumn2 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputC."); + if (wrapperTable->m_MatrixFromColumnsNode_GetInputC == nullptr) + throw std::runtime_error("Could not call Lib3MF method MatrixFromColumnsNode::GetInputC."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MatrixFromColumnsNode_GetInputC(instanceHandle, &hReturnColumn2); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjColumn2 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnColumn2); + args.GetReturnValue().Set(instanceObjColumn2); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMatrixFromColumnsNode::GetInputD(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnColumn3 = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputD."); + if (wrapperTable->m_MatrixFromColumnsNode_GetInputD == nullptr) + throw std::runtime_error("Could not call Lib3MF method MatrixFromColumnsNode::GetInputD."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MatrixFromColumnsNode_GetInputD(instanceHandle, &hReturnColumn3); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjColumn3 = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnColumn3); + args.GetReturnValue().Set(instanceObjColumn3); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFMatrixFromColumnsNode::GetOutputResult(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnResult = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputResult."); + if (wrapperTable->m_MatrixFromColumnsNode_GetOutputResult == nullptr) + throw std::runtime_error("Could not call Lib3MF method MatrixFromColumnsNode::GetOutputResult."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_MatrixFromColumnsNode_GetOutputResult(instanceHandle, &hReturnResult); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjResult = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnResult); + args.GetReturnValue().Set(instanceObjResult); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFConstantNode Implementation +**************************************************************************************************************************/ + +CLib3MFConstantNode::CLib3MFConstantNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFConstantNode::~CLib3MFConstantNode() +{ +} + +void CLib3MFConstantNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFConstantNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "SetConstant", SetConstant); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetConstant", GetConstant); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputValue", GetOutputValue); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFConstantNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFConstantNode * constantnodeInstance = new CLib3MFConstantNode(); + constantnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFConstantNode: Invalid call to Constructor"); + } +} + +Local CLib3MFConstantNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFConstantNode::SetConstant(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsNumber()) { + throw std::runtime_error("Expected double parameter 0 (Value)"); + } + double dValue = (double) args[0]->NumberValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetConstant."); + if (wrapperTable->m_ConstantNode_SetConstant == nullptr) + throw std::runtime_error("Could not call Lib3MF method ConstantNode::SetConstant."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ConstantNode_SetConstant(instanceHandle, dValue); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFConstantNode::GetConstant(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + double dReturnValue = 0.0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetConstant."); + if (wrapperTable->m_ConstantNode_GetConstant == nullptr) + throw std::runtime_error("Could not call Lib3MF method ConstantNode::GetConstant."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ConstantNode_GetConstant(instanceHandle, &dReturnValue); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Number::New(isolate, dReturnValue)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFConstantNode::GetOutputValue(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnValue = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputValue."); + if (wrapperTable->m_ConstantNode_GetOutputValue == nullptr) + throw std::runtime_error("Could not call Lib3MF method ConstantNode::GetOutputValue."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ConstantNode_GetOutputValue(instanceHandle, &hReturnValue); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjValue = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnValue); + args.GetReturnValue().Set(instanceObjValue); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFConstVecNode Implementation +**************************************************************************************************************************/ + +CLib3MFConstVecNode::CLib3MFConstVecNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFConstVecNode::~CLib3MFConstVecNode() +{ +} + +void CLib3MFConstVecNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFConstVecNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "SetVector", SetVector); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetVector", GetVector); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputVector", GetOutputVector); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFConstVecNode::New(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFConstVecNode * constvecnodeInstance = new CLib3MFConstVecNode(); + constvecnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFConstVecNode: Invalid call to Constructor"); + } +} + +Local CLib3MFConstVecNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} + + +void CLib3MFConstVecNode::SetVector(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected struct parameter 0 (Value)"); + } + sLib3MFVector sValue = convertObjectToLib3MFVector(isolate, args[0]); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetVector."); + if (wrapperTable->m_ConstVecNode_SetVector == nullptr) + throw std::runtime_error("Could not call Lib3MF method ConstVecNode::SetVector."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ConstVecNode_SetVector(instanceHandle, &sValue); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFConstVecNode::GetVector(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + sLib3MFVector sReturnValue; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetVector."); + if (wrapperTable->m_ConstVecNode_GetVector == nullptr) + throw std::runtime_error("Could not call Lib3MF method ConstVecNode::GetVector."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ConstVecNode_GetVector(instanceHandle, &sReturnValue); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(convertLib3MFVectorToObject(isolate, sReturnValue)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFConstVecNode::GetOutputVector(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnVector = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputVector."); + if (wrapperTable->m_ConstVecNode_GetOutputVector == nullptr) + throw std::runtime_error("Could not call Lib3MF method ConstVecNode::GetOutputVector."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ConstVecNode_GetOutputVector(instanceHandle, &hReturnVector); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjVector = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnVector); + args.GetReturnValue().Set(instanceObjVector); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFConstMatNode Implementation +**************************************************************************************************************************/ + +CLib3MFConstMatNode::CLib3MFConstMatNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFConstMatNode::~CLib3MFConstMatNode() +{ +} + +void CLib3MFConstMatNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFConstMatNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); - } catch (std::exception & E) { - RaiseError(isolate, E.what()); - } -} + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "SetMatrix", SetMatrix); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetMatrix", GetMatrix); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputMatrix", GetOutputMatrix); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); +} -void CLib3MFBeamLattice::SetBalls(const FunctionCallbackInfo& args) +void CLib3MFConstMatNode::New(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); - try { - sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); - if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetBalls."); - if (wrapperTable->m_BeamLattice_SetBalls == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::SetBalls."); - Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_SetBalls(instanceHandle, 0, nullptr); - CheckError(isolate, wrapperTable, instanceHandle, errorCode); - } catch (std::exception & E) { - RaiseError(isolate, E.what()); + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFConstMatNode * constmatnodeInstance = new CLib3MFConstMatNode(); + constmatnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFConstMatNode: Invalid call to Constructor"); } } - -void CLib3MFBeamLattice::GetBalls(const FunctionCallbackInfo& args) +Local CLib3MFConstMatNode::NewInstance(Local pParent, Lib3MFHandle pHandle) { - Isolate* isolate = args.GetIsolate(); + Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); - try { - sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); - if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBalls."); - if (wrapperTable->m_BeamLattice_GetBalls == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBalls."); - Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBalls(instanceHandle, 0, nullptr, nullptr); - CheckError(isolate, wrapperTable, instanceHandle, errorCode); - - } catch (std::exception & E) { - RaiseError(isolate, E.what()); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); } + return instance; } -void CLib3MFBeamLattice::GetBeamSetCount(const FunctionCallbackInfo& args) +void CLib3MFConstMatNode::SetMatrix(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnCount = 0; + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected struct parameter 0 (Value)"); + } + sLib3MFMatrix4x4 sValue = convertObjectToLib3MFMatrix4x4(isolate, args[0]); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBeamSetCount."); - if (wrapperTable->m_BeamLattice_GetBeamSetCount == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBeamSetCount."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetMatrix."); + if (wrapperTable->m_ConstMatNode_SetMatrix == nullptr) + throw std::runtime_error("Could not call Lib3MF method ConstMatNode::SetMatrix."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBeamSetCount(instanceHandle, &nReturnCount); + Lib3MFResult errorCode = wrapperTable->m_ConstMatNode_SetMatrix(instanceHandle, &sValue); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5587,22 +15559,21 @@ void CLib3MFBeamLattice::GetBeamSetCount(const FunctionCallbackInfo& args } -void CLib3MFBeamLattice::AddBeamSet(const FunctionCallbackInfo& args) +void CLib3MFConstMatNode::GetMatrix(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - Lib3MFHandle hReturnBeamSet = nullptr; + sLib3MFMatrix4x4 sReturnValue; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method AddBeamSet."); - if (wrapperTable->m_BeamLattice_AddBeamSet == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::AddBeamSet."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetMatrix."); + if (wrapperTable->m_ConstMatNode_GetMatrix == nullptr) + throw std::runtime_error("Could not call Lib3MF method ConstMatNode::GetMatrix."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_AddBeamSet(instanceHandle, &hReturnBeamSet); + Lib3MFResult errorCode = wrapperTable->m_ConstMatNode_GetMatrix(instanceHandle, &sReturnValue); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - Local instanceObjBeamSet = CLib3MFBeamSet::NewInstance(args.Holder(), hReturnBeamSet); - args.GetReturnValue().Set(instanceObjBeamSet); + args.GetReturnValue().Set(convertLib3MFMatrix4x4ToObject(isolate, sReturnValue)); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5610,26 +15581,22 @@ void CLib3MFBeamLattice::AddBeamSet(const FunctionCallbackInfo& args) } -void CLib3MFBeamLattice::GetBeamSet(const FunctionCallbackInfo& args) +void CLib3MFConstMatNode::GetOutputMatrix(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (Index)"); - } - unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - Lib3MFHandle hReturnBeamSet = nullptr; + Lib3MFHandle hReturnMatrix = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBeamSet."); - if (wrapperTable->m_BeamLattice_GetBeamSet == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamLattice::GetBeamSet."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputMatrix."); + if (wrapperTable->m_ConstMatNode_GetOutputMatrix == nullptr) + throw std::runtime_error("Could not call Lib3MF method ConstMatNode::GetOutputMatrix."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamLattice_GetBeamSet(instanceHandle, nIndex, &hReturnBeamSet); + Lib3MFResult errorCode = wrapperTable->m_ConstMatNode_GetOutputMatrix(instanceHandle, &hReturnMatrix); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - Local instanceObjBeamSet = CLib3MFBeamSet::NewInstance(args.Holder(), hReturnBeamSet); - args.GetReturnValue().Set(instanceObjBeamSet); + Local instanceObjMatrix = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnMatrix); + args.GetReturnValue().Set(instanceObjMatrix); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5637,55 +15604,51 @@ void CLib3MFBeamLattice::GetBeamSet(const FunctionCallbackInfo& args) } /************************************************************************************************************************* - Class CLib3MFComponent Implementation + Class CLib3MFMeshNode Implementation **************************************************************************************************************************/ -CLib3MFComponent::CLib3MFComponent() +CLib3MFMeshNode::CLib3MFMeshNode() : CLib3MFBaseClass() { } -CLib3MFComponent::~CLib3MFComponent() +CLib3MFMeshNode::~CLib3MFMeshNode() { } -void CLib3MFComponent::Init() +void CLib3MFMeshNode::Init() { Isolate* isolate = Isolate::GetCurrent(); // Prepare constructor template Local tpl = FunctionTemplate::New(isolate, New); - tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFComponent")); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFMeshNode")); tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); // Prototype - NODE_SET_PROTOTYPE_METHOD(tpl, "GetObjectResource", GetObjectResource); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetObjectResourceID", GetObjectResourceID); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetUUID", GetUUID); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetUUID", SetUUID); - NODE_SET_PROTOTYPE_METHOD(tpl, "HasTransform", HasTransform); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetTransform", GetTransform); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetTransform", SetTransform); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputMesh", GetInputMesh); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputPos", GetInputPos); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputDistance", GetOutputDistance); constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); } -void CLib3MFComponent::New(const FunctionCallbackInfo& args) +void CLib3MFMeshNode::New(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); if (args.IsConstructCall()) { CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); - CLib3MFComponent * componentInstance = new CLib3MFComponent(); - componentInstance->Wrap(args.This()); + CLib3MFMeshNode * meshnodeInstance = new CLib3MFMeshNode(); + meshnodeInstance->Wrap(args.This()); args.GetReturnValue().Set(args.This()); } else { - RaiseError(isolate, "Lib3MFComponent: Invalid call to Constructor"); + RaiseError(isolate, "Lib3MFMeshNode: Invalid call to Constructor"); } } -Local CLib3MFComponent::NewInstance(Local pParent, Lib3MFHandle pHandle) +Local CLib3MFMeshNode::NewInstance(Local pParent, Lib3MFHandle pHandle) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); @@ -5699,22 +15662,22 @@ Local CLib3MFComponent::NewInstance(Local pParent, Lib3MFHandle } -void CLib3MFComponent::GetObjectResource(const FunctionCallbackInfo& args) +void CLib3MFMeshNode::GetInputMesh(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - Lib3MFHandle hReturnObjectResource = nullptr; + Lib3MFHandle hReturnMesh = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetObjectResource."); - if (wrapperTable->m_Component_GetObjectResource == nullptr) - throw std::runtime_error("Could not call Lib3MF method Component::GetObjectResource."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputMesh."); + if (wrapperTable->m_MeshNode_GetInputMesh == nullptr) + throw std::runtime_error("Could not call Lib3MF method MeshNode::GetInputMesh."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Component_GetObjectResource(instanceHandle, &hReturnObjectResource); + Lib3MFResult errorCode = wrapperTable->m_MeshNode_GetInputMesh(instanceHandle, &hReturnMesh); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - Local instanceObjObjectResource = CLib3MFObject::NewInstance(args.Holder(), hReturnObjectResource); - args.GetReturnValue().Set(instanceObjObjectResource); + Local instanceObjMesh = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnMesh); + args.GetReturnValue().Set(instanceObjMesh); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5722,21 +15685,22 @@ void CLib3MFComponent::GetObjectResource(const FunctionCallbackInfo& args } -void CLib3MFComponent::GetObjectResourceID(const FunctionCallbackInfo& args) +void CLib3MFMeshNode::GetInputPos(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnUniqueResourceID = 0; + Lib3MFHandle hReturnPos = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetObjectResourceID."); - if (wrapperTable->m_Component_GetObjectResourceID == nullptr) - throw std::runtime_error("Could not call Lib3MF method Component::GetObjectResourceID."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputPos."); + if (wrapperTable->m_MeshNode_GetInputPos == nullptr) + throw std::runtime_error("Could not call Lib3MF method MeshNode::GetInputPos."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Component_GetObjectResourceID(instanceHandle, &nReturnUniqueResourceID); + Lib3MFResult errorCode = wrapperTable->m_MeshNode_GetInputPos(instanceHandle, &hReturnPos); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnUniqueResourceID)); + Local instanceObjPos = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnPos); + args.GetReturnValue().Set(instanceObjPos); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5744,77 +15708,103 @@ void CLib3MFComponent::GetObjectResourceID(const FunctionCallbackInfo& ar } -void CLib3MFComponent::GetUUID(const FunctionCallbackInfo& args) +void CLib3MFMeshNode::GetOutputDistance(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - Local outObject = Object::New(isolate); - bool bReturnHasUUID = false; - unsigned int bytesNeededUUID = 0; - unsigned int bytesWrittenUUID = 0; + Lib3MFHandle hReturnDistance = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetUUID."); - if (wrapperTable->m_Component_GetUUID == nullptr) - throw std::runtime_error("Could not call Lib3MF method Component::GetUUID."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputDistance."); + if (wrapperTable->m_MeshNode_GetOutputDistance == nullptr) + throw std::runtime_error("Could not call Lib3MF method MeshNode::GetOutputDistance."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult initErrorCode = wrapperTable->m_Component_GetUUID(instanceHandle, &bReturnHasUUID, 0, &bytesNeededUUID, nullptr); - CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); - std::vector bufferUUID; - bufferUUID.resize(bytesNeededUUID); - Lib3MFResult errorCode = wrapperTable->m_Component_GetUUID(instanceHandle, &bReturnHasUUID, bytesNeededUUID, &bytesWrittenUUID, &bufferUUID[0]); + Lib3MFResult errorCode = wrapperTable->m_MeshNode_GetOutputDistance(instanceHandle, &hReturnDistance); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "HasUUID"), Boolean::New(isolate, bReturnHasUUID)); - outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "UUID"), String::NewFromUtf8(isolate, &bufferUUID[0])); - args.GetReturnValue().Set(outObject); + Local instanceObjDistance = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnDistance); + args.GetReturnValue().Set(instanceObjDistance); } catch (std::exception & E) { RaiseError(isolate, E.what()); } } +/************************************************************************************************************************* + Class CLib3MFUnsignedMeshNode Implementation +**************************************************************************************************************************/ -void CLib3MFComponent::SetUUID(const FunctionCallbackInfo& args) +CLib3MFUnsignedMeshNode::CLib3MFUnsignedMeshNode() + : CLib3MFBaseClass() +{ +} + +CLib3MFUnsignedMeshNode::~CLib3MFUnsignedMeshNode() +{ +} + +void CLib3MFUnsignedMeshNode::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFUnsignedMeshNode")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); + + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputMesh", GetInputMesh); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputPos", GetInputPos); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputDistance", GetOutputDistance); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); + +} + +void CLib3MFUnsignedMeshNode::New(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); - try { - if (!args[0]->IsString()) { - throw std::runtime_error("Expected string parameter 0 (UUID)"); - } - v8::String::Utf8Value sutf8UUID(isolate, args[0]); - std::string sUUID = *sutf8UUID; - sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); - if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetUUID."); - if (wrapperTable->m_Component_SetUUID == nullptr) - throw std::runtime_error("Could not call Lib3MF method Component::SetUUID."); - Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Component_SetUUID(instanceHandle, sUUID.c_str()); - CheckError(isolate, wrapperTable, instanceHandle, errorCode); - } catch (std::exception & E) { - RaiseError(isolate, E.what()); + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFUnsignedMeshNode * unsignedmeshnodeInstance = new CLib3MFUnsignedMeshNode(); + unsignedmeshnodeInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFUnsignedMeshNode: Invalid call to Constructor"); + } +} + +Local CLib3MFUnsignedMeshNode::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); } + return instance; } -void CLib3MFComponent::HasTransform(const FunctionCallbackInfo& args) +void CLib3MFUnsignedMeshNode::GetInputMesh(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - bool bReturnHasTransform = false; + Lib3MFHandle hReturnMesh = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method HasTransform."); - if (wrapperTable->m_Component_HasTransform == nullptr) - throw std::runtime_error("Could not call Lib3MF method Component::HasTransform."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputMesh."); + if (wrapperTable->m_UnsignedMeshNode_GetInputMesh == nullptr) + throw std::runtime_error("Could not call Lib3MF method UnsignedMeshNode::GetInputMesh."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Component_HasTransform(instanceHandle, &bReturnHasTransform); + Lib3MFResult errorCode = wrapperTable->m_UnsignedMeshNode_GetInputMesh(instanceHandle, &hReturnMesh); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Boolean::New(isolate, bReturnHasTransform)); + Local instanceObjMesh = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnMesh); + args.GetReturnValue().Set(instanceObjMesh); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5822,21 +15812,22 @@ void CLib3MFComponent::HasTransform(const FunctionCallbackInfo& args) } -void CLib3MFComponent::GetTransform(const FunctionCallbackInfo& args) +void CLib3MFUnsignedMeshNode::GetInputPos(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - sLib3MFTransform sReturnTransform; + Lib3MFHandle hReturnPos = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetTransform."); - if (wrapperTable->m_Component_GetTransform == nullptr) - throw std::runtime_error("Could not call Lib3MF method Component::GetTransform."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputPos."); + if (wrapperTable->m_UnsignedMeshNode_GetInputPos == nullptr) + throw std::runtime_error("Could not call Lib3MF method UnsignedMeshNode::GetInputPos."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Component_GetTransform(instanceHandle, &sReturnTransform); + Lib3MFResult errorCode = wrapperTable->m_UnsignedMeshNode_GetInputPos(instanceHandle, &hReturnPos); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(convertLib3MFTransformToObject(isolate, sReturnTransform)); + Local instanceObjPos = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnPos); + args.GetReturnValue().Set(instanceObjPos); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5844,23 +15835,22 @@ void CLib3MFComponent::GetTransform(const FunctionCallbackInfo& args) } -void CLib3MFComponent::SetTransform(const FunctionCallbackInfo& args) +void CLib3MFUnsignedMeshNode::GetOutputDistance(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsObject()) { - throw std::runtime_error("Expected struct parameter 0 (Transform)"); - } - sLib3MFTransform sTransform = convertObjectToLib3MFTransform(isolate, args[0]); + Lib3MFHandle hReturnDistance = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetTransform."); - if (wrapperTable->m_Component_SetTransform == nullptr) - throw std::runtime_error("Could not call Lib3MF method Component::SetTransform."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputDistance."); + if (wrapperTable->m_UnsignedMeshNode_GetOutputDistance == nullptr) + throw std::runtime_error("Could not call Lib3MF method UnsignedMeshNode::GetOutputDistance."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Component_SetTransform(instanceHandle, &sTransform); + Lib3MFResult errorCode = wrapperTable->m_UnsignedMeshNode_GetOutputDistance(instanceHandle, &hReturnDistance); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjDistance = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnDistance); + args.GetReturnValue().Set(instanceObjDistance); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -5868,51 +15858,49 @@ void CLib3MFComponent::SetTransform(const FunctionCallbackInfo& args) } /************************************************************************************************************************* - Class CLib3MFComponentsObject Implementation + Class CLib3MFFunctionCallNode Implementation **************************************************************************************************************************/ -CLib3MFComponentsObject::CLib3MFComponentsObject() +CLib3MFFunctionCallNode::CLib3MFFunctionCallNode() : CLib3MFBaseClass() { } -CLib3MFComponentsObject::~CLib3MFComponentsObject() +CLib3MFFunctionCallNode::~CLib3MFFunctionCallNode() { } -void CLib3MFComponentsObject::Init() +void CLib3MFFunctionCallNode::Init() { Isolate* isolate = Isolate::GetCurrent(); // Prepare constructor template Local tpl = FunctionTemplate::New(isolate, New); - tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFComponentsObject")); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFFunctionCallNode")); tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); // Prototype - NODE_SET_PROTOTYPE_METHOD(tpl, "AddComponent", AddComponent); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetComponent", GetComponent); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetComponentCount", GetComponentCount); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputFunctionID", GetInputFunctionID); constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); } -void CLib3MFComponentsObject::New(const FunctionCallbackInfo& args) +void CLib3MFFunctionCallNode::New(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); if (args.IsConstructCall()) { CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); - CLib3MFComponentsObject * componentsobjectInstance = new CLib3MFComponentsObject(); - componentsobjectInstance->Wrap(args.This()); + CLib3MFFunctionCallNode * functioncallnodeInstance = new CLib3MFFunctionCallNode(); + functioncallnodeInstance->Wrap(args.This()); args.GetReturnValue().Set(args.This()); } else { - RaiseError(isolate, "Lib3MFComponentsObject: Invalid call to Constructor"); + RaiseError(isolate, "Lib3MFFunctionCallNode: Invalid call to Constructor"); } } -Local CLib3MFComponentsObject::NewInstance(Local pParent, Lib3MFHandle pHandle) +Local CLib3MFFunctionCallNode::NewInstance(Local pParent, Lib3MFHandle pHandle) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); @@ -5926,83 +15914,101 @@ Local CLib3MFComponentsObject::NewInstance(Local pParent, Lib3MF } -void CLib3MFComponentsObject::AddComponent(const FunctionCallbackInfo& args) +void CLib3MFFunctionCallNode::GetInputFunctionID(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsObject()) { - throw std::runtime_error("Expected class parameter 0 (ObjectResource)"); - } - if (!args[1]->IsObject()) { - throw std::runtime_error("Expected struct parameter 1 (Transform)"); - } - Local objObjectResource = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); - CLib3MFObject * instanceObjectResource = ObjectWrap::Unwrap(objObjectResource); - if (instanceObjectResource == nullptr) - throw std::runtime_error("Invalid Object parameter 0 (ObjectResource)"); - Lib3MFHandle hObjectResource = instanceObjectResource->getHandle( objObjectResource ); - sLib3MFTransform sTransform = convertObjectToLib3MFTransform(isolate, args[1]); - Lib3MFHandle hReturnComponentInstance = nullptr; + Lib3MFHandle hReturnFunction = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method AddComponent."); - if (wrapperTable->m_ComponentsObject_AddComponent == nullptr) - throw std::runtime_error("Could not call Lib3MF method ComponentsObject::AddComponent."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputFunctionID."); + if (wrapperTable->m_FunctionCallNode_GetInputFunctionID == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionCallNode::GetInputFunctionID."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_ComponentsObject_AddComponent(instanceHandle, hObjectResource, &sTransform, &hReturnComponentInstance); + Lib3MFResult errorCode = wrapperTable->m_FunctionCallNode_GetInputFunctionID(instanceHandle, &hReturnFunction); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - Local instanceObjComponentInstance = CLib3MFComponent::NewInstance(args.Holder(), hReturnComponentInstance); - args.GetReturnValue().Set(instanceObjComponentInstance); + Local instanceObjFunction = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnFunction); + args.GetReturnValue().Set(instanceObjFunction); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + +/************************************************************************************************************************* + Class CLib3MFNodeIterator Implementation +**************************************************************************************************************************/ + +CLib3MFNodeIterator::CLib3MFNodeIterator() + : CLib3MFBaseClass() +{ +} + +CLib3MFNodeIterator::~CLib3MFNodeIterator() +{ +} + +void CLib3MFNodeIterator::Init() +{ + Isolate* isolate = Isolate::GetCurrent(); + + // Prepare constructor template + Local tpl = FunctionTemplate::New(isolate, New); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFNodeIterator")); + tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); - } catch (std::exception & E) { - RaiseError(isolate, E.what()); - } -} + // Prototype + NODE_SET_PROTOTYPE_METHOD(tpl, "GetCurrent", GetCurrent); + constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); +} -void CLib3MFComponentsObject::GetComponent(const FunctionCallbackInfo& args) +void CLib3MFNodeIterator::New(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); - try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (Index)"); - } - unsigned int nIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - Lib3MFHandle hReturnComponentInstance = nullptr; - sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); - if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetComponent."); - if (wrapperTable->m_ComponentsObject_GetComponent == nullptr) - throw std::runtime_error("Could not call Lib3MF method ComponentsObject::GetComponent."); - Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_ComponentsObject_GetComponent(instanceHandle, nIndex, &hReturnComponentInstance); - CheckError(isolate, wrapperTable, instanceHandle, errorCode); - Local instanceObjComponentInstance = CLib3MFComponent::NewInstance(args.Holder(), hReturnComponentInstance); - args.GetReturnValue().Set(instanceObjComponentInstance); - } catch (std::exception & E) { - RaiseError(isolate, E.what()); + if (args.IsConstructCall()) { + CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); + CLib3MFNodeIterator * nodeiteratorInstance = new CLib3MFNodeIterator(); + nodeiteratorInstance->Wrap(args.This()); + args.GetReturnValue().Set(args.This()); + } else { + RaiseError(isolate, "Lib3MFNodeIterator: Invalid call to Constructor"); } } +Local CLib3MFNodeIterator::NewInstance(Local pParent, Lib3MFHandle pHandle) +{ + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); + Local cons = Local::New(isolate, constructor); + Local instance; + if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { + instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); + instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } + return instance; +} -void CLib3MFComponentsObject::GetComponentCount(const FunctionCallbackInfo& args) + +void CLib3MFNodeIterator::GetCurrent(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnCount = 0; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetComponentCount."); - if (wrapperTable->m_ComponentsObject_GetComponentCount == nullptr) - throw std::runtime_error("Could not call Lib3MF method ComponentsObject::GetComponentCount."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCurrent."); + if (wrapperTable->m_NodeIterator_GetCurrent == nullptr) + throw std::runtime_error("Could not call Lib3MF method NodeIterator::GetCurrent."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_ComponentsObject_GetComponentCount(instanceHandle, &nReturnCount); + Lib3MFResult errorCode = wrapperTable->m_NodeIterator_GetCurrent(instanceHandle, &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + Local instanceObjNode = CLib3MFImplicitNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6010,58 +16016,58 @@ void CLib3MFComponentsObject::GetComponentCount(const FunctionCallbackInfo tpl = FunctionTemplate::New(isolate, New); - tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFBeamSet")); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFFunction")); tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); // Prototype - NODE_SET_PROTOTYPE_METHOD(tpl, "SetName", SetName); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetName", GetName); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetIdentifier", SetIdentifier); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetIdentifier", GetIdentifier); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetReferenceCount", GetReferenceCount); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetReferences", SetReferences); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetReferences", GetReferences); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetBallReferenceCount", GetBallReferenceCount); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetBallReferences", SetBallReferences); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetBallReferences", GetBallReferences); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetDisplayName", GetDisplayName); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetDisplayName", SetDisplayName); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddInput", AddInput); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetInputs", GetInputs); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveInput", RemoveInput); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddOutput", AddOutput); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOutputs", GetOutputs); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveOutput", RemoveOutput); + NODE_SET_PROTOTYPE_METHOD(tpl, "FindInput", FindInput); + NODE_SET_PROTOTYPE_METHOD(tpl, "FindOutput", FindOutput); constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); } -void CLib3MFBeamSet::New(const FunctionCallbackInfo& args) +void CLib3MFFunction::New(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); if (args.IsConstructCall()) { CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); - CLib3MFBeamSet * beamsetInstance = new CLib3MFBeamSet(); - beamsetInstance->Wrap(args.This()); + CLib3MFFunction * functionInstance = new CLib3MFFunction(); + functionInstance->Wrap(args.This()); args.GetReturnValue().Set(args.This()); } else { - RaiseError(isolate, "Lib3MFBeamSet: Invalid call to Constructor"); + RaiseError(isolate, "Lib3MFFunction: Invalid call to Constructor"); } } -Local CLib3MFBeamSet::NewInstance(Local pParent, Lib3MFHandle pHandle) +Local CLib3MFFunction::NewInstance(Local pParent, Lib3MFHandle pHandle) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); @@ -6075,24 +16081,26 @@ Local CLib3MFBeamSet::NewInstance(Local pParent, Lib3MFHandle pH } -void CLib3MFBeamSet::SetName(const FunctionCallbackInfo& args) +void CLib3MFFunction::GetDisplayName(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsString()) { - throw std::runtime_error("Expected string parameter 0 (Name)"); - } - v8::String::Utf8Value sutf8Name(isolate, args[0]); - std::string sName = *sutf8Name; + unsigned int bytesNeededDisplayName = 0; + unsigned int bytesWrittenDisplayName = 0; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetName."); - if (wrapperTable->m_BeamSet_SetName == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamSet::SetName."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetDisplayName."); + if (wrapperTable->m_Function_GetDisplayName == nullptr) + throw std::runtime_error("Could not call Lib3MF method Function::GetDisplayName."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamSet_SetName(instanceHandle, sName.c_str()); + Lib3MFResult initErrorCode = wrapperTable->m_Function_GetDisplayName(instanceHandle, 0, &bytesNeededDisplayName, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferDisplayName; + bufferDisplayName.resize(bytesNeededDisplayName); + Lib3MFResult errorCode = wrapperTable->m_Function_GetDisplayName(instanceHandle, bytesNeededDisplayName, &bytesWrittenDisplayName, &bufferDisplayName[0]); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferDisplayName[0])); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6100,26 +16108,24 @@ void CLib3MFBeamSet::SetName(const FunctionCallbackInfo& args) } -void CLib3MFBeamSet::GetName(const FunctionCallbackInfo& args) +void CLib3MFFunction::SetDisplayName(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int bytesNeededName = 0; - unsigned int bytesWrittenName = 0; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (DisplayName)"); + } + v8::String::Utf8Value sutf8DisplayName(isolate, args[0]); + std::string sDisplayName = *sutf8DisplayName; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetName."); - if (wrapperTable->m_BeamSet_GetName == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamSet::GetName."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetDisplayName."); + if (wrapperTable->m_Function_SetDisplayName == nullptr) + throw std::runtime_error("Could not call Lib3MF method Function::SetDisplayName."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult initErrorCode = wrapperTable->m_BeamSet_GetName(instanceHandle, 0, &bytesNeededName, nullptr); - CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); - std::vector bufferName; - bufferName.resize(bytesNeededName); - Lib3MFResult errorCode = wrapperTable->m_BeamSet_GetName(instanceHandle, bytesNeededName, &bytesWrittenName, &bufferName[0]); + Lib3MFResult errorCode = wrapperTable->m_Function_SetDisplayName(instanceHandle, sDisplayName.c_str()); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferName[0])); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6127,7 +16133,7 @@ void CLib3MFBeamSet::GetName(const FunctionCallbackInfo& args) } -void CLib3MFBeamSet::SetIdentifier(const FunctionCallbackInfo& args) +void CLib3MFFunction::AddInput(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); @@ -6135,16 +16141,28 @@ void CLib3MFBeamSet::SetIdentifier(const FunctionCallbackInfo& args) if (!args[0]->IsString()) { throw std::runtime_error("Expected string parameter 0 (Identifier)"); } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 2 (Type)"); + } v8::String::Utf8Value sutf8Identifier(isolate, args[0]); std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + unsigned int eType = (unsigned int) args[2]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + Lib3MFHandle hReturnPort = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetIdentifier."); - if (wrapperTable->m_BeamSet_SetIdentifier == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamSet::SetIdentifier."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddInput."); + if (wrapperTable->m_Function_AddInput == nullptr) + throw std::runtime_error("Could not call Lib3MF method Function::AddInput."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamSet_SetIdentifier(instanceHandle, sIdentifier.c_str()); + Lib3MFResult errorCode = wrapperTable->m_Function_AddInput(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), (eLib3MFImplicitPortType) eType, &hReturnPort); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjPort = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnPort); + args.GetReturnValue().Set(instanceObjPort); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6152,26 +16170,22 @@ void CLib3MFBeamSet::SetIdentifier(const FunctionCallbackInfo& args) } -void CLib3MFBeamSet::GetIdentifier(const FunctionCallbackInfo& args) +void CLib3MFFunction::GetInputs(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int bytesNeededIdentifier = 0; - unsigned int bytesWrittenIdentifier = 0; + Lib3MFHandle hReturnIterator = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetIdentifier."); - if (wrapperTable->m_BeamSet_GetIdentifier == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamSet::GetIdentifier."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetInputs."); + if (wrapperTable->m_Function_GetInputs == nullptr) + throw std::runtime_error("Could not call Lib3MF method Function::GetInputs."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult initErrorCode = wrapperTable->m_BeamSet_GetIdentifier(instanceHandle, 0, &bytesNeededIdentifier, nullptr); - CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); - std::vector bufferIdentifier; - bufferIdentifier.resize(bytesNeededIdentifier); - Lib3MFResult errorCode = wrapperTable->m_BeamSet_GetIdentifier(instanceHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0]); + Lib3MFResult errorCode = wrapperTable->m_Function_GetInputs(instanceHandle, &hReturnIterator); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferIdentifier[0])); + Local instanceObjIterator = CLib3MFImplicitPortIterator::NewInstance(args.Holder(), hReturnIterator); + args.GetReturnValue().Set(instanceObjIterator); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6179,21 +16193,27 @@ void CLib3MFBeamSet::GetIdentifier(const FunctionCallbackInfo& args) } -void CLib3MFBeamSet::GetReferenceCount(const FunctionCallbackInfo& args) +void CLib3MFFunction::RemoveInput(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnCount = 0; + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (Input)"); + } + Local objInput = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFImplicitPort * instanceInput = ObjectWrap::Unwrap(objInput); + if (instanceInput == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (Input)"); + Lib3MFHandle hInput = instanceInput->getHandle( objInput ); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetReferenceCount."); - if (wrapperTable->m_BeamSet_GetReferenceCount == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamSet::GetReferenceCount."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveInput."); + if (wrapperTable->m_Function_RemoveInput == nullptr) + throw std::runtime_error("Could not call Lib3MF method Function::RemoveInput."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamSet_GetReferenceCount(instanceHandle, &nReturnCount); + Lib3MFResult errorCode = wrapperTable->m_Function_RemoveInput(instanceHandle, hInput); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6201,19 +16221,36 @@ void CLib3MFBeamSet::GetReferenceCount(const FunctionCallbackInfo& args) } -void CLib3MFBeamSet::SetReferences(const FunctionCallbackInfo& args) +void CLib3MFFunction::AddOutput(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 2 (Type)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + unsigned int eType = (unsigned int) args[2]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + Lib3MFHandle hReturnPort = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetReferences."); - if (wrapperTable->m_BeamSet_SetReferences == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamSet::SetReferences."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddOutput."); + if (wrapperTable->m_Function_AddOutput == nullptr) + throw std::runtime_error("Could not call Lib3MF method Function::AddOutput."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamSet_SetReferences(instanceHandle, 0, nullptr); + Lib3MFResult errorCode = wrapperTable->m_Function_AddOutput(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), (eLib3MFImplicitPortType) eType, &hReturnPort); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjPort = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnPort); + args.GetReturnValue().Set(instanceObjPort); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6221,19 +16258,22 @@ void CLib3MFBeamSet::SetReferences(const FunctionCallbackInfo& args) } -void CLib3MFBeamSet::GetReferences(const FunctionCallbackInfo& args) +void CLib3MFFunction::GetOutputs(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { + Lib3MFHandle hReturnIterator = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetReferences."); - if (wrapperTable->m_BeamSet_GetReferences == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamSet::GetReferences."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOutputs."); + if (wrapperTable->m_Function_GetOutputs == nullptr) + throw std::runtime_error("Could not call Lib3MF method Function::GetOutputs."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamSet_GetReferences(instanceHandle, 0, nullptr, nullptr); + Lib3MFResult errorCode = wrapperTable->m_Function_GetOutputs(instanceHandle, &hReturnIterator); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjIterator = CLib3MFImplicitPortIterator::NewInstance(args.Holder(), hReturnIterator); + args.GetReturnValue().Set(instanceObjIterator); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6241,21 +16281,27 @@ void CLib3MFBeamSet::GetReferences(const FunctionCallbackInfo& args) } -void CLib3MFBeamSet::GetBallReferenceCount(const FunctionCallbackInfo& args) +void CLib3MFFunction::RemoveOutput(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnCount = 0; + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (Output)"); + } + Local objOutput = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFImplicitPort * instanceOutput = ObjectWrap::Unwrap(objOutput); + if (instanceOutput == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (Output)"); + Lib3MFHandle hOutput = instanceOutput->getHandle( objOutput ); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBallReferenceCount."); - if (wrapperTable->m_BeamSet_GetBallReferenceCount == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamSet::GetBallReferenceCount."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveOutput."); + if (wrapperTable->m_Function_RemoveOutput == nullptr) + throw std::runtime_error("Could not call Lib3MF method Function::RemoveOutput."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamSet_GetBallReferenceCount(instanceHandle, &nReturnCount); + Lib3MFResult errorCode = wrapperTable->m_Function_RemoveOutput(instanceHandle, hOutput); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6263,19 +16309,27 @@ void CLib3MFBeamSet::GetBallReferenceCount(const FunctionCallbackInfo& ar } -void CLib3MFBeamSet::SetBallReferences(const FunctionCallbackInfo& args) +void CLib3MFFunction::FindInput(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + Lib3MFHandle hReturnInput = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetBallReferences."); - if (wrapperTable->m_BeamSet_SetBallReferences == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamSet::SetBallReferences."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method FindInput."); + if (wrapperTable->m_Function_FindInput == nullptr) + throw std::runtime_error("Could not call Lib3MF method Function::FindInput."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamSet_SetBallReferences(instanceHandle, 0, nullptr); + Lib3MFResult errorCode = wrapperTable->m_Function_FindInput(instanceHandle, sIdentifier.c_str(), &hReturnInput); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjInput = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnInput); + args.GetReturnValue().Set(instanceObjInput); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6283,19 +16337,27 @@ void CLib3MFBeamSet::SetBallReferences(const FunctionCallbackInfo& args) } -void CLib3MFBeamSet::GetBallReferences(const FunctionCallbackInfo& args) +void CLib3MFFunction::FindOutput(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + Lib3MFHandle hReturnOutput = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBallReferences."); - if (wrapperTable->m_BeamSet_GetBallReferences == nullptr) - throw std::runtime_error("Could not call Lib3MF method BeamSet::GetBallReferences."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method FindOutput."); + if (wrapperTable->m_Function_FindOutput == nullptr) + throw std::runtime_error("Could not call Lib3MF method Function::FindOutput."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BeamSet_GetBallReferences(instanceHandle, 0, nullptr, nullptr); + Lib3MFResult errorCode = wrapperTable->m_Function_FindOutput(instanceHandle, sIdentifier.c_str(), &hReturnOutput); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjOutput = CLib3MFImplicitPort::NewInstance(args.Holder(), hReturnOutput); + args.GetReturnValue().Set(instanceObjOutput); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6303,56 +16365,106 @@ void CLib3MFBeamSet::GetBallReferences(const FunctionCallbackInfo& args) } /************************************************************************************************************************* - Class CLib3MFBaseMaterialGroup Implementation + Class CLib3MFImplicitFunction Implementation **************************************************************************************************************************/ -CLib3MFBaseMaterialGroup::CLib3MFBaseMaterialGroup() +CLib3MFImplicitFunction::CLib3MFImplicitFunction() : CLib3MFBaseClass() { } -CLib3MFBaseMaterialGroup::~CLib3MFBaseMaterialGroup() +CLib3MFImplicitFunction::~CLib3MFImplicitFunction() { } -void CLib3MFBaseMaterialGroup::Init() +void CLib3MFImplicitFunction::Init() { Isolate* isolate = Isolate::GetCurrent(); // Prepare constructor template Local tpl = FunctionTemplate::New(isolate, New); - tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFBaseMaterialGroup")); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFImplicitFunction")); tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); // Prototype - NODE_SET_PROTOTYPE_METHOD(tpl, "GetCount", GetCount); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetAllPropertyIDs", GetAllPropertyIDs); - NODE_SET_PROTOTYPE_METHOD(tpl, "AddMaterial", AddMaterial); - NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveMaterial", RemoveMaterial); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetName", GetName); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetName", SetName); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetDisplayColor", SetDisplayColor); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetDisplayColor", GetDisplayColor); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetIdentifier", GetIdentifier); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetIdentifier", SetIdentifier); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddNode", AddNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddSinNode", AddSinNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddCosNode", AddCosNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddTanNode", AddTanNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddArcSinNode", AddArcSinNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddArcCosNode", AddArcCosNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddArcTan2Node", AddArcTan2Node); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddSinhNode", AddSinhNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddCoshNode", AddCoshNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddTanhNode", AddTanhNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddRoundNode", AddRoundNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddCeilNode", AddCeilNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddFloorNode", AddFloorNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddSignNode", AddSignNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddFractNode", AddFractNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddAbsNode", AddAbsNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddExpNode", AddExpNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddLogNode", AddLogNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddLog2Node", AddLog2Node); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddLog10Node", AddLog10Node); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddLengthNode", AddLengthNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddTransposeNode", AddTransposeNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "InverseNode", InverseNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddSqrtNode", AddSqrtNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddResourceIdNode", AddResourceIdNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddAdditionNode", AddAdditionNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddSubtractionNode", AddSubtractionNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddMultiplicationNode", AddMultiplicationNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddDivisionNode", AddDivisionNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddDotNode", AddDotNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddCrossNode", AddCrossNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddMatVecMultiplicationNode", AddMatVecMultiplicationNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddMinNode", AddMinNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddMaxNode", AddMaxNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddFmodNode", AddFmodNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddPowNode", AddPowNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddSelectNode", AddSelectNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddClampNode", AddClampNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddComposeVectorNode", AddComposeVectorNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddVectorFromScalarNode", AddVectorFromScalarNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddDecomposeVectorNode", AddDecomposeVectorNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddComposeMatrixNode", AddComposeMatrixNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddMatrixFromRowsNode", AddMatrixFromRowsNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddMatrixFromColumnsNode", AddMatrixFromColumnsNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddConstantNode", AddConstantNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddConstVecNode", AddConstVecNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddConstMatNode", AddConstMatNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddMeshNode", AddMeshNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddUnsignedMeshNode", AddUnsignedMeshNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddFunctionCallNode", AddFunctionCallNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetNodes", GetNodes); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveNode", RemoveNode); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddLink", AddLink); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddLinkByNames", AddLinkByNames); + NODE_SET_PROTOTYPE_METHOD(tpl, "Clear", Clear); + NODE_SET_PROTOTYPE_METHOD(tpl, "SortNodesTopologically", SortNodesTopologically); constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); } -void CLib3MFBaseMaterialGroup::New(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::New(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); if (args.IsConstructCall()) { CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); - CLib3MFBaseMaterialGroup * basematerialgroupInstance = new CLib3MFBaseMaterialGroup(); - basematerialgroupInstance->Wrap(args.This()); + CLib3MFImplicitFunction * implicitfunctionInstance = new CLib3MFImplicitFunction(); + implicitfunctionInstance->Wrap(args.This()); args.GetReturnValue().Set(args.This()); } else { - RaiseError(isolate, "Lib3MFBaseMaterialGroup: Invalid call to Constructor"); + RaiseError(isolate, "Lib3MFImplicitFunction: Invalid call to Constructor"); } } -Local CLib3MFBaseMaterialGroup::NewInstance(Local pParent, Lib3MFHandle pHandle) +Local CLib3MFImplicitFunction::NewInstance(Local pParent, Lib3MFHandle pHandle) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); @@ -6366,21 +16478,26 @@ Local CLib3MFBaseMaterialGroup::NewInstance(Local pParent, Lib3M } -void CLib3MFBaseMaterialGroup::GetCount(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::GetIdentifier(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnCount = 0; + unsigned int bytesNeededIdentifier = 0; + unsigned int bytesWrittenIdentifier = 0; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCount."); - if (wrapperTable->m_BaseMaterialGroup_GetCount == nullptr) - throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::GetCount."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetIdentifier."); + if (wrapperTable->m_ImplicitFunction_GetIdentifier == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::GetIdentifier."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_GetCount(instanceHandle, &nReturnCount); + Lib3MFResult initErrorCode = wrapperTable->m_ImplicitFunction_GetIdentifier(instanceHandle, 0, &bytesNeededIdentifier, nullptr); + CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); + std::vector bufferIdentifier; + bufferIdentifier.resize(bytesNeededIdentifier); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_GetIdentifier(instanceHandle, bytesNeededIdentifier, &bytesWrittenIdentifier, &bufferIdentifier[0]); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferIdentifier[0])); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6388,18 +16505,23 @@ void CLib3MFBaseMaterialGroup::GetCount(const FunctionCallbackInfo& args) } -void CLib3MFBaseMaterialGroup::GetAllPropertyIDs(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::SetIdentifier(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetAllPropertyIDs."); - if (wrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs == nullptr) - throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::GetAllPropertyIDs."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetIdentifier."); + if (wrapperTable->m_ImplicitFunction_SetIdentifier == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::SetIdentifier."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_GetAllPropertyIDs(instanceHandle, 0, nullptr, nullptr); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_SetIdentifier(instanceHandle, sIdentifier.c_str()); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -6408,30 +16530,87 @@ void CLib3MFBaseMaterialGroup::GetAllPropertyIDs(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddNode(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 0 (NodeType)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (Identifier)"); + } + if (!args[2]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 2 (Configuration)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (DisplayName)"); + } + if (!args[4]->IsString()) { + throw std::runtime_error("Expected string parameter 4 (Tag)"); + } + unsigned int eNodeType = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8Identifier(isolate, args[1]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[2]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[3]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[4]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddNode."); + if (wrapperTable->m_ImplicitFunction_AddNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddNode."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddNode(instanceHandle, (eLib3MFImplicitNodeType) eNodeType, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFImplicitNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFImplicitFunction::AddSinNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { if (!args[0]->IsString()) { - throw std::runtime_error("Expected string parameter 0 (Name)"); + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - if (!args[1]->IsObject()) { - throw std::runtime_error("Expected struct parameter 1 (DisplayColor)"); + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); } - v8::String::Utf8Value sutf8Name(isolate, args[0]); - std::string sName = *sutf8Name; - sLib3MFColor sDisplayColor = convertObjectToLib3MFColor(isolate, args[1]); - unsigned int nReturnPropertyID = 0; + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method AddMaterial."); - if (wrapperTable->m_BaseMaterialGroup_AddMaterial == nullptr) - throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::AddMaterial."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddSinNode."); + if (wrapperTable->m_ImplicitFunction_AddSinNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddSinNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_AddMaterial(instanceHandle, sName.c_str(), &sDisplayColor, &nReturnPropertyID); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddSinNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnPropertyID)); + Local instanceObjNode = CLib3MFSinNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6439,23 +16618,41 @@ void CLib3MFBaseMaterialGroup::AddMaterial(const FunctionCallbackInfo& ar } -void CLib3MFBaseMaterialGroup::RemoveMaterial(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddCosNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveMaterial."); - if (wrapperTable->m_BaseMaterialGroup_RemoveMaterial == nullptr) - throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::RemoveMaterial."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddCosNode."); + if (wrapperTable->m_ImplicitFunction_AddCosNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddCosNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_RemoveMaterial(instanceHandle, nPropertyID); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddCosNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFCosNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6463,30 +16660,41 @@ void CLib3MFBaseMaterialGroup::RemoveMaterial(const FunctionCallbackInfo& } -void CLib3MFBaseMaterialGroup::GetName(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddTanNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - unsigned int bytesNeededName = 0; - unsigned int bytesWrittenName = 0; + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetName."); - if (wrapperTable->m_BaseMaterialGroup_GetName == nullptr) - throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::GetName."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddTanNode."); + if (wrapperTable->m_ImplicitFunction_AddTanNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddTanNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult initErrorCode = wrapperTable->m_BaseMaterialGroup_GetName(instanceHandle, nPropertyID, 0, &bytesNeededName, nullptr); - CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); - std::vector bufferName; - bufferName.resize(bytesNeededName); - Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_GetName(instanceHandle, nPropertyID, bytesNeededName, &bytesWrittenName, &bufferName[0]); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddTanNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferName[0])); + Local instanceObjNode = CLib3MFTanNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6494,28 +16702,41 @@ void CLib3MFBaseMaterialGroup::GetName(const FunctionCallbackInfo& args) } -void CLib3MFBaseMaterialGroup::SetName(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddArcSinNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - if (!args[1]->IsString()) { - throw std::runtime_error("Expected string parameter 1 (Name)"); + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - v8::String::Utf8Value sutf8Name(isolate, args[1]); - std::string sName = *sutf8Name; + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetName."); - if (wrapperTable->m_BaseMaterialGroup_SetName == nullptr) - throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::SetName."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddArcSinNode."); + if (wrapperTable->m_ImplicitFunction_AddArcSinNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddArcSinNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_SetName(instanceHandle, nPropertyID, sName.c_str()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddArcSinNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFArcSinNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6523,27 +16744,41 @@ void CLib3MFBaseMaterialGroup::SetName(const FunctionCallbackInfo& args) } -void CLib3MFBaseMaterialGroup::SetDisplayColor(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddArcCosNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - if (!args[1]->IsObject()) { - throw std::runtime_error("Expected struct parameter 1 (TheColor)"); + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - sLib3MFColor sTheColor = convertObjectToLib3MFColor(isolate, args[1]); + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetDisplayColor."); - if (wrapperTable->m_BaseMaterialGroup_SetDisplayColor == nullptr) - throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::SetDisplayColor."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddArcCosNode."); + if (wrapperTable->m_ImplicitFunction_AddArcCosNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddArcCosNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_SetDisplayColor(instanceHandle, nPropertyID, &sTheColor); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddArcCosNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFArcCosNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6551,108 +16786,125 @@ void CLib3MFBaseMaterialGroup::SetDisplayColor(const FunctionCallbackInfo } -void CLib3MFBaseMaterialGroup::GetDisplayColor(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddArcTan2Node(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - sLib3MFColor sReturnTheColor; + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetDisplayColor."); - if (wrapperTable->m_BaseMaterialGroup_GetDisplayColor == nullptr) - throw std::runtime_error("Could not call Lib3MF method BaseMaterialGroup::GetDisplayColor."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddArcTan2Node."); + if (wrapperTable->m_ImplicitFunction_AddArcTan2Node == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddArcTan2Node."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_BaseMaterialGroup_GetDisplayColor(instanceHandle, nPropertyID, &sReturnTheColor); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddArcTan2Node(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(convertLib3MFColorToObject(isolate, sReturnTheColor)); + Local instanceObjNode = CLib3MFArcTan2Node::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); } } -/************************************************************************************************************************* - Class CLib3MFColorGroup Implementation -**************************************************************************************************************************/ - -CLib3MFColorGroup::CLib3MFColorGroup() - : CLib3MFBaseClass() -{ -} - -CLib3MFColorGroup::~CLib3MFColorGroup() -{ -} - -void CLib3MFColorGroup::Init() -{ - Isolate* isolate = Isolate::GetCurrent(); - - // Prepare constructor template - Local tpl = FunctionTemplate::New(isolate, New); - tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFColorGroup")); - tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); - - // Prototype - NODE_SET_PROTOTYPE_METHOD(tpl, "GetCount", GetCount); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetAllPropertyIDs", GetAllPropertyIDs); - NODE_SET_PROTOTYPE_METHOD(tpl, "AddColor", AddColor); - NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveColor", RemoveColor); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetColor", SetColor); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetColor", GetColor); - constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); - -} -void CLib3MFColorGroup::New(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddSinhNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddSinhNode."); + if (wrapperTable->m_ImplicitFunction_AddSinhNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddSinhNode."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddSinhNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFSinhNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); - if (args.IsConstructCall()) { - CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); - CLib3MFColorGroup * colorgroupInstance = new CLib3MFColorGroup(); - colorgroupInstance->Wrap(args.This()); - args.GetReturnValue().Set(args.This()); - } else { - RaiseError(isolate, "Lib3MFColorGroup: Invalid call to Constructor"); - } -} - -Local CLib3MFColorGroup::NewInstance(Local pParent, Lib3MFHandle pHandle) -{ - Isolate* isolate = Isolate::GetCurrent(); - HandleScope scope(isolate); - Local cons = Local::New(isolate, constructor); - Local instance; - if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { - instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); - instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } catch (std::exception & E) { + RaiseError(isolate, E.what()); } - return instance; } -void CLib3MFColorGroup::GetCount(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddCoshNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnCount = 0; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCount."); - if (wrapperTable->m_ColorGroup_GetCount == nullptr) - throw std::runtime_error("Could not call Lib3MF method ColorGroup::GetCount."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddCoshNode."); + if (wrapperTable->m_ImplicitFunction_AddCoshNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddCoshNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_ColorGroup_GetCount(instanceHandle, &nReturnCount); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddCoshNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + Local instanceObjNode = CLib3MFCoshNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6660,19 +16912,41 @@ void CLib3MFColorGroup::GetCount(const FunctionCallbackInfo& args) } -void CLib3MFColorGroup::GetAllPropertyIDs(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddTanhNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetAllPropertyIDs."); - if (wrapperTable->m_ColorGroup_GetAllPropertyIDs == nullptr) - throw std::runtime_error("Could not call Lib3MF method ColorGroup::GetAllPropertyIDs."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddTanhNode."); + if (wrapperTable->m_ImplicitFunction_AddTanhNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddTanhNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_ColorGroup_GetAllPropertyIDs(instanceHandle, 0, nullptr, nullptr); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddTanhNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFTanhNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6680,25 +16954,41 @@ void CLib3MFColorGroup::GetAllPropertyIDs(const FunctionCallbackInfo& arg } -void CLib3MFColorGroup::AddColor(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddRoundNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsObject()) { - throw std::runtime_error("Expected struct parameter 0 (TheColor)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - sLib3MFColor sTheColor = convertObjectToLib3MFColor(isolate, args[0]); - unsigned int nReturnPropertyID = 0; + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method AddColor."); - if (wrapperTable->m_ColorGroup_AddColor == nullptr) - throw std::runtime_error("Could not call Lib3MF method ColorGroup::AddColor."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddRoundNode."); + if (wrapperTable->m_ImplicitFunction_AddRoundNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddRoundNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_ColorGroup_AddColor(instanceHandle, &sTheColor, &nReturnPropertyID); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddRoundNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnPropertyID)); + Local instanceObjNode = CLib3MFRoundNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6706,23 +16996,41 @@ void CLib3MFColorGroup::AddColor(const FunctionCallbackInfo& args) } -void CLib3MFColorGroup::RemoveColor(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddCeilNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveColor."); - if (wrapperTable->m_ColorGroup_RemoveColor == nullptr) - throw std::runtime_error("Could not call Lib3MF method ColorGroup::RemoveColor."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddCeilNode."); + if (wrapperTable->m_ImplicitFunction_AddCeilNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddCeilNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_ColorGroup_RemoveColor(instanceHandle, nPropertyID); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddCeilNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFCeilNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6730,27 +17038,41 @@ void CLib3MFColorGroup::RemoveColor(const FunctionCallbackInfo& args) } -void CLib3MFColorGroup::SetColor(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddFloorNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - if (!args[1]->IsObject()) { - throw std::runtime_error("Expected struct parameter 1 (TheColor)"); + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - sLib3MFColor sTheColor = convertObjectToLib3MFColor(isolate, args[1]); + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetColor."); - if (wrapperTable->m_ColorGroup_SetColor == nullptr) - throw std::runtime_error("Could not call Lib3MF method ColorGroup::SetColor."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddFloorNode."); + if (wrapperTable->m_ImplicitFunction_AddFloorNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddFloorNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_ColorGroup_SetColor(instanceHandle, nPropertyID, &sTheColor); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddFloorNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFFloorNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6758,108 +17080,125 @@ void CLib3MFColorGroup::SetColor(const FunctionCallbackInfo& args) } -void CLib3MFColorGroup::GetColor(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddSignNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - sLib3MFColor sReturnTheColor; + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetColor."); - if (wrapperTable->m_ColorGroup_GetColor == nullptr) - throw std::runtime_error("Could not call Lib3MF method ColorGroup::GetColor."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddSignNode."); + if (wrapperTable->m_ImplicitFunction_AddSignNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddSignNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_ColorGroup_GetColor(instanceHandle, nPropertyID, &sReturnTheColor); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddSignNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(convertLib3MFColorToObject(isolate, sReturnTheColor)); + Local instanceObjNode = CLib3MFSignNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); } } -/************************************************************************************************************************* - Class CLib3MFTexture2DGroup Implementation -**************************************************************************************************************************/ - -CLib3MFTexture2DGroup::CLib3MFTexture2DGroup() - : CLib3MFBaseClass() -{ -} - -CLib3MFTexture2DGroup::~CLib3MFTexture2DGroup() -{ -} - -void CLib3MFTexture2DGroup::Init() -{ - Isolate* isolate = Isolate::GetCurrent(); - - // Prepare constructor template - Local tpl = FunctionTemplate::New(isolate, New); - tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFTexture2DGroup")); - tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); - - // Prototype - NODE_SET_PROTOTYPE_METHOD(tpl, "GetCount", GetCount); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetAllPropertyIDs", GetAllPropertyIDs); - NODE_SET_PROTOTYPE_METHOD(tpl, "AddTex2Coord", AddTex2Coord); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetTex2Coord", GetTex2Coord); - NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveTex2Coord", RemoveTex2Coord); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetTexture2D", GetTexture2D); - constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); - -} -void CLib3MFTexture2DGroup::New(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddFractNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddFractNode."); + if (wrapperTable->m_ImplicitFunction_AddFractNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddFractNode."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddFractNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFFractNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); - if (args.IsConstructCall()) { - CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); - CLib3MFTexture2DGroup * texture2dgroupInstance = new CLib3MFTexture2DGroup(); - texture2dgroupInstance->Wrap(args.This()); - args.GetReturnValue().Set(args.This()); - } else { - RaiseError(isolate, "Lib3MFTexture2DGroup: Invalid call to Constructor"); - } -} - -Local CLib3MFTexture2DGroup::NewInstance(Local pParent, Lib3MFHandle pHandle) -{ - Isolate* isolate = Isolate::GetCurrent(); - HandleScope scope(isolate); - Local cons = Local::New(isolate, constructor); - Local instance; - if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { - instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); - instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + } catch (std::exception & E) { + RaiseError(isolate, E.what()); } - return instance; } -void CLib3MFTexture2DGroup::GetCount(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddAbsNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnCount = 0; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCount."); - if (wrapperTable->m_Texture2DGroup_GetCount == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2DGroup::GetCount."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddAbsNode."); + if (wrapperTable->m_ImplicitFunction_AddAbsNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddAbsNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2DGroup_GetCount(instanceHandle, &nReturnCount); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddAbsNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + Local instanceObjNode = CLib3MFAbsNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6867,19 +17206,41 @@ void CLib3MFTexture2DGroup::GetCount(const FunctionCallbackInfo& args) } -void CLib3MFTexture2DGroup::GetAllPropertyIDs(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddExpNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetAllPropertyIDs."); - if (wrapperTable->m_Texture2DGroup_GetAllPropertyIDs == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2DGroup::GetAllPropertyIDs."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddExpNode."); + if (wrapperTable->m_ImplicitFunction_AddExpNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddExpNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2DGroup_GetAllPropertyIDs(instanceHandle, 0, nullptr, nullptr); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddExpNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFExpNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6887,25 +17248,41 @@ void CLib3MFTexture2DGroup::GetAllPropertyIDs(const FunctionCallbackInfo& } -void CLib3MFTexture2DGroup::AddTex2Coord(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddLogNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsObject()) { - throw std::runtime_error("Expected struct parameter 0 (UVCoordinate)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - sLib3MFTex2Coord sUVCoordinate = convertObjectToLib3MFTex2Coord(isolate, args[0]); - unsigned int nReturnPropertyID = 0; + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method AddTex2Coord."); - if (wrapperTable->m_Texture2DGroup_AddTex2Coord == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2DGroup::AddTex2Coord."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddLogNode."); + if (wrapperTable->m_ImplicitFunction_AddLogNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddLogNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2DGroup_AddTex2Coord(instanceHandle, &sUVCoordinate, &nReturnPropertyID); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddLogNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnPropertyID)); + Local instanceObjNode = CLib3MFLogNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6913,25 +17290,41 @@ void CLib3MFTexture2DGroup::AddTex2Coord(const FunctionCallbackInfo& args } -void CLib3MFTexture2DGroup::GetTex2Coord(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddLog2Node(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - sLib3MFTex2Coord sReturnUVCoordinate; + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetTex2Coord."); - if (wrapperTable->m_Texture2DGroup_GetTex2Coord == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2DGroup::GetTex2Coord."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddLog2Node."); + if (wrapperTable->m_ImplicitFunction_AddLog2Node == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddLog2Node."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2DGroup_GetTex2Coord(instanceHandle, nPropertyID, &sReturnUVCoordinate); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddLog2Node(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(convertLib3MFTex2CoordToObject(isolate, sReturnUVCoordinate)); + Local instanceObjNode = CLib3MFLog2Node::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6939,23 +17332,41 @@ void CLib3MFTexture2DGroup::GetTex2Coord(const FunctionCallbackInfo& args } -void CLib3MFTexture2DGroup::RemoveTex2Coord(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddLog10Node(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveTex2Coord."); - if (wrapperTable->m_Texture2DGroup_RemoveTex2Coord == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2DGroup::RemoveTex2Coord."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddLog10Node."); + if (wrapperTable->m_ImplicitFunction_AddLog10Node == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddLog10Node."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2DGroup_RemoveTex2Coord(instanceHandle, nPropertyID); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddLog10Node(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFLog10Node::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -6963,105 +17374,159 @@ void CLib3MFTexture2DGroup::RemoveTex2Coord(const FunctionCallbackInfo& a } -void CLib3MFTexture2DGroup::GetTexture2D(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddLengthNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - Lib3MFHandle hReturnTexture2DInstance = nullptr; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetTexture2D."); - if (wrapperTable->m_Texture2DGroup_GetTexture2D == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2DGroup::GetTexture2D."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddLengthNode."); + if (wrapperTable->m_ImplicitFunction_AddLengthNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddLengthNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2DGroup_GetTexture2D(instanceHandle, &hReturnTexture2DInstance); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddLengthNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - Local instanceObjTexture2DInstance = CLib3MFTexture2D::NewInstance(args.Holder(), hReturnTexture2DInstance); - args.GetReturnValue().Set(instanceObjTexture2DInstance); + Local instanceObjNode = CLib3MFLengthNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { - RaiseError(isolate, E.what()); - } -} - -/************************************************************************************************************************* - Class CLib3MFCompositeMaterials Implementation -**************************************************************************************************************************/ - -CLib3MFCompositeMaterials::CLib3MFCompositeMaterials() - : CLib3MFBaseClass() -{ -} - -CLib3MFCompositeMaterials::~CLib3MFCompositeMaterials() -{ -} - -void CLib3MFCompositeMaterials::Init() -{ - Isolate* isolate = Isolate::GetCurrent(); - - // Prepare constructor template - Local tpl = FunctionTemplate::New(isolate, New); - tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFCompositeMaterials")); - tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); - - // Prototype - NODE_SET_PROTOTYPE_METHOD(tpl, "GetCount", GetCount); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetAllPropertyIDs", GetAllPropertyIDs); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetBaseMaterialGroup", GetBaseMaterialGroup); - NODE_SET_PROTOTYPE_METHOD(tpl, "AddComposite", AddComposite); - NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveComposite", RemoveComposite); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetComposite", GetComposite); - constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); - + RaiseError(isolate, E.what()); + } } -void CLib3MFCompositeMaterials::New(const FunctionCallbackInfo& args) + +void CLib3MFImplicitFunction::AddTransposeNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddTransposeNode."); + if (wrapperTable->m_ImplicitFunction_AddTransposeNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddTransposeNode."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddTransposeNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFTransposeNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); - if (args.IsConstructCall()) { - CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); - CLib3MFCompositeMaterials * compositematerialsInstance = new CLib3MFCompositeMaterials(); - compositematerialsInstance->Wrap(args.This()); - args.GetReturnValue().Set(args.This()); - } else { - RaiseError(isolate, "Lib3MFCompositeMaterials: Invalid call to Constructor"); + } catch (std::exception & E) { + RaiseError(isolate, E.what()); } } -Local CLib3MFCompositeMaterials::NewInstance(Local pParent, Lib3MFHandle pHandle) + +void CLib3MFImplicitFunction::InverseNode(const FunctionCallbackInfo& args) { - Isolate* isolate = Isolate::GetCurrent(); + Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); - Local cons = Local::New(isolate, constructor); - Local instance; - if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { - instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); - instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method InverseNode."); + if (wrapperTable->m_ImplicitFunction_InverseNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::InverseNode."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_InverseNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFInverseNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); } - return instance; } -void CLib3MFCompositeMaterials::GetCount(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddSqrtNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnCount = 0; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCount."); - if (wrapperTable->m_CompositeMaterials_GetCount == nullptr) - throw std::runtime_error("Could not call Lib3MF method CompositeMaterials::GetCount."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddSqrtNode."); + if (wrapperTable->m_ImplicitFunction_AddSqrtNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddSqrtNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_CompositeMaterials_GetCount(instanceHandle, &nReturnCount); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddSqrtNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + Local instanceObjNode = CLib3MFSqrtNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7069,19 +17534,37 @@ void CLib3MFCompositeMaterials::GetCount(const FunctionCallbackInfo& args } -void CLib3MFCompositeMaterials::GetAllPropertyIDs(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddResourceIdNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetAllPropertyIDs."); - if (wrapperTable->m_CompositeMaterials_GetAllPropertyIDs == nullptr) - throw std::runtime_error("Could not call Lib3MF method CompositeMaterials::GetAllPropertyIDs."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddResourceIdNode."); + if (wrapperTable->m_ImplicitFunction_AddResourceIdNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddResourceIdNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_CompositeMaterials_GetAllPropertyIDs(instanceHandle, 0, nullptr, nullptr); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddResourceIdNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFResourceIdNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7089,22 +17572,41 @@ void CLib3MFCompositeMaterials::GetAllPropertyIDs(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddAdditionNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - Lib3MFHandle hReturnBaseMaterialGroupInstance = nullptr; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetBaseMaterialGroup."); - if (wrapperTable->m_CompositeMaterials_GetBaseMaterialGroup == nullptr) - throw std::runtime_error("Could not call Lib3MF method CompositeMaterials::GetBaseMaterialGroup."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddAdditionNode."); + if (wrapperTable->m_ImplicitFunction_AddAdditionNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddAdditionNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_CompositeMaterials_GetBaseMaterialGroup(instanceHandle, &hReturnBaseMaterialGroupInstance); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddAdditionNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - Local instanceObjBaseMaterialGroupInstance = CLib3MFBaseMaterialGroup::NewInstance(args.Holder(), hReturnBaseMaterialGroupInstance); - args.GetReturnValue().Set(instanceObjBaseMaterialGroupInstance); + Local instanceObjNode = CLib3MFAdditionNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7112,21 +17614,41 @@ void CLib3MFCompositeMaterials::GetBaseMaterialGroup(const FunctionCallbackInfo< } -void CLib3MFCompositeMaterials::AddComposite(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddSubtractionNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnPropertyID = 0; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method AddComposite."); - if (wrapperTable->m_CompositeMaterials_AddComposite == nullptr) - throw std::runtime_error("Could not call Lib3MF method CompositeMaterials::AddComposite."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddSubtractionNode."); + if (wrapperTable->m_ImplicitFunction_AddSubtractionNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddSubtractionNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_CompositeMaterials_AddComposite(instanceHandle, 0, nullptr, &nReturnPropertyID); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddSubtractionNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnPropertyID)); + Local instanceObjNode = CLib3MFSubtractionNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7134,23 +17656,41 @@ void CLib3MFCompositeMaterials::AddComposite(const FunctionCallbackInfo& } -void CLib3MFCompositeMaterials::RemoveComposite(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddMultiplicationNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveComposite."); - if (wrapperTable->m_CompositeMaterials_RemoveComposite == nullptr) - throw std::runtime_error("Could not call Lib3MF method CompositeMaterials::RemoveComposite."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddMultiplicationNode."); + if (wrapperTable->m_ImplicitFunction_AddMultiplicationNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddMultiplicationNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_CompositeMaterials_RemoveComposite(instanceHandle, nPropertyID); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddMultiplicationNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFMultiplicationNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7158,110 +17698,197 @@ void CLib3MFCompositeMaterials::RemoveComposite(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddDivisionNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetComposite."); - if (wrapperTable->m_CompositeMaterials_GetComposite == nullptr) - throw std::runtime_error("Could not call Lib3MF method CompositeMaterials::GetComposite."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddDivisionNode."); + if (wrapperTable->m_ImplicitFunction_AddDivisionNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddDivisionNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_CompositeMaterials_GetComposite(instanceHandle, nPropertyID, 0, nullptr, nullptr); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddDivisionNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFDivisionNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); } } -/************************************************************************************************************************* - Class CLib3MFMultiPropertyGroup Implementation -**************************************************************************************************************************/ -CLib3MFMultiPropertyGroup::CLib3MFMultiPropertyGroup() - : CLib3MFBaseClass() +void CLib3MFImplicitFunction::AddDotNode(const FunctionCallbackInfo& args) { -} + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddDotNode."); + if (wrapperTable->m_ImplicitFunction_AddDotNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddDotNode."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddDotNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFDotNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); -CLib3MFMultiPropertyGroup::~CLib3MFMultiPropertyGroup() -{ + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } } -void CLib3MFMultiPropertyGroup::Init() -{ - Isolate* isolate = Isolate::GetCurrent(); - - // Prepare constructor template - Local tpl = FunctionTemplate::New(isolate, New); - tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFMultiPropertyGroup")); - tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); - - // Prototype - NODE_SET_PROTOTYPE_METHOD(tpl, "GetCount", GetCount); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetAllPropertyIDs", GetAllPropertyIDs); - NODE_SET_PROTOTYPE_METHOD(tpl, "AddMultiProperty", AddMultiProperty); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetMultiProperty", SetMultiProperty); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetMultiProperty", GetMultiProperty); - NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveMultiProperty", RemoveMultiProperty); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetLayerCount", GetLayerCount); - NODE_SET_PROTOTYPE_METHOD(tpl, "AddLayer", AddLayer); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetLayer", GetLayer); - NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveLayer", RemoveLayer); - constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); - -} -void CLib3MFMultiPropertyGroup::New(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddCrossNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddCrossNode."); + if (wrapperTable->m_ImplicitFunction_AddCrossNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddCrossNode."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddCrossNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFCrossNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); - if (args.IsConstructCall()) { - CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); - CLib3MFMultiPropertyGroup * multipropertygroupInstance = new CLib3MFMultiPropertyGroup(); - multipropertygroupInstance->Wrap(args.This()); - args.GetReturnValue().Set(args.This()); - } else { - RaiseError(isolate, "Lib3MFMultiPropertyGroup: Invalid call to Constructor"); + } catch (std::exception & E) { + RaiseError(isolate, E.what()); } } -Local CLib3MFMultiPropertyGroup::NewInstance(Local pParent, Lib3MFHandle pHandle) + +void CLib3MFImplicitFunction::AddMatVecMultiplicationNode(const FunctionCallbackInfo& args) { - Isolate* isolate = Isolate::GetCurrent(); + Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); - Local cons = Local::New(isolate, constructor); - Local instance; - if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { - instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); - instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddMatVecMultiplicationNode."); + if (wrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddMatVecMultiplicationNode."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddMatVecMultiplicationNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFMatVecMultiplicationNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); } - return instance; } -void CLib3MFMultiPropertyGroup::GetCount(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddMinNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnCount = 0; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetCount."); - if (wrapperTable->m_MultiPropertyGroup_GetCount == nullptr) - throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::GetCount."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddMinNode."); + if (wrapperTable->m_ImplicitFunction_AddMinNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddMinNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_GetCount(instanceHandle, &nReturnCount); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddMinNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + Local instanceObjNode = CLib3MFMinNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7269,19 +17896,41 @@ void CLib3MFMultiPropertyGroup::GetCount(const FunctionCallbackInfo& args } -void CLib3MFMultiPropertyGroup::GetAllPropertyIDs(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddMaxNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetAllPropertyIDs."); - if (wrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs == nullptr) - throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::GetAllPropertyIDs."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddMaxNode."); + if (wrapperTable->m_ImplicitFunction_AddMaxNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddMaxNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_GetAllPropertyIDs(instanceHandle, 0, nullptr, nullptr); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddMaxNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFMaxNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7289,21 +17938,41 @@ void CLib3MFMultiPropertyGroup::GetAllPropertyIDs(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddFmodNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnPropertyID = 0; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method AddMultiProperty."); - if (wrapperTable->m_MultiPropertyGroup_AddMultiProperty == nullptr) - throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::AddMultiProperty."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddFmodNode."); + if (wrapperTable->m_ImplicitFunction_AddFmodNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddFmodNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_AddMultiProperty(instanceHandle, 0, nullptr, &nReturnPropertyID); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddFmodNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnPropertyID)); + Local instanceObjNode = CLib3MFFmodNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7311,23 +17980,41 @@ void CLib3MFMultiPropertyGroup::AddMultiProperty(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddPowNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetMultiProperty."); - if (wrapperTable->m_MultiPropertyGroup_SetMultiProperty == nullptr) - throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::SetMultiProperty."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddPowNode."); + if (wrapperTable->m_ImplicitFunction_AddPowNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddPowNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_SetMultiProperty(instanceHandle, nPropertyID, 0, nullptr); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddPowNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFPowNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7335,23 +18022,41 @@ void CLib3MFMultiPropertyGroup::SetMultiProperty(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddSelectNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetMultiProperty."); - if (wrapperTable->m_MultiPropertyGroup_GetMultiProperty == nullptr) - throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::GetMultiProperty."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddSelectNode."); + if (wrapperTable->m_ImplicitFunction_AddSelectNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddSelectNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_GetMultiProperty(instanceHandle, nPropertyID, 0, nullptr, nullptr); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddSelectNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFSelectNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7359,23 +18064,41 @@ void CLib3MFMultiPropertyGroup::GetMultiProperty(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddClampNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (PropertyID)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nPropertyID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (Configuration)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (DisplayName)"); + } + if (!args[3]->IsString()) { + throw std::runtime_error("Expected string parameter 3 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + unsigned int eConfiguration = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + v8::String::Utf8Value sutf8DisplayName(isolate, args[2]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[3]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveMultiProperty."); - if (wrapperTable->m_MultiPropertyGroup_RemoveMultiProperty == nullptr) - throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::RemoveMultiProperty."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddClampNode."); + if (wrapperTable->m_ImplicitFunction_AddClampNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddClampNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_RemoveMultiProperty(instanceHandle, nPropertyID); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddClampNode(instanceHandle, sIdentifier.c_str(), (eLib3MFImplicitNodeConfiguration) eConfiguration, sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFClampNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7383,21 +18106,37 @@ void CLib3MFMultiPropertyGroup::RemoveMultiProperty(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddComposeVectorNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int nReturnCount = 0; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetLayerCount."); - if (wrapperTable->m_MultiPropertyGroup_GetLayerCount == nullptr) - throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::GetLayerCount."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddComposeVectorNode."); + if (wrapperTable->m_ImplicitFunction_AddComposeVectorNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddComposeVectorNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_GetLayerCount(instanceHandle, &nReturnCount); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddComposeVectorNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnCount)); + Local instanceObjNode = CLib3MFComposeVectorNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7405,25 +18144,37 @@ void CLib3MFMultiPropertyGroup::GetLayerCount(const FunctionCallbackInfo& } -void CLib3MFMultiPropertyGroup::AddLayer(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddVectorFromScalarNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsObject()) { - throw std::runtime_error("Expected struct parameter 0 (TheLayer)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - sLib3MFMultiPropertyLayer sTheLayer = convertObjectToLib3MFMultiPropertyLayer(isolate, args[0]); - unsigned int nReturnLayerIndex = 0; + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method AddLayer."); - if (wrapperTable->m_MultiPropertyGroup_AddLayer == nullptr) - throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::AddLayer."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddVectorFromScalarNode."); + if (wrapperTable->m_ImplicitFunction_AddVectorFromScalarNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddVectorFromScalarNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_AddLayer(instanceHandle, &sTheLayer, &nReturnLayerIndex); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddVectorFromScalarNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, nReturnLayerIndex)); + Local instanceObjNode = CLib3MFVectorFromScalarNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7431,25 +18182,37 @@ void CLib3MFMultiPropertyGroup::AddLayer(const FunctionCallbackInfo& args } -void CLib3MFMultiPropertyGroup::GetLayer(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddDecomposeVectorNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (LayerIndex)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nLayerIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - sLib3MFMultiPropertyLayer sReturnTheLayer; + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetLayer."); - if (wrapperTable->m_MultiPropertyGroup_GetLayer == nullptr) - throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::GetLayer."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddDecomposeVectorNode."); + if (wrapperTable->m_ImplicitFunction_AddDecomposeVectorNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddDecomposeVectorNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_GetLayer(instanceHandle, nLayerIndex, &sReturnTheLayer); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddDecomposeVectorNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(convertLib3MFMultiPropertyLayerToObject(isolate, sReturnTheLayer)); + Local instanceObjNode = CLib3MFDecomposeVectorNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7457,116 +18220,189 @@ void CLib3MFMultiPropertyGroup::GetLayer(const FunctionCallbackInfo& args } -void CLib3MFMultiPropertyGroup::RemoveLayer(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddComposeMatrixNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected uint32 parameter 0 (LayerIndex)"); + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - unsigned int nLayerIndex = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveLayer."); - if (wrapperTable->m_MultiPropertyGroup_RemoveLayer == nullptr) - throw std::runtime_error("Could not call Lib3MF method MultiPropertyGroup::RemoveLayer."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddComposeMatrixNode."); + if (wrapperTable->m_ImplicitFunction_AddComposeMatrixNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddComposeMatrixNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_MultiPropertyGroup_RemoveLayer(instanceHandle, nLayerIndex); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddComposeMatrixNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFComposeMatrixNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); } } -/************************************************************************************************************************* - Class CLib3MFAttachment Implementation -**************************************************************************************************************************/ -CLib3MFAttachment::CLib3MFAttachment() - : CLib3MFBaseClass() +void CLib3MFImplicitFunction::AddMatrixFromRowsNode(const FunctionCallbackInfo& args) { -} + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddMatrixFromRowsNode."); + if (wrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddMatrixFromRowsNode."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddMatrixFromRowsNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFMatrixFromRowsNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); -CLib3MFAttachment::~CLib3MFAttachment() -{ + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } } -void CLib3MFAttachment::Init() -{ - Isolate* isolate = Isolate::GetCurrent(); - - // Prepare constructor template - Local tpl = FunctionTemplate::New(isolate, New); - tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFAttachment")); - tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); - - // Prototype - NODE_SET_PROTOTYPE_METHOD(tpl, "GetPath", GetPath); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetPath", SetPath); - NODE_SET_PROTOTYPE_METHOD(tpl, "PackagePart", PackagePart); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetRelationShipType", GetRelationShipType); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetRelationShipType", SetRelationShipType); - NODE_SET_PROTOTYPE_METHOD(tpl, "WriteToFile", WriteToFile); - NODE_SET_PROTOTYPE_METHOD(tpl, "ReadFromFile", ReadFromFile); - NODE_SET_PROTOTYPE_METHOD(tpl, "ReadFromCallback", ReadFromCallback); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetStreamSize", GetStreamSize); - NODE_SET_PROTOTYPE_METHOD(tpl, "WriteToBuffer", WriteToBuffer); - NODE_SET_PROTOTYPE_METHOD(tpl, "ReadFromBuffer", ReadFromBuffer); - constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); - -} -void CLib3MFAttachment::New(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddMatrixFromColumnsNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddMatrixFromColumnsNode."); + if (wrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddMatrixFromColumnsNode."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddMatrixFromColumnsNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFMatrixFromColumnsNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); - if (args.IsConstructCall()) { - CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); - CLib3MFAttachment * attachmentInstance = new CLib3MFAttachment(); - attachmentInstance->Wrap(args.This()); - args.GetReturnValue().Set(args.This()); - } else { - RaiseError(isolate, "Lib3MFAttachment: Invalid call to Constructor"); + } catch (std::exception & E) { + RaiseError(isolate, E.what()); } } -Local CLib3MFAttachment::NewInstance(Local pParent, Lib3MFHandle pHandle) + +void CLib3MFImplicitFunction::AddConstantNode(const FunctionCallbackInfo& args) { - Isolate* isolate = Isolate::GetCurrent(); + Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); - Local cons = Local::New(isolate, constructor); - Local instance; - if (cons->NewInstance(isolate->GetCurrentContext()).ToLocal(&instance)) { - instance->SetInternalField(NODEWRAPPER_TABLEINDEX, External::New(isolate, CLib3MFBaseClass::getDynamicWrapperTable(pParent))); - instance->SetInternalField(NODEWRAPPER_HANDLEINDEX, External::New(isolate, pHandle)); + try { + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddConstantNode."); + if (wrapperTable->m_ImplicitFunction_AddConstantNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddConstantNode."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddConstantNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFConstantNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); } - return instance; } -void CLib3MFAttachment::GetPath(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddConstVecNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int bytesNeededPath = 0; - unsigned int bytesWrittenPath = 0; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetPath."); - if (wrapperTable->m_Attachment_GetPath == nullptr) - throw std::runtime_error("Could not call Lib3MF method Attachment::GetPath."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddConstVecNode."); + if (wrapperTable->m_ImplicitFunction_AddConstVecNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddConstVecNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult initErrorCode = wrapperTable->m_Attachment_GetPath(instanceHandle, 0, &bytesNeededPath, nullptr); - CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); - std::vector bufferPath; - bufferPath.resize(bytesNeededPath); - Lib3MFResult errorCode = wrapperTable->m_Attachment_GetPath(instanceHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0]); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddConstVecNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferPath[0])); + Local instanceObjNode = CLib3MFConstVecNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7574,24 +18410,37 @@ void CLib3MFAttachment::GetPath(const FunctionCallbackInfo& args) } -void CLib3MFAttachment::SetPath(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddConstMatNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { if (!args[0]->IsString()) { - throw std::runtime_error("Expected string parameter 0 (Path)"); + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - v8::String::Utf8Value sutf8Path(isolate, args[0]); - std::string sPath = *sutf8Path; + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetPath."); - if (wrapperTable->m_Attachment_SetPath == nullptr) - throw std::runtime_error("Could not call Lib3MF method Attachment::SetPath."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddConstMatNode."); + if (wrapperTable->m_ImplicitFunction_AddConstMatNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddConstMatNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Attachment_SetPath(instanceHandle, sPath.c_str()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddConstMatNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFConstMatNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7599,22 +18448,37 @@ void CLib3MFAttachment::SetPath(const FunctionCallbackInfo& args) } -void CLib3MFAttachment::PackagePart(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddMeshNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - Lib3MFHandle hReturnPackagePart = nullptr; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method PackagePart."); - if (wrapperTable->m_Attachment_PackagePart == nullptr) - throw std::runtime_error("Could not call Lib3MF method Attachment::PackagePart."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddMeshNode."); + if (wrapperTable->m_ImplicitFunction_AddMeshNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddMeshNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Attachment_PackagePart(instanceHandle, &hReturnPackagePart); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddMeshNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - Local instanceObjPackagePart = CLib3MFPackagePart::NewInstance(args.Holder(), hReturnPackagePart); - args.GetReturnValue().Set(instanceObjPackagePart); + Local instanceObjNode = CLib3MFMeshNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7622,26 +18486,37 @@ void CLib3MFAttachment::PackagePart(const FunctionCallbackInfo& args) } -void CLib3MFAttachment::GetRelationShipType(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddUnsignedMeshNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - unsigned int bytesNeededPath = 0; - unsigned int bytesWrittenPath = 0; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Identifier)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetRelationShipType."); - if (wrapperTable->m_Attachment_GetRelationShipType == nullptr) - throw std::runtime_error("Could not call Lib3MF method Attachment::GetRelationShipType."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddUnsignedMeshNode."); + if (wrapperTable->m_ImplicitFunction_AddUnsignedMeshNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddUnsignedMeshNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult initErrorCode = wrapperTable->m_Attachment_GetRelationShipType(instanceHandle, 0, &bytesNeededPath, nullptr); - CheckError(isolate, wrapperTable, instanceHandle, initErrorCode); - std::vector bufferPath; - bufferPath.resize(bytesNeededPath); - Lib3MFResult errorCode = wrapperTable->m_Attachment_GetRelationShipType(instanceHandle, bytesNeededPath, &bytesWrittenPath, &bufferPath[0]); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddUnsignedMeshNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(String::NewFromUtf8(isolate, &bufferPath[0])); + Local instanceObjNode = CLib3MFUnsignedMeshNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7649,24 +18524,37 @@ void CLib3MFAttachment::GetRelationShipType(const FunctionCallbackInfo& a } -void CLib3MFAttachment::SetRelationShipType(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddFunctionCallNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { if (!args[0]->IsString()) { - throw std::runtime_error("Expected string parameter 0 (Path)"); + throw std::runtime_error("Expected string parameter 0 (Identifier)"); } - v8::String::Utf8Value sutf8Path(isolate, args[0]); - std::string sPath = *sutf8Path; + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (DisplayName)"); + } + if (!args[2]->IsString()) { + throw std::runtime_error("Expected string parameter 2 (Tag)"); + } + v8::String::Utf8Value sutf8Identifier(isolate, args[0]); + std::string sIdentifier = *sutf8Identifier; + v8::String::Utf8Value sutf8DisplayName(isolate, args[1]); + std::string sDisplayName = *sutf8DisplayName; + v8::String::Utf8Value sutf8Tag(isolate, args[2]); + std::string sTag = *sutf8Tag; + Lib3MFHandle hReturnNode = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetRelationShipType."); - if (wrapperTable->m_Attachment_SetRelationShipType == nullptr) - throw std::runtime_error("Could not call Lib3MF method Attachment::SetRelationShipType."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddFunctionCallNode."); + if (wrapperTable->m_ImplicitFunction_AddFunctionCallNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddFunctionCallNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Attachment_SetRelationShipType(instanceHandle, sPath.c_str()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddFunctionCallNode(instanceHandle, sIdentifier.c_str(), sDisplayName.c_str(), sTag.c_str(), &hReturnNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjNode = CLib3MFFunctionCallNode::NewInstance(args.Holder(), hReturnNode); + args.GetReturnValue().Set(instanceObjNode); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7674,24 +18562,22 @@ void CLib3MFAttachment::SetRelationShipType(const FunctionCallbackInfo& a } -void CLib3MFAttachment::WriteToFile(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::GetNodes(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsString()) { - throw std::runtime_error("Expected string parameter 0 (FileName)"); - } - v8::String::Utf8Value sutf8FileName(isolate, args[0]); - std::string sFileName = *sutf8FileName; + Lib3MFHandle hReturnIterator = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method WriteToFile."); - if (wrapperTable->m_Attachment_WriteToFile == nullptr) - throw std::runtime_error("Could not call Lib3MF method Attachment::WriteToFile."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetNodes."); + if (wrapperTable->m_ImplicitFunction_GetNodes == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::GetNodes."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Attachment_WriteToFile(instanceHandle, sFileName.c_str()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_GetNodes(instanceHandle, &hReturnIterator); CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjIterator = CLib3MFNodeIterator::NewInstance(args.Holder(), hReturnIterator); + args.GetReturnValue().Set(instanceObjIterator); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7699,23 +18585,26 @@ void CLib3MFAttachment::WriteToFile(const FunctionCallbackInfo& args) } -void CLib3MFAttachment::ReadFromFile(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::RemoveNode(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsString()) { - throw std::runtime_error("Expected string parameter 0 (FileName)"); + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (Node)"); } - v8::String::Utf8Value sutf8FileName(isolate, args[0]); - std::string sFileName = *sutf8FileName; + Local objNode = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFImplicitNode * instanceNode = ObjectWrap::Unwrap(objNode); + if (instanceNode == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (Node)"); + Lib3MFHandle hNode = instanceNode->getHandle( objNode ); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method ReadFromFile."); - if (wrapperTable->m_Attachment_ReadFromFile == nullptr) - throw std::runtime_error("Could not call Lib3MF method Attachment::ReadFromFile."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveNode."); + if (wrapperTable->m_ImplicitFunction_RemoveNode == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::RemoveNode."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Attachment_ReadFromFile(instanceHandle, sFileName.c_str()); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_RemoveNode(instanceHandle, hNode); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -7724,30 +18613,34 @@ void CLib3MFAttachment::ReadFromFile(const FunctionCallbackInfo& args) } -void CLib3MFAttachment::ReadFromCallback(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddLink(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[1]->IsString()) { - throw std::runtime_error("Expected uint64 parameter 1 (StreamSize)"); + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (Source)"); } - if (!args[3]->IsString()) { - throw std::runtime_error("Expected pointer parameter 3 (UserData)"); + if (!args[1]->IsObject()) { + throw std::runtime_error("Expected class parameter 1 (Target)"); } - v8::String::Utf8Value sutf8StreamSize(isolate, args[1]); - std::string sStreamSize = *sutf8StreamSize; - uint64_t nStreamSize = stoull(sStreamSize); - v8::String::Utf8Value sutf8UserData(isolate, args[3]); - std::string sUserData = *sutf8UserData; - uint64_t nUserData = stoull(sUserData); + Local objSource = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFImplicitPort * instanceSource = ObjectWrap::Unwrap(objSource); + if (instanceSource == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (Source)"); + Lib3MFHandle hSource = instanceSource->getHandle( objSource ); + Local objTarget = args[1]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFImplicitPort * instanceTarget = ObjectWrap::Unwrap(objTarget); + if (instanceTarget == nullptr) + throw std::runtime_error("Invalid Object parameter 1 (Target)"); + Lib3MFHandle hTarget = instanceTarget->getHandle( objTarget ); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method ReadFromCallback."); - if (wrapperTable->m_Attachment_ReadFromCallback == nullptr) - throw std::runtime_error("Could not call Lib3MF method Attachment::ReadFromCallback."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddLink."); + if (wrapperTable->m_ImplicitFunction_AddLink == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddLink."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Attachment_ReadFromCallback(instanceHandle, nullptr, nStreamSize, nullptr, (void*) nUserData); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddLink(instanceHandle, hSource, hTarget); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -7756,21 +18649,29 @@ void CLib3MFAttachment::ReadFromCallback(const FunctionCallbackInfo& args } -void CLib3MFAttachment::GetStreamSize(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::AddLinkByNames(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - uint64_t nReturnStreamSize = 0; + if (!args[0]->IsString()) { + throw std::runtime_error("Expected string parameter 0 (Source)"); + } + if (!args[1]->IsString()) { + throw std::runtime_error("Expected string parameter 1 (Target)"); + } + v8::String::Utf8Value sutf8Source(isolate, args[0]); + std::string sSource = *sutf8Source; + v8::String::Utf8Value sutf8Target(isolate, args[1]); + std::string sTarget = *sutf8Target; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetStreamSize."); - if (wrapperTable->m_Attachment_GetStreamSize == nullptr) - throw std::runtime_error("Could not call Lib3MF method Attachment::GetStreamSize."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddLinkByNames."); + if (wrapperTable->m_ImplicitFunction_AddLinkByNames == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::AddLinkByNames."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Attachment_GetStreamSize(instanceHandle, &nReturnStreamSize); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_AddLinkByNames(instanceHandle, sSource.c_str(), sTarget.c_str()); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(String::NewFromUtf8(isolate, std::to_string(nReturnStreamSize).c_str())); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7778,18 +18679,18 @@ void CLib3MFAttachment::GetStreamSize(const FunctionCallbackInfo& args) } -void CLib3MFAttachment::WriteToBuffer(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::Clear(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method WriteToBuffer."); - if (wrapperTable->m_Attachment_WriteToBuffer == nullptr) - throw std::runtime_error("Could not call Lib3MF method Attachment::WriteToBuffer."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method Clear."); + if (wrapperTable->m_ImplicitFunction_Clear == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::Clear."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Attachment_WriteToBuffer(instanceHandle, 0, nullptr, nullptr); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_Clear(instanceHandle); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -7798,18 +18699,18 @@ void CLib3MFAttachment::WriteToBuffer(const FunctionCallbackInfo& args) } -void CLib3MFAttachment::ReadFromBuffer(const FunctionCallbackInfo& args) +void CLib3MFImplicitFunction::SortNodesTopologically(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method ReadFromBuffer."); - if (wrapperTable->m_Attachment_ReadFromBuffer == nullptr) - throw std::runtime_error("Could not call Lib3MF method Attachment::ReadFromBuffer."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SortNodesTopologically."); + if (wrapperTable->m_ImplicitFunction_SortNodesTopologically == nullptr) + throw std::runtime_error("Could not call Lib3MF method ImplicitFunction::SortNodesTopologically."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Attachment_ReadFromBuffer(instanceHandle, 0, nullptr); + Lib3MFResult errorCode = wrapperTable->m_ImplicitFunction_SortNodesTopologically(instanceHandle); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -7818,56 +18719,58 @@ void CLib3MFAttachment::ReadFromBuffer(const FunctionCallbackInfo& args) } /************************************************************************************************************************* - Class CLib3MFTexture2D Implementation + Class CLib3MFFunctionFromImage3D Implementation **************************************************************************************************************************/ -CLib3MFTexture2D::CLib3MFTexture2D() +CLib3MFFunctionFromImage3D::CLib3MFFunctionFromImage3D() : CLib3MFBaseClass() { } -CLib3MFTexture2D::~CLib3MFTexture2D() +CLib3MFFunctionFromImage3D::~CLib3MFFunctionFromImage3D() { } -void CLib3MFTexture2D::Init() +void CLib3MFFunctionFromImage3D::Init() { Isolate* isolate = Isolate::GetCurrent(); // Prepare constructor template Local tpl = FunctionTemplate::New(isolate, New); - tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFTexture2D")); + tpl->SetClassName(String::NewFromUtf8(isolate, "Lib3MFFunctionFromImage3D")); tpl->InstanceTemplate()->SetInternalFieldCount(NODEWRAPPER_FIELDCOUNT); // Prototype - NODE_SET_PROTOTYPE_METHOD(tpl, "GetAttachment", GetAttachment); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetAttachment", SetAttachment); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetContentType", GetContentType); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetContentType", SetContentType); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetTileStyleUV", GetTileStyleUV); - NODE_SET_PROTOTYPE_METHOD(tpl, "SetTileStyleUV", SetTileStyleUV); - NODE_SET_PROTOTYPE_METHOD(tpl, "GetFilter", GetFilter); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetImage3D", GetImage3D); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetImage3D", SetImage3D); NODE_SET_PROTOTYPE_METHOD(tpl, "SetFilter", SetFilter); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetFilter", GetFilter); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetTileStyles", SetTileStyles); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetTileStyles", GetTileStyles); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetOffset", GetOffset); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetOffset", SetOffset); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetScale", GetScale); + NODE_SET_PROTOTYPE_METHOD(tpl, "SetScale", SetScale); constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); } -void CLib3MFTexture2D::New(const FunctionCallbackInfo& args) +void CLib3MFFunctionFromImage3D::New(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); if (args.IsConstructCall()) { CLib3MFBaseClass * holderObj = ObjectWrap::Unwrap(args.Holder()); - CLib3MFTexture2D * texture2dInstance = new CLib3MFTexture2D(); - texture2dInstance->Wrap(args.This()); + CLib3MFFunctionFromImage3D * functionfromimage3dInstance = new CLib3MFFunctionFromImage3D(); + functionfromimage3dInstance->Wrap(args.This()); args.GetReturnValue().Set(args.This()); } else { - RaiseError(isolate, "Lib3MFTexture2D: Invalid call to Constructor"); + RaiseError(isolate, "Lib3MFFunctionFromImage3D: Invalid call to Constructor"); } } -Local CLib3MFTexture2D::NewInstance(Local pParent, Lib3MFHandle pHandle) +Local CLib3MFFunctionFromImage3D::NewInstance(Local pParent, Lib3MFHandle pHandle) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); @@ -7881,22 +18784,22 @@ Local CLib3MFTexture2D::NewInstance(Local pParent, Lib3MFHandle } -void CLib3MFTexture2D::GetAttachment(const FunctionCallbackInfo& args) +void CLib3MFFunctionFromImage3D::GetImage3D(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - Lib3MFHandle hReturnAttachment = nullptr; + Lib3MFHandle hReturnImage3D = nullptr; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetAttachment."); - if (wrapperTable->m_Texture2D_GetAttachment == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2D::GetAttachment."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetImage3D."); + if (wrapperTable->m_FunctionFromImage3D_GetImage3D == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionFromImage3D::GetImage3D."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2D_GetAttachment(instanceHandle, &hReturnAttachment); + Lib3MFResult errorCode = wrapperTable->m_FunctionFromImage3D_GetImage3D(instanceHandle, &hReturnImage3D); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - Local instanceObjAttachment = CLib3MFAttachment::NewInstance(args.Holder(), hReturnAttachment); - args.GetReturnValue().Set(instanceObjAttachment); + Local instanceObjImage3D = CLib3MFImage3D::NewInstance(args.Holder(), hReturnImage3D); + args.GetReturnValue().Set(instanceObjImage3D); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7904,26 +18807,26 @@ void CLib3MFTexture2D::GetAttachment(const FunctionCallbackInfo& args) } -void CLib3MFTexture2D::SetAttachment(const FunctionCallbackInfo& args) +void CLib3MFFunctionFromImage3D::SetImage3D(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { if (!args[0]->IsObject()) { - throw std::runtime_error("Expected class parameter 0 (Attachment)"); + throw std::runtime_error("Expected class parameter 0 (Image3D)"); } - Local objAttachment = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); - CLib3MFAttachment * instanceAttachment = ObjectWrap::Unwrap(objAttachment); - if (instanceAttachment == nullptr) - throw std::runtime_error("Invalid Object parameter 0 (Attachment)"); - Lib3MFHandle hAttachment = instanceAttachment->getHandle( objAttachment ); + Local objImage3D = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFImage3D * instanceImage3D = ObjectWrap::Unwrap(objImage3D); + if (instanceImage3D == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (Image3D)"); + Lib3MFHandle hImage3D = instanceImage3D->getHandle( objImage3D ); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetAttachment."); - if (wrapperTable->m_Texture2D_SetAttachment == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2D::SetAttachment."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetImage3D."); + if (wrapperTable->m_FunctionFromImage3D_SetImage3D == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionFromImage3D::SetImage3D."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2D_SetAttachment(instanceHandle, hAttachment); + Lib3MFResult errorCode = wrapperTable->m_FunctionFromImage3D_SetImage3D(instanceHandle, hImage3D); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -7932,21 +18835,23 @@ void CLib3MFTexture2D::SetAttachment(const FunctionCallbackInfo& args) } -void CLib3MFTexture2D::GetContentType(const FunctionCallbackInfo& args) +void CLib3MFFunctionFromImage3D::SetFilter(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - eLib3MFTextureType eReturnContentType; + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 0 (Filter)"); + } + unsigned int eFilter = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetContentType."); - if (wrapperTable->m_Texture2D_GetContentType == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2D::GetContentType."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetFilter."); + if (wrapperTable->m_FunctionFromImage3D_SetFilter == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionFromImage3D::SetFilter."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2D_GetContentType(instanceHandle, &eReturnContentType); + Lib3MFResult errorCode = wrapperTable->m_FunctionFromImage3D_SetFilter(instanceHandle, (eLib3MFTextureFilter) eFilter); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::New(isolate, (int)eReturnContentType)); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -7954,22 +18859,52 @@ void CLib3MFTexture2D::GetContentType(const FunctionCallbackInfo& args) } -void CLib3MFTexture2D::SetContentType(const FunctionCallbackInfo& args) +void CLib3MFFunctionFromImage3D::GetFilter(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected enum parameter 0 (ContentType)"); - } - unsigned int eContentType = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + eLib3MFTextureFilter eReturnFilter; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetContentType."); - if (wrapperTable->m_Texture2D_SetContentType == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2D::SetContentType."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetFilter."); + if (wrapperTable->m_FunctionFromImage3D_GetFilter == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionFromImage3D::GetFilter."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_FunctionFromImage3D_GetFilter(instanceHandle, &eReturnFilter); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Integer::New(isolate, (int)eReturnFilter)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFFunctionFromImage3D::SetTileStyles(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 0 (TileStyleU)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 1 (TileStyleV)"); + } + if (!args[2]->IsUint32()) { + throw std::runtime_error("Expected enum parameter 2 (TileStyleW)"); + } + unsigned int eTileStyleU = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + unsigned int eTileStyleV = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + unsigned int eTileStyleW = (unsigned int) args[2]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetTileStyles."); + if (wrapperTable->m_FunctionFromImage3D_SetTileStyles == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionFromImage3D::SetTileStyles."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2D_SetContentType(instanceHandle, (eLib3MFTextureType) eContentType); + Lib3MFResult errorCode = wrapperTable->m_FunctionFromImage3D_SetTileStyles(instanceHandle, (eLib3MFTextureTileStyle) eTileStyleU, (eLib3MFTextureTileStyle) eTileStyleV, (eLib3MFTextureTileStyle) eTileStyleW); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -7978,7 +18913,7 @@ void CLib3MFTexture2D::SetContentType(const FunctionCallbackInfo& args) } -void CLib3MFTexture2D::GetTileStyleUV(const FunctionCallbackInfo& args) +void CLib3MFFunctionFromImage3D::GetTileStyles(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); @@ -7986,16 +18921,18 @@ void CLib3MFTexture2D::GetTileStyleUV(const FunctionCallbackInfo& args) Local outObject = Object::New(isolate); eLib3MFTextureTileStyle eReturnTileStyleU; eLib3MFTextureTileStyle eReturnTileStyleV; + eLib3MFTextureTileStyle eReturnTileStyleW; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetTileStyleUV."); - if (wrapperTable->m_Texture2D_GetTileStyleUV == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2D::GetTileStyleUV."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetTileStyles."); + if (wrapperTable->m_FunctionFromImage3D_GetTileStyles == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionFromImage3D::GetTileStyles."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2D_GetTileStyleUV(instanceHandle, &eReturnTileStyleU, &eReturnTileStyleV); + Lib3MFResult errorCode = wrapperTable->m_FunctionFromImage3D_GetTileStyles(instanceHandle, &eReturnTileStyleU, &eReturnTileStyleV, &eReturnTileStyleW); CheckError(isolate, wrapperTable, instanceHandle, errorCode); outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "TileStyleU"), Integer::New(isolate, (int)eReturnTileStyleU)); outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "TileStyleV"), Integer::New(isolate, (int)eReturnTileStyleV)); + outObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "TileStyleW"), Integer::New(isolate, (int)eReturnTileStyleW)); args.GetReturnValue().Set(outObject); } catch (std::exception & E) { @@ -8004,26 +18941,44 @@ void CLib3MFTexture2D::GetTileStyleUV(const FunctionCallbackInfo& args) } -void CLib3MFTexture2D::SetTileStyleUV(const FunctionCallbackInfo& args) +void CLib3MFFunctionFromImage3D::GetOffset(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected enum parameter 0 (TileStyleU)"); - } - if (!args[1]->IsUint32()) { - throw std::runtime_error("Expected enum parameter 1 (TileStyleV)"); + double dReturnOffset = 0.0; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetOffset."); + if (wrapperTable->m_FunctionFromImage3D_GetOffset == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionFromImage3D::GetOffset."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_FunctionFromImage3D_GetOffset(instanceHandle, &dReturnOffset); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + args.GetReturnValue().Set(Number::New(isolate, dReturnOffset)); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFFunctionFromImage3D::SetOffset(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsNumber()) { + throw std::runtime_error("Expected double parameter 0 (Offset)"); } - unsigned int eTileStyleU = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); - unsigned int eTileStyleV = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + double dOffset = (double) args[0]->NumberValue(isolate->GetCurrentContext()).ToChecked(); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetTileStyleUV."); - if (wrapperTable->m_Texture2D_SetTileStyleUV == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2D::SetTileStyleUV."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetOffset."); + if (wrapperTable->m_FunctionFromImage3D_SetOffset == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionFromImage3D::SetOffset."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2D_SetTileStyleUV(instanceHandle, (eLib3MFTextureTileStyle) eTileStyleU, (eLib3MFTextureTileStyle) eTileStyleV); + Lib3MFResult errorCode = wrapperTable->m_FunctionFromImage3D_SetOffset(instanceHandle, dOffset); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -8032,21 +18987,21 @@ void CLib3MFTexture2D::SetTileStyleUV(const FunctionCallbackInfo& args) } -void CLib3MFTexture2D::GetFilter(const FunctionCallbackInfo& args) +void CLib3MFFunctionFromImage3D::GetScale(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - eLib3MFTextureFilter eReturnFilter; + double dReturnScale = 0.0; sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method GetFilter."); - if (wrapperTable->m_Texture2D_GetFilter == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2D::GetFilter."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetScale."); + if (wrapperTable->m_FunctionFromImage3D_GetScale == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionFromImage3D::GetScale."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2D_GetFilter(instanceHandle, &eReturnFilter); + Lib3MFResult errorCode = wrapperTable->m_FunctionFromImage3D_GetScale(instanceHandle, &dReturnScale); CheckError(isolate, wrapperTable, instanceHandle, errorCode); - args.GetReturnValue().Set(Integer::New(isolate, (int)eReturnFilter)); + args.GetReturnValue().Set(Number::New(isolate, dReturnScale)); } catch (std::exception & E) { RaiseError(isolate, E.what()); @@ -8054,22 +19009,22 @@ void CLib3MFTexture2D::GetFilter(const FunctionCallbackInfo& args) } -void CLib3MFTexture2D::SetFilter(const FunctionCallbackInfo& args) +void CLib3MFFunctionFromImage3D::SetScale(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); HandleScope scope(isolate); try { - if (!args[0]->IsUint32()) { - throw std::runtime_error("Expected enum parameter 0 (Filter)"); + if (!args[0]->IsNumber()) { + throw std::runtime_error("Expected double parameter 0 (Scale)"); } - unsigned int eFilter = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + double dScale = (double) args[0]->NumberValue(isolate->GetCurrentContext()).ToChecked(); sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); if (wrapperTable == nullptr) - throw std::runtime_error("Could not get wrapper table for Lib3MF method SetFilter."); - if (wrapperTable->m_Texture2D_SetFilter == nullptr) - throw std::runtime_error("Could not call Lib3MF method Texture2D::SetFilter."); + throw std::runtime_error("Could not get wrapper table for Lib3MF method SetScale."); + if (wrapperTable->m_FunctionFromImage3D_SetScale == nullptr) + throw std::runtime_error("Could not call Lib3MF method FunctionFromImage3D::SetScale."); Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); - Lib3MFResult errorCode = wrapperTable->m_Texture2D_SetFilter(instanceHandle, (eLib3MFTextureFilter) eFilter); + Lib3MFResult errorCode = wrapperTable->m_FunctionFromImage3D_SetScale(instanceHandle, dScale); CheckError(isolate, wrapperTable, instanceHandle, errorCode); } catch (std::exception & E) { @@ -10629,6 +21584,7 @@ void CLib3MFModel::Init() NODE_SET_PROTOTYPE_METHOD(tpl, "GetComponentsObjectByID", GetComponentsObjectByID); NODE_SET_PROTOTYPE_METHOD(tpl, "GetColorGroupByID", GetColorGroupByID); NODE_SET_PROTOTYPE_METHOD(tpl, "GetSliceStackByID", GetSliceStackByID); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetLevelSetByID", GetLevelSetByID); NODE_SET_PROTOTYPE_METHOD(tpl, "GetBuildUUID", GetBuildUUID); NODE_SET_PROTOTYPE_METHOD(tpl, "SetBuildUUID", SetBuildUUID); NODE_SET_PROTOTYPE_METHOD(tpl, "GetBuildItems", GetBuildItems); @@ -10644,7 +21600,9 @@ void CLib3MFModel::Init() NODE_SET_PROTOTYPE_METHOD(tpl, "GetCompositeMaterials", GetCompositeMaterials); NODE_SET_PROTOTYPE_METHOD(tpl, "GetMultiPropertyGroups", GetMultiPropertyGroups); NODE_SET_PROTOTYPE_METHOD(tpl, "GetSliceStacks", GetSliceStacks); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetImage3Ds", GetImage3Ds); NODE_SET_PROTOTYPE_METHOD(tpl, "MergeToModel", MergeToModel); + NODE_SET_PROTOTYPE_METHOD(tpl, "MergeFromModel", MergeFromModel); NODE_SET_PROTOTYPE_METHOD(tpl, "AddMeshObject", AddMeshObject); NODE_SET_PROTOTYPE_METHOD(tpl, "AddComponentsObject", AddComponentsObject); NODE_SET_PROTOTYPE_METHOD(tpl, "AddSliceStack", AddSliceStack); @@ -10654,6 +21612,8 @@ void CLib3MFModel::Init() NODE_SET_PROTOTYPE_METHOD(tpl, "AddTexture2DGroup", AddTexture2DGroup); NODE_SET_PROTOTYPE_METHOD(tpl, "AddCompositeMaterials", AddCompositeMaterials); NODE_SET_PROTOTYPE_METHOD(tpl, "AddMultiPropertyGroup", AddMultiPropertyGroup); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddImageStack", AddImageStack); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetImageStackByID", GetImageStackByID); NODE_SET_PROTOTYPE_METHOD(tpl, "AddBuildItem", AddBuildItem); NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveBuildItem", RemoveBuildItem); NODE_SET_PROTOTYPE_METHOD(tpl, "GetMetaDataGroup", GetMetaDataGroup); @@ -10670,6 +21630,13 @@ void CLib3MFModel::Init() NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveCustomContentType", RemoveCustomContentType); NODE_SET_PROTOTYPE_METHOD(tpl, "SetRandomNumberCallback", SetRandomNumberCallback); NODE_SET_PROTOTYPE_METHOD(tpl, "GetKeyStore", GetKeyStore); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetFunctions", GetFunctions); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddImplicitFunction", AddImplicitFunction); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddFunctionFromImage3D", AddFunctionFromImage3D); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddVolumeData", AddVolumeData); + NODE_SET_PROTOTYPE_METHOD(tpl, "AddLevelSet", AddLevelSet); + NODE_SET_PROTOTYPE_METHOD(tpl, "GetLevelSets", GetLevelSets); + NODE_SET_PROTOTYPE_METHOD(tpl, "RemoveResource", RemoveResource); constructor.Reset(isolate, tpl->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()); } @@ -11204,6 +22171,33 @@ void CLib3MFModel::GetSliceStackByID(const FunctionCallbackInfo& args) } +void CLib3MFModel::GetLevelSetByID(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (UniqueResourceID)"); + } + unsigned int nUniqueResourceID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + Lib3MFHandle hReturnLevelSetObjectInstance = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetLevelSetByID."); + if (wrapperTable->m_Model_GetLevelSetByID == nullptr) + throw std::runtime_error("Could not call Lib3MF method Model::GetLevelSetByID."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Model_GetLevelSetByID(instanceHandle, nUniqueResourceID, &hReturnLevelSetObjectInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjLevelSetObjectInstance = CLib3MFLevelSet::NewInstance(args.Holder(), hReturnLevelSetObjectInstance); + args.GetReturnValue().Set(instanceObjLevelSetObjectInstance); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + void CLib3MFModel::GetBuildUUID(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); @@ -11558,6 +22552,29 @@ void CLib3MFModel::GetSliceStacks(const FunctionCallbackInfo& args) } +void CLib3MFModel::GetImage3Ds(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnResourceIterator = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetImage3Ds."); + if (wrapperTable->m_Model_GetImage3Ds == nullptr) + throw std::runtime_error("Could not call Lib3MF method Model::GetImage3Ds."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Model_GetImage3Ds(instanceHandle, &hReturnResourceIterator); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjResourceIterator = CLib3MFImage3DIterator::NewInstance(args.Holder(), hReturnResourceIterator); + args.GetReturnValue().Set(instanceObjResourceIterator); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + void CLib3MFModel::MergeToModel(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); @@ -11581,6 +22598,34 @@ void CLib3MFModel::MergeToModel(const FunctionCallbackInfo& args) } +void CLib3MFModel::MergeFromModel(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (ModelInstance)"); + } + Local objModelInstance = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFModel * instanceModelInstance = ObjectWrap::Unwrap(objModelInstance); + if (instanceModelInstance == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (ModelInstance)"); + Lib3MFHandle hModelInstance = instanceModelInstance->getHandle( objModelInstance ); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method MergeFromModel."); + if (wrapperTable->m_Model_MergeFromModel == nullptr) + throw std::runtime_error("Could not call Lib3MF method Model::MergeFromModel."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Model_MergeFromModel(instanceHandle, hModelInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + void CLib3MFModel::AddMeshObject(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); @@ -11816,6 +22861,68 @@ void CLib3MFModel::AddMultiPropertyGroup(const FunctionCallbackInfo& args } +void CLib3MFModel::AddImageStack(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (ColumnCount)"); + } + if (!args[1]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 1 (RowCount)"); + } + if (!args[2]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 2 (SheetCount)"); + } + unsigned int nColumnCount = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + unsigned int nRowCount = (unsigned int) args[1]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + unsigned int nSheetCount = (unsigned int) args[2]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + Lib3MFHandle hReturnInstance = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddImageStack."); + if (wrapperTable->m_Model_AddImageStack == nullptr) + throw std::runtime_error("Could not call Lib3MF method Model::AddImageStack."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Model_AddImageStack(instanceHandle, nColumnCount, nRowCount, nSheetCount, &hReturnInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjInstance = CLib3MFImageStack::NewInstance(args.Holder(), hReturnInstance); + args.GetReturnValue().Set(instanceObjInstance); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFModel::GetImageStackByID(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsUint32()) { + throw std::runtime_error("Expected uint32 parameter 0 (UniqueResourceID)"); + } + unsigned int nUniqueResourceID = (unsigned int) args[0]->IntegerValue(isolate->GetCurrentContext()).ToChecked(); + Lib3MFHandle hReturnImageStackInstance = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetImageStackByID."); + if (wrapperTable->m_Model_GetImageStackByID == nullptr) + throw std::runtime_error("Could not call Lib3MF method Model::GetImageStackByID."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Model_GetImageStackByID(instanceHandle, nUniqueResourceID, &hReturnImageStackInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjImageStackInstance = CLib3MFImageStack::NewInstance(args.Holder(), hReturnImageStackInstance); + args.GetReturnValue().Set(instanceObjImageStackInstance); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + void CLib3MFModel::AddBuildItem(const FunctionCallbackInfo& args) { Isolate* isolate = args.GetIsolate(); @@ -12231,6 +23338,180 @@ void CLib3MFModel::GetKeyStore(const FunctionCallbackInfo& args) } } + +void CLib3MFModel::GetFunctions(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnTheResourceIterator = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetFunctions."); + if (wrapperTable->m_Model_GetFunctions == nullptr) + throw std::runtime_error("Could not call Lib3MF method Model::GetFunctions."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Model_GetFunctions(instanceHandle, &hReturnTheResourceIterator); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjTheResourceIterator = CLib3MFFunctionIterator::NewInstance(args.Holder(), hReturnTheResourceIterator); + args.GetReturnValue().Set(instanceObjTheResourceIterator); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFModel::AddImplicitFunction(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnFunctionInstance = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddImplicitFunction."); + if (wrapperTable->m_Model_AddImplicitFunction == nullptr) + throw std::runtime_error("Could not call Lib3MF method Model::AddImplicitFunction."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Model_AddImplicitFunction(instanceHandle, &hReturnFunctionInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjFunctionInstance = CLib3MFImplicitFunction::NewInstance(args.Holder(), hReturnFunctionInstance); + args.GetReturnValue().Set(instanceObjFunctionInstance); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFModel::AddFunctionFromImage3D(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (Image3DInstance)"); + } + Local objImage3DInstance = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFImage3D * instanceImage3DInstance = ObjectWrap::Unwrap(objImage3DInstance); + if (instanceImage3DInstance == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (Image3DInstance)"); + Lib3MFHandle hImage3DInstance = instanceImage3DInstance->getHandle( objImage3DInstance ); + Lib3MFHandle hReturnFunctionInstance = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddFunctionFromImage3D."); + if (wrapperTable->m_Model_AddFunctionFromImage3D == nullptr) + throw std::runtime_error("Could not call Lib3MF method Model::AddFunctionFromImage3D."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Model_AddFunctionFromImage3D(instanceHandle, hImage3DInstance, &hReturnFunctionInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjFunctionInstance = CLib3MFFunctionFromImage3D::NewInstance(args.Holder(), hReturnFunctionInstance); + args.GetReturnValue().Set(instanceObjFunctionInstance); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFModel::AddVolumeData(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnVolumeDataInstance = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddVolumeData."); + if (wrapperTable->m_Model_AddVolumeData == nullptr) + throw std::runtime_error("Could not call Lib3MF method Model::AddVolumeData."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Model_AddVolumeData(instanceHandle, &hReturnVolumeDataInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjVolumeDataInstance = CLib3MFVolumeData::NewInstance(args.Holder(), hReturnVolumeDataInstance); + args.GetReturnValue().Set(instanceObjVolumeDataInstance); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFModel::AddLevelSet(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnLevelSetInstance = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method AddLevelSet."); + if (wrapperTable->m_Model_AddLevelSet == nullptr) + throw std::runtime_error("Could not call Lib3MF method Model::AddLevelSet."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Model_AddLevelSet(instanceHandle, &hReturnLevelSetInstance); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjLevelSetInstance = CLib3MFLevelSet::NewInstance(args.Holder(), hReturnLevelSetInstance); + args.GetReturnValue().Set(instanceObjLevelSetInstance); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFModel::GetLevelSets(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + Lib3MFHandle hReturnResourceIterator = nullptr; + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method GetLevelSets."); + if (wrapperTable->m_Model_GetLevelSets == nullptr) + throw std::runtime_error("Could not call Lib3MF method Model::GetLevelSets."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Model_GetLevelSets(instanceHandle, &hReturnResourceIterator); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + Local instanceObjResourceIterator = CLib3MFLevelSetIterator::NewInstance(args.Holder(), hReturnResourceIterator); + args.GetReturnValue().Set(instanceObjResourceIterator); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + + +void CLib3MFModel::RemoveResource(const FunctionCallbackInfo& args) +{ + Isolate* isolate = args.GetIsolate(); + HandleScope scope(isolate); + try { + if (!args[0]->IsObject()) { + throw std::runtime_error("Expected class parameter 0 (Resource)"); + } + Local objResource = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); + CLib3MFResource * instanceResource = ObjectWrap::Unwrap(objResource); + if (instanceResource == nullptr) + throw std::runtime_error("Invalid Object parameter 0 (Resource)"); + Lib3MFHandle hResource = instanceResource->getHandle( objResource ); + sLib3MFDynamicWrapperTable * wrapperTable = CLib3MFBaseClass::getDynamicWrapperTable(args.Holder()); + if (wrapperTable == nullptr) + throw std::runtime_error("Could not get wrapper table for Lib3MF method RemoveResource."); + if (wrapperTable->m_Model_RemoveResource == nullptr) + throw std::runtime_error("Could not call Lib3MF method Model::RemoveResource."); + Lib3MFHandle instanceHandle = CLib3MFBaseClass::getHandle(args.Holder()); + Lib3MFResult errorCode = wrapperTable->m_Model_RemoveResource(instanceHandle, hResource); + CheckError(isolate, wrapperTable, instanceHandle, errorCode); + + } catch (std::exception & E) { + RaiseError(isolate, E.what()); + } +} + /************************************************************************************************************************* Class CLib3MFWrapper Implementation **************************************************************************************************************************/ @@ -12336,7 +23617,7 @@ void CLib3MFWrapper::New(const FunctionCallbackInfo& args) newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eBeamLatticeClipMode_NoClipMode"), Integer::New(isolate, 0)); newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eBeamLatticeClipMode_Inside"), Integer::New(isolate, 1)); newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eBeamLatticeClipMode_Outside"), Integer::New(isolate, 2)); - newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eBeamLatticeBallMode_None"), Integer::New(isolate, 0)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eBeamLatticeBallMode_BeamLatticeBallModeNone"), Integer::New(isolate, 0)); newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eBeamLatticeBallMode_Mixed"), Integer::New(isolate, 1)); newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eBeamLatticeBallMode_All"), Integer::New(isolate, 2)); newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eProgressIdentifier_QUERYCANCELED"), Integer::New(isolate, 0)); @@ -12366,6 +23647,76 @@ void CLib3MFWrapper::New(const FunctionCallbackInfo& args) newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eBlendMethod_NoBlendMethod"), Integer::New(isolate, 0)); newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eBlendMethod_Mix"), Integer::New(isolate, 1)); newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eBlendMethod_Multiply"), Integer::New(isolate, 2)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eChannelName_Red"), Integer::New(isolate, 0)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eChannelName_Green"), Integer::New(isolate, 1)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eChannelName_Blue"), Integer::New(isolate, 2)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eChannelName_Alpha"), Integer::New(isolate, 3)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eCompositionMethod_WeightedSum"), Integer::New(isolate, 0)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eCompositionMethod_Multiply"), Integer::New(isolate, 1)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eCompositionMethod_Min"), Integer::New(isolate, 2)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eCompositionMethod_Max"), Integer::New(isolate, 3)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eCompositionMethod_Mask"), Integer::New(isolate, 4)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eCompositionSpace_Raw"), Integer::New(isolate, 0)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eCompositionSpace_LinearColor"), Integer::New(isolate, 1)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Addition"), Integer::New(isolate, 1)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Subtraction"), Integer::New(isolate, 2)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Multiplication"), Integer::New(isolate, 3)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Division"), Integer::New(isolate, 4)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Constant"), Integer::New(isolate, 5)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_ConstVec"), Integer::New(isolate, 6)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_ConstMat"), Integer::New(isolate, 7)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_ComposeVector"), Integer::New(isolate, 8)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_DecomposeVector"), Integer::New(isolate, 9)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_ComposeMatrix"), Integer::New(isolate, 10)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_MatrixFromColumns"), Integer::New(isolate, 11)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_MatrixFromRows"), Integer::New(isolate, 12)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Dot"), Integer::New(isolate, 13)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Cross"), Integer::New(isolate, 14)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_MatVecMultiplication"), Integer::New(isolate, 15)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Transpose"), Integer::New(isolate, 16)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Inverse"), Integer::New(isolate, 17)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Sinus"), Integer::New(isolate, 18)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Cosinus"), Integer::New(isolate, 19)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Tan"), Integer::New(isolate, 20)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_ArcSin"), Integer::New(isolate, 21)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_ArcCos"), Integer::New(isolate, 22)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_ArcTan"), Integer::New(isolate, 23)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_ArcTan2"), Integer::New(isolate, 24)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Min"), Integer::New(isolate, 25)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Max"), Integer::New(isolate, 26)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Abs"), Integer::New(isolate, 27)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Fmod"), Integer::New(isolate, 28)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Pow"), Integer::New(isolate, 29)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Sqrt"), Integer::New(isolate, 30)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Exp"), Integer::New(isolate, 31)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Log"), Integer::New(isolate, 32)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Log2"), Integer::New(isolate, 33)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Log10"), Integer::New(isolate, 34)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Select"), Integer::New(isolate, 35)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Clamp"), Integer::New(isolate, 36)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Sinh"), Integer::New(isolate, 37)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Cosh"), Integer::New(isolate, 38)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Tanh"), Integer::New(isolate, 39)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Round"), Integer::New(isolate, 40)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Ceil"), Integer::New(isolate, 41)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Floor"), Integer::New(isolate, 42)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Sign"), Integer::New(isolate, 43)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Fract"), Integer::New(isolate, 44)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_FunctionCall"), Integer::New(isolate, 45)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Mesh"), Integer::New(isolate, 46)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Length"), Integer::New(isolate, 47)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_ConstResourceID"), Integer::New(isolate, 48)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_VectorFromScalar"), Integer::New(isolate, 49)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_UnsignedMesh"), Integer::New(isolate, 50)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeType_Mod"), Integer::New(isolate, 51)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitPortType_Scalar"), Integer::New(isolate, 1)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitPortType_Vector"), Integer::New(isolate, 2)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitPortType_Matrix"), Integer::New(isolate, 3)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitPortType_ResourceID"), Integer::New(isolate, 4)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeConfiguration_Default"), Integer::New(isolate, 1)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeConfiguration_ScalarToScalar"), Integer::New(isolate, 2)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeConfiguration_VectorToVector"), Integer::New(isolate, 3)); + newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eImplicitNodeConfiguration_MatrixToMatrix"), Integer::New(isolate, 4)); newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eEncryptionAlgorithm_AES256_GCM"), Integer::New(isolate, 1)); newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eWrappingAlgorithm_RSA_OAEP"), Integer::New(isolate, 0)); newObject->Set(isolate->GetCurrentContext(), String::NewFromUtf8(isolate, "eMgfAlgorithm_MGF1_SHA1"), Integer::New(isolate, 160)); diff --git a/Autogenerated/Bindings/NodeJS/lib3mf_nodewrapper.h b/Autogenerated/Bindings/NodeJS/lib3mf_nodewrapper.h index 49ce0ade5..bbc2e8ffc 100644 --- a/Autogenerated/Bindings/NodeJS/lib3mf_nodewrapper.h +++ b/Autogenerated/Bindings/NodeJS/lib3mf_nodewrapper.h @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++ Header file for the Node wrapper class of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -389,6 +389,60 @@ class CLib3MFMultiPropertyGroupIterator : public CLib3MFBaseClass { }; +/************************************************************************************************************************* + Class CLib3MFImage3DIterator +**************************************************************************************************************************/ +class CLib3MFImage3DIterator : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetCurrentImage3D(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFImage3DIterator(); + ~CLib3MFImage3DIterator(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFFunctionIterator +**************************************************************************************************************************/ +class CLib3MFFunctionIterator : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetCurrentFunction(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFFunctionIterator(); + ~CLib3MFFunctionIterator(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFLevelSetIterator +**************************************************************************************************************************/ +class CLib3MFLevelSetIterator : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetCurrentLevelSet(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFLevelSetIterator(); + ~CLib3MFLevelSetIterator(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + /************************************************************************************************************************* Class CLib3MFMetaData **************************************************************************************************************************/ @@ -455,6 +509,7 @@ class CLib3MFObject : public CLib3MFBaseClass { static void SetPartNumber(const v8::FunctionCallbackInfo& args); static void IsMeshObject(const v8::FunctionCallbackInfo& args); static void IsComponentsObject(const v8::FunctionCallbackInfo& args); + static void IsLevelSetObject(const v8::FunctionCallbackInfo& args); static void IsValid(const v8::FunctionCallbackInfo& args); static void SetAttachmentAsThumbnail(const v8::FunctionCallbackInfo& args); static void GetThumbnailAttachment(const v8::FunctionCallbackInfo& args); @@ -506,6 +561,8 @@ class CLib3MFMeshObject : public CLib3MFBaseClass { static void SetGeometry(const v8::FunctionCallbackInfo& args); static void IsManifoldAndOriented(const v8::FunctionCallbackInfo& args); static void BeamLattice(const v8::FunctionCallbackInfo& args); + static void GetVolumeData(const v8::FunctionCallbackInfo& args); + static void SetVolumeData(const v8::FunctionCallbackInfo& args); public: CLib3MFMeshObject(); @@ -516,6 +573,39 @@ class CLib3MFMeshObject : public CLib3MFBaseClass { }; +/************************************************************************************************************************* + Class CLib3MFLevelSet +**************************************************************************************************************************/ +class CLib3MFLevelSet : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetFunction(const v8::FunctionCallbackInfo& args); + static void SetFunction(const v8::FunctionCallbackInfo& args); + static void GetTransform(const v8::FunctionCallbackInfo& args); + static void SetTransform(const v8::FunctionCallbackInfo& args); + static void GetChannelName(const v8::FunctionCallbackInfo& args); + static void SetChannelName(const v8::FunctionCallbackInfo& args); + static void SetMinFeatureSize(const v8::FunctionCallbackInfo& args); + static void GetMinFeatureSize(const v8::FunctionCallbackInfo& args); + static void SetFallBackValue(const v8::FunctionCallbackInfo& args); + static void GetFallBackValue(const v8::FunctionCallbackInfo& args); + static void SetMeshBBoxOnly(const v8::FunctionCallbackInfo& args); + static void GetMeshBBoxOnly(const v8::FunctionCallbackInfo& args); + static void SetMesh(const v8::FunctionCallbackInfo& args); + static void GetMesh(const v8::FunctionCallbackInfo& args); + static void GetVolumeData(const v8::FunctionCallbackInfo& args); + static void SetVolumeData(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFLevelSet(); + ~CLib3MFLevelSet(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + /************************************************************************************************************************* Class CLib3MFBeamLattice **************************************************************************************************************************/ @@ -556,6 +646,137 @@ class CLib3MFBeamLattice : public CLib3MFBaseClass { }; +/************************************************************************************************************************* + Class CLib3MFFunctionReference +**************************************************************************************************************************/ +class CLib3MFFunctionReference : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetFunctionResourceID(const v8::FunctionCallbackInfo& args); + static void SetFunctionResourceID(const v8::FunctionCallbackInfo& args); + static void GetTransform(const v8::FunctionCallbackInfo& args); + static void SetTransform(const v8::FunctionCallbackInfo& args); + static void GetChannelName(const v8::FunctionCallbackInfo& args); + static void SetChannelName(const v8::FunctionCallbackInfo& args); + static void SetMinFeatureSize(const v8::FunctionCallbackInfo& args); + static void GetMinFeatureSize(const v8::FunctionCallbackInfo& args); + static void SetFallBackValue(const v8::FunctionCallbackInfo& args); + static void GetFallBackValue(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFFunctionReference(); + ~CLib3MFFunctionReference(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFVolumeDataColor +**************************************************************************************************************************/ +class CLib3MFVolumeDataColor : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFVolumeDataColor(); + ~CLib3MFVolumeDataColor(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFMaterialMapping +**************************************************************************************************************************/ +class CLib3MFMaterialMapping : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFMaterialMapping(); + ~CLib3MFMaterialMapping(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFVolumeDataComposite +**************************************************************************************************************************/ +class CLib3MFVolumeDataComposite : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetBaseMaterialGroup(const v8::FunctionCallbackInfo& args); + static void SetBaseMaterialGroup(const v8::FunctionCallbackInfo& args); + static void GetMaterialMappingCount(const v8::FunctionCallbackInfo& args); + static void GetMaterialMapping(const v8::FunctionCallbackInfo& args); + static void AddMaterialMapping(const v8::FunctionCallbackInfo& args); + static void RemoveMaterialMapping(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFVolumeDataComposite(); + ~CLib3MFVolumeDataComposite(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFVolumeDataProperty +**************************************************************************************************************************/ +class CLib3MFVolumeDataProperty : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetName(const v8::FunctionCallbackInfo& args); + static void SetIsRequired(const v8::FunctionCallbackInfo& args); + static void IsRequired(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFVolumeDataProperty(); + ~CLib3MFVolumeDataProperty(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFVolumeData +**************************************************************************************************************************/ +class CLib3MFVolumeData : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetComposite(const v8::FunctionCallbackInfo& args); + static void CreateNewComposite(const v8::FunctionCallbackInfo& args); + static void RemoveComposite(const v8::FunctionCallbackInfo& args); + static void GetColor(const v8::FunctionCallbackInfo& args); + static void CreateNewColor(const v8::FunctionCallbackInfo& args); + static void RemoveColor(const v8::FunctionCallbackInfo& args); + static void GetPropertyCount(const v8::FunctionCallbackInfo& args); + static void GetProperty(const v8::FunctionCallbackInfo& args); + static void AddPropertyFromFunction(const v8::FunctionCallbackInfo& args); + static void RemoveProperty(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFVolumeData(); + ~CLib3MFVolumeData(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + /************************************************************************************************************************* Class CLib3MFComponent **************************************************************************************************************************/ @@ -748,6 +969,53 @@ class CLib3MFMultiPropertyGroup : public CLib3MFBaseClass { }; +/************************************************************************************************************************* + Class CLib3MFImage3D +**************************************************************************************************************************/ +class CLib3MFImage3D : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetName(const v8::FunctionCallbackInfo& args); + static void SetName(const v8::FunctionCallbackInfo& args); + static void IsImageStack(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFImage3D(); + ~CLib3MFImage3D(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFImageStack +**************************************************************************************************************************/ +class CLib3MFImageStack : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetRowCount(const v8::FunctionCallbackInfo& args); + static void SetRowCount(const v8::FunctionCallbackInfo& args); + static void GetColumnCount(const v8::FunctionCallbackInfo& args); + static void SetColumnCount(const v8::FunctionCallbackInfo& args); + static void GetSheetCount(const v8::FunctionCallbackInfo& args); + static void GetSheet(const v8::FunctionCallbackInfo& args); + static void SetSheet(const v8::FunctionCallbackInfo& args); + static void CreateEmptySheet(const v8::FunctionCallbackInfo& args); + static void CreateSheetFromBuffer(const v8::FunctionCallbackInfo& args); + static void CreateSheetFromFile(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFImageStack(); + ~CLib3MFImageStack(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + /************************************************************************************************************************* Class CLib3MFAttachment **************************************************************************************************************************/ @@ -801,6 +1069,1210 @@ class CLib3MFTexture2D : public CLib3MFBaseClass { }; +/************************************************************************************************************************* + Class CLib3MFImplicitPort +**************************************************************************************************************************/ +class CLib3MFImplicitPort : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetIdentifier(const v8::FunctionCallbackInfo& args); + static void SetIdentifier(const v8::FunctionCallbackInfo& args); + static void GetDisplayName(const v8::FunctionCallbackInfo& args); + static void SetDisplayName(const v8::FunctionCallbackInfo& args); + static void SetType(const v8::FunctionCallbackInfo& args); + static void GetType(const v8::FunctionCallbackInfo& args); + static void GetReference(const v8::FunctionCallbackInfo& args); + static void SetReference(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFImplicitPort(); + ~CLib3MFImplicitPort(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFIterator +**************************************************************************************************************************/ +class CLib3MFIterator : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void MoveNext(const v8::FunctionCallbackInfo& args); + static void MovePrevious(const v8::FunctionCallbackInfo& args); + static void Count(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFIterator(); + ~CLib3MFIterator(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFImplicitPortIterator +**************************************************************************************************************************/ +class CLib3MFImplicitPortIterator : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetCurrent(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFImplicitPortIterator(); + ~CLib3MFImplicitPortIterator(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFImplicitNode +**************************************************************************************************************************/ +class CLib3MFImplicitNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetIdentifier(const v8::FunctionCallbackInfo& args); + static void SetIdentifier(const v8::FunctionCallbackInfo& args); + static void GetDisplayName(const v8::FunctionCallbackInfo& args); + static void SetDisplayName(const v8::FunctionCallbackInfo& args); + static void GetTag(const v8::FunctionCallbackInfo& args); + static void SetTag(const v8::FunctionCallbackInfo& args); + static void GetNodeType(const v8::FunctionCallbackInfo& args); + static void AddInput(const v8::FunctionCallbackInfo& args); + static void GetInputs(const v8::FunctionCallbackInfo& args); + static void AddOutput(const v8::FunctionCallbackInfo& args); + static void GetOutputs(const v8::FunctionCallbackInfo& args); + static void FindInput(const v8::FunctionCallbackInfo& args); + static void FindOutput(const v8::FunctionCallbackInfo& args); + static void AreTypesValid(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFImplicitNode(); + ~CLib3MFImplicitNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFOneInputNode +**************************************************************************************************************************/ +class CLib3MFOneInputNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetInputA(const v8::FunctionCallbackInfo& args); + static void GetOutputResult(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFOneInputNode(); + ~CLib3MFOneInputNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFSinNode +**************************************************************************************************************************/ +class CLib3MFSinNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFSinNode(); + ~CLib3MFSinNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFCosNode +**************************************************************************************************************************/ +class CLib3MFCosNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFCosNode(); + ~CLib3MFCosNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFTanNode +**************************************************************************************************************************/ +class CLib3MFTanNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFTanNode(); + ~CLib3MFTanNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFArcSinNode +**************************************************************************************************************************/ +class CLib3MFArcSinNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFArcSinNode(); + ~CLib3MFArcSinNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFArcCosNode +**************************************************************************************************************************/ +class CLib3MFArcCosNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFArcCosNode(); + ~CLib3MFArcCosNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFArcTanNode +**************************************************************************************************************************/ +class CLib3MFArcTanNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFArcTanNode(); + ~CLib3MFArcTanNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFSinhNode +**************************************************************************************************************************/ +class CLib3MFSinhNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFSinhNode(); + ~CLib3MFSinhNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFCoshNode +**************************************************************************************************************************/ +class CLib3MFCoshNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFCoshNode(); + ~CLib3MFCoshNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFTanhNode +**************************************************************************************************************************/ +class CLib3MFTanhNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFTanhNode(); + ~CLib3MFTanhNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFRoundNode +**************************************************************************************************************************/ +class CLib3MFRoundNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFRoundNode(); + ~CLib3MFRoundNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFCeilNode +**************************************************************************************************************************/ +class CLib3MFCeilNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFCeilNode(); + ~CLib3MFCeilNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFFloorNode +**************************************************************************************************************************/ +class CLib3MFFloorNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFFloorNode(); + ~CLib3MFFloorNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFSignNode +**************************************************************************************************************************/ +class CLib3MFSignNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFSignNode(); + ~CLib3MFSignNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFFractNode +**************************************************************************************************************************/ +class CLib3MFFractNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFFractNode(); + ~CLib3MFFractNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFAbsNode +**************************************************************************************************************************/ +class CLib3MFAbsNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFAbsNode(); + ~CLib3MFAbsNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFExpNode +**************************************************************************************************************************/ +class CLib3MFExpNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFExpNode(); + ~CLib3MFExpNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFLogNode +**************************************************************************************************************************/ +class CLib3MFLogNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFLogNode(); + ~CLib3MFLogNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFLog2Node +**************************************************************************************************************************/ +class CLib3MFLog2Node : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFLog2Node(); + ~CLib3MFLog2Node(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFLog10Node +**************************************************************************************************************************/ +class CLib3MFLog10Node : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFLog10Node(); + ~CLib3MFLog10Node(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFLengthNode +**************************************************************************************************************************/ +class CLib3MFLengthNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFLengthNode(); + ~CLib3MFLengthNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFTransposeNode +**************************************************************************************************************************/ +class CLib3MFTransposeNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFTransposeNode(); + ~CLib3MFTransposeNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFInverseNode +**************************************************************************************************************************/ +class CLib3MFInverseNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFInverseNode(); + ~CLib3MFInverseNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFSqrtNode +**************************************************************************************************************************/ +class CLib3MFSqrtNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFSqrtNode(); + ~CLib3MFSqrtNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFResourceIdNode +**************************************************************************************************************************/ +class CLib3MFResourceIdNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void SetResource(const v8::FunctionCallbackInfo& args); + static void GetResource(const v8::FunctionCallbackInfo& args); + static void GetOutputValue(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFResourceIdNode(); + ~CLib3MFResourceIdNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFTwoInputNode +**************************************************************************************************************************/ +class CLib3MFTwoInputNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetInputB(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFTwoInputNode(); + ~CLib3MFTwoInputNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFAdditionNode +**************************************************************************************************************************/ +class CLib3MFAdditionNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFAdditionNode(); + ~CLib3MFAdditionNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFSubtractionNode +**************************************************************************************************************************/ +class CLib3MFSubtractionNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFSubtractionNode(); + ~CLib3MFSubtractionNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFMultiplicationNode +**************************************************************************************************************************/ +class CLib3MFMultiplicationNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFMultiplicationNode(); + ~CLib3MFMultiplicationNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFDivisionNode +**************************************************************************************************************************/ +class CLib3MFDivisionNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFDivisionNode(); + ~CLib3MFDivisionNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFDotNode +**************************************************************************************************************************/ +class CLib3MFDotNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFDotNode(); + ~CLib3MFDotNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFCrossNode +**************************************************************************************************************************/ +class CLib3MFCrossNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFCrossNode(); + ~CLib3MFCrossNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFArcTan2Node +**************************************************************************************************************************/ +class CLib3MFArcTan2Node : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFArcTan2Node(); + ~CLib3MFArcTan2Node(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFMatVecMultiplicationNode +**************************************************************************************************************************/ +class CLib3MFMatVecMultiplicationNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFMatVecMultiplicationNode(); + ~CLib3MFMatVecMultiplicationNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFMinNode +**************************************************************************************************************************/ +class CLib3MFMinNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFMinNode(); + ~CLib3MFMinNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFMaxNode +**************************************************************************************************************************/ +class CLib3MFMaxNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFMaxNode(); + ~CLib3MFMaxNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFFmodNode +**************************************************************************************************************************/ +class CLib3MFFmodNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFFmodNode(); + ~CLib3MFFmodNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFModNode +**************************************************************************************************************************/ +class CLib3MFModNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFModNode(); + ~CLib3MFModNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFPowNode +**************************************************************************************************************************/ +class CLib3MFPowNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFPowNode(); + ~CLib3MFPowNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFSelectNode +**************************************************************************************************************************/ +class CLib3MFSelectNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetInputB(const v8::FunctionCallbackInfo& args); + static void GetInputC(const v8::FunctionCallbackInfo& args); + static void GetInputD(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFSelectNode(); + ~CLib3MFSelectNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFClampNode +**************************************************************************************************************************/ +class CLib3MFClampNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetInputMin(const v8::FunctionCallbackInfo& args); + static void GetInputMax(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFClampNode(); + ~CLib3MFClampNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFComposeVectorNode +**************************************************************************************************************************/ +class CLib3MFComposeVectorNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetInputX(const v8::FunctionCallbackInfo& args); + static void GetInputY(const v8::FunctionCallbackInfo& args); + static void GetInputZ(const v8::FunctionCallbackInfo& args); + static void GetOutputResult(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFComposeVectorNode(); + ~CLib3MFComposeVectorNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFVectorFromScalarNode +**************************************************************************************************************************/ +class CLib3MFVectorFromScalarNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + +public: + CLib3MFVectorFromScalarNode(); + ~CLib3MFVectorFromScalarNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFDecomposeVectorNode +**************************************************************************************************************************/ +class CLib3MFDecomposeVectorNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetInputA(const v8::FunctionCallbackInfo& args); + static void GetOutputX(const v8::FunctionCallbackInfo& args); + static void GetOutputY(const v8::FunctionCallbackInfo& args); + static void GetOutputZ(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFDecomposeVectorNode(); + ~CLib3MFDecomposeVectorNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFComposeMatrixNode +**************************************************************************************************************************/ +class CLib3MFComposeMatrixNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetInputM00(const v8::FunctionCallbackInfo& args); + static void GetInputM01(const v8::FunctionCallbackInfo& args); + static void GetInputM02(const v8::FunctionCallbackInfo& args); + static void GetInputM03(const v8::FunctionCallbackInfo& args); + static void GetInputM10(const v8::FunctionCallbackInfo& args); + static void GetInputM11(const v8::FunctionCallbackInfo& args); + static void GetInputM12(const v8::FunctionCallbackInfo& args); + static void GetInputM13(const v8::FunctionCallbackInfo& args); + static void GetInputM20(const v8::FunctionCallbackInfo& args); + static void GetInputM21(const v8::FunctionCallbackInfo& args); + static void GetInputM22(const v8::FunctionCallbackInfo& args); + static void GetInputM23(const v8::FunctionCallbackInfo& args); + static void GetInputM30(const v8::FunctionCallbackInfo& args); + static void GetInputM31(const v8::FunctionCallbackInfo& args); + static void GetInputM32(const v8::FunctionCallbackInfo& args); + static void GetInputM33(const v8::FunctionCallbackInfo& args); + static void GetOutputResult(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFComposeMatrixNode(); + ~CLib3MFComposeMatrixNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFMatrixFromRowsNode +**************************************************************************************************************************/ +class CLib3MFMatrixFromRowsNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetInputA(const v8::FunctionCallbackInfo& args); + static void GetInputB(const v8::FunctionCallbackInfo& args); + static void GetInputC(const v8::FunctionCallbackInfo& args); + static void GetInputD(const v8::FunctionCallbackInfo& args); + static void GetOutputResult(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFMatrixFromRowsNode(); + ~CLib3MFMatrixFromRowsNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFMatrixFromColumnsNode +**************************************************************************************************************************/ +class CLib3MFMatrixFromColumnsNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetInputA(const v8::FunctionCallbackInfo& args); + static void GetInputB(const v8::FunctionCallbackInfo& args); + static void GetInputC(const v8::FunctionCallbackInfo& args); + static void GetInputD(const v8::FunctionCallbackInfo& args); + static void GetOutputResult(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFMatrixFromColumnsNode(); + ~CLib3MFMatrixFromColumnsNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFConstantNode +**************************************************************************************************************************/ +class CLib3MFConstantNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void SetConstant(const v8::FunctionCallbackInfo& args); + static void GetConstant(const v8::FunctionCallbackInfo& args); + static void GetOutputValue(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFConstantNode(); + ~CLib3MFConstantNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFConstVecNode +**************************************************************************************************************************/ +class CLib3MFConstVecNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void SetVector(const v8::FunctionCallbackInfo& args); + static void GetVector(const v8::FunctionCallbackInfo& args); + static void GetOutputVector(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFConstVecNode(); + ~CLib3MFConstVecNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFConstMatNode +**************************************************************************************************************************/ +class CLib3MFConstMatNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void SetMatrix(const v8::FunctionCallbackInfo& args); + static void GetMatrix(const v8::FunctionCallbackInfo& args); + static void GetOutputMatrix(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFConstMatNode(); + ~CLib3MFConstMatNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFMeshNode +**************************************************************************************************************************/ +class CLib3MFMeshNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetInputMesh(const v8::FunctionCallbackInfo& args); + static void GetInputPos(const v8::FunctionCallbackInfo& args); + static void GetOutputDistance(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFMeshNode(); + ~CLib3MFMeshNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFUnsignedMeshNode +**************************************************************************************************************************/ +class CLib3MFUnsignedMeshNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetInputMesh(const v8::FunctionCallbackInfo& args); + static void GetInputPos(const v8::FunctionCallbackInfo& args); + static void GetOutputDistance(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFUnsignedMeshNode(); + ~CLib3MFUnsignedMeshNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFFunctionCallNode +**************************************************************************************************************************/ +class CLib3MFFunctionCallNode : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetInputFunctionID(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFFunctionCallNode(); + ~CLib3MFFunctionCallNode(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFNodeIterator +**************************************************************************************************************************/ +class CLib3MFNodeIterator : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetCurrent(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFNodeIterator(); + ~CLib3MFNodeIterator(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFFunction +**************************************************************************************************************************/ +class CLib3MFFunction : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetDisplayName(const v8::FunctionCallbackInfo& args); + static void SetDisplayName(const v8::FunctionCallbackInfo& args); + static void AddInput(const v8::FunctionCallbackInfo& args); + static void GetInputs(const v8::FunctionCallbackInfo& args); + static void RemoveInput(const v8::FunctionCallbackInfo& args); + static void AddOutput(const v8::FunctionCallbackInfo& args); + static void GetOutputs(const v8::FunctionCallbackInfo& args); + static void RemoveOutput(const v8::FunctionCallbackInfo& args); + static void FindInput(const v8::FunctionCallbackInfo& args); + static void FindOutput(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFFunction(); + ~CLib3MFFunction(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFImplicitFunction +**************************************************************************************************************************/ +class CLib3MFImplicitFunction : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetIdentifier(const v8::FunctionCallbackInfo& args); + static void SetIdentifier(const v8::FunctionCallbackInfo& args); + static void AddNode(const v8::FunctionCallbackInfo& args); + static void AddSinNode(const v8::FunctionCallbackInfo& args); + static void AddCosNode(const v8::FunctionCallbackInfo& args); + static void AddTanNode(const v8::FunctionCallbackInfo& args); + static void AddArcSinNode(const v8::FunctionCallbackInfo& args); + static void AddArcCosNode(const v8::FunctionCallbackInfo& args); + static void AddArcTan2Node(const v8::FunctionCallbackInfo& args); + static void AddSinhNode(const v8::FunctionCallbackInfo& args); + static void AddCoshNode(const v8::FunctionCallbackInfo& args); + static void AddTanhNode(const v8::FunctionCallbackInfo& args); + static void AddRoundNode(const v8::FunctionCallbackInfo& args); + static void AddCeilNode(const v8::FunctionCallbackInfo& args); + static void AddFloorNode(const v8::FunctionCallbackInfo& args); + static void AddSignNode(const v8::FunctionCallbackInfo& args); + static void AddFractNode(const v8::FunctionCallbackInfo& args); + static void AddAbsNode(const v8::FunctionCallbackInfo& args); + static void AddExpNode(const v8::FunctionCallbackInfo& args); + static void AddLogNode(const v8::FunctionCallbackInfo& args); + static void AddLog2Node(const v8::FunctionCallbackInfo& args); + static void AddLog10Node(const v8::FunctionCallbackInfo& args); + static void AddLengthNode(const v8::FunctionCallbackInfo& args); + static void AddTransposeNode(const v8::FunctionCallbackInfo& args); + static void InverseNode(const v8::FunctionCallbackInfo& args); + static void AddSqrtNode(const v8::FunctionCallbackInfo& args); + static void AddResourceIdNode(const v8::FunctionCallbackInfo& args); + static void AddAdditionNode(const v8::FunctionCallbackInfo& args); + static void AddSubtractionNode(const v8::FunctionCallbackInfo& args); + static void AddMultiplicationNode(const v8::FunctionCallbackInfo& args); + static void AddDivisionNode(const v8::FunctionCallbackInfo& args); + static void AddDotNode(const v8::FunctionCallbackInfo& args); + static void AddCrossNode(const v8::FunctionCallbackInfo& args); + static void AddMatVecMultiplicationNode(const v8::FunctionCallbackInfo& args); + static void AddMinNode(const v8::FunctionCallbackInfo& args); + static void AddMaxNode(const v8::FunctionCallbackInfo& args); + static void AddFmodNode(const v8::FunctionCallbackInfo& args); + static void AddPowNode(const v8::FunctionCallbackInfo& args); + static void AddSelectNode(const v8::FunctionCallbackInfo& args); + static void AddClampNode(const v8::FunctionCallbackInfo& args); + static void AddComposeVectorNode(const v8::FunctionCallbackInfo& args); + static void AddVectorFromScalarNode(const v8::FunctionCallbackInfo& args); + static void AddDecomposeVectorNode(const v8::FunctionCallbackInfo& args); + static void AddComposeMatrixNode(const v8::FunctionCallbackInfo& args); + static void AddMatrixFromRowsNode(const v8::FunctionCallbackInfo& args); + static void AddMatrixFromColumnsNode(const v8::FunctionCallbackInfo& args); + static void AddConstantNode(const v8::FunctionCallbackInfo& args); + static void AddConstVecNode(const v8::FunctionCallbackInfo& args); + static void AddConstMatNode(const v8::FunctionCallbackInfo& args); + static void AddMeshNode(const v8::FunctionCallbackInfo& args); + static void AddUnsignedMeshNode(const v8::FunctionCallbackInfo& args); + static void AddFunctionCallNode(const v8::FunctionCallbackInfo& args); + static void GetNodes(const v8::FunctionCallbackInfo& args); + static void RemoveNode(const v8::FunctionCallbackInfo& args); + static void AddLink(const v8::FunctionCallbackInfo& args); + static void AddLinkByNames(const v8::FunctionCallbackInfo& args); + static void Clear(const v8::FunctionCallbackInfo& args); + static void SortNodesTopologically(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFImplicitFunction(); + ~CLib3MFImplicitFunction(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + +/************************************************************************************************************************* + Class CLib3MFFunctionFromImage3D +**************************************************************************************************************************/ +class CLib3MFFunctionFromImage3D : public CLib3MFBaseClass { +private: + static void New(const v8::FunctionCallbackInfo& args); + static v8::Persistent constructor; + static void GetImage3D(const v8::FunctionCallbackInfo& args); + static void SetImage3D(const v8::FunctionCallbackInfo& args); + static void SetFilter(const v8::FunctionCallbackInfo& args); + static void GetFilter(const v8::FunctionCallbackInfo& args); + static void SetTileStyles(const v8::FunctionCallbackInfo& args); + static void GetTileStyles(const v8::FunctionCallbackInfo& args); + static void GetOffset(const v8::FunctionCallbackInfo& args); + static void SetOffset(const v8::FunctionCallbackInfo& args); + static void GetScale(const v8::FunctionCallbackInfo& args); + static void SetScale(const v8::FunctionCallbackInfo& args); + +public: + CLib3MFFunctionFromImage3D(); + ~CLib3MFFunctionFromImage3D(); + + static void Init(); + static v8::Local NewInstance(v8::Local, Lib3MFHandle pHandle); + +}; + /************************************************************************************************************************* Class CLib3MFBuildItem **************************************************************************************************************************/ @@ -1072,6 +2544,7 @@ class CLib3MFModel : public CLib3MFBaseClass { static void GetComponentsObjectByID(const v8::FunctionCallbackInfo& args); static void GetColorGroupByID(const v8::FunctionCallbackInfo& args); static void GetSliceStackByID(const v8::FunctionCallbackInfo& args); + static void GetLevelSetByID(const v8::FunctionCallbackInfo& args); static void GetBuildUUID(const v8::FunctionCallbackInfo& args); static void SetBuildUUID(const v8::FunctionCallbackInfo& args); static void GetBuildItems(const v8::FunctionCallbackInfo& args); @@ -1087,7 +2560,9 @@ class CLib3MFModel : public CLib3MFBaseClass { static void GetCompositeMaterials(const v8::FunctionCallbackInfo& args); static void GetMultiPropertyGroups(const v8::FunctionCallbackInfo& args); static void GetSliceStacks(const v8::FunctionCallbackInfo& args); + static void GetImage3Ds(const v8::FunctionCallbackInfo& args); static void MergeToModel(const v8::FunctionCallbackInfo& args); + static void MergeFromModel(const v8::FunctionCallbackInfo& args); static void AddMeshObject(const v8::FunctionCallbackInfo& args); static void AddComponentsObject(const v8::FunctionCallbackInfo& args); static void AddSliceStack(const v8::FunctionCallbackInfo& args); @@ -1097,6 +2572,8 @@ class CLib3MFModel : public CLib3MFBaseClass { static void AddTexture2DGroup(const v8::FunctionCallbackInfo& args); static void AddCompositeMaterials(const v8::FunctionCallbackInfo& args); static void AddMultiPropertyGroup(const v8::FunctionCallbackInfo& args); + static void AddImageStack(const v8::FunctionCallbackInfo& args); + static void GetImageStackByID(const v8::FunctionCallbackInfo& args); static void AddBuildItem(const v8::FunctionCallbackInfo& args); static void RemoveBuildItem(const v8::FunctionCallbackInfo& args); static void GetMetaDataGroup(const v8::FunctionCallbackInfo& args); @@ -1113,6 +2590,13 @@ class CLib3MFModel : public CLib3MFBaseClass { static void RemoveCustomContentType(const v8::FunctionCallbackInfo& args); static void SetRandomNumberCallback(const v8::FunctionCallbackInfo& args); static void GetKeyStore(const v8::FunctionCallbackInfo& args); + static void GetFunctions(const v8::FunctionCallbackInfo& args); + static void AddImplicitFunction(const v8::FunctionCallbackInfo& args); + static void AddFunctionFromImage3D(const v8::FunctionCallbackInfo& args); + static void AddVolumeData(const v8::FunctionCallbackInfo& args); + static void AddLevelSet(const v8::FunctionCallbackInfo& args); + static void GetLevelSets(const v8::FunctionCallbackInfo& args); + static void RemoveResource(const v8::FunctionCallbackInfo& args); public: CLib3MFModel(); diff --git a/Autogenerated/Bindings/NodeJS/lib3mf_types.h b/Autogenerated/Bindings/NodeJS/lib3mf_types.h index 6f2dcf6a4..696aec4eb 100644 --- a/Autogenerated/Bindings/NodeJS/lib3mf_types.h +++ b/Autogenerated/Bindings/NodeJS/lib3mf_types.h @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated plain C Header file with basic types in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -84,8 +84,8 @@ typedef void * Lib3MF_pvoid; **************************************************************************************************************************/ #define LIB3MF_VERSION_MAJOR 2 -#define LIB3MF_VERSION_MINOR 3 -#define LIB3MF_VERSION_MICRO 2 +#define LIB3MF_VERSION_MINOR 4 +#define LIB3MF_VERSION_MICRO 0 #define LIB3MF_VERSION_PRERELEASEINFO "" #define LIB3MF_VERSION_BUILDINFO "" @@ -130,13 +130,18 @@ typedef void * Lib3MF_pvoid; #define LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER 140 /** A progress identifier is unknown */ #define LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT 141 /** An element buffer exceeds its spec limit */ #define LIB3MF_ERROR_INVALIDRESOURCE 142 /** A resource is invalid */ +#define LIB3MF_ERROR_INVALIDLEVELSET 143 /** A level set is invalid */ #define LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE 2000 /** This object type is not valid for beamlattices */ #define LIB3MF_ERROR_INVALIDKEYSTORE 3000 /** The keystore object is invalid */ #define LIB3MF_ERROR_INVALIDKEYSTORECONSUMER 3001 /** The consumer keystore object is invalid */ #define LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND 3002 /** A consumer has not been found */ #define LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND 3003 /** A resource data has not been found */ #define LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED 3004 /** A Key or Conentent encryption callback has not been registered */ -#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key siue is invalid */ +#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key size is invalid */ +#define LIB3MF_ERROR_INCOMPATIBLEPORTTYPES 4000 /** Link could not be added, the port types are incompatible */ +#define LIB3MF_ERROR_GRAPHISCYCLIC 4001 /** The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted. */ +#define LIB3MF_ERROR_INPUTNOTSET 4002 /** The input of a node is not set. */ +#define LIB3MF_ERROR_INVALIDNODECONFIGURATION 4003 /** The selected node configuration is not supported */ /************************************************************************************************************************* Error strings for Lib3MF @@ -181,13 +186,18 @@ inline const char * LIB3MF_GETERRORSTRING (Lib3MFResult nErrorCode) { case LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: return "A progress identifier is unknown"; case LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: return "An element buffer exceeds its spec limit"; case LIB3MF_ERROR_INVALIDRESOURCE: return "A resource is invalid"; + case LIB3MF_ERROR_INVALIDLEVELSET: return "A level set is invalid"; case LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: return "This object type is not valid for beamlattices"; case LIB3MF_ERROR_INVALIDKEYSTORE: return "The keystore object is invalid"; case LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: return "The consumer keystore object is invalid"; case LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND: return "A consumer has not been found"; case LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: return "A resource data has not been found"; case LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: return "A Key or Conentent encryption callback has not been registered"; - case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key siue is invalid"; + case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key size is invalid"; + case LIB3MF_ERROR_INCOMPATIBLEPORTTYPES: return "Link could not be added, the port types are incompatible"; + case LIB3MF_ERROR_GRAPHISCYCLIC: return "The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted."; + case LIB3MF_ERROR_INPUTNOTSET: return "The input of a node is not set."; + case LIB3MF_ERROR_INVALIDNODECONFIGURATION: return "The selected node configuration is not supported"; default: return "unknown error"; } } @@ -212,11 +222,21 @@ typedef Lib3MFHandle Lib3MF_ColorGroupIterator; typedef Lib3MFHandle Lib3MF_Texture2DGroupIterator; typedef Lib3MFHandle Lib3MF_CompositeMaterialsIterator; typedef Lib3MFHandle Lib3MF_MultiPropertyGroupIterator; +typedef Lib3MFHandle Lib3MF_Image3DIterator; +typedef Lib3MFHandle Lib3MF_FunctionIterator; +typedef Lib3MFHandle Lib3MF_LevelSetIterator; typedef Lib3MFHandle Lib3MF_MetaData; typedef Lib3MFHandle Lib3MF_MetaDataGroup; typedef Lib3MFHandle Lib3MF_Object; typedef Lib3MFHandle Lib3MF_MeshObject; +typedef Lib3MFHandle Lib3MF_LevelSet; typedef Lib3MFHandle Lib3MF_BeamLattice; +typedef Lib3MFHandle Lib3MF_FunctionReference; +typedef Lib3MFHandle Lib3MF_VolumeDataColor; +typedef Lib3MFHandle Lib3MF_MaterialMapping; +typedef Lib3MFHandle Lib3MF_VolumeDataComposite; +typedef Lib3MFHandle Lib3MF_VolumeDataProperty; +typedef Lib3MFHandle Lib3MF_VolumeData; typedef Lib3MFHandle Lib3MF_Component; typedef Lib3MFHandle Lib3MF_ComponentsObject; typedef Lib3MFHandle Lib3MF_BeamSet; @@ -225,8 +245,71 @@ typedef Lib3MFHandle Lib3MF_ColorGroup; typedef Lib3MFHandle Lib3MF_Texture2DGroup; typedef Lib3MFHandle Lib3MF_CompositeMaterials; typedef Lib3MFHandle Lib3MF_MultiPropertyGroup; +typedef Lib3MFHandle Lib3MF_Image3D; +typedef Lib3MFHandle Lib3MF_ImageStack; typedef Lib3MFHandle Lib3MF_Attachment; typedef Lib3MFHandle Lib3MF_Texture2D; +typedef Lib3MFHandle Lib3MF_ImplicitPort; +typedef Lib3MFHandle Lib3MF_Iterator; +typedef Lib3MFHandle Lib3MF_ImplicitPortIterator; +typedef Lib3MFHandle Lib3MF_ImplicitNode; +typedef Lib3MFHandle Lib3MF_OneInputNode; +typedef Lib3MFHandle Lib3MF_SinNode; +typedef Lib3MFHandle Lib3MF_CosNode; +typedef Lib3MFHandle Lib3MF_TanNode; +typedef Lib3MFHandle Lib3MF_ArcSinNode; +typedef Lib3MFHandle Lib3MF_ArcCosNode; +typedef Lib3MFHandle Lib3MF_ArcTanNode; +typedef Lib3MFHandle Lib3MF_SinhNode; +typedef Lib3MFHandle Lib3MF_CoshNode; +typedef Lib3MFHandle Lib3MF_TanhNode; +typedef Lib3MFHandle Lib3MF_RoundNode; +typedef Lib3MFHandle Lib3MF_CeilNode; +typedef Lib3MFHandle Lib3MF_FloorNode; +typedef Lib3MFHandle Lib3MF_SignNode; +typedef Lib3MFHandle Lib3MF_FractNode; +typedef Lib3MFHandle Lib3MF_AbsNode; +typedef Lib3MFHandle Lib3MF_ExpNode; +typedef Lib3MFHandle Lib3MF_LogNode; +typedef Lib3MFHandle Lib3MF_Log2Node; +typedef Lib3MFHandle Lib3MF_Log10Node; +typedef Lib3MFHandle Lib3MF_LengthNode; +typedef Lib3MFHandle Lib3MF_TransposeNode; +typedef Lib3MFHandle Lib3MF_InverseNode; +typedef Lib3MFHandle Lib3MF_SqrtNode; +typedef Lib3MFHandle Lib3MF_ResourceIdNode; +typedef Lib3MFHandle Lib3MF_TwoInputNode; +typedef Lib3MFHandle Lib3MF_AdditionNode; +typedef Lib3MFHandle Lib3MF_SubtractionNode; +typedef Lib3MFHandle Lib3MF_MultiplicationNode; +typedef Lib3MFHandle Lib3MF_DivisionNode; +typedef Lib3MFHandle Lib3MF_DotNode; +typedef Lib3MFHandle Lib3MF_CrossNode; +typedef Lib3MFHandle Lib3MF_ArcTan2Node; +typedef Lib3MFHandle Lib3MF_MatVecMultiplicationNode; +typedef Lib3MFHandle Lib3MF_MinNode; +typedef Lib3MFHandle Lib3MF_MaxNode; +typedef Lib3MFHandle Lib3MF_FmodNode; +typedef Lib3MFHandle Lib3MF_ModNode; +typedef Lib3MFHandle Lib3MF_PowNode; +typedef Lib3MFHandle Lib3MF_SelectNode; +typedef Lib3MFHandle Lib3MF_ClampNode; +typedef Lib3MFHandle Lib3MF_ComposeVectorNode; +typedef Lib3MFHandle Lib3MF_VectorFromScalarNode; +typedef Lib3MFHandle Lib3MF_DecomposeVectorNode; +typedef Lib3MFHandle Lib3MF_ComposeMatrixNode; +typedef Lib3MFHandle Lib3MF_MatrixFromRowsNode; +typedef Lib3MFHandle Lib3MF_MatrixFromColumnsNode; +typedef Lib3MFHandle Lib3MF_ConstantNode; +typedef Lib3MFHandle Lib3MF_ConstVecNode; +typedef Lib3MFHandle Lib3MF_ConstMatNode; +typedef Lib3MFHandle Lib3MF_MeshNode; +typedef Lib3MFHandle Lib3MF_UnsignedMeshNode; +typedef Lib3MFHandle Lib3MF_FunctionCallNode; +typedef Lib3MFHandle Lib3MF_NodeIterator; +typedef Lib3MFHandle Lib3MF_Function; +typedef Lib3MFHandle Lib3MF_ImplicitFunction; +typedef Lib3MFHandle Lib3MF_FunctionFromImage3D; typedef Lib3MFHandle Lib3MF_BuildItem; typedef Lib3MFHandle Lib3MF_BuildItemIterator; typedef Lib3MFHandle Lib3MF_Slice; @@ -305,7 +388,7 @@ typedef enum eLib3MFBeamLatticeClipMode { } eLib3MFBeamLatticeClipMode; typedef enum eLib3MFBeamLatticeBallMode { - eBeamLatticeBallModeNone = 0, + eBeamLatticeBallModeBeamLatticeBallModeNone = 0, eBeamLatticeBallModeMixed = 1, eBeamLatticeBallModeAll = 2 } eLib3MFBeamLatticeBallMode; @@ -343,6 +426,103 @@ typedef enum eLib3MFBlendMethod { eBlendMethodMultiply = 2 } eLib3MFBlendMethod; +typedef enum eLib3MFChannelName { + eChannelNameRed = 0, + eChannelNameGreen = 1, + eChannelNameBlue = 2, + eChannelNameAlpha = 3 +} eLib3MFChannelName; + +typedef enum eLib3MFCompositionMethod { + eCompositionMethodWeightedSum = 0, + eCompositionMethodMultiply = 1, + eCompositionMethodMin = 2, + eCompositionMethodMax = 3, + eCompositionMethodMask = 4 +} eLib3MFCompositionMethod; + +typedef enum eLib3MFCompositionSpace { + eCompositionSpaceRaw = 0, + eCompositionSpaceLinearColor = 1 +} eLib3MFCompositionSpace; + +/** +* enum eLib3MFImplicitNodeType - The type of the node +*/ +typedef enum eLib3MFImplicitNodeType { + eImplicitNodeTypeAddition = 1, /** Adds to values (scalar or vector) */ + eImplicitNodeTypeSubtraction = 2, /** Subtracts two values (scalar or vector) */ + eImplicitNodeTypeMultiplication = 3, /** Multiplies two values (scalar or vector) */ + eImplicitNodeTypeDivision = 4, /** Divides two values (scalar or vector) */ + eImplicitNodeTypeConstant = 5, /** A constant scalar value */ + eImplicitNodeTypeConstVec = 6, /** A constant vector value */ + eImplicitNodeTypeConstMat = 7, /** A constant matrix value */ + eImplicitNodeTypeComposeVector = 8, /** Creates a vector from three scalar values */ + eImplicitNodeTypeDecomposeVector = 9, /** Decomposes a vector into three scalar values */ + eImplicitNodeTypeComposeMatrix = 10, /** Creates a matrix from nine scalar values */ + eImplicitNodeTypeMatrixFromColumns = 11, /** Creates a matrix from three column vector values */ + eImplicitNodeTypeMatrixFromRows = 12, /** Creates a matrix from three row vector values */ + eImplicitNodeTypeDot = 13, /** Calculates the dot product of two vector values */ + eImplicitNodeTypeCross = 14, /** Calculates the cross product of two vector values */ + eImplicitNodeTypeMatVecMultiplication = 15, /** Multiplies a matrix with a vector */ + eImplicitNodeTypeTranspose = 16, /** Transposes a matrix */ + eImplicitNodeTypeInverse = 17, /** Computes the inverse of a matrix */ + eImplicitNodeTypeSinus = 18, /** Calculates the sinus */ + eImplicitNodeTypeCosinus = 19, /** Calculates the cosinus */ + eImplicitNodeTypeTan = 20, /** Calculates the tangent */ + eImplicitNodeTypeArcSin = 21, /** Calculates the arcsinus */ + eImplicitNodeTypeArcCos = 22, /** Calculates the arccosinus */ + eImplicitNodeTypeArcTan = 23, /** Calculates the arctangent */ + eImplicitNodeTypeArcTan2 = 24, /** Calculates the arctangent */ + eImplicitNodeTypeMin = 25, /** Calculates the minimum tow values */ + eImplicitNodeTypeMax = 26, /** Calculates the maximum of two values */ + eImplicitNodeTypeAbs = 27, /** Calcul the absolute value */ + eImplicitNodeTypeFmod = 28, /** Computes the remainder of the divison of the inputs (same behavior as C fmod) */ + eImplicitNodeTypePow = 29, /** Calculates the power A^B */ + eImplicitNodeTypeSqrt = 30, /** Calculates the square root */ + eImplicitNodeTypeExp = 31, /** Exponential function */ + eImplicitNodeTypeLog = 32, /** Natural logarithmus */ + eImplicitNodeTypeLog2 = 33, /** Logarithmus to the base 2 */ + eImplicitNodeTypeLog10 = 34, /** Logarithmus to the base 10 */ + eImplicitNodeTypeSelect = 35, /** If A is less B returns C, else D */ + eImplicitNodeTypeClamp = 36, /** Clamps the input value to min and max */ + eImplicitNodeTypeSinh = 37, /** Calculates the hyperbolic sine */ + eImplicitNodeTypeCosh = 38, /** Calculates the hyperbolic cosine */ + eImplicitNodeTypeTanh = 39, /** Calculates the hyperbolic tangent */ + eImplicitNodeTypeRound = 40, /** Rounds a scalar value to the nearest integer */ + eImplicitNodeTypeCeil = 41, /** Rounds a scalar value up to the nearest integer */ + eImplicitNodeTypeFloor = 42, /** Rounds a scalar value down to the nearest integer */ + eImplicitNodeTypeSign = 43, /** Returns the sign */ + eImplicitNodeTypeFract = 44, /** Returns the fractional part */ + eImplicitNodeTypeFunctionCall = 45, /** Calls a function */ + eImplicitNodeTypeMesh = 46, /** Calculates the signed distance to a mesh */ + eImplicitNodeTypeLength = 47, /** Calculates the length of a vector */ + eImplicitNodeTypeConstResourceID = 48, /** Selects a resource (function, mesh etc.) */ + eImplicitNodeTypeVectorFromScalar = 49, /** Creates a vector from one scalar values */ + eImplicitNodeTypeUnsignedMesh = 50, /** Calculates the unsigned distance to a mesh */ + eImplicitNodeTypeMod = 51 /** Calculates the modulo of two values (same behaviour as glsl mod) */ +} eLib3MFImplicitNodeType; + +/** +* enum eLib3MFImplicitPortType - The type of the port +*/ +typedef enum eLib3MFImplicitPortType { + eImplicitPortTypeScalar = 1, /** Scalar */ + eImplicitPortTypeVector = 2, /** Vector */ + eImplicitPortTypeMatrix = 3, /** 4x4 Matrix */ + eImplicitPortTypeResourceID = 4 /** Resource ID */ +} eLib3MFImplicitPortType; + +/** +* enum eLib3MFImplicitNodeConfiguration - Defines the input and output types of a node +*/ +typedef enum eLib3MFImplicitNodeConfiguration { + eImplicitNodeConfigurationDefault = 1, /** Default */ + eImplicitNodeConfigurationScalarToScalar = 2, /** Scalar -> Scalar */ + eImplicitNodeConfigurationVectorToVector = 3, /** Vector -> Vector */ + eImplicitNodeConfigurationMatrixToMatrix = 4 /** Matrix -> Matrix */ +} eLib3MFImplicitNodeConfiguration; + typedef enum eLib3MFEncryptionAlgorithm { eEncryptionAlgorithmAES256_GCM = 1 /** http://www.w3.org/2009/xmlenc11#aes256-gcm */ } eLib3MFEncryptionAlgorithm; @@ -433,6 +613,36 @@ typedef union { int m_code; } structEnumLib3MFBlendMethod; +typedef union { + eLib3MFChannelName m_enum; + int m_code; +} structEnumLib3MFChannelName; + +typedef union { + eLib3MFCompositionMethod m_enum; + int m_code; +} structEnumLib3MFCompositionMethod; + +typedef union { + eLib3MFCompositionSpace m_enum; + int m_code; +} structEnumLib3MFCompositionSpace; + +typedef union { + eLib3MFImplicitNodeType m_enum; + int m_code; +} structEnumLib3MFImplicitNodeType; + +typedef union { + eLib3MFImplicitPortType m_enum; + int m_code; +} structEnumLib3MFImplicitPortType; + +typedef union { + eLib3MFImplicitNodeConfiguration m_enum; + int m_code; +} structEnumLib3MFImplicitNodeConfiguration; + typedef union { eLib3MFEncryptionAlgorithm m_enum; int m_code; @@ -523,6 +733,14 @@ typedef struct sLib3MFBall { Lib3MF_double m_Radius; } sLib3MFBall; +typedef struct sLib3MFVector { + Lib3MF_double m_Coordinates[3]; +} sLib3MFVector; + +typedef struct sLib3MFMatrix4x4 { + Lib3MF_double m_Field[4][4]; +} sLib3MFMatrix4x4; + #pragma pack () /************************************************************************************************************************* diff --git a/Autogenerated/Bindings/Pascal/Unit_Lib3MF.pas b/Autogenerated/Bindings/Pascal/Unit_Lib3MF.pas index 8271fb01c..fdb5e2256 100644 --- a/Autogenerated/Bindings/Pascal/Unit_Lib3MF.pas +++ b/Autogenerated/Bindings/Pascal/Unit_Lib3MF.pas @@ -1,7 +1,7 @@ {$IFDEF FPC}{$MODE DELPHI}{$ENDIF} (*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -30,7 +30,7 @@ Abstract: This is an autogenerated Pascal Header file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 *) @@ -54,8 +54,8 @@ interface const LIB3MF_VERSION_MAJOR = 2; - LIB3MF_VERSION_MINOR = 3; - LIB3MF_VERSION_MICRO = 2; + LIB3MF_VERSION_MINOR = 4; + LIB3MF_VERSION_MICRO = 0; LIB3MF_VERSION_PRERELEASEINFO = ''; LIB3MF_VERSION_BUILDINFO = ''; @@ -113,6 +113,7 @@ interface LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER = 140; LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT = 141; LIB3MF_ERROR_INVALIDRESOURCE = 142; + LIB3MF_ERROR_INVALIDLEVELSET = 143; LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE = 2000; LIB3MF_ERROR_INVALIDKEYSTORE = 3000; LIB3MF_ERROR_INVALIDKEYSTORECONSUMER = 3001; @@ -120,6 +121,10 @@ interface LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND = 3003; LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED = 3004; LIB3MF_ERROR_INVALIDKEYSIZE = 3005; + LIB3MF_ERROR_INCOMPATIBLEPORTTYPES = 4000; + LIB3MF_ERROR_GRAPHISCYCLIC = 4001; + LIB3MF_ERROR_INPUTNOTSET = 4002; + LIB3MF_ERROR_INVALIDNODECONFIGURATION = 4003; (************************************************************************************************************************* Declaration of enums @@ -189,7 +194,7 @@ interface ); TLib3MFBeamLatticeBallMode = ( - eBeamLatticeBallModeNone, + eBeamLatticeBallModeBeamLatticeBallModeNone, eBeamLatticeBallModeMixed, eBeamLatticeBallModeAll ); @@ -227,6 +232,94 @@ interface eBlendMethodMultiply ); + TLib3MFChannelName = ( + eChannelNameRed, + eChannelNameGreen, + eChannelNameBlue, + eChannelNameAlpha + ); + + TLib3MFCompositionMethod = ( + eCompositionMethodWeightedSum, + eCompositionMethodMultiply, + eCompositionMethodMin, + eCompositionMethodMax, + eCompositionMethodMask + ); + + TLib3MFCompositionSpace = ( + eCompositionSpaceRaw, + eCompositionSpaceLinearColor + ); + + TLib3MFImplicitNodeType = ( + eImplicitNodeTypeAddition, + eImplicitNodeTypeSubtraction, + eImplicitNodeTypeMultiplication, + eImplicitNodeTypeDivision, + eImplicitNodeTypeConstant, + eImplicitNodeTypeConstVec, + eImplicitNodeTypeConstMat, + eImplicitNodeTypeComposeVector, + eImplicitNodeTypeDecomposeVector, + eImplicitNodeTypeComposeMatrix, + eImplicitNodeTypeMatrixFromColumns, + eImplicitNodeTypeMatrixFromRows, + eImplicitNodeTypeDot, + eImplicitNodeTypeCross, + eImplicitNodeTypeMatVecMultiplication, + eImplicitNodeTypeTranspose, + eImplicitNodeTypeInverse, + eImplicitNodeTypeSinus, + eImplicitNodeTypeCosinus, + eImplicitNodeTypeTan, + eImplicitNodeTypeArcSin, + eImplicitNodeTypeArcCos, + eImplicitNodeTypeArcTan, + eImplicitNodeTypeArcTan2, + eImplicitNodeTypeMin, + eImplicitNodeTypeMax, + eImplicitNodeTypeAbs, + eImplicitNodeTypeFmod, + eImplicitNodeTypePow, + eImplicitNodeTypeSqrt, + eImplicitNodeTypeExp, + eImplicitNodeTypeLog, + eImplicitNodeTypeLog2, + eImplicitNodeTypeLog10, + eImplicitNodeTypeSelect, + eImplicitNodeTypeClamp, + eImplicitNodeTypeSinh, + eImplicitNodeTypeCosh, + eImplicitNodeTypeTanh, + eImplicitNodeTypeRound, + eImplicitNodeTypeCeil, + eImplicitNodeTypeFloor, + eImplicitNodeTypeSign, + eImplicitNodeTypeFract, + eImplicitNodeTypeFunctionCall, + eImplicitNodeTypeMesh, + eImplicitNodeTypeLength, + eImplicitNodeTypeConstResourceID, + eImplicitNodeTypeVectorFromScalar, + eImplicitNodeTypeUnsignedMesh, + eImplicitNodeTypeMod + ); + + TLib3MFImplicitPortType = ( + eImplicitPortTypeScalar, + eImplicitPortTypeVector, + eImplicitPortTypeMatrix, + eImplicitPortTypeResourceID + ); + + TLib3MFImplicitNodeConfiguration = ( + eImplicitNodeConfigurationDefault, + eImplicitNodeConfigurationScalarToScalar, + eImplicitNodeConfigurationVectorToVector, + eImplicitNodeConfigurationMatrixToMatrix + ); + TLib3MFEncryptionAlgorithm = ( eEncryptionAlgorithmAES256_GCM ); @@ -330,6 +423,16 @@ interface FRadius: Double; end; + PLib3MFVector = ^TLib3MFVector; + TLib3MFVector = packed record + FCoordinates: array [0..2] of Double; + end; + + PLib3MFMatrix4x4 = ^TLib3MFMatrix4x4; + TLib3MFMatrix4x4 = packed record + FField: array [0..3, 0..3] of Double; + end; + (************************************************************************************************************************* Declaration of struct arrays @@ -347,6 +450,8 @@ interface ArrayOfLib3MFColor = array of TLib3MFColor; ArrayOfLib3MFBeam = array of TLib3MFBeam; ArrayOfLib3MFBall = array of TLib3MFBall; + ArrayOfLib3MFVector = array of TLib3MFVector; + ArrayOfLib3MFMatrix4x4 = array of TLib3MFMatrix4x4; (************************************************************************************************************************* Declaration of function types @@ -384,11 +489,21 @@ TLib3MFColorGroupIterator = class; TLib3MFTexture2DGroupIterator = class; TLib3MFCompositeMaterialsIterator = class; TLib3MFMultiPropertyGroupIterator = class; + TLib3MFImage3DIterator = class; + TLib3MFFunctionIterator = class; + TLib3MFLevelSetIterator = class; TLib3MFMetaData = class; TLib3MFMetaDataGroup = class; TLib3MFObject = class; TLib3MFMeshObject = class; + TLib3MFLevelSet = class; TLib3MFBeamLattice = class; + TLib3MFFunctionReference = class; + TLib3MFVolumeDataColor = class; + TLib3MFMaterialMapping = class; + TLib3MFVolumeDataComposite = class; + TLib3MFVolumeDataProperty = class; + TLib3MFVolumeData = class; TLib3MFComponent = class; TLib3MFComponentsObject = class; TLib3MFBeamSet = class; @@ -397,8 +512,71 @@ TLib3MFColorGroup = class; TLib3MFTexture2DGroup = class; TLib3MFCompositeMaterials = class; TLib3MFMultiPropertyGroup = class; + TLib3MFImage3D = class; + TLib3MFImageStack = class; TLib3MFAttachment = class; TLib3MFTexture2D = class; + TLib3MFImplicitPort = class; + TLib3MFIterator = class; + TLib3MFImplicitPortIterator = class; + TLib3MFImplicitNode = class; + TLib3MFOneInputNode = class; + TLib3MFSinNode = class; + TLib3MFCosNode = class; + TLib3MFTanNode = class; + TLib3MFArcSinNode = class; + TLib3MFArcCosNode = class; + TLib3MFArcTanNode = class; + TLib3MFSinhNode = class; + TLib3MFCoshNode = class; + TLib3MFTanhNode = class; + TLib3MFRoundNode = class; + TLib3MFCeilNode = class; + TLib3MFFloorNode = class; + TLib3MFSignNode = class; + TLib3MFFractNode = class; + TLib3MFAbsNode = class; + TLib3MFExpNode = class; + TLib3MFLogNode = class; + TLib3MFLog2Node = class; + TLib3MFLog10Node = class; + TLib3MFLengthNode = class; + TLib3MFTransposeNode = class; + TLib3MFInverseNode = class; + TLib3MFSqrtNode = class; + TLib3MFResourceIdNode = class; + TLib3MFTwoInputNode = class; + TLib3MFAdditionNode = class; + TLib3MFSubtractionNode = class; + TLib3MFMultiplicationNode = class; + TLib3MFDivisionNode = class; + TLib3MFDotNode = class; + TLib3MFCrossNode = class; + TLib3MFArcTan2Node = class; + TLib3MFMatVecMultiplicationNode = class; + TLib3MFMinNode = class; + TLib3MFMaxNode = class; + TLib3MFFmodNode = class; + TLib3MFModNode = class; + TLib3MFPowNode = class; + TLib3MFSelectNode = class; + TLib3MFClampNode = class; + TLib3MFComposeVectorNode = class; + TLib3MFVectorFromScalarNode = class; + TLib3MFDecomposeVectorNode = class; + TLib3MFComposeMatrixNode = class; + TLib3MFMatrixFromRowsNode = class; + TLib3MFMatrixFromColumnsNode = class; + TLib3MFConstantNode = class; + TLib3MFConstVecNode = class; + TLib3MFConstMatNode = class; + TLib3MFMeshNode = class; + TLib3MFUnsignedMeshNode = class; + TLib3MFFunctionCallNode = class; + TLib3MFNodeIterator = class; + TLib3MFFunction = class; + TLib3MFImplicitFunction = class; + TLib3MFFunctionFromImage3D = class; TLib3MFBuildItem = class; TLib3MFBuildItemIterator = class; TLib3MFSlice = class; @@ -950,6 +1128,48 @@ TLib3MFModel = class; TLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupFunc = function(pMultiPropertyGroupIterator: TLib3MFHandle; out pResource: TLib3MFHandle): TLib3MFResult; cdecl; +(************************************************************************************************************************* + Function type definitions for Image3DIterator +**************************************************************************************************************************) + + (** + * Returns the Image3D the iterator points at. + * + * @param[in] pImage3DIterator - Image3DIterator instance. + * @param[out] pResource - returns the Image3D instance. + * @return error code or 0 (success) + *) + TLib3MFImage3DIterator_GetCurrentImage3DFunc = function(pImage3DIterator: TLib3MFHandle; out pResource: TLib3MFHandle): TLib3MFResult; cdecl; + + +(************************************************************************************************************************* + Function type definitions for FunctionIterator +**************************************************************************************************************************) + + (** + * Returns the Function the iterator points at. + * + * @param[in] pFunctionIterator - FunctionIterator instance. + * @param[out] pResource - returns the Function instance. + * @return error code or 0 (success) + *) + TLib3MFFunctionIterator_GetCurrentFunctionFunc = function(pFunctionIterator: TLib3MFHandle; out pResource: TLib3MFHandle): TLib3MFResult; cdecl; + + +(************************************************************************************************************************* + Function type definitions for LevelSetIterator +**************************************************************************************************************************) + + (** + * Returns the LevelSet the iterator points at. + * + * @param[in] pLevelSetIterator - LevelSetIterator instance. + * @param[out] pResource - returns the MeshObject instance. + * @return error code or 0 (success) + *) + TLib3MFLevelSetIterator_GetCurrentLevelSetFunc = function(pLevelSetIterator: TLib3MFHandle; out pResource: TLib3MFHandle): TLib3MFResult; cdecl; + + (************************************************************************************************************************* Function type definitions for MetaData **************************************************************************************************************************) @@ -1211,6 +1431,15 @@ TLib3MFModel = class; *) TLib3MFObject_IsComponentsObjectFunc = function(pObject: TLib3MFHandle; out pIsComponentsObject: Byte): TLib3MFResult; cdecl; + (** + * Retrieves, if an object is a level set object + * + * @param[in] pObject - Object instance. + * @param[out] pIsLevelSetObject - returns, whether the object is a level set object + * @return error code or 0 (success) + *) + TLib3MFObject_IsLevelSetObjectFunc = function(pObject: TLib3MFHandle; out pIsLevelSetObject: Byte): TLib3MFResult; cdecl; + (** * Retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. * @@ -1544,6 +1773,175 @@ TLib3MFModel = class; *) TLib3MFMeshObject_BeamLatticeFunc = function(pMeshObject: TLib3MFHandle; out pTheBeamLattice: TLib3MFHandle): TLib3MFResult; cdecl; + (** + * Retrieves the VolumeData of this MeshObject. + * + * @param[in] pMeshObject - MeshObject instance. + * @param[out] pTheVolumeData - the VolumeData of this MeshObject + * @return error code or 0 (success) + *) + TLib3MFMeshObject_GetVolumeDataFunc = function(pMeshObject: TLib3MFHandle; out pTheVolumeData: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Sets the VolumeData of this MeshObject. + * + * @param[in] pMeshObject - MeshObject instance. + * @param[in] pTheVolumeData - the VolumeData of this MeshObject + * @return error code or 0 (success) + *) + TLib3MFMeshObject_SetVolumeDataFunc = function(pMeshObject: TLib3MFHandle; const pTheVolumeData: TLib3MFHandle): TLib3MFResult; cdecl; + + +(************************************************************************************************************************* + Function type definitions for LevelSet +**************************************************************************************************************************) + + (** + * Returns the function that is used as boundary shape. + * + * @param[in] pLevelSet - LevelSet instance. + * @param[out] pTheFunction - the function to use as boundary shape + * @return error code or 0 (success) + *) + TLib3MFLevelSet_GetFunctionFunc = function(pLevelSet: TLib3MFHandle; out pTheFunction: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Sets the function to use as boundary shape. + * + * @param[in] pLevelSet - LevelSet instance. + * @param[in] pTheFunction - the function to use as boundary shape + * @return error code or 0 (success) + *) + TLib3MFLevelSet_SetFunctionFunc = function(pLevelSet: TLib3MFHandle; const pTheFunction: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Returns the transformation matrix into the coordinate system of the referenced Function. + * + * @param[in] pLevelSet - LevelSet instance. + * @param[out] pTransform - the transformation matrix + * @return error code or 0 (success) + *) + TLib3MFLevelSet_GetTransformFunc = function(pLevelSet: TLib3MFHandle; pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + + (** + * Sets the transformation matrix into the coordinate system of the referenced Function. + * + * @param[in] pLevelSet - LevelSet instance. + * @param[in] pTransform - new transformation matrix + * @return error code or 0 (success) + *) + TLib3MFLevelSet_SetTransformFunc = function(pLevelSet: TLib3MFHandle; const pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + + (** + * Returns the name of the function output channel to use. + * + * @param[in] pLevelSet - LevelSet instance. + * @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) + * @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL + * @return error code or 0 (success) + *) + TLib3MFLevelSet_GetChannelNameFunc = function(pLevelSet: TLib3MFHandle; const nChannelNameBufferSize: Cardinal; out pChannelNameNeededChars: Cardinal; pChannelNameBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Sets the name of the function output channel to use. + * + * @param[in] pLevelSet - LevelSet instance. + * @param[in] pChannelName - new name of the function output channel + * @return error code or 0 (success) + *) + TLib3MFLevelSet_SetChannelNameFunc = function(pLevelSet: TLib3MFHandle; const pChannelName: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Sets the minimal feature size as a hint for the function evaluator + * + * @param[in] pLevelSet - LevelSet instance. + * @param[in] dMinFeatureSize - minimal feature size + * @return error code or 0 (success) + *) + TLib3MFLevelSet_SetMinFeatureSizeFunc = function(pLevelSet: TLib3MFHandle; const dMinFeatureSize: Double): TLib3MFResult; cdecl; + + (** + * Returns the minimal feature size as a hint for the function evaluator + * + * @param[in] pLevelSet - LevelSet instance. + * @param[out] pMinFeatureSize - minimal feature size + * @return error code or 0 (success) + *) + TLib3MFLevelSet_GetMinFeatureSizeFunc = function(pLevelSet: TLib3MFHandle; out pMinFeatureSize: Double): TLib3MFResult; cdecl; + + (** + * Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * + * @param[in] pLevelSet - LevelSet instance. + * @param[in] dFallBackValue - fallback value + * @return error code or 0 (success) + *) + TLib3MFLevelSet_SetFallBackValueFunc = function(pLevelSet: TLib3MFHandle; const dFallBackValue: Double): TLib3MFResult; cdecl; + + (** + * Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * + * @param[in] pLevelSet - LevelSet instance. + * @param[out] pFallBackValue - fallback value + * @return error code or 0 (success) + *) + TLib3MFLevelSet_GetFallBackValueFunc = function(pLevelSet: TLib3MFHandle; out pFallBackValue: Double): TLib3MFResult; cdecl; + + (** + * If set only the bounding box of the mesh is intersected with the boundary + * + * @param[in] pLevelSet - LevelSet instance. + * @param[in] bMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + * @return error code or 0 (success) + *) + TLib3MFLevelSet_SetMeshBBoxOnlyFunc = function(pLevelSet: TLib3MFHandle; const bMeshBBoxOnly: Byte): TLib3MFResult; cdecl; + + (** + * If set only the bounding box of the mesh is intersected with the boundary + * + * @param[in] pLevelSet - LevelSet instance. + * @param[out] pMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + * @return error code or 0 (success) + *) + TLib3MFLevelSet_GetMeshBBoxOnlyFunc = function(pLevelSet: TLib3MFHandle; out pMeshBBoxOnly: Byte): TLib3MFResult; cdecl; + + (** + * Sets the mesh to use as evaluation domain + * + * @param[in] pLevelSet - LevelSet instance. + * @param[in] pTheMesh - The mesh + * @return error code or 0 (success) + *) + TLib3MFLevelSet_SetMeshFunc = function(pLevelSet: TLib3MFHandle; const pTheMesh: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Returns the mesh that is used as evaluation domain + * + * @param[in] pLevelSet - LevelSet instance. + * @param[out] pTheMesh - The mesh + * @return error code or 0 (success) + *) + TLib3MFLevelSet_GetMeshFunc = function(pLevelSet: TLib3MFHandle; out pTheMesh: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Retrieves the VolumeData this Object. + * + * @param[in] pLevelSet - LevelSet instance. + * @param[out] pTheVolumeData - the VolumeData of this Object + * @return error code or 0 (success) + *) + TLib3MFLevelSet_GetVolumeDataFunc = function(pLevelSet: TLib3MFHandle; out pTheVolumeData: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Sets the VolumeData of this LevelSet. + * + * @param[in] pLevelSet - LevelSet instance. + * @param[in] pTheVolumeData - the VolumeData of this MeshObject + * @return error code or 0 (success) + *) + TLib3MFLevelSet_SetVolumeDataFunc = function(pLevelSet: TLib3MFHandle; const pTheVolumeData: TLib3MFHandle): TLib3MFResult; cdecl; + (************************************************************************************************************************* Function type definitions for BeamLattice @@ -1776,198 +2174,497 @@ TLib3MFModel = class; (************************************************************************************************************************* - Function type definitions for Component + Function type definitions for FunctionReference **************************************************************************************************************************) (** - * Returns the Resource Instance of the component. + * Returns the UniqueResourceID of the Function. Only functions with a 'pos'-input are allowed. * - * @param[in] pComponent - Component instance. - * @param[out] pObjectResource - filled with the Resource Instance. + * @param[in] pFunctionReference - FunctionReference instance. + * @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) *) - TLib3MFComponent_GetObjectResourceFunc = function(pComponent: TLib3MFHandle; out pObjectResource: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFFunctionReference_GetFunctionResourceIDFunc = function(pFunctionReference: TLib3MFHandle; out pUniqueResourceID: Cardinal): TLib3MFResult; cdecl; (** - * Returns the UniqueResourceID of the component. + * Sets the UniqueResourceID to refer to. * - * @param[in] pComponent - Component instance. - * @param[out] pUniqueResourceID - returns the UniqueResourceID. + * @param[in] pFunctionReference - FunctionReference instance. + * @param[in] nUniqueResourceID - UniqueResourceID of the function * @return error code or 0 (success) *) - TLib3MFComponent_GetObjectResourceIDFunc = function(pComponent: TLib3MFHandle; out pUniqueResourceID: Cardinal): TLib3MFResult; cdecl; + TLib3MFFunctionReference_SetFunctionResourceIDFunc = function(pFunctionReference: TLib3MFHandle; const nUniqueResourceID: Cardinal): TLib3MFResult; cdecl; (** - * returns, whether a component has a UUID and, if true, the component's UUID + * Returns the transformation matrix into the coordinate system of the referenced Function. * - * @param[in] pComponent - Component instance. - * @param[out] pHasUUID - flag whether the component has a UUID - * @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) - * @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL + * @param[in] pFunctionReference - FunctionReference instance. + * @param[out] pTransform - the transformation matrix * @return error code or 0 (success) *) - TLib3MFComponent_GetUUIDFunc = function(pComponent: TLib3MFHandle; out pHasUUID: Byte; const nUUIDBufferSize: Cardinal; out pUUIDNeededChars: Cardinal; pUUIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFFunctionReference_GetTransformFunc = function(pFunctionReference: TLib3MFHandle; pTransform: PLib3MFTransform): TLib3MFResult; cdecl; (** - * sets the component's UUID + * Sets the transformation matrix into the coordinate system of the referenced Function. * - * @param[in] pComponent - Component instance. - * @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + * @param[in] pFunctionReference - FunctionReference instance. + * @param[in] pTransform - new transformation matrix * @return error code or 0 (success) *) - TLib3MFComponent_SetUUIDFunc = function(pComponent: TLib3MFHandle; const pUUID: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFFunctionReference_SetTransformFunc = function(pFunctionReference: TLib3MFHandle; const pTransform: PLib3MFTransform): TLib3MFResult; cdecl; (** - * Returns, if the component has a different transformation than the identity matrix + * Returns the name of the function output channel to use. * - * @param[in] pComponent - Component instance. - * @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity + * @param[in] pFunctionReference - FunctionReference instance. + * @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) + * @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL * @return error code or 0 (success) *) - TLib3MFComponent_HasTransformFunc = function(pComponent: TLib3MFHandle; out pHasTransform: Byte): TLib3MFResult; cdecl; + TLib3MFFunctionReference_GetChannelNameFunc = function(pFunctionReference: TLib3MFHandle; const nChannelNameBufferSize: Cardinal; out pChannelNameNeededChars: Cardinal; pChannelNameBuffer: PAnsiChar): TLib3MFResult; cdecl; (** - * Returns the transformation matrix of the component. + * Sets the name of the function output channel to use. * - * @param[in] pComponent - Component instance. - * @param[out] pTransform - filled with the component transformation matrix + * @param[in] pFunctionReference - FunctionReference instance. + * @param[in] pChannelName - new name of the function output channel * @return error code or 0 (success) *) - TLib3MFComponent_GetTransformFunc = function(pComponent: TLib3MFHandle; pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + TLib3MFFunctionReference_SetChannelNameFunc = function(pFunctionReference: TLib3MFHandle; const pChannelName: PAnsiChar): TLib3MFResult; cdecl; (** - * Sets the transformation matrix of the component. + * Sets the minimal feature size as a hint for the function evaluator * - * @param[in] pComponent - Component instance. - * @param[in] pTransform - new transformation matrix + * @param[in] pFunctionReference - FunctionReference instance. + * @param[in] dMinFeatureSize - minimal feature size * @return error code or 0 (success) *) - TLib3MFComponent_SetTransformFunc = function(pComponent: TLib3MFHandle; const pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + TLib3MFFunctionReference_SetMinFeatureSizeFunc = function(pFunctionReference: TLib3MFHandle; const dMinFeatureSize: Double): TLib3MFResult; cdecl; - -(************************************************************************************************************************* - Function type definitions for ComponentsObject -**************************************************************************************************************************) - (** - * Adds a new component to a components object. + * Returns the minimal feature size as a hint for the function evaluator * - * @param[in] pComponentsObject - ComponentsObject instance. - * @param[in] pObjectResource - object to add as component. Must not lead to circular references! - * @param[in] pTransform - optional transform matrix for the component. - * @param[out] pComponentInstance - new component instance + * @param[in] pFunctionReference - FunctionReference instance. + * @param[out] pMinFeatureSize - minimal feature size * @return error code or 0 (success) *) - TLib3MFComponentsObject_AddComponentFunc = function(pComponentsObject: TLib3MFHandle; const pObjectResource: TLib3MFHandle; const pTransform: PLib3MFTransform; out pComponentInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFFunctionReference_GetMinFeatureSizeFunc = function(pFunctionReference: TLib3MFHandle; out pMinFeatureSize: Double): TLib3MFResult; cdecl; (** - * Retrieves a component from a component object. + * Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * - * @param[in] pComponentsObject - ComponentsObject instance. - * @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) - * @param[out] pComponentInstance - component instance + * @param[in] pFunctionReference - FunctionReference instance. + * @param[in] dFallBackValue - fallback value * @return error code or 0 (success) *) - TLib3MFComponentsObject_GetComponentFunc = function(pComponentsObject: TLib3MFHandle; const nIndex: Cardinal; out pComponentInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFFunctionReference_SetFallBackValueFunc = function(pFunctionReference: TLib3MFHandle; const dFallBackValue: Double): TLib3MFResult; cdecl; (** - * Retrieves a component count of a component object. + * Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * - * @param[in] pComponentsObject - ComponentsObject instance. - * @param[out] pCount - returns the component count + * @param[in] pFunctionReference - FunctionReference instance. + * @param[out] pFallBackValue - fallback value * @return error code or 0 (success) *) - TLib3MFComponentsObject_GetComponentCountFunc = function(pComponentsObject: TLib3MFHandle; out pCount: Cardinal): TLib3MFResult; cdecl; + TLib3MFFunctionReference_GetFallBackValueFunc = function(pFunctionReference: TLib3MFHandle; out pFallBackValue: Double): TLib3MFResult; cdecl; (************************************************************************************************************************* - Function type definitions for BeamSet + Function type definitions for VolumeDataColor +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for MaterialMapping +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for VolumeDataComposite **************************************************************************************************************************) (** - * Sets a beamset's name string + * Returns the BaseMaterialGroup used within this volume data item * - * @param[in] pBeamSet - BeamSet instance. - * @param[in] pName - new name of the beamset. + * @param[in] pVolumeDataComposite - VolumeDataComposite instance. + * @param[out] pBaseMaterialGroupInstance - The BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) *) - TLib3MFBeamSet_SetNameFunc = function(pBeamSet: TLib3MFHandle; const pName: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFVolumeDataComposite_GetBaseMaterialGroupFunc = function(pVolumeDataComposite: TLib3MFHandle; out pBaseMaterialGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Retrieves a beamset's name string + * Sets the BaseMaterialGroup to use within this volume data item. * - * @param[in] pBeamSet - BeamSet instance. - * @param[in] nNameBufferSize - size of the buffer (including trailing 0) - * @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL + * @param[in] pVolumeDataComposite - VolumeDataComposite instance. + * @param[in] pBaseMaterialGroupInstance - The new BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) *) - TLib3MFBeamSet_GetNameFunc = function(pBeamSet: TLib3MFHandle; const nNameBufferSize: Cardinal; out pNameNeededChars: Cardinal; pNameBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFVolumeDataComposite_SetBaseMaterialGroupFunc = function(pVolumeDataComposite: TLib3MFHandle; const pBaseMaterialGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Sets a beamset's identifier string + * Returns the number of material mappings of this VolumeDataComposite element * - * @param[in] pBeamSet - BeamSet instance. - * @param[in] pIdentifier - new name of the beamset. + * @param[in] pVolumeDataComposite - VolumeDataComposite instance. + * @param[out] pCount - the number of material mappings. * @return error code or 0 (success) *) - TLib3MFBeamSet_SetIdentifierFunc = function(pBeamSet: TLib3MFHandle; const pIdentifier: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFVolumeDataComposite_GetMaterialMappingCountFunc = function(pVolumeDataComposite: TLib3MFHandle; out pCount: Cardinal): TLib3MFResult; cdecl; (** - * Retrieves a beamset's identifier string + * Returns MaterialMappting with given index * - * @param[in] pBeamSet - BeamSet instance. - * @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) - * @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL + * @param[in] pVolumeDataComposite - VolumeDataComposite instance. + * @param[in] nIndex - Index of the MaterialMapping in question. + * @param[out] pTheMaterialMapping - MaterialMapping used in this element * @return error code or 0 (success) *) - TLib3MFBeamSet_GetIdentifierFunc = function(pBeamSet: TLib3MFHandle; const nIdentifierBufferSize: Cardinal; out pIdentifierNeededChars: Cardinal; pIdentifierBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFVolumeDataComposite_GetMaterialMappingFunc = function(pVolumeDataComposite: TLib3MFHandle; const nIndex: Cardinal; out pTheMaterialMapping: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Retrieves the reference count of a beamset + * Adds a the MaterialMapping * - * @param[in] pBeamSet - BeamSet instance. - * @param[out] pCount - returns the reference count + * @param[in] pVolumeDataComposite - VolumeDataComposite instance. + * @param[in] pTransform - new transformation matrix + * @param[out] pTheMaterialMapping - The new MaterialMapping * @return error code or 0 (success) *) - TLib3MFBeamSet_GetReferenceCountFunc = function(pBeamSet: TLib3MFHandle; out pCount: Cardinal): TLib3MFResult; cdecl; + TLib3MFVolumeDataComposite_AddMaterialMappingFunc = function(pVolumeDataComposite: TLib3MFHandle; const pTransform: PLib3MFTransform; out pTheMaterialMapping: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Sets the references of a beamset + * Removes the MaterialMapping with given index * - * @param[in] pBeamSet - BeamSet instance. - * @param[in] nReferencesCount - Number of elements in buffer - * @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset + * @param[in] pVolumeDataComposite - VolumeDataComposite instance. + * @param[in] nIndex - The index of the MaterialMapping to be removed. * @return error code or 0 (success) *) - TLib3MFBeamSet_SetReferencesFunc = function(pBeamSet: TLib3MFHandle; const nReferencesCount: QWord; const pReferencesBuffer: PCardinal): TLib3MFResult; cdecl; + TLib3MFVolumeDataComposite_RemoveMaterialMappingFunc = function(pVolumeDataComposite: TLib3MFHandle; const nIndex: Cardinal): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for VolumeDataProperty +**************************************************************************************************************************) + (** - * Retrieves the references of a beamset + * Gets the qualified name of this property. * - * @param[in] pBeamSet - BeamSet instance. - * @param[in] nReferencesCount - Number of elements in buffer - * @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. - * @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset + * @param[in] pVolumeDataProperty - VolumeDataProperty instance. + * @param[in] nPropertyNameBufferSize - size of the buffer (including trailing 0) + * @param[out] pPropertyNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pPropertyNameBuffer - buffer of The qualified name of this property., may be NULL * @return error code or 0 (success) *) - TLib3MFBeamSet_GetReferencesFunc = function(pBeamSet: TLib3MFHandle; const nReferencesCount: QWord; out pReferencesNeededCount: QWord; pReferencesBuffer: PCardinal): TLib3MFResult; cdecl; + TLib3MFVolumeDataProperty_GetNameFunc = function(pVolumeDataProperty: TLib3MFHandle; const nPropertyNameBufferSize: Cardinal; out pPropertyNameNeededChars: Cardinal; pPropertyNameBuffer: PAnsiChar): TLib3MFResult; cdecl; (** - * Retrieves the ball reference count of a beamset + * Sets whether this property is required to process this 3MF document instance. * - * @param[in] pBeamSet - BeamSet instance. - * @param[out] pCount - returns the ball reference count + * @param[in] pVolumeDataProperty - VolumeDataProperty instance. + * @param[in] bIsRequired - New value for whether this property is required to process this 3MF document instance. * @return error code or 0 (success) *) - TLib3MFBeamSet_GetBallReferenceCountFunc = function(pBeamSet: TLib3MFHandle; out pCount: Cardinal): TLib3MFResult; cdecl; + TLib3MFVolumeDataProperty_SetIsRequiredFunc = function(pVolumeDataProperty: TLib3MFHandle; const bIsRequired: Byte): TLib3MFResult; cdecl; (** - * Sets the ball references of a beamset + * Returns whether this property is required to process this 3MF document instance. * - * @param[in] pBeamSet - BeamSet instance. + * @param[in] pVolumeDataProperty - VolumeDataProperty instance. + * @param[out] pIsRequired - Is this property required to process this 3MF document instance? + * @return error code or 0 (success) + *) + TLib3MFVolumeDataProperty_IsRequiredFunc = function(pVolumeDataProperty: TLib3MFHandle; out pIsRequired: Byte): TLib3MFResult; cdecl; + + +(************************************************************************************************************************* + Function type definitions for VolumeData +**************************************************************************************************************************) + + (** + * Returns the VolumeDataComposite of this VolumeData instance + * + * @param[in] pVolumeData - VolumeData instance. + * @param[out] pTheCompositeData - filled with the VolumeDataComposite of this VolumeData instance. + * @return error code or 0 (success) + *) + TLib3MFVolumeData_GetCompositeFunc = function(pVolumeData: TLib3MFHandle; out pTheCompositeData: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Creates a new VolumeDataComposite for this VolumeData instance + * + * @param[in] pVolumeData - VolumeData instance. + * @param[out] pTheCompositeData - The new VolumeDataComposite of this VolumeData instance. + * @return error code or 0 (success) + *) + TLib3MFVolumeData_CreateNewCompositeFunc = function(pVolumeData: TLib3MFHandle; out pTheCompositeData: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Removes the VolumeDataComposite of this VolumeData instance + * + * @param[in] pVolumeData - VolumeData instance. + * @return error code or 0 (success) + *) + TLib3MFVolumeData_RemoveCompositeFunc = function(pVolumeData: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Returns the VolumeDataColor of this VolumeData instance + * + * @param[in] pVolumeData - VolumeData instance. + * @param[out] pTheColorData - filled with the VolumeDataColor of this VolumeData instance. + * @return error code or 0 (success) + *) + TLib3MFVolumeData_GetColorFunc = function(pVolumeData: TLib3MFHandle; out pTheColorData: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Creates a new VolumeDataColor for this VolumeData instance + * + * @param[in] pVolumeData - VolumeData instance. + * @param[in] pTheFunction - Function used in this element + * @param[out] pTheColorData - The new VolumeDataColor of this VolumeData instance. + * @return error code or 0 (success) + *) + TLib3MFVolumeData_CreateNewColorFunc = function(pVolumeData: TLib3MFHandle; const pTheFunction: TLib3MFHandle; out pTheColorData: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Removes the VolumeDataColor of this VolumeData instance + * + * @param[in] pVolumeData - VolumeData instance. + * @return error code or 0 (success) + *) + TLib3MFVolumeData_RemoveColorFunc = function(pVolumeData: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Returns the number of VolumeDataProperty + * + * @param[in] pVolumeData - VolumeData instance. + * @param[out] pCount - the number of VolumeDataProperty-elements within this VolumdeData + * @return error code or 0 (success) + *) + TLib3MFVolumeData_GetPropertyCountFunc = function(pVolumeData: TLib3MFHandle; out pCount: Cardinal): TLib3MFResult; cdecl; + + (** + * Returns the VolumeDataProperty at a given Index + * + * @param[in] pVolumeData - VolumeData instance. + * @param[in] nIndex - the index of the VolumeDataProperty to be returned. + * @param[out] pTheVolumeDataProperty - the VolumeDataProperty at the given index. + * @return error code or 0 (success) + *) + TLib3MFVolumeData_GetPropertyFunc = function(pVolumeData: TLib3MFHandle; const nIndex: Cardinal; out pTheVolumeDataProperty: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Adds a new VolumeDataProperty from a Function + * + * @param[in] pVolumeData - VolumeData instance. + * @param[in] pName - the qualified name (namespace+name) of the Property + * @param[in] pTheFunction - Function used in this element + * @param[out] pTheVolumeDataProperty - the newly created VolumeDataProperty. + * @return error code or 0 (success) + *) + TLib3MFVolumeData_AddPropertyFromFunctionFunc = function(pVolumeData: TLib3MFHandle; const pName: PAnsiChar; const pTheFunction: TLib3MFHandle; out pTheVolumeDataProperty: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Removes the VolumeDataProperty with a given index + * + * @param[in] pVolumeData - VolumeData instance. + * @param[in] nIndex - the index of the VolumeDataProperty to be removed. + * @return error code or 0 (success) + *) + TLib3MFVolumeData_RemovePropertyFunc = function(pVolumeData: TLib3MFHandle; const nIndex: Cardinal): TLib3MFResult; cdecl; + + +(************************************************************************************************************************* + Function type definitions for Component +**************************************************************************************************************************) + + (** + * Returns the Resource Instance of the component. + * + * @param[in] pComponent - Component instance. + * @param[out] pObjectResource - filled with the Resource Instance. + * @return error code or 0 (success) + *) + TLib3MFComponent_GetObjectResourceFunc = function(pComponent: TLib3MFHandle; out pObjectResource: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Returns the UniqueResourceID of the component. + * + * @param[in] pComponent - Component instance. + * @param[out] pUniqueResourceID - returns the UniqueResourceID. + * @return error code or 0 (success) + *) + TLib3MFComponent_GetObjectResourceIDFunc = function(pComponent: TLib3MFHandle; out pUniqueResourceID: Cardinal): TLib3MFResult; cdecl; + + (** + * returns, whether a component has a UUID and, if true, the component's UUID + * + * @param[in] pComponent - Component instance. + * @param[out] pHasUUID - flag whether the component has a UUID + * @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) + * @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL + * @return error code or 0 (success) + *) + TLib3MFComponent_GetUUIDFunc = function(pComponent: TLib3MFHandle; out pHasUUID: Byte; const nUUIDBufferSize: Cardinal; out pUUIDNeededChars: Cardinal; pUUIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * sets the component's UUID + * + * @param[in] pComponent - Component instance. + * @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + * @return error code or 0 (success) + *) + TLib3MFComponent_SetUUIDFunc = function(pComponent: TLib3MFHandle; const pUUID: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Returns, if the component has a different transformation than the identity matrix + * + * @param[in] pComponent - Component instance. + * @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity + * @return error code or 0 (success) + *) + TLib3MFComponent_HasTransformFunc = function(pComponent: TLib3MFHandle; out pHasTransform: Byte): TLib3MFResult; cdecl; + + (** + * Returns the transformation matrix of the component. + * + * @param[in] pComponent - Component instance. + * @param[out] pTransform - filled with the component transformation matrix + * @return error code or 0 (success) + *) + TLib3MFComponent_GetTransformFunc = function(pComponent: TLib3MFHandle; pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + + (** + * Sets the transformation matrix of the component. + * + * @param[in] pComponent - Component instance. + * @param[in] pTransform - new transformation matrix + * @return error code or 0 (success) + *) + TLib3MFComponent_SetTransformFunc = function(pComponent: TLib3MFHandle; const pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + + +(************************************************************************************************************************* + Function type definitions for ComponentsObject +**************************************************************************************************************************) + + (** + * Adds a new component to a components object. + * + * @param[in] pComponentsObject - ComponentsObject instance. + * @param[in] pObjectResource - object to add as component. Must not lead to circular references! + * @param[in] pTransform - optional transform matrix for the component. + * @param[out] pComponentInstance - new component instance + * @return error code or 0 (success) + *) + TLib3MFComponentsObject_AddComponentFunc = function(pComponentsObject: TLib3MFHandle; const pObjectResource: TLib3MFHandle; const pTransform: PLib3MFTransform; out pComponentInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Retrieves a component from a component object. + * + * @param[in] pComponentsObject - ComponentsObject instance. + * @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) + * @param[out] pComponentInstance - component instance + * @return error code or 0 (success) + *) + TLib3MFComponentsObject_GetComponentFunc = function(pComponentsObject: TLib3MFHandle; const nIndex: Cardinal; out pComponentInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Retrieves a component count of a component object. + * + * @param[in] pComponentsObject - ComponentsObject instance. + * @param[out] pCount - returns the component count + * @return error code or 0 (success) + *) + TLib3MFComponentsObject_GetComponentCountFunc = function(pComponentsObject: TLib3MFHandle; out pCount: Cardinal): TLib3MFResult; cdecl; + + +(************************************************************************************************************************* + Function type definitions for BeamSet +**************************************************************************************************************************) + + (** + * Sets a beamset's name string + * + * @param[in] pBeamSet - BeamSet instance. + * @param[in] pName - new name of the beamset. + * @return error code or 0 (success) + *) + TLib3MFBeamSet_SetNameFunc = function(pBeamSet: TLib3MFHandle; const pName: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Retrieves a beamset's name string + * + * @param[in] pBeamSet - BeamSet instance. + * @param[in] nNameBufferSize - size of the buffer (including trailing 0) + * @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL + * @return error code or 0 (success) + *) + TLib3MFBeamSet_GetNameFunc = function(pBeamSet: TLib3MFHandle; const nNameBufferSize: Cardinal; out pNameNeededChars: Cardinal; pNameBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Sets a beamset's identifier string + * + * @param[in] pBeamSet - BeamSet instance. + * @param[in] pIdentifier - new name of the beamset. + * @return error code or 0 (success) + *) + TLib3MFBeamSet_SetIdentifierFunc = function(pBeamSet: TLib3MFHandle; const pIdentifier: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Retrieves a beamset's identifier string + * + * @param[in] pBeamSet - BeamSet instance. + * @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) + * @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL + * @return error code or 0 (success) + *) + TLib3MFBeamSet_GetIdentifierFunc = function(pBeamSet: TLib3MFHandle; const nIdentifierBufferSize: Cardinal; out pIdentifierNeededChars: Cardinal; pIdentifierBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Retrieves the reference count of a beamset + * + * @param[in] pBeamSet - BeamSet instance. + * @param[out] pCount - returns the reference count + * @return error code or 0 (success) + *) + TLib3MFBeamSet_GetReferenceCountFunc = function(pBeamSet: TLib3MFHandle; out pCount: Cardinal): TLib3MFResult; cdecl; + + (** + * Sets the references of a beamset + * + * @param[in] pBeamSet - BeamSet instance. + * @param[in] nReferencesCount - Number of elements in buffer + * @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset + * @return error code or 0 (success) + *) + TLib3MFBeamSet_SetReferencesFunc = function(pBeamSet: TLib3MFHandle; const nReferencesCount: QWord; const pReferencesBuffer: PCardinal): TLib3MFResult; cdecl; + + (** + * Retrieves the references of a beamset + * + * @param[in] pBeamSet - BeamSet instance. + * @param[in] nReferencesCount - Number of elements in buffer + * @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. + * @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset + * @return error code or 0 (success) + *) + TLib3MFBeamSet_GetReferencesFunc = function(pBeamSet: TLib3MFHandle; const nReferencesCount: QWord; out pReferencesNeededCount: QWord; pReferencesBuffer: PCardinal): TLib3MFResult; cdecl; + + (** + * Retrieves the ball reference count of a beamset + * + * @param[in] pBeamSet - BeamSet instance. + * @param[out] pCount - returns the ball reference count + * @return error code or 0 (success) + *) + TLib3MFBeamSet_GetBallReferenceCountFunc = function(pBeamSet: TLib3MFHandle; out pCount: Cardinal): TLib3MFResult; cdecl; + + (** + * Sets the ball references of a beamset + * + * @param[in] pBeamSet - BeamSet instance. * @param[in] nBallReferencesCount - Number of elements in buffer * @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset * @return error code or 0 (success) @@ -2373,15 +3070,155 @@ TLib3MFModel = class; (************************************************************************************************************************* - Function type definitions for Attachment + Function type definitions for Image3D **************************************************************************************************************************) (** - * Retrieves an attachment's package path. This function will be removed in a later release. + * returns the name of this Image3D * - * @param[in] pAttachment - Attachment instance. - * @param[in] nPathBufferSize - size of the buffer (including trailing 0) - * @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[in] pImage3D - Image3D instance. + * @param[in] nNameBufferSize - size of the buffer (including trailing 0) + * @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pNameBuffer - buffer of the name of this Image3D, may be NULL + * @return error code or 0 (success) + *) + TLib3MFImage3D_GetNameFunc = function(pImage3D: TLib3MFHandle; const nNameBufferSize: Cardinal; out pNameNeededChars: Cardinal; pNameBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * sets a new name of this Image3D + * + * @param[in] pImage3D - Image3D instance. + * @param[in] pName - the new name of this Image3D + * @return error code or 0 (success) + *) + TLib3MFImage3D_SetNameFunc = function(pImage3D: TLib3MFHandle; const pName: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Retrieves, if this Image3D is a ImageStack + * + * @param[in] pImage3D - Image3D instance. + * @param[out] pIsImageStack - returns, whether the Image3D is an ImageStack + * @return error code or 0 (success) + *) + TLib3MFImage3D_IsImageStackFunc = function(pImage3D: TLib3MFHandle; out pIsImageStack: Byte): TLib3MFResult; cdecl; + + +(************************************************************************************************************************* + Function type definitions for ImageStack +**************************************************************************************************************************) + + (** + * Retrieves the number of rows in each image of this image3d + * + * @param[in] pImageStack - ImageStack instance. + * @param[out] pRowCount - number of rows + * @return error code or 0 (success) + *) + TLib3MFImageStack_GetRowCountFunc = function(pImageStack: TLib3MFHandle; out pRowCount: Cardinal): TLib3MFResult; cdecl; + + (** + * Sets the number of rows in each image of this image3d + * + * @param[in] pImageStack - ImageStack instance. + * @param[in] nRowCount - number of rows + * @return error code or 0 (success) + *) + TLib3MFImageStack_SetRowCountFunc = function(pImageStack: TLib3MFHandle; const nRowCount: Cardinal): TLib3MFResult; cdecl; + + (** + * Retrieves the number of columns in each image of this image3d + * + * @param[in] pImageStack - ImageStack instance. + * @param[out] pColumnCount - number of columns + * @return error code or 0 (success) + *) + TLib3MFImageStack_GetColumnCountFunc = function(pImageStack: TLib3MFHandle; out pColumnCount: Cardinal): TLib3MFResult; cdecl; + + (** + * Sets the number of columns in each image of this image3d + * + * @param[in] pImageStack - ImageStack instance. + * @param[in] nColumnCount - number of columns + * @return error code or 0 (success) + *) + TLib3MFImageStack_SetColumnCountFunc = function(pImageStack: TLib3MFHandle; const nColumnCount: Cardinal): TLib3MFResult; cdecl; + + (** + * Retrieves the number of images in the stack. + * + * @param[in] pImageStack - ImageStack instance. + * @param[out] pSheetCount - number of images + * @return error code or 0 (success) + *) + TLib3MFImageStack_GetSheetCountFunc = function(pImageStack: TLib3MFHandle; out pSheetCount: Cardinal): TLib3MFResult; cdecl; + + (** + * Retrieves a sheet of the stack. Raises an error if sheet is not set. + * + * @param[in] pImageStack - ImageStack instance. + * @param[in] nIndex - index of the image (0-based) + * @param[out] pSheet - attachment containing the image + * @return error code or 0 (success) + *) + TLib3MFImageStack_GetSheetFunc = function(pImageStack: TLib3MFHandle; const nIndex: Cardinal; out pSheet: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Sets a sheet to an existing attachment. + * + * @param[in] pImageStack - ImageStack instance. + * @param[in] nIndex - index of the image (0-based) + * @param[in] pSheet - attachment containing the image + * @return error code or 0 (success) + *) + TLib3MFImageStack_SetSheetFunc = function(pImageStack: TLib3MFHandle; const nIndex: Cardinal; const pSheet: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Creates a new sheet attachment with empty data. + * + * @param[in] pImageStack - ImageStack instance. + * @param[in] nIndex - index of the image (0-based) + * @param[in] pPath - path of part in the package + * @param[out] pSheet - attachment containing the image + * @return error code or 0 (success) + *) + TLib3MFImageStack_CreateEmptySheetFunc = function(pImageStack: TLib3MFHandle; const nIndex: Cardinal; const pPath: PAnsiChar; out pSheet: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Creates a new sheet attachment from a memory buffer. + * + * @param[in] pImageStack - ImageStack instance. + * @param[in] nIndex - index of the image (0-based) + * @param[in] pPath - path of part in the package + * @param[in] nDataCount - Number of elements in buffer + * @param[in] pDataBuffer - uint8 buffer of binary image data + * @param[out] pSheet - attachment containing the image + * @return error code or 0 (success) + *) + TLib3MFImageStack_CreateSheetFromBufferFunc = function(pImageStack: TLib3MFHandle; const nIndex: Cardinal; const pPath: PAnsiChar; const nDataCount: QWord; const pDataBuffer: PByte; out pSheet: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Creates a new sheet attachment from a file on disk. + * + * @param[in] pImageStack - ImageStack instance. + * @param[in] nIndex - index of the image (0-based) + * @param[in] pPath - path of part in the package + * @param[in] pFileName - file name to read from + * @param[out] pSheet - attachment containing the image + * @return error code or 0 (success) + *) + TLib3MFImageStack_CreateSheetFromFileFunc = function(pImageStack: TLib3MFHandle; const nIndex: Cardinal; const pPath: PAnsiChar; const pFileName: PAnsiChar; out pSheet: TLib3MFHandle): TLib3MFResult; cdecl; + + +(************************************************************************************************************************* + Function type definitions for Attachment +**************************************************************************************************************************) + + (** + * Retrieves an attachment's package path. This function will be removed in a later release. + * + * @param[in] pAttachment - Attachment instance. + * @param[in] nPathBufferSize - size of the buffer (including trailing 0) + * @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. * @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL * @return error code or 0 (success) *) @@ -2566,2135 +3403,5308 @@ TLib3MFModel = class; (************************************************************************************************************************* - Function type definitions for BuildItem + Function type definitions for ImplicitPort **************************************************************************************************************************) (** - * Retrieves the object resource associated to a build item + * Retrieves the identifier of the port * - * @param[in] pBuildItem - BuildItem instance. - * @param[out] pObjectResource - returns the associated resource instance + * @param[in] pImplicitPort - ImplicitPort instance. + * @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) + * @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL * @return error code or 0 (success) *) - TLib3MFBuildItem_GetObjectResourceFunc = function(pBuildItem: TLib3MFHandle; out pObjectResource: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitPort_GetIdentifierFunc = function(pImplicitPort: TLib3MFHandle; const nIdentifierBufferSize: Cardinal; out pIdentifierNeededChars: Cardinal; pIdentifierBuffer: PAnsiChar): TLib3MFResult; cdecl; (** - * returns, whether a build item has a UUID and, if true, the build item's UUID + * Sets the identifier of the port * - * @param[in] pBuildItem - BuildItem instance. - * @param[out] pHasUUID - flag whether the build item has a UUID - * @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) - * @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL + * @param[in] pImplicitPort - ImplicitPort instance. + * @param[in] pIdentifier - the identifier * @return error code or 0 (success) *) - TLib3MFBuildItem_GetUUIDFunc = function(pBuildItem: TLib3MFHandle; out pHasUUID: Byte; const nUUIDBufferSize: Cardinal; out pUUIDNeededChars: Cardinal; pUUIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFImplicitPort_SetIdentifierFunc = function(pImplicitPort: TLib3MFHandle; const pIdentifier: PAnsiChar): TLib3MFResult; cdecl; (** - * sets the build item's UUID + * Retrieves the display name of the port * - * @param[in] pBuildItem - BuildItem instance. - * @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + * @param[in] pImplicitPort - ImplicitPort instance. + * @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) + * @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL * @return error code or 0 (success) *) - TLib3MFBuildItem_SetUUIDFunc = function(pBuildItem: TLib3MFHandle; const pUUID: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFImplicitPort_GetDisplayNameFunc = function(pImplicitPort: TLib3MFHandle; const nDisplayNameBufferSize: Cardinal; out pDisplayNameNeededChars: Cardinal; pDisplayNameBuffer: PAnsiChar): TLib3MFResult; cdecl; (** - * Retrieves the object UniqueResourceID associated to a build item + * Sets the display name of the port * - * @param[in] pBuildItem - BuildItem instance. - * @param[out] pUniqueResourceID - returns the UniqueResourceID of the object + * @param[in] pImplicitPort - ImplicitPort instance. + * @param[in] pDisplayName - the display name * @return error code or 0 (success) *) - TLib3MFBuildItem_GetObjectResourceIDFunc = function(pBuildItem: TLib3MFHandle; out pUniqueResourceID: Cardinal): TLib3MFResult; cdecl; + TLib3MFImplicitPort_SetDisplayNameFunc = function(pImplicitPort: TLib3MFHandle; const pDisplayName: PAnsiChar): TLib3MFResult; cdecl; (** - * Checks, if a build item has a non-identity transformation matrix + * Sets the type of the port * - * @param[in] pBuildItem - BuildItem instance. - * @param[out] pHasTransform - returns true, if the transformation matrix is not the identity + * @param[in] pImplicitPort - ImplicitPort instance. + * @param[in] eImplicitPortType - the type * @return error code or 0 (success) *) - TLib3MFBuildItem_HasObjectTransformFunc = function(pBuildItem: TLib3MFHandle; out pHasTransform: Byte): TLib3MFResult; cdecl; + TLib3MFImplicitPort_SetTypeFunc = function(pImplicitPort: TLib3MFHandle; const eImplicitPortType: Integer): TLib3MFResult; cdecl; (** - * Retrieves a build item's transformation matrix. + * Retrieves the type of the port * - * @param[in] pBuildItem - BuildItem instance. - * @param[out] pTransform - returns the transformation matrix + * @param[in] pImplicitPort - ImplicitPort instance. + * @param[out] pImplicitPortType - the type * @return error code or 0 (success) *) - TLib3MFBuildItem_GetObjectTransformFunc = function(pBuildItem: TLib3MFHandle; pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + TLib3MFImplicitPort_GetTypeFunc = function(pImplicitPort: TLib3MFHandle; out pImplicitPortType: Integer): TLib3MFResult; cdecl; (** - * Sets a build item's transformation matrix. + * Retrieves the reference of the port, only used for input ports * - * @param[in] pBuildItem - BuildItem instance. - * @param[in] pTransform - new transformation matrix + * @param[in] pImplicitPort - ImplicitPort instance. + * @param[in] nReferenceBufferSize - size of the buffer (including trailing 0) + * @param[out] pReferenceNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pReferenceBuffer - buffer of the reference, may be NULL * @return error code or 0 (success) *) - TLib3MFBuildItem_SetObjectTransformFunc = function(pBuildItem: TLib3MFHandle; const pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + TLib3MFImplicitPort_GetReferenceFunc = function(pImplicitPort: TLib3MFHandle; const nReferenceBufferSize: Cardinal; out pReferenceNeededChars: Cardinal; pReferenceBuffer: PAnsiChar): TLib3MFResult; cdecl; (** - * Retrieves a build item's part number string + * Sets the reference of the port, only used for input ports * - * @param[in] pBuildItem - BuildItem instance. - * @param[in] nPartNumberBufferSize - size of the buffer (including trailing 0) - * @param[out] pPartNumberNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pPartNumberBuffer - buffer of Returns a build item's part number string, may be NULL + * @param[in] pImplicitPort - ImplicitPort instance. + * @param[in] pReference - the reference * @return error code or 0 (success) *) - TLib3MFBuildItem_GetPartNumberFunc = function(pBuildItem: TLib3MFHandle; const nPartNumberBufferSize: Cardinal; out pPartNumberNeededChars: Cardinal; pPartNumberBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFImplicitPort_SetReferenceFunc = function(pImplicitPort: TLib3MFHandle; const pReference: PAnsiChar): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for Iterator +**************************************************************************************************************************) + (** - * Sets a build item's part number string + * Iterates to the next item in the list. * - * @param[in] pBuildItem - BuildItem instance. - * @param[in] pSetPartnumber - new part number string for referencing parts from the outside world + * @param[in] pIterator - Iterator instance. + * @param[out] pHasNext - Iterates to the next item in the list. * @return error code or 0 (success) *) - TLib3MFBuildItem_SetPartNumberFunc = function(pBuildItem: TLib3MFHandle; const pSetPartnumber: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFIterator_MoveNextFunc = function(pIterator: TLib3MFHandle; out pHasNext: Byte): TLib3MFResult; cdecl; (** - * Returns the metadatagroup of this build item + * Iterates to the previous item in the list. * - * @param[in] pBuildItem - BuildItem instance. - * @param[out] pMetaDataGroup - returns an Instance of the metadatagroup of this build item + * @param[in] pIterator - Iterator instance. + * @param[out] pHasPrevious - Iterates to the previous item in the list. * @return error code or 0 (success) *) - TLib3MFBuildItem_GetMetaDataGroupFunc = function(pBuildItem: TLib3MFHandle; out pMetaDataGroup: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFIterator_MovePreviousFunc = function(pIterator: TLib3MFHandle; out pHasPrevious: Byte): TLib3MFResult; cdecl; (** - * Returns the outbox of a build item + * Returns the number of items the iterator captures. * - * @param[in] pBuildItem - BuildItem instance. - * @param[out] pOutbox - Outbox of this build item + * @param[in] pIterator - Iterator instance. + * @param[out] pCount - returns the number of items the iterator captures. * @return error code or 0 (success) *) - TLib3MFBuildItem_GetOutboxFunc = function(pBuildItem: TLib3MFHandle; pOutbox: PLib3MFBox): TLib3MFResult; cdecl; + TLib3MFIterator_CountFunc = function(pIterator: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; (************************************************************************************************************************* - Function type definitions for BuildItemIterator + Function type definitions for ImplicitPortIterator **************************************************************************************************************************) (** - * Iterates to the next build item in the list. - * - * @param[in] pBuildItemIterator - BuildItemIterator instance. - * @param[out] pHasNext - Iterates to the next build item in the list. - * @return error code or 0 (success) - *) - TLib3MFBuildItemIterator_MoveNextFunc = function(pBuildItemIterator: TLib3MFHandle; out pHasNext: Byte): TLib3MFResult; cdecl; - - (** - * Iterates to the previous build item in the list. - * - * @param[in] pBuildItemIterator - BuildItemIterator instance. - * @param[out] pHasPrevious - Iterates to the previous build item in the list. - * @return error code or 0 (success) - *) - TLib3MFBuildItemIterator_MovePreviousFunc = function(pBuildItemIterator: TLib3MFHandle; out pHasPrevious: Byte): TLib3MFResult; cdecl; - - (** - * Returns the build item the iterator points at. + * Returns the current element * - * @param[in] pBuildItemIterator - BuildItemIterator instance. - * @param[out] pBuildItem - returns the build item instance. + * @param[in] pImplicitPortIterator - ImplicitPortIterator instance. + * @param[out] pPort - The current element * @return error code or 0 (success) *) - TLib3MFBuildItemIterator_GetCurrentFunc = function(pBuildItemIterator: TLib3MFHandle; out pBuildItem: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitPortIterator_GetCurrentFunc = function(pImplicitPortIterator: TLib3MFHandle; out pPort: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for ImplicitNode +**************************************************************************************************************************) + (** - * Creates a new build item iterator with the same build item list. + * Retrieves the identifier of the node * - * @param[in] pBuildItemIterator - BuildItemIterator instance. - * @param[out] pOutBuildItemIterator - returns the cloned Iterator instance + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) + * @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL * @return error code or 0 (success) *) - TLib3MFBuildItemIterator_CloneFunc = function(pBuildItemIterator: TLib3MFHandle; out pOutBuildItemIterator: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitNode_GetIdentifierFunc = function(pImplicitNode: TLib3MFHandle; const nIdentifierBufferSize: Cardinal; out pIdentifierNeededChars: Cardinal; pIdentifierBuffer: PAnsiChar): TLib3MFResult; cdecl; (** - * Returns the number of build items the iterator captures. + * Sets the identifier of the node * - * @param[in] pBuildItemIterator - BuildItemIterator instance. - * @param[out] pCount - returns the number of build items the iterator captures. + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[in] pIdentifier - the identifier * @return error code or 0 (success) *) - TLib3MFBuildItemIterator_CountFunc = function(pBuildItemIterator: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + TLib3MFImplicitNode_SetIdentifierFunc = function(pImplicitNode: TLib3MFHandle; const pIdentifier: PAnsiChar): TLib3MFResult; cdecl; - -(************************************************************************************************************************* - Function type definitions for Slice -**************************************************************************************************************************) - (** - * Set all vertices of a slice. All polygons will be cleared. + * Retrieves the display name of the node * - * @param[in] pSlice - Slice instance. - * @param[in] nVerticesCount - Number of elements in buffer - * @param[in] pVerticesBuffer - Position2D buffer of contains the positions. + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) + * @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL * @return error code or 0 (success) *) - TLib3MFSlice_SetVerticesFunc = function(pSlice: TLib3MFHandle; const nVerticesCount: QWord; const pVerticesBuffer: PLib3MFPosition2D): TLib3MFResult; cdecl; + TLib3MFImplicitNode_GetDisplayNameFunc = function(pImplicitNode: TLib3MFHandle; const nDisplayNameBufferSize: Cardinal; out pDisplayNameNeededChars: Cardinal; pDisplayNameBuffer: PAnsiChar): TLib3MFResult; cdecl; (** - * Get all vertices of a slice + * Sets the display name of the node * - * @param[in] pSlice - Slice instance. - * @param[in] nVerticesCount - Number of elements in buffer - * @param[out] pVerticesNeededCount - will be filled with the count of the written elements, or needed buffer size. - * @param[out] pVerticesBuffer - Position2D buffer of contains the positions. + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[in] pDisplayName - the display name * @return error code or 0 (success) *) - TLib3MFSlice_GetVerticesFunc = function(pSlice: TLib3MFHandle; const nVerticesCount: QWord; out pVerticesNeededCount: QWord; pVerticesBuffer: PLib3MFPosition2D): TLib3MFResult; cdecl; + TLib3MFImplicitNode_SetDisplayNameFunc = function(pImplicitNode: TLib3MFHandle; const pDisplayName: PAnsiChar): TLib3MFResult; cdecl; (** - * Get the number of vertices in a slice + * Retrieves the tag of the node * - * @param[in] pSlice - Slice instance. - * @param[out] pCount - the number of vertices in the slice + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[in] nTagBufferSize - size of the buffer (including trailing 0) + * @param[out] pTagNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pTagBuffer - buffer of the tag, may be NULL * @return error code or 0 (success) *) - TLib3MFSlice_GetVertexCountFunc = function(pSlice: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + TLib3MFImplicitNode_GetTagFunc = function(pImplicitNode: TLib3MFHandle; const nTagBufferSize: Cardinal; out pTagNeededChars: Cardinal; pTagBuffer: PAnsiChar): TLib3MFResult; cdecl; (** - * Add a new polygon to this slice + * Sets the tag of the node * - * @param[in] pSlice - Slice instance. - * @param[in] nIndicesCount - Number of elements in buffer - * @param[in] pIndicesBuffer - uint32 buffer of the new indices of the new polygon - * @param[out] pIndex - the index of the new polygon + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[in] pTag - the tag * @return error code or 0 (success) *) - TLib3MFSlice_AddPolygonFunc = function(pSlice: TLib3MFHandle; const nIndicesCount: QWord; const pIndicesBuffer: PCardinal; out pIndex: QWord): TLib3MFResult; cdecl; + TLib3MFImplicitNode_SetTagFunc = function(pImplicitNode: TLib3MFHandle; const pTag: PAnsiChar): TLib3MFResult; cdecl; (** - * Get the number of polygons in the slice + * Retrieves the type of the node * - * @param[in] pSlice - Slice instance. - * @param[out] pCount - the number of polygons in the slice + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[out] pType - the type of the node * @return error code or 0 (success) *) - TLib3MFSlice_GetPolygonCountFunc = function(pSlice: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + TLib3MFImplicitNode_GetNodeTypeFunc = function(pImplicitNode: TLib3MFHandle; out pType: Integer): TLib3MFResult; cdecl; (** - * Set all indices of a polygon + * Add an input * - * @param[in] pSlice - Slice instance. - * @param[in] nIndex - the index of the polygon to manipulate - * @param[in] nIndicesCount - Number of elements in buffer - * @param[in] pIndicesBuffer - uint32 buffer of the new indices of the index-th polygon + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[in] pIdentifier - the identifier of the input + * @param[in] pDisplayName - the display name of the input + * @param[out] pPort - * @return error code or 0 (success) *) - TLib3MFSlice_SetPolygonIndicesFunc = function(pSlice: TLib3MFHandle; const nIndex: QWord; const nIndicesCount: QWord; const pIndicesBuffer: PCardinal): TLib3MFResult; cdecl; + TLib3MFImplicitNode_AddInputFunc = function(pImplicitNode: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; out pPort: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Get all vertices of a slice + * Retrieves the inputs * - * @param[in] pSlice - Slice instance. - * @param[in] nIndex - the index of the polygon to manipulate - * @param[in] nIndicesCount - Number of elements in buffer - * @param[out] pIndicesNeededCount - will be filled with the count of the written elements, or needed buffer size. - * @param[out] pIndicesBuffer - uint32 buffer of the indices of the index-th polygon + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[out] pIterator - the iterator for the inputs * @return error code or 0 (success) *) - TLib3MFSlice_GetPolygonIndicesFunc = function(pSlice: TLib3MFHandle; const nIndex: QWord; const nIndicesCount: QWord; out pIndicesNeededCount: QWord; pIndicesBuffer: PCardinal): TLib3MFResult; cdecl; + TLib3MFImplicitNode_GetInputsFunc = function(pImplicitNode: TLib3MFHandle; out pIterator: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Get the number of vertices in a slice + * Add an output * - * @param[in] pSlice - Slice instance. - * @param[in] nIndex - the index of the polygon to manipulate - * @param[out] pCount - the number of indices of the index-th polygon + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[in] pIdentifier - the identifier of the output + * @param[in] pDisplayName - the display name of the output + * @param[out] pPort - * @return error code or 0 (success) *) - TLib3MFSlice_GetPolygonIndexCountFunc = function(pSlice: TLib3MFHandle; const nIndex: QWord; out pCount: QWord): TLib3MFResult; cdecl; + TLib3MFImplicitNode_AddOutputFunc = function(pImplicitNode: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; out pPort: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Get the upper Z-Coordinate of this slice. + * Retrieves the outputs * - * @param[in] pSlice - Slice instance. - * @param[out] pZTop - the upper Z-Coordinate of this slice + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[out] pIterator - the iterator the outputs * @return error code or 0 (success) *) - TLib3MFSlice_GetZTopFunc = function(pSlice: TLib3MFHandle; out pZTop: Double): TLib3MFResult; cdecl; + TLib3MFImplicitNode_GetOutputsFunc = function(pImplicitNode: TLib3MFHandle; out pIterator: TLib3MFHandle): TLib3MFResult; cdecl; - -(************************************************************************************************************************* - Function type definitions for SliceStack -**************************************************************************************************************************) - (** - * Get the lower Z-Coordinate of the slice stack. + * Retrieves an input * - * @param[in] pSliceStack - SliceStack instance. - * @param[out] pZBottom - the lower Z-Coordinate the slice stack + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[in] pIdentifier - the identifier of the input + * @param[out] pInput - the input port * @return error code or 0 (success) *) - TLib3MFSliceStack_GetBottomZFunc = function(pSliceStack: TLib3MFHandle; out pZBottom: Double): TLib3MFResult; cdecl; + TLib3MFImplicitNode_FindInputFunc = function(pImplicitNode: TLib3MFHandle; const pIdentifier: PAnsiChar; out pInput: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Returns the number of slices + * Retrieves an output * - * @param[in] pSliceStack - SliceStack instance. - * @param[out] pCount - the number of slices + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[in] pIdentifier - the identifier of the output + * @param[out] pOutput - the output port * @return error code or 0 (success) *) - TLib3MFSliceStack_GetSliceCountFunc = function(pSliceStack: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + TLib3MFImplicitNode_FindOutputFunc = function(pImplicitNode: TLib3MFHandle; const pIdentifier: PAnsiChar; out pOutput: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Query a slice from the slice stack + * Checks if the types of the input and output ports are valid for the node type * - * @param[in] pSliceStack - SliceStack instance. - * @param[in] nSliceIndex - the index of the slice - * @param[out] pTheSlice - the Slice instance + * @param[in] pImplicitNode - ImplicitNode instance. + * @param[out] pValid - true, if the types are valid * @return error code or 0 (success) *) - TLib3MFSliceStack_GetSliceFunc = function(pSliceStack: TLib3MFHandle; const nSliceIndex: QWord; out pTheSlice: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitNode_AreTypesValidFunc = function(pImplicitNode: TLib3MFHandle; out pValid: Byte): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for OneInputNode +**************************************************************************************************************************) + (** - * Returns the number of slices + * Retrieves the input * - * @param[in] pSliceStack - SliceStack instance. - * @param[in] dZTop - upper Z coordinate of the slice - * @param[out] pTheSlice - a new Slice instance + * @param[in] pOneInputNode - OneInputNode instance. + * @param[out] pInput - the input * @return error code or 0 (success) *) - TLib3MFSliceStack_AddSliceFunc = function(pSliceStack: TLib3MFHandle; const dZTop: Double; out pTheSlice: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFOneInputNode_GetInputAFunc = function(pOneInputNode: TLib3MFHandle; out pInput: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Returns the number of slice refs + * Retrieves the output * - * @param[in] pSliceStack - SliceStack instance. - * @param[out] pCount - the number of slicereferences + * @param[in] pOneInputNode - OneInputNode instance. + * @param[out] pResult - the output * @return error code or 0 (success) *) - TLib3MFSliceStack_GetSliceRefCountFunc = function(pSliceStack: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + TLib3MFOneInputNode_GetOutputResultFunc = function(pOneInputNode: TLib3MFHandle; out pResult: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for SinNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for CosNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for TanNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for ArcSinNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for ArcCosNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for ArcTanNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for SinhNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for CoshNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for TanhNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for RoundNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for CeilNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for FloorNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for SignNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for FractNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for AbsNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for ExpNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for LogNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for Log2Node +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for Log10Node +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for LengthNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for TransposeNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for InverseNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for SqrtNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for ResourceIdNode +**************************************************************************************************************************) + (** - * Adds another existing slicestack as sliceref in this slicestack + * Sets the Resource that the resourceid attribute of the node will point to * - * @param[in] pSliceStack - SliceStack instance. - * @param[in] pTheSliceStack - the slicestack to use as sliceref + * @param[in] pResourceIdNode - ResourceIdNode instance. + * @param[in] pResource - the resource * @return error code or 0 (success) *) - TLib3MFSliceStack_AddSliceStackReferenceFunc = function(pSliceStack: TLib3MFHandle; const pTheSliceStack: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFResourceIdNode_SetResourceFunc = function(pResourceIdNode: TLib3MFHandle; const pResource: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Adds another existing slicestack as sliceref in this slicestack + * Retrieves the resource of the node * - * @param[in] pSliceStack - SliceStack instance. - * @param[in] nSliceRefIndex - the index of the slice ref - * @param[out] pTheSliceStack - the slicestack that is used as sliceref + * @param[in] pResourceIdNode - ResourceIdNode instance. + * @param[out] pResource - the resource * @return error code or 0 (success) *) - TLib3MFSliceStack_GetSliceStackReferenceFunc = function(pSliceStack: TLib3MFHandle; const nSliceRefIndex: QWord; out pTheSliceStack: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFResourceIdNode_GetResourceFunc = function(pResourceIdNode: TLib3MFHandle; out pResource: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Removes the indirection of slices via slice-refs, i.e. creates the slices of all slice refs of this SliceStack as actual slices of this SliceStack. All previously existing slices or slicerefs will be removed. + * Retrieves the output * - * @param[in] pSliceStack - SliceStack instance. + * @param[in] pResourceIdNode - ResourceIdNode instance. + * @param[out] pValue - the output * @return error code or 0 (success) *) - TLib3MFSliceStack_CollapseSliceReferencesFunc = function(pSliceStack: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFResourceIdNode_GetOutputValueFunc = function(pResourceIdNode: TLib3MFHandle; out pValue: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for TwoInputNode +**************************************************************************************************************************) + (** - * Sets the package path where this Slice should be stored. Input an empty string to reset the path + * Retrieves the second input * - * @param[in] pSliceStack - SliceStack instance. - * @param[in] pPath - the package path where this Slice should be stored + * @param[in] pTwoInputNode - TwoInputNode instance. + * @param[out] pB - the second input * @return error code or 0 (success) *) - TLib3MFSliceStack_SetOwnPathFunc = function(pSliceStack: TLib3MFHandle; const pPath: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFTwoInputNode_GetInputBFunc = function(pTwoInputNode: TLib3MFHandle; out pB: TLib3MFHandle): TLib3MFResult; cdecl; + + +(************************************************************************************************************************* + Function type definitions for AdditionNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for SubtractionNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for MultiplicationNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for DivisionNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for DotNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for CrossNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for ArcTan2Node +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for MatVecMultiplicationNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for MinNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for MaxNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for FmodNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for ModNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for PowNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for SelectNode +**************************************************************************************************************************) + + (** + * Retrieves the second input + * + * @param[in] pSelectNode - SelectNode instance. + * @param[out] pB - the second input + * @return error code or 0 (success) + *) + TLib3MFSelectNode_GetInputBFunc = function(pSelectNode: TLib3MFHandle; out pB: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Obtains the package path where this Slice should be stored. Returns an empty string if the slicestack is stored within the root model. + * Retrieves the third input * - * @param[in] pSliceStack - SliceStack instance. - * @param[in] nPathBufferSize - size of the buffer (including trailing 0) - * @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pPathBuffer - buffer of the package path where this Slice will be stored, may be NULL + * @param[in] pSelectNode - SelectNode instance. + * @param[out] pC - the third input * @return error code or 0 (success) *) - TLib3MFSliceStack_GetOwnPathFunc = function(pSliceStack: TLib3MFHandle; const nPathBufferSize: Cardinal; out pPathNeededChars: Cardinal; pPathBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFSelectNode_GetInputCFunc = function(pSelectNode: TLib3MFHandle; out pC: TLib3MFHandle): TLib3MFResult; cdecl; - -(************************************************************************************************************************* - Function type definitions for Consumer -**************************************************************************************************************************) - (** - * Gets the consumerid + * Retrieves the fourth input * - * @param[in] pConsumer - Consumer instance. - * @param[in] nConsumerIDBufferSize - size of the buffer (including trailing 0) - * @param[out] pConsumerIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pConsumerIDBuffer - buffer of A unique identifier for the consumers, may be NULL + * @param[in] pSelectNode - SelectNode instance. + * @param[out] pD - the fourth input * @return error code or 0 (success) *) - TLib3MFConsumer_GetConsumerIDFunc = function(pConsumer: TLib3MFHandle; const nConsumerIDBufferSize: Cardinal; out pConsumerIDNeededChars: Cardinal; pConsumerIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFSelectNode_GetInputDFunc = function(pSelectNode: TLib3MFHandle; out pD: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for ClampNode +**************************************************************************************************************************) + (** - * Getts the keyid + * Retrieves the input for the lower limit * - * @param[in] pConsumer - Consumer instance. - * @param[in] nKeyIDBufferSize - size of the buffer (including trailing 0) - * @param[out] pKeyIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pKeyIDBuffer - buffer of The identifier for the key of this consumer, may be NULL + * @param[in] pClampNode - ClampNode instance. + * @param[out] pMin - the input for the lower limit * @return error code or 0 (success) *) - TLib3MFConsumer_GetKeyIDFunc = function(pConsumer: TLib3MFHandle; const nKeyIDBufferSize: Cardinal; out pKeyIDNeededChars: Cardinal; pKeyIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFClampNode_GetInputMinFunc = function(pClampNode: TLib3MFHandle; out pMin: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Gets the keyvalue associated with this consumer + * Retrieves the input for the upper limit * - * @param[in] pConsumer - Consumer instance. - * @param[in] nKeyValueBufferSize - size of the buffer (including trailing 0) - * @param[out] pKeyValueNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pKeyValueBuffer - buffer of The public key, when available, of this consumer, may be NULL + * @param[in] pClampNode - ClampNode instance. + * @param[out] pMax - the input for the upper limit * @return error code or 0 (success) *) - TLib3MFConsumer_GetKeyValueFunc = function(pConsumer: TLib3MFHandle; const nKeyValueBufferSize: Cardinal; out pKeyValueNeededChars: Cardinal; pKeyValueBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFClampNode_GetInputMaxFunc = function(pClampNode: TLib3MFHandle; out pMax: TLib3MFHandle): TLib3MFResult; cdecl; (************************************************************************************************************************* - Function type definitions for AccessRight + Function type definitions for ComposeVectorNode **************************************************************************************************************************) (** - * Gets the consumer associated with this access right + * Retrieves the input for the x component * - * @param[in] pAccessRight - AccessRight instance. - * @param[out] pConsumer - The consumer instance + * @param[in] pComposeVectorNode - ComposeVectorNode instance. + * @param[out] pX - the input for the x component * @return error code or 0 (success) *) - TLib3MFAccessRight_GetConsumerFunc = function(pAccessRight: TLib3MFHandle; out pConsumer: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFComposeVectorNode_GetInputXFunc = function(pComposeVectorNode: TLib3MFHandle; out pX: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Gets the associated encryption algorithm + * Retrieves the input for the y component * - * @param[in] pAccessRight - AccessRight instance. - * @param[out] pAlgorithm - The algorithm used for the key in this accessright + * @param[in] pComposeVectorNode - ComposeVectorNode instance. + * @param[out] pY - the input for the y component * @return error code or 0 (success) *) - TLib3MFAccessRight_GetWrappingAlgorithmFunc = function(pAccessRight: TLib3MFHandle; out pAlgorithm: Integer): TLib3MFResult; cdecl; + TLib3MFComposeVectorNode_GetInputYFunc = function(pComposeVectorNode: TLib3MFHandle; out pY: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Gets the associated mask generation function algorithm + * Retrieves the input for the z component * - * @param[in] pAccessRight - AccessRight instance. - * @param[out] pAlgorithm - The MFG1 algorithm + * @param[in] pComposeVectorNode - ComposeVectorNode instance. + * @param[out] pZ - the input for the z component * @return error code or 0 (success) *) - TLib3MFAccessRight_GetMgfAlgorithmFunc = function(pAccessRight: TLib3MFHandle; out pAlgorithm: Integer): TLib3MFResult; cdecl; + TLib3MFComposeVectorNode_GetInputZFunc = function(pComposeVectorNode: TLib3MFHandle; out pZ: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Gets the digest method assoicated + * Retrieves the output * - * @param[in] pAccessRight - AccessRight instance. - * @param[out] pAlgorithm - The digest method for this accessright + * @param[in] pComposeVectorNode - ComposeVectorNode instance. + * @param[out] pResult - the output * @return error code or 0 (success) *) - TLib3MFAccessRight_GetDigestMethodFunc = function(pAccessRight: TLib3MFHandle; out pAlgorithm: Integer): TLib3MFResult; cdecl; + TLib3MFComposeVectorNode_GetOutputResultFunc = function(pComposeVectorNode: TLib3MFHandle; out pResult: TLib3MFHandle): TLib3MFResult; cdecl; (************************************************************************************************************************* - Function type definitions for ContentEncryptionParams + Function type definitions for VectorFromScalarNode +**************************************************************************************************************************) + + +(************************************************************************************************************************* + Function type definitions for DecomposeVectorNode **************************************************************************************************************************) (** - * Returns the encryption method to be used in this encryption process + * Retrieves the input * - * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. - * @param[out] pAlgorithm - + * @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. + * @param[out] pA - the input port for the vector to decompose * @return error code or 0 (success) *) - TLib3MFContentEncryptionParams_GetEncryptionAlgorithmFunc = function(pContentEncryptionParams: TLib3MFHandle; out pAlgorithm: Integer): TLib3MFResult; cdecl; + TLib3MFDecomposeVectorNode_GetInputAFunc = function(pDecomposeVectorNode: TLib3MFHandle; out pA: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Gets the key for the resource associated + * Retrieves the output for the x component * - * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. - * @param[in] nByteDataCount - Number of elements in buffer - * @param[out] pByteDataNeededCount - will be filled with the count of the written elements, or needed buffer size. - * @param[out] pByteDataBuffer - uint8 buffer of Pointer to a buffer where to place the key. + * @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. + * @param[out] pX - the output for the x component * @return error code or 0 (success) *) - TLib3MFContentEncryptionParams_GetKeyFunc = function(pContentEncryptionParams: TLib3MFHandle; const nByteDataCount: QWord; out pByteDataNeededCount: QWord; pByteDataBuffer: PByte): TLib3MFResult; cdecl; + TLib3MFDecomposeVectorNode_GetOutputXFunc = function(pDecomposeVectorNode: TLib3MFHandle; out pX: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Gets the IV data + * Retrieves the output for the y component * - * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. - * @param[in] nByteDataCount - Number of elements in buffer - * @param[out] pByteDataNeededCount - will be filled with the count of the written elements, or needed buffer size. - * @param[out] pByteDataBuffer - uint8 buffer of Pointer to a buffer where to place the data. + * @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. + * @param[out] pY - the output for the y component * @return error code or 0 (success) *) - TLib3MFContentEncryptionParams_GetInitializationVectorFunc = function(pContentEncryptionParams: TLib3MFHandle; const nByteDataCount: QWord; out pByteDataNeededCount: QWord; pByteDataBuffer: PByte): TLib3MFResult; cdecl; + TLib3MFDecomposeVectorNode_GetOutputYFunc = function(pDecomposeVectorNode: TLib3MFHandle; out pY: TLib3MFHandle): TLib3MFResult; cdecl; (** - * A handler descriptor that uniquely identifies the context of the resource. Each resource will be assigned a different value + * Retrieves the output for the z component * - * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. - * @param[in] nByteDataCount - Number of elements in buffer - * @param[out] pByteDataNeededCount - will be filled with the count of the written elements, or needed buffer size. - * @param[out] pByteDataBuffer - uint8 buffer of Pointer to a buffer where to place the data. + * @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. + * @param[out] pZ - the output for the z component * @return error code or 0 (success) *) - TLib3MFContentEncryptionParams_GetAuthenticationTagFunc = function(pContentEncryptionParams: TLib3MFHandle; const nByteDataCount: QWord; out pByteDataNeededCount: QWord; pByteDataBuffer: PByte): TLib3MFResult; cdecl; + TLib3MFDecomposeVectorNode_GetOutputZFunc = function(pDecomposeVectorNode: TLib3MFHandle; out pZ: TLib3MFHandle): TLib3MFResult; cdecl; - (** - * Sets the authentication tag + +(************************************************************************************************************************* + Function type definitions for ComposeMatrixNode +**************************************************************************************************************************) + + (** + * Retrieves the input for the element 0 0 * - * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. - * @param[in] nByteDataCount - Number of elements in buffer - * @param[in] pByteDataBuffer - uint8 buffer of The authentication tag size + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM00 - the input for the m00 element * @return error code or 0 (success) *) - TLib3MFContentEncryptionParams_SetAuthenticationTagFunc = function(pContentEncryptionParams: TLib3MFHandle; const nByteDataCount: QWord; const pByteDataBuffer: PByte): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM00Func = function(pComposeMatrixNode: TLib3MFHandle; out pM00: TLib3MFHandle): TLib3MFResult; cdecl; (** - * A handler descriptor that uniquely identifies the context of the resource. Each resource will be assigned a different value + * Retrieves the input for the element 0 1 * - * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. - * @param[in] nByteDataCount - Number of elements in buffer - * @param[out] pByteDataNeededCount - will be filled with the count of the written elements, or needed buffer size. - * @param[out] pByteDataBuffer - uint8 buffer of Buffer where the data will be placed + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM01 - the input for the m01 element * @return error code or 0 (success) *) - TLib3MFContentEncryptionParams_GetAdditionalAuthenticationDataFunc = function(pContentEncryptionParams: TLib3MFHandle; const nByteDataCount: QWord; out pByteDataNeededCount: QWord; pByteDataBuffer: PByte): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM01Func = function(pComposeMatrixNode: TLib3MFHandle; out pM01: TLib3MFHandle): TLib3MFResult; cdecl; (** - * A handler descriptor that uniquely identifies the context of the resource. Each resource will be assigned a different value + * Retrieves the input for the element 0 2 * - * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. - * @param[out] pDescriptor - + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM02 - the input for the m02 element * @return error code or 0 (success) *) - TLib3MFContentEncryptionParams_GetDescriptorFunc = function(pContentEncryptionParams: TLib3MFHandle; out pDescriptor: QWord): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM02Func = function(pComposeMatrixNode: TLib3MFHandle; out pM02: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Gets the resourcedatagroup keyuuid + * Retrieves the input for the element 0 3 * - * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. - * @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) - * @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pUUIDBuffer - buffer of The resourcedatagroup keyuuid that may be use to reference an external key, may be NULL + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM03 - the input for the m03 element * @return error code or 0 (success) *) - TLib3MFContentEncryptionParams_GetKeyUUIDFunc = function(pContentEncryptionParams: TLib3MFHandle; const nUUIDBufferSize: Cardinal; out pUUIDNeededChars: Cardinal; pUUIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM03Func = function(pComposeMatrixNode: TLib3MFHandle; out pM03: TLib3MFHandle): TLib3MFResult; cdecl; - -(************************************************************************************************************************* - Function type definitions for ResourceData -**************************************************************************************************************************) - (** - * Gets the encrypted part path + * Retrieves the input for the element 1 0 * - * @param[in] pResourceData - ResourceData instance. - * @param[out] pPath - The part path + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM10 - the input for the m10 element * @return error code or 0 (success) *) - TLib3MFResourceData_GetPathFunc = function(pResourceData: TLib3MFHandle; out pPath: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM10Func = function(pComposeMatrixNode: TLib3MFHandle; out pM10: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Gets the encryption algorithm used to encrypt this ResourceData + * Retrieves the input for the element 1 1 * - * @param[in] pResourceData - ResourceData instance. - * @param[out] pEncryptionAlgorithm - The encryption algorithm + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM11 - the input for the m11 element * @return error code or 0 (success) *) - TLib3MFResourceData_GetEncryptionAlgorithmFunc = function(pResourceData: TLib3MFHandle; out pEncryptionAlgorithm: Integer): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM11Func = function(pComposeMatrixNode: TLib3MFHandle; out pM11: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Tells whether this ResourceData is compressed or not + * Retrieves the input for the element 1 2 * - * @param[in] pResourceData - ResourceData instance. - * @param[out] pCompression - The compression method + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM12 - the input for the m12 element * @return error code or 0 (success) *) - TLib3MFResourceData_GetCompressionFunc = function(pResourceData: TLib3MFHandle; out pCompression: Integer): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM12Func = function(pComposeMatrixNode: TLib3MFHandle; out pM12: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Tells whether this ResourceData is compressed or not + * Retrieves the input for the element 1 3 * - * @param[in] pResourceData - ResourceData instance. - * @param[in] nByteDataCount - Number of elements in buffer - * @param[out] pByteDataNeededCount - will be filled with the count of the written elements, or needed buffer size. - * @param[out] pByteDataBuffer - uint8 buffer of The compression method + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM13 - the input for the m3 element * @return error code or 0 (success) *) - TLib3MFResourceData_GetAdditionalAuthenticationDataFunc = function(pResourceData: TLib3MFHandle; const nByteDataCount: QWord; out pByteDataNeededCount: QWord; pByteDataBuffer: PByte): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM13Func = function(pComposeMatrixNode: TLib3MFHandle; out pM13: TLib3MFHandle): TLib3MFResult; cdecl; - -(************************************************************************************************************************* - Function type definitions for ResourceDataGroup -**************************************************************************************************************************) - (** - * Sets the resourcedatagroup keyuuid + * Retrieves the input for the element 2 0 * - * @param[in] pResourceDataGroup - ResourceDataGroup instance. - * @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) - * @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pUUIDBuffer - buffer of The new resourcedatagroup keyuuid., may be NULL + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM20 - the input for the m2 element * @return error code or 0 (success) *) - TLib3MFResourceDataGroup_GetKeyUUIDFunc = function(pResourceDataGroup: TLib3MFHandle; const nUUIDBufferSize: Cardinal; out pUUIDNeededChars: Cardinal; pUUIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM20Func = function(pComposeMatrixNode: TLib3MFHandle; out pM20: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Add accessright to resourcedatagroup element + * Retrieves the input for the element 2 1 * - * @param[in] pResourceDataGroup - ResourceDataGroup instance. - * @param[in] pConsumer - The Consumer reference - * @param[in] eWrappingAlgorithm - The key wrapping algorithm to be used - * @param[in] eMgfAlgorithm - The mask generation function to be used - * @param[in] eDigestMethod - The digest mechanism to be used - * @param[out] pTheAccessRight - The acess right instance + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM21 - * @return error code or 0 (success) *) - TLib3MFResourceDataGroup_AddAccessRightFunc = function(pResourceDataGroup: TLib3MFHandle; const pConsumer: TLib3MFHandle; const eWrappingAlgorithm: Integer; const eMgfAlgorithm: Integer; const eDigestMethod: Integer; out pTheAccessRight: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM21Func = function(pComposeMatrixNode: TLib3MFHandle; out pM21: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Finds the AccessRight associated with a Consumer + * Retrieves the input for the element 2 2 * - * @param[in] pResourceDataGroup - ResourceDataGroup instance. - * @param[in] pConsumer - The Consumer instance - * @param[out] pTheAccessRight - The AcessRight instance + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM22 - the input for the m22 element * @return error code or 0 (success) *) - TLib3MFResourceDataGroup_FindAccessRightByConsumerFunc = function(pResourceDataGroup: TLib3MFHandle; const pConsumer: TLib3MFHandle; out pTheAccessRight: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM22Func = function(pComposeMatrixNode: TLib3MFHandle; out pM22: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Removes access from a Consumer on this resource data group + * Retrieves the input for the element 2 3 * - * @param[in] pResourceDataGroup - ResourceDataGroup instance. - * @param[in] pConsumer - The Consumer instance + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM23 - the input for the m23 element * @return error code or 0 (success) *) - TLib3MFResourceDataGroup_RemoveAccessRightFunc = function(pResourceDataGroup: TLib3MFHandle; const pConsumer: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM23Func = function(pComposeMatrixNode: TLib3MFHandle; out pM23: TLib3MFHandle): TLib3MFResult; cdecl; - -(************************************************************************************************************************* - Function type definitions for KeyStore -**************************************************************************************************************************) - (** - * Adds a consumer to the keystore + * Retrieves the input for the element 3 0 * - * @param[in] pKeyStore - KeyStore instance. - * @param[in] pConsumerID - A unique identifier for the consumer - * @param[in] pKeyID - The id of the key of the consumer - * @param[in] pKeyValue - The public key for this consumer in PEM format - * @param[out] pConsumer - The consumer instance + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM30 - the input for the m30 element * @return error code or 0 (success) *) - TLib3MFKeyStore_AddConsumerFunc = function(pKeyStore: TLib3MFHandle; const pConsumerID: PAnsiChar; const pKeyID: PAnsiChar; const pKeyValue: PAnsiChar; out pConsumer: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM30Func = function(pComposeMatrixNode: TLib3MFHandle; out pM30: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Gets the number of consumers in the keystore + * Retrieves the input for the element 3 1 * - * @param[in] pKeyStore - KeyStore instance. - * @param[out] pCount - The consumer count + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM31 - the input for the m31 element * @return error code or 0 (success) *) - TLib3MFKeyStore_GetConsumerCountFunc = function(pKeyStore: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM31Func = function(pComposeMatrixNode: TLib3MFHandle; out pM31: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Get a consumer from the keystore + * Retrieves the input for the element 3 2 * - * @param[in] pKeyStore - KeyStore instance. - * @param[in] nConsumerIndex - The index of the consumer - * @param[out] pConsumer - The consumer instance + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM32 - the input for the m32 element * @return error code or 0 (success) *) - TLib3MFKeyStore_GetConsumerFunc = function(pKeyStore: TLib3MFHandle; const nConsumerIndex: QWord; out pConsumer: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM32Func = function(pComposeMatrixNode: TLib3MFHandle; out pM32: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Removes a consumer from the keystore + * Retrieves the input for the element 3 3 * - * @param[in] pKeyStore - KeyStore instance. - * @param[in] pConsumer - The consumer instance to remove + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pM33 - the input for the m33 element * @return error code or 0 (success) *) - TLib3MFKeyStore_RemoveConsumerFunc = function(pKeyStore: TLib3MFHandle; const pConsumer: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetInputM33Func = function(pComposeMatrixNode: TLib3MFHandle; out pM33: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Finds a consumer by ID + * Retrieves the output * - * @param[in] pKeyStore - KeyStore instance. - * @param[in] pConsumerID - The ID of the consumer - * @param[out] pConsumer - The consumer instance + * @param[in] pComposeMatrixNode - ComposeMatrixNode instance. + * @param[out] pResult - the output * @return error code or 0 (success) *) - TLib3MFKeyStore_FindConsumerFunc = function(pKeyStore: TLib3MFHandle; const pConsumerID: PAnsiChar; out pConsumer: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFComposeMatrixNode_GetOutputResultFunc = function(pComposeMatrixNode: TLib3MFHandle; out pResult: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for MatrixFromRowsNode +**************************************************************************************************************************) + (** - * Gets the number of resource data group in the keysore + * Retrieves the input for the first row * - * @param[in] pKeyStore - KeyStore instance. - * @param[out] pCount - The number of resource data available + * @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. + * @param[out] pRow0 - the input for the first row * @return error code or 0 (success) *) - TLib3MFKeyStore_GetResourceDataGroupCountFunc = function(pKeyStore: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + TLib3MFMatrixFromRowsNode_GetInputAFunc = function(pMatrixFromRowsNode: TLib3MFHandle; out pRow0: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Adds a resource data group into the keystore. + * Retrieves the input for the second row * - * @param[in] pKeyStore - KeyStore instance. - * @param[out] pResourceDataGroup - The resource data group instance + * @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. + * @param[out] pRow1 - the input for the second row * @return error code or 0 (success) *) - TLib3MFKeyStore_AddResourceDataGroupFunc = function(pKeyStore: TLib3MFHandle; out pResourceDataGroup: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFMatrixFromRowsNode_GetInputBFunc = function(pMatrixFromRowsNode: TLib3MFHandle; out pRow1: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Gets a resource data group + * Retrieves the input for the third row * - * @param[in] pKeyStore - KeyStore instance. - * @param[in] nResourceDataIndex - The index of the resource data - * @param[out] pResourceDataGroup - The resource data group instance + * @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. + * @param[out] pRow2 - the input for the third row * @return error code or 0 (success) *) - TLib3MFKeyStore_GetResourceDataGroupFunc = function(pKeyStore: TLib3MFHandle; const nResourceDataIndex: QWord; out pResourceDataGroup: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFMatrixFromRowsNode_GetInputCFunc = function(pMatrixFromRowsNode: TLib3MFHandle; out pRow2: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Removes a resource data group + * Retrieves the input for the fourth row * - * @param[in] pKeyStore - KeyStore instance. - * @param[in] pResourceDataGroup - The resource data group instance + * @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. + * @param[out] pRow3 - the input for the fourth row * @return error code or 0 (success) *) - TLib3MFKeyStore_RemoveResourceDataGroupFunc = function(pKeyStore: TLib3MFHandle; const pResourceDataGroup: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFMatrixFromRowsNode_GetInputDFunc = function(pMatrixFromRowsNode: TLib3MFHandle; out pRow3: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Finds a resource data group that contains a particular resourcedata + * Retrieves the output * - * @param[in] pKeyStore - KeyStore instance. - * @param[in] pPartPath - The target path for the resourcedata hold by the resource data group - * @param[out] pResourceDataGroup - The data resource instance + * @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. + * @param[out] pResult - the output * @return error code or 0 (success) *) - TLib3MFKeyStore_FindResourceDataGroupFunc = function(pKeyStore: TLib3MFHandle; const pPartPath: TLib3MFHandle; out pResourceDataGroup: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFMatrixFromRowsNode_GetOutputResultFunc = function(pMatrixFromRowsNode: TLib3MFHandle; out pResult: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for MatrixFromColumnsNode +**************************************************************************************************************************) + (** - * Add resourcedata to resourcedatagroup element + * Retrieves the input for the first column * - * @param[in] pKeyStore - KeyStore instance. - * @param[in] pResourceDataGroup - The resource data group where to add this resource data - * @param[in] pPartPath - The path of the part to be encrypted - * @param[in] eAlgorithm - The encryption algorithm to be used to encrypt this resource - * @param[in] eCompression - Whether compression should be used prior to encryption - * @param[in] nAdditionalAuthenticationDataCount - Number of elements in buffer - * @param[in] pAdditionalAuthenticationDataBuffer - uint8 buffer of Additional data to be encrypted along the contents for better security - * @param[out] pResourceData - The data resource instance + * @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. + * @param[out] pColumn0 - the input for the first column * @return error code or 0 (success) *) - TLib3MFKeyStore_AddResourceDataFunc = function(pKeyStore: TLib3MFHandle; const pResourceDataGroup: TLib3MFHandle; const pPartPath: TLib3MFHandle; const eAlgorithm: Integer; const eCompression: Integer; const nAdditionalAuthenticationDataCount: QWord; const pAdditionalAuthenticationDataBuffer: PByte; out pResourceData: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFMatrixFromColumnsNode_GetInputAFunc = function(pMatrixFromColumnsNode: TLib3MFHandle; out pColumn0: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Removes a resource data + * Retrieves the input for the second column * - * @param[in] pKeyStore - KeyStore instance. - * @param[in] pResourceData - The resource data to be removed + * @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. + * @param[out] pColumn1 - the input for the second column * @return error code or 0 (success) *) - TLib3MFKeyStore_RemoveResourceDataFunc = function(pKeyStore: TLib3MFHandle; const pResourceData: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFMatrixFromColumnsNode_GetInputBFunc = function(pMatrixFromColumnsNode: TLib3MFHandle; out pColumn1: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Finds a resource data on this resource group + * Retrieves the input for the third column * - * @param[in] pKeyStore - KeyStore instance. - * @param[in] pResourcePath - The target path for the resourcedata - * @param[out] pResourceData - The resource data instance + * @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. + * @param[out] pColumn2 - the input for the third column * @return error code or 0 (success) *) - TLib3MFKeyStore_FindResourceDataFunc = function(pKeyStore: TLib3MFHandle; const pResourcePath: TLib3MFHandle; out pResourceData: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFMatrixFromColumnsNode_GetInputCFunc = function(pMatrixFromColumnsNode: TLib3MFHandle; out pColumn2: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Gets the number of resource data in the keysore + * Retrieves the input for the fourth column * - * @param[in] pKeyStore - KeyStore instance. - * @param[out] pCount - The number of resource data available + * @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. + * @param[out] pColumn3 - the input for the fourth column * @return error code or 0 (success) *) - TLib3MFKeyStore_GetResourceDataCountFunc = function(pKeyStore: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + TLib3MFMatrixFromColumnsNode_GetInputDFunc = function(pMatrixFromColumnsNode: TLib3MFHandle; out pColumn3: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Gets a resource data + * Retrieves the output * - * @param[in] pKeyStore - KeyStore instance. - * @param[in] nResourceDataIndex - The index of the resource data - * @param[out] pResourceData - The data resource instance + * @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. + * @param[out] pResult - the output * @return error code or 0 (success) *) - TLib3MFKeyStore_GetResourceDataFunc = function(pKeyStore: TLib3MFHandle; const nResourceDataIndex: QWord; out pResourceData: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFMatrixFromColumnsNode_GetOutputResultFunc = function(pMatrixFromColumnsNode: TLib3MFHandle; out pResult: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for ConstantNode +**************************************************************************************************************************) + (** - * Gets the keystore UUID + * Sets the constant value of the node * - * @param[in] pKeyStore - KeyStore instance. - * @param[out] pHasUUID - flag whether the keystore has a UUID - * @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) - * @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pUUIDBuffer - buffer of returns the keystore uuid., may be NULL + * @param[in] pConstantNode - ConstantNode instance. + * @param[in] dValue - the value * @return error code or 0 (success) *) - TLib3MFKeyStore_GetUUIDFunc = function(pKeyStore: TLib3MFHandle; out pHasUUID: Byte; const nUUIDBufferSize: Cardinal; out pUUIDNeededChars: Cardinal; pUUIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFConstantNode_SetConstantFunc = function(pConstantNode: TLib3MFHandle; const dValue: Double): TLib3MFResult; cdecl; (** - * Sets the keystore UUID + * Retrieves the constant value of the node * - * @param[in] pKeyStore - KeyStore instance. - * @param[in] pUUID - The new keystore uuid. + * @param[in] pConstantNode - ConstantNode instance. + * @param[out] pValue - the value * @return error code or 0 (success) *) - TLib3MFKeyStore_SetUUIDFunc = function(pKeyStore: TLib3MFHandle; const pUUID: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFConstantNode_GetConstantFunc = function(pConstantNode: TLib3MFHandle; out pValue: Double): TLib3MFResult; cdecl; + + (** + * Retrieves the output + * + * @param[in] pConstantNode - ConstantNode instance. + * @param[out] pValue - the output + * @return error code or 0 (success) + *) + TLib3MFConstantNode_GetOutputValueFunc = function(pConstantNode: TLib3MFHandle; out pValue: TLib3MFHandle): TLib3MFResult; cdecl; (************************************************************************************************************************* - Function type definitions for Model + Function type definitions for ConstVecNode **************************************************************************************************************************) (** - * Returns the PackagePart within the OPC package that holds the root model. + * Sets the vector value of the node * - * @param[in] pModel - Model instance. - * @param[out] pRootModelPart - the PackagePart within the OPC package that holds the model-file + * @param[in] pConstVecNode - ConstVecNode instance. + * @param[in] pValue - the value * @return error code or 0 (success) *) - TLib3MFModel_RootModelPartFunc = function(pModel: TLib3MFHandle; out pRootModelPart: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFConstVecNode_SetVectorFunc = function(pConstVecNode: TLib3MFHandle; const pValue: PLib3MFVector): TLib3MFResult; cdecl; (** - * Returns a new PackagePart for use within the OPC package. + * Retrieves the vector value of the node * - * @param[in] pModel - Model instance. - * @param[in] pAbsolutePath - the absolute Path (physical location) within the OPC package - * @param[out] pModelPart - the new PackagePart within the OPC package + * @param[in] pConstVecNode - ConstVecNode instance. + * @param[out] pValue - the value * @return error code or 0 (success) *) - TLib3MFModel_FindOrCreatePackagePartFunc = function(pModel: TLib3MFHandle; const pAbsolutePath: PAnsiChar; out pModelPart: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFConstVecNode_GetVectorFunc = function(pConstVecNode: TLib3MFHandle; pValue: PLib3MFVector): TLib3MFResult; cdecl; (** - * sets the units of a model. + * Retrieves the output * - * @param[in] pModel - Model instance. - * @param[in] eUnit - Unit enum value for the model unit + * @param[in] pConstVecNode - ConstVecNode instance. + * @param[out] pVector - the output * @return error code or 0 (success) *) - TLib3MFModel_SetUnitFunc = function(pModel: TLib3MFHandle; const eUnit: Integer): TLib3MFResult; cdecl; + TLib3MFConstVecNode_GetOutputVectorFunc = function(pConstVecNode: TLib3MFHandle; out pVector: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for ConstMatNode +**************************************************************************************************************************) + (** - * returns the units of a model. + * Sets the matrix value of the node * - * @param[in] pModel - Model instance. - * @param[out] pUnit - Unit enum value for the model unit + * @param[in] pConstMatNode - ConstMatNode instance. + * @param[in] pValue - the value * @return error code or 0 (success) *) - TLib3MFModel_GetUnitFunc = function(pModel: TLib3MFHandle; out pUnit: Integer): TLib3MFResult; cdecl; + TLib3MFConstMatNode_SetMatrixFunc = function(pConstMatNode: TLib3MFHandle; const pValue: PLib3MFMatrix4x4): TLib3MFResult; cdecl; (** - * retrieves the language of a model + * Retrieves the matrix value of the node * - * @param[in] pModel - Model instance. - * @param[in] nLanguageBufferSize - size of the buffer (including trailing 0) - * @param[out] pLanguageNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pLanguageBuffer - buffer of language identifier, may be NULL + * @param[in] pConstMatNode - ConstMatNode instance. + * @param[out] pValue - the matrix * @return error code or 0 (success) *) - TLib3MFModel_GetLanguageFunc = function(pModel: TLib3MFHandle; const nLanguageBufferSize: Cardinal; out pLanguageNeededChars: Cardinal; pLanguageBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFConstMatNode_GetMatrixFunc = function(pConstMatNode: TLib3MFHandle; pValue: PLib3MFMatrix4x4): TLib3MFResult; cdecl; (** - * sets the language of a model + * Retrieves the output * - * @param[in] pModel - Model instance. - * @param[in] pLanguage - language identifier + * @param[in] pConstMatNode - ConstMatNode instance. + * @param[out] pMatrix - the output * @return error code or 0 (success) *) - TLib3MFModel_SetLanguageFunc = function(pModel: TLib3MFHandle; const pLanguage: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFConstMatNode_GetOutputMatrixFunc = function(pConstMatNode: TLib3MFHandle; out pMatrix: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for MeshNode +**************************************************************************************************************************) + (** - * creates a model writer instance for a specific file type + * Retrieves the input for the model resource id of the mesh * - * @param[in] pModel - Model instance. - * @param[in] pWriterClass - string identifier for the file type - * @param[out] pWriterInstance - string identifier for the file type + * @param[in] pMeshNode - MeshNode instance. + * @param[out] pMesh - the input port for the model resource id of the mesh * @return error code or 0 (success) *) - TLib3MFModel_QueryWriterFunc = function(pModel: TLib3MFHandle; const pWriterClass: PAnsiChar; out pWriterInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFMeshNode_GetInputMeshFunc = function(pMeshNode: TLib3MFHandle; out pMesh: TLib3MFHandle): TLib3MFResult; cdecl; (** - * creates a model reader instance for a specific file type + * Retrieves the input for the position * - * @param[in] pModel - Model instance. - * @param[in] pReaderClass - string identifier for the file type - * @param[out] pReaderInstance - string identifier for the file type + * @param[in] pMeshNode - MeshNode instance. + * @param[out] pPos - the input port for the position * @return error code or 0 (success) *) - TLib3MFModel_QueryReaderFunc = function(pModel: TLib3MFHandle; const pReaderClass: PAnsiChar; out pReaderInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFMeshNode_GetInputPosFunc = function(pMeshNode: TLib3MFHandle; out pPos: TLib3MFHandle): TLib3MFResult; cdecl; (** - * finds a model resource by its UniqueResourceID + * Retrieves the output * - * @param[in] pModel - Model instance. - * @param[in] nUniqueResourceID - UniqueResourceID - * @param[out] pResource - returns the resource instance + * @param[in] pMeshNode - MeshNode instance. + * @param[out] pDistance - the output port for the signed distance to the mesh * @return error code or 0 (success) *) - TLib3MFModel_GetResourceByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pResource: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFMeshNode_GetOutputDistanceFunc = function(pMeshNode: TLib3MFHandle; out pDistance: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for UnsignedMeshNode +**************************************************************************************************************************) + (** - * finds a model texture by its UniqueResourceID + * Retrieves the input for the model resource id of the mesh * - * @param[in] pModel - Model instance. - * @param[in] nUniqueResourceID - UniqueResourceID - * @param[out] pTextureInstance - returns the texture2d instance + * @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. + * @param[out] pMesh - the input port for the model resource id of the mesh * @return error code or 0 (success) *) - TLib3MFModel_GetTexture2DByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pTextureInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFUnsignedMeshNode_GetInputMeshFunc = function(pUnsignedMeshNode: TLib3MFHandle; out pMesh: TLib3MFHandle): TLib3MFResult; cdecl; (** - * returns a Property's type + * Retrieves the input for the position * - * @param[in] pModel - Model instance. - * @param[in] nUniqueResourceID - Resource ID of the Property to Query - * @param[out] pThePropertyType - returns a Property's type + * @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. + * @param[out] pPos - the input port for the position * @return error code or 0 (success) *) - TLib3MFModel_GetPropertyTypeByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pThePropertyType: Integer): TLib3MFResult; cdecl; + TLib3MFUnsignedMeshNode_GetInputPosFunc = function(pUnsignedMeshNode: TLib3MFHandle; out pPos: TLib3MFHandle): TLib3MFResult; cdecl; (** - * finds a model base material group by its UniqueResourceID + * Retrieves the output * - * @param[in] pModel - Model instance. - * @param[in] nUniqueResourceID - UniqueResourceID - * @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance + * @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. + * @param[out] pDistance - the output port for the unsigned distance to the mesh * @return error code or 0 (success) *) - TLib3MFModel_GetBaseMaterialGroupByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pBaseMaterialGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFUnsignedMeshNode_GetOutputDistanceFunc = function(pUnsignedMeshNode: TLib3MFHandle; out pDistance: TLib3MFHandle): TLib3MFResult; cdecl; - (** - * finds a model texture2d group by its UniqueResourceID + +(************************************************************************************************************************* + Function type definitions for FunctionCallNode +**************************************************************************************************************************) + + (** + * Retrieves the input for the function id * - * @param[in] pModel - Model instance. - * @param[in] nUniqueResourceID - UniqueResourceID - * @param[out] pTexture2DGroupInstance - returns the Texture2DGroup instance + * @param[in] pFunctionCallNode - FunctionCallNode instance. + * @param[out] pFunction - the input port for the function * @return error code or 0 (success) *) - TLib3MFModel_GetTexture2DGroupByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pTexture2DGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFFunctionCallNode_GetInputFunctionIDFunc = function(pFunctionCallNode: TLib3MFHandle; out pFunction: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for NodeIterator +**************************************************************************************************************************) + (** - * finds a model CompositeMaterials by its UniqueResourceID + * Returns the current element * - * @param[in] pModel - Model instance. - * @param[in] nUniqueResourceID - UniqueResourceID - * @param[out] pCompositeMaterialsInstance - returns the CompositeMaterials instance + * @param[in] pNodeIterator - NodeIterator instance. + * @param[out] pNode - The current element * @return error code or 0 (success) *) - TLib3MFModel_GetCompositeMaterialsByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pCompositeMaterialsInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFNodeIterator_GetCurrentFunc = function(pNodeIterator: TLib3MFHandle; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for Function +**************************************************************************************************************************) + (** - * finds a model MultiPropertyGroup by its UniqueResourceID + * Retrieves the display name of the function * - * @param[in] pModel - Model instance. - * @param[in] nUniqueResourceID - UniqueResourceID - * @param[out] pMultiPropertyGroupInstance - returns the MultiPropertyGroup instance + * @param[in] pFunction - Function instance. + * @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) + * @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL * @return error code or 0 (success) *) - TLib3MFModel_GetMultiPropertyGroupByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pMultiPropertyGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFFunction_GetDisplayNameFunc = function(pFunction: TLib3MFHandle; const nDisplayNameBufferSize: Cardinal; out pDisplayNameNeededChars: Cardinal; pDisplayNameBuffer: PAnsiChar): TLib3MFResult; cdecl; (** - * finds a mesh object by its UniqueResourceID + * Sets the display name of the function * - * @param[in] pModel - Model instance. - * @param[in] nUniqueResourceID - UniqueResourceID - * @param[out] pMeshObjectInstance - returns the mesh object instance + * @param[in] pFunction - Function instance. + * @param[in] pDisplayName - the display name * @return error code or 0 (success) *) - TLib3MFModel_GetMeshObjectByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pMeshObjectInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFFunction_SetDisplayNameFunc = function(pFunction: TLib3MFHandle; const pDisplayName: PAnsiChar): TLib3MFResult; cdecl; (** - * finds a components object by its UniqueResourceID + * Add an input * - * @param[in] pModel - Model instance. - * @param[in] nUniqueResourceID - UniqueResourceID - * @param[out] pComponentsObjectInstance - returns the components object instance + * @param[in] pFunction - Function instance. + * @param[in] pIdentifier - the identifier of the input + * @param[in] pDisplayName - the display name of the input + * @param[in] eType - the type of the input + * @param[out] pPort - The added input port * @return error code or 0 (success) *) - TLib3MFModel_GetComponentsObjectByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pComponentsObjectInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFFunction_AddInputFunc = function(pFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const eType: Integer; out pPort: TLib3MFHandle): TLib3MFResult; cdecl; (** - * finds a model color group by its UniqueResourceID + * Retrieves the inputs * - * @param[in] pModel - Model instance. - * @param[in] nUniqueResourceID - UniqueResourceID - * @param[out] pColorGroupInstance - returns the ColorGroup instance + * @param[in] pFunction - Function instance. + * @param[out] pIterator - iterator for the list of inputs * @return error code or 0 (success) *) - TLib3MFModel_GetColorGroupByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pColorGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFFunction_GetInputsFunc = function(pFunction: TLib3MFHandle; out pIterator: TLib3MFHandle): TLib3MFResult; cdecl; (** - * finds a model slicestack by its UniqueResourceID + * Removes an input * - * @param[in] pModel - Model instance. - * @param[in] nUniqueResourceID - UniqueResourceID - * @param[out] pSliceStacInstance - returns the slicestack instance + * @param[in] pFunction - Function instance. + * @param[in] pInput - The input to be removed * @return error code or 0 (success) *) - TLib3MFModel_GetSliceStackByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pSliceStacInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFFunction_RemoveInputFunc = function(pFunction: TLib3MFHandle; const pInput: TLib3MFHandle): TLib3MFResult; cdecl; (** - * returns, whether a build has a UUID and, if true, the build's UUID + * Add an output * - * @param[in] pModel - Model instance. - * @param[out] pHasUUID - flag whether the build has a UUID - * @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) - * @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL + * @param[in] pFunction - Function instance. + * @param[in] pIdentifier - the identifier of the output + * @param[in] pDisplayName - the display name of the output + * @param[in] eType - the type of the input + * @param[out] pPort - The added input port * @return error code or 0 (success) *) - TLib3MFModel_GetBuildUUIDFunc = function(pModel: TLib3MFHandle; out pHasUUID: Byte; const nUUIDBufferSize: Cardinal; out pUUIDNeededChars: Cardinal; pUUIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFFunction_AddOutputFunc = function(pFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const eType: Integer; out pPort: TLib3MFHandle): TLib3MFResult; cdecl; (** - * sets the build's UUID + * Retrieves the outputs * - * @param[in] pModel - Model instance. - * @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + * @param[in] pFunction - Function instance. + * @param[out] pIterator - iterator for the outputs * @return error code or 0 (success) *) - TLib3MFModel_SetBuildUUIDFunc = function(pModel: TLib3MFHandle; const pUUID: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFFunction_GetOutputsFunc = function(pFunction: TLib3MFHandle; out pIterator: TLib3MFHandle): TLib3MFResult; cdecl; (** - * creates a build item iterator instance with all build items. + * Removes an output * - * @param[in] pModel - Model instance. - * @param[out] pBuildItemIterator - returns the iterator instance. + * @param[in] pFunction - Function instance. + * @param[in] pOutput - The output to be removed * @return error code or 0 (success) *) - TLib3MFModel_GetBuildItemsFunc = function(pModel: TLib3MFHandle; out pBuildItemIterator: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFFunction_RemoveOutputFunc = function(pFunction: TLib3MFHandle; const pOutput: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Returns the outbox of a Model + * Retrieves an input * - * @param[in] pModel - Model instance. - * @param[out] pOutbox - Outbox of this Model + * @param[in] pFunction - Function instance. + * @param[in] pIdentifier - the identifier of the input + * @param[out] pInput - the input port * @return error code or 0 (success) *) - TLib3MFModel_GetOutboxFunc = function(pModel: TLib3MFHandle; pOutbox: PLib3MFBox): TLib3MFResult; cdecl; + TLib3MFFunction_FindInputFunc = function(pFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; out pInput: TLib3MFHandle): TLib3MFResult; cdecl; (** - * creates a resource iterator instance with all resources. + * Retrieves an output * - * @param[in] pModel - Model instance. - * @param[out] pResourceIterator - returns the iterator instance. + * @param[in] pFunction - Function instance. + * @param[in] pIdentifier - the identifier of the output + * @param[out] pOutput - the output port * @return error code or 0 (success) *) - TLib3MFModel_GetResourcesFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFFunction_FindOutputFunc = function(pFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; out pOutput: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Function type definitions for ImplicitFunction +**************************************************************************************************************************) + (** - * creates a resource iterator instance with all object resources. + * Retrieves the identifier of the function * - * @param[in] pModel - Model instance. - * @param[out] pResourceIterator - returns the iterator instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) + * @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL * @return error code or 0 (success) *) - TLib3MFModel_GetObjectsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_GetIdentifierFunc = function(pImplicitFunction: TLib3MFHandle; const nIdentifierBufferSize: Cardinal; out pIdentifierNeededChars: Cardinal; pIdentifierBuffer: PAnsiChar): TLib3MFResult; cdecl; (** - * creates a resource iterator instance with all mesh object resources. + * Sets the identifier of the function * - * @param[in] pModel - Model instance. - * @param[out] pResourceIterator - returns the iterator instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier * @return error code or 0 (success) *) - TLib3MFModel_GetMeshObjectsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_SetIdentifierFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar): TLib3MFResult; cdecl; (** - * creates a resource iterator instance with all components object resources. + * Add a node * - * @param[in] pModel - Model instance. - * @param[out] pResourceIterator - returns the iterator instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] eNodeType - the type of the node + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_GetComponentsObjectsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddNodeFunc = function(pImplicitFunction: TLib3MFHandle; const eNodeType: Integer; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * creates a Texture2DIterator instance with all texture2d resources. + * Add a SinNode * - * @param[in] pModel - Model instance. - * @param[out] pResourceIterator - returns the iterator instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_GetTexture2DsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddSinNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * creates a BaseMaterialGroupIterator instance with all base material resources. + * Add a CosNode * - * @param[in] pModel - Model instance. - * @param[out] pResourceIterator - returns the iterator instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_GetBaseMaterialGroupsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddCosNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * creates a ColorGroupIterator instance with all ColorGroup resources. + * Add a TanNode * - * @param[in] pModel - Model instance. - * @param[out] pResourceIterator - returns the iterator instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_GetColorGroupsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddTanNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * creates a Texture2DGroupIterator instance with all base material resources. + * Add a ArcSinNode * - * @param[in] pModel - Model instance. - * @param[out] pResourceIterator - returns the iterator instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_GetTexture2DGroupsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddArcSinNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * creates a CompositeMaterialsIterator instance with all CompositeMaterials resources. + * Add a ArcCosNode * - * @param[in] pModel - Model instance. - * @param[out] pResourceIterator - returns the iterator instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_GetCompositeMaterialsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddArcCosNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * creates a MultiPropertyGroupsIterator instance with all MultiPropertyGroup resources. + * Add a ArcTan2Node * - * @param[in] pModel - Model instance. - * @param[out] pResourceIterator - returns the iterator instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_GetMultiPropertyGroupsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddArcTan2NodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * creates a resource iterator instance with all slice stack resources. + * Add a SinhNode * - * @param[in] pModel - Model instance. - * @param[out] pResourceIterator - returns the iterator instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_GetSliceStacksFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddSinhNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. + * Add a CoshNode * - * @param[in] pModel - Model instance. - * @param[out] pMergedModelInstance - returns the merged model instance + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_MergeToModelFunc = function(pModel: TLib3MFHandle; out pMergedModelInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddCoshNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * adds an empty mesh object to the model. + * Add a TanhNode * - * @param[in] pModel - Model instance. - * @param[out] pMeshObjectInstance - returns the mesh object instance + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_AddMeshObjectFunc = function(pModel: TLib3MFHandle; out pMeshObjectInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddTanhNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * adds an empty component object to the model. + * Add a RoundNode * - * @param[in] pModel - Model instance. - * @param[out] pComponentsObjectInstance - returns the components object instance + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_AddComponentsObjectFunc = function(pModel: TLib3MFHandle; out pComponentsObjectInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddRoundNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * creates a new model slicestack by its id + * Add a CeilNode * - * @param[in] pModel - Model instance. - * @param[in] dZBottom - Bottom Z value of the slicestack - * @param[out] pSliceStackInstance - returns the new slicestack instance + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_AddSliceStackFunc = function(pModel: TLib3MFHandle; const dZBottom: Double; out pSliceStackInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddCeilNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * adds a texture2d resource to the model. Its path is given by that of an existing attachment. + * Add a FloorNode * - * @param[in] pModel - Model instance. - * @param[in] pTextureAttachment - attachment containing the image data. - * @param[out] pTexture2DInstance - returns the new texture instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_AddTexture2DFromAttachmentFunc = function(pModel: TLib3MFHandle; const pTextureAttachment: TLib3MFHandle; out pTexture2DInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddFloorNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * adds an empty BaseMaterialGroup resource to the model. + * Add a SignNode * - * @param[in] pModel - Model instance. - * @param[out] pBaseMaterialGroupInstance - returns the new base material instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_AddBaseMaterialGroupFunc = function(pModel: TLib3MFHandle; out pBaseMaterialGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddSignNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * adds an empty ColorGroup resource to the model. + * Add a FractNode * - * @param[in] pModel - Model instance. - * @param[out] pColorGroupInstance - returns the new ColorGroup instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_AddColorGroupFunc = function(pModel: TLib3MFHandle; out pColorGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddFractNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * adds an empty Texture2DGroup resource to the model. + * Add a AbsNode * - * @param[in] pModel - Model instance. - * @param[in] pTexture2DInstance - The texture2D instance of the created Texture2DGroup. - * @param[out] pTexture2DGroupInstance - returns the new Texture2DGroup instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_AddTexture2DGroupFunc = function(pModel: TLib3MFHandle; const pTexture2DInstance: TLib3MFHandle; out pTexture2DGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddAbsNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * adds an empty CompositeMaterials resource to the model. + * Add a ExpNode * - * @param[in] pModel - Model instance. - * @param[in] pBaseMaterialGroupInstance - The BaseMaterialGroup instance of the created CompositeMaterials. - * @param[out] pCompositeMaterialsInstance - returns the new CompositeMaterials instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_AddCompositeMaterialsFunc = function(pModel: TLib3MFHandle; const pBaseMaterialGroupInstance: TLib3MFHandle; out pCompositeMaterialsInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddExpNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * adds an empty MultiPropertyGroup resource to the model. + * Add a LogNode * - * @param[in] pModel - Model instance. - * @param[out] pMultiPropertyGroupInstance - returns the new MultiPropertyGroup instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_AddMultiPropertyGroupFunc = function(pModel: TLib3MFHandle; out pMultiPropertyGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddLogNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * adds a build item to the model. + * Add a Log2Node * - * @param[in] pModel - Model instance. - * @param[in] pObject - Object instance. - * @param[in] pTransform - Transformation matrix. - * @param[out] pBuildItemInstance - returns the build item instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_AddBuildItemFunc = function(pModel: TLib3MFHandle; const pObject: TLib3MFHandle; const pTransform: PLib3MFTransform; out pBuildItemInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddLog2NodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * removes a build item from the model + * Add a Log10Node * - * @param[in] pModel - Model instance. - * @param[in] pBuildItemInstance - Build item to remove. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_RemoveBuildItemFunc = function(pModel: TLib3MFHandle; const pBuildItemInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddLog10NodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Returns the metadata of the model as MetaDataGroup + * Add a LengthNode * - * @param[in] pModel - Model instance. - * @param[out] pTheMetaDataGroup - returns an Instance of the metadatagroup of the model + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_GetMetaDataGroupFunc = function(pModel: TLib3MFHandle; out pTheMetaDataGroup: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddLengthNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * adds an attachment stream to the model. The OPC part will be related to the model stream with a certain relationship type. + * Add a TransposeNode * - * @param[in] pModel - Model instance. - * @param[in] pURI - Path of the attachment - * @param[in] pRelationShipType - Relationship type of the attachment - * @param[out] pAttachmentInstance - Instance of the attachment object + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_AddAttachmentFunc = function(pModel: TLib3MFHandle; const pURI: PAnsiChar; const pRelationShipType: PAnsiChar; out pAttachmentInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddTransposeNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Removes attachment from the model. + * Add a InverseNode * - * @param[in] pModel - Model instance. - * @param[in] pAttachmentInstance - Attachment instance to remove + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_RemoveAttachmentFunc = function(pModel: TLib3MFHandle; const pAttachmentInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_InverseNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * retrieves an attachment stream object from the model.. + * Add a SqrtNode * - * @param[in] pModel - Model instance. - * @param[in] nIndex - Index of the attachment stream - * @param[out] pAttachmentInstance - Instance of the attachment object + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_GetAttachmentFunc = function(pModel: TLib3MFHandle; const nIndex: Cardinal; out pAttachmentInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddSqrtNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * retrieves an attachment stream object from the model. + * Add a ResourceIdNode * - * @param[in] pModel - Model instance. - * @param[in] pURI - Path URI in the package - * @param[out] pAttachmentInstance - Instance of the attachment object + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_FindAttachmentFunc = function(pModel: TLib3MFHandle; const pURI: PAnsiChar; out pAttachmentInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddResourceIdNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * retrieves the number of attachments of the model. + * Add an AdditionNode * - * @param[in] pModel - Model instance. - * @param[out] pAttachmentCount - Returns the number of attachments. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_GetAttachmentCountFunc = function(pModel: TLib3MFHandle; out pAttachmentCount: Cardinal): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddAdditionNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Retrieve whether the OPC package contains a package thumbnail. + * Add a SubtractionNode * - * @param[in] pModel - Model instance. - * @param[out] pHasThumbnail - returns whether the OPC package contains a package thumbnail + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_HasPackageThumbnailAttachmentFunc = function(pModel: TLib3MFHandle; out pHasThumbnail: Byte): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddSubtractionNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Create a new or the existing package thumbnail for the OPC package. + * Add a MultiplicationNode * - * @param[in] pModel - Model instance. - * @param[out] pAttachment - Instance of a new or the existing thumbnailattachment object. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_CreatePackageThumbnailAttachmentFunc = function(pModel: TLib3MFHandle; out pAttachment: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddMultiplicationNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Get the attachment to the OPC package containing the package thumbnail. + * Add a DivisionNode * - * @param[in] pModel - Model instance. - * @param[out] pAttachment - Instance of the thumbnailattachment object or NULL. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_GetPackageThumbnailAttachmentFunc = function(pModel: TLib3MFHandle; out pAttachment: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddDivisionNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Remove the attachment to the OPC package containing the package thumbnail. + * Add a DotNode * - * @param[in] pModel - Model instance. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_RemovePackageThumbnailAttachmentFunc = function(pModel: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddDotNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Adds a new Content Type to the model. + * Add a CrossNode * - * @param[in] pModel - Model instance. - * @param[in] pExtension - File Extension - * @param[in] pContentType - Content Type Identifier + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_AddCustomContentTypeFunc = function(pModel: TLib3MFHandle; const pExtension: PAnsiChar; const pContentType: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddCrossNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Removes a custom Content Type from the model (UTF8 version). + * Add a MatVecMultiplicationNode * - * @param[in] pModel - Model instance. - * @param[in] pExtension - File Extension + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_RemoveCustomContentTypeFunc = function(pModel: TLib3MFHandle; const pExtension: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddMatVecMultiplicationNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Sets the random number generator callback for use in the library + * Add a MinNode * - * @param[in] pModel - Model instance. - * @param[in] pTheCallback - The callback used to generate random numbers - * @param[in] pUserData - Userdata to be passed to the callback function + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_SetRandomNumberCallbackFunc = function(pModel: TLib3MFHandle; const pTheCallback: PLib3MF_RandomNumberCallback; const pUserData: Pointer): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddMinNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Gets the keystore associated with this model + * Add a MaxNode * - * @param[in] pModel - Model instance. - * @param[out] pKeyStore - The package keystore + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFModel_GetKeyStoreFunc = function(pModel: TLib3MFHandle; out pKeyStore: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddMaxNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; -(************************************************************************************************************************* - Global function definitions -**************************************************************************************************************************) - (** - * retrieves the binary version of this library. + * Add a FmodNode * - * @param[out] pMajor - returns the major version of this library - * @param[out] pMinor - returns the minor version of this library - * @param[out] pMicro - returns the micro version of this library + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFGetLibraryVersionFunc = function(out pMajor: Cardinal; out pMinor: Cardinal; out pMicro: Cardinal): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddFmodNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * retrieves prerelease information of this library. + * Add a PowNode * - * @param[out] pHasPrereleaseInfo - Does the library provide prerelease version? - * @param[in] nPrereleaseInfoBufferSize - size of the buffer (including trailing 0) - * @param[out] pPrereleaseInfoNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pPrereleaseInfoBuffer - buffer of retrieves prerelease information of this library., may be NULL + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFGetPrereleaseInformationFunc = function(out pHasPrereleaseInfo: Byte; const nPrereleaseInfoBufferSize: Cardinal; out pPrereleaseInfoNeededChars: Cardinal; pPrereleaseInfoBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddPowNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * retrieves build information of this library. + * Add a SelectNode * - * @param[out] pHasBuildInfo - Does the library provide build version? - * @param[in] nBuildInformationBufferSize - size of the buffer (including trailing 0) - * @param[out] pBuildInformationNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pBuildInformationBuffer - buffer of retrieves build information of this library., may be NULL + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFGetBuildInformationFunc = function(out pHasBuildInfo: Byte; const nBuildInformationBufferSize: Cardinal; out pBuildInformationNeededChars: Cardinal; pBuildInformationBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddSelectNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * retrieves whether a specification is supported, and if so, which version. + * Add a ClampNode * - * @param[in] pSpecificationURL - URL of extension to check - * @param[out] pIsSupported - returns whether this specification is supported - * @param[out] pMajor - returns the major version of the extension (if IsSupported) - * @param[out] pMinor - returns the minor version of the extension (if IsSupported) - * @param[out] pMicro - returns the micro version of the extension (if IsSupported) + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFGetSpecificationVersionFunc = function(const pSpecificationURL: PAnsiChar; out pIsSupported: Byte; out pMajor: Cardinal; out pMinor: Cardinal; out pMicro: Cardinal): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddClampNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const eConfiguration: Integer; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * creates an empty model instance. + * Add a ComposeVectorNode * - * @param[out] pModel - returns an empty model instance + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFCreateModelFunc = function(out pModel: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddComposeVectorNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * releases shared ownership of an object instance + * Add a VectorFromScalar * - * @param[in] pInstance - the object instance to release + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFReleaseFunc = function(const pInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddVectorFromScalarNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * acquires shared ownership of an object instance + * Add a DecomposeVectorNode * - * @param[in] pInstance - the object instance to acquire + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFAcquireFunc = function(const pInstance: TLib3MFHandle): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddDecomposeVectorNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Sets the journal file path + * Add a ComposeMatrixNode * - * @param[in] pJournalPath - File name of the journal file + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFSetJournalFunc = function(const pJournalPath: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddComposeMatrixNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Retrieves the last error string of an instance + * Add a MatrixFromRowsNode * - * @param[in] pInstance - Object where the error occured. - * @param[in] nLastErrorStringBufferSize - size of the buffer (including trailing 0) - * @param[out] pLastErrorStringNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pLastErrorStringBuffer - buffer of Last Error String, may be NULL - * @param[out] pHasLastError - Returns if the instance has a last error. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFGetLastErrorFunc = function(const pInstance: TLib3MFHandle; const nLastErrorStringBufferSize: Cardinal; out pLastErrorStringNeededChars: Cardinal; pLastErrorStringBuffer: PAnsiChar; out pHasLastError: Byte): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddMatrixFromRowsNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Returns the address of the SymbolLookupMethod + * Add a MatrixFromColumnsNode * - * @param[out] pSymbolLookupMethod - Address of the SymbolAddressMethod + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFGetSymbolLookupMethodFunc = function(out pSymbolLookupMethod: Pointer): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddMatrixFromColumnsNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Return an English text for a progress identifier.|Note: this is the only function you can call from your callback function. + * Add a ConstantNode * - * @param[in] eTheProgressIdentifier - the progress identifier that is passed to the callback function - * @param[in] nProgressMessageBufferSize - size of the buffer (including trailing 0) - * @param[out] pProgressMessageNeededChars - will be filled with the count of the written bytes, or needed buffer size. - * @param[out] pProgressMessageBuffer - buffer of English text for the progress identifier, may be NULL + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFRetrieveProgressMessageFunc = function(const eTheProgressIdentifier: Integer; const nProgressMessageBufferSize: Cardinal; out pProgressMessageNeededChars: Cardinal; pProgressMessageBuffer: PAnsiChar): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddConstantNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Creates a Color from uint8 RGBA values + * Add a ConstVecNode * - * @param[in] nRed - Red value of color (0-255) - * @param[in] nGreen - Green value of color (0-255) - * @param[in] nBlue - Blue value of color (0-255) - * @param[in] nAlpha - Alpha value of color (0-255) - * @param[out] pTheColor - Assembled color + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFRGBAToColorFunc = function(const nRed: Byte; const nGreen: Byte; const nBlue: Byte; const nAlpha: Byte; pTheColor: PLib3MFColor): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddConstVecNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Creates a Color from uint8 RGBA values + * Add a ConstMatNode * - * @param[in] fRed - Red value of color (0-1) - * @param[in] fGreen - Green value of color (0-1) - * @param[in] fBlue - Blue value of color (0-1) - * @param[in] fAlpha - Alpha value of color (0-1) - * @param[out] pTheColor - Assembled color + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFFloatRGBAToColorFunc = function(const fRed: Single; const fGreen: Single; const fBlue: Single; const fAlpha: Single; pTheColor: PLib3MFColor): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddConstMatNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Calculates uint8-RGBA-values from a Color + * Add a MeshNode * - * @param[in] pTheColor - Color to handle - * @param[out] pRed - Red value of color (0-255) - * @param[out] pGreen - Green value of color (0-255) - * @param[out] pBlue - Blue value of color (0-255) - * @param[out] pAlpha - Alpha value of color (0-255) + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFColorToRGBAFunc = function(const pTheColor: PLib3MFColor; out pRed: Byte; out pGreen: Byte; out pBlue: Byte; out pAlpha: Byte): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddMeshNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Calculates float-RGBA-values from a Color + * Add a UnsignedMeshNode * - * @param[in] pTheColor - Color to handle - * @param[out] pRed - Red value of color (0-1) - * @param[out] pGreen - Green value of color (0-1) - * @param[out] pBlue - Blue value of color (0-1) - * @param[out] pAlpha - Alpha value of color (0-1) + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFColorToFloatRGBAFunc = function(const pTheColor: PLib3MFColor; out pRed: Single; out pGreen: Single; out pBlue: Single; out pAlpha: Single): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddUnsignedMeshNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Creates an identity transform + * Add a FunctionCallNode * - * @param[out] pTransform - Transformation matrix. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pIdentifier - the identifier of the node + * @param[in] pDisplayName - the display name of the node + * @param[in] pTag - the tag of the node + * @param[out] pNode - the added node * @return error code or 0 (success) *) - TLib3MFGetIdentityTransformFunc = function(pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddFunctionCallNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pIdentifier: PAnsiChar; const pDisplayName: PAnsiChar; const pTag: PAnsiChar; out pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Creates a uniform scale transform + * Retrieves the nodes * - * @param[in] fFactor - Factor in X, Y and Z - * @param[out] pTransform - Transformation matrix. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[out] pIterator - iterator for the list of nodes * @return error code or 0 (success) *) - TLib3MFGetUniformScaleTransformFunc = function(const fFactor: Single; pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_GetNodesFunc = function(pImplicitFunction: TLib3MFHandle; out pIterator: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Creates a scale transform + * Removes a node * - * @param[in] fFactorX - Factor in X - * @param[in] fFactorY - Factor in Y - * @param[in] fFactorZ - Factor in Z - * @param[out] pTransform - Transformation matrix. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pNode - The node to be removed * @return error code or 0 (success) *) - TLib3MFGetScaleTransformFunc = function(const fFactorX: Single; const fFactorY: Single; const fFactorZ: Single; pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_RemoveNodeFunc = function(pImplicitFunction: TLib3MFHandle; const pNode: TLib3MFHandle): TLib3MFResult; cdecl; (** - * Creates an translation transform + * Add a link * - * @param[in] fVectorX - Translation in X - * @param[in] fVectorY - Translation in Y - * @param[in] fVectorZ - Translation in Z - * @param[out] pTransform - Transformation matrix. + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pSource - the source port + * @param[in] pTarget - the target port * @return error code or 0 (success) *) - TLib3MFGetTranslationTransformFunc = function(const fVectorX: Single; const fVectorY: Single; const fVectorZ: Single; pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + TLib3MFImplicitFunction_AddLinkFunc = function(pImplicitFunction: TLib3MFHandle; const pSource: TLib3MFHandle; const pTarget: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Add a link + * + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @param[in] pSource - name of the source port in the format nodename.portname + * @param[in] pTarget - name of the target port in the format nodename.portname + * @return error code or 0 (success) + *) + TLib3MFImplicitFunction_AddLinkByNamesFunc = function(pImplicitFunction: TLib3MFHandle; const pSource: PAnsiChar; const pTarget: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Clears the function + * + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @return error code or 0 (success) + *) + TLib3MFImplicitFunction_ClearFunc = function(pImplicitFunction: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Sorts the nodes topologically + * + * @param[in] pImplicitFunction - ImplicitFunction instance. + * @return error code or 0 (success) + *) + TLib3MFImplicitFunction_SortNodesTopologicallyFunc = function(pImplicitFunction: TLib3MFHandle): TLib3MFResult; cdecl; (************************************************************************************************************************* - Helper function pointer definitions -**************************************************************************************************************************) -TLib3MFSymbolLookupMethod = function(const pSymbolName: PAnsiChar; out pValue: Pointer): TLib3MFResult; cdecl; - -(************************************************************************************************************************* - Exception definition -**************************************************************************************************************************) - - ELib3MFException = class(Exception) - private - FErrorCode: TLib3MFResult; - FCustomMessage: String; - public - property ErrorCode: TLib3MFResult read FErrorCode; - property CustomMessage: String read FCustomMessage; - constructor Create(AErrorCode: TLib3MFResult; AMessage: String); - constructor CreateCustomMessage(AErrorCode: TLib3MFResult; AMessage: String); - end; - - -(************************************************************************************************************************* - Class definition for Base -**************************************************************************************************************************) - - TLib3MFBase = class(TObject) - private - FWrapper: TLib3MFWrapper; - FHandle: TLib3MFHandle; - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - property TheHandle: TLib3MFHandle read FHandle; - function ClassTypeId(): QWord; - end; - - -(************************************************************************************************************************* - Class definition for Writer -**************************************************************************************************************************) - - TLib3MFWriter = class(TLib3MFBase) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - procedure WriteToFile(const AFilename: String); - function GetStreamSize(): QWord; - procedure WriteToBuffer(out ABuffer: TByteDynArray); - procedure WriteToCallback(const ATheWriteCallback: PLib3MF_WriteCallback; const ATheSeekCallback: PLib3MF_SeekCallback; const AUserData: Pointer); - procedure SetProgressCallback(const AProgressCallback: PLib3MF_ProgressCallback; const AUserData: Pointer); - function GetDecimalPrecision(): Cardinal; - procedure SetDecimalPrecision(const ADecimalPrecision: Cardinal); - procedure SetStrictModeActive(const AStrictModeActive: Boolean); - function GetStrictModeActive(): Boolean; - function GetWarning(const AIndex: Cardinal; out AErrorCode: Cardinal): String; - function GetWarningCount(): Cardinal; - procedure AddKeyWrappingCallback(const AConsumerID: String; const ATheCallback: PLib3MF_KeyWrappingCallback; const AUserData: Pointer); - procedure SetContentEncryptionCallback(const ATheCallback: PLib3MF_ContentEncryptionCallback; const AUserData: Pointer); - end; - - -(************************************************************************************************************************* - Class definition for Reader -**************************************************************************************************************************) - - TLib3MFReader = class(TLib3MFBase) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - procedure ReadFromFile(const AFilename: String); - procedure ReadFromBuffer(const ABuffer: TByteDynArray); - procedure ReadFromCallback(const ATheReadCallback: PLib3MF_ReadCallback; const AStreamSize: QWord; const ATheSeekCallback: PLib3MF_SeekCallback; const AUserData: Pointer); - procedure SetProgressCallback(const AProgressCallback: PLib3MF_ProgressCallback; const AUserData: Pointer); - procedure AddRelationToRead(const ARelationShipType: String); - procedure RemoveRelationToRead(const ARelationShipType: String); - procedure SetStrictModeActive(const AStrictModeActive: Boolean); - function GetStrictModeActive(): Boolean; - function GetWarning(const AIndex: Cardinal; out AErrorCode: Cardinal): String; - function GetWarningCount(): Cardinal; - procedure AddKeyWrappingCallback(const AConsumerID: String; const ATheCallback: PLib3MF_KeyWrappingCallback; const AUserData: Pointer); - procedure SetContentEncryptionCallback(const ATheCallback: PLib3MF_ContentEncryptionCallback; const AUserData: Pointer); - end; - - -(************************************************************************************************************************* - Class definition for PackagePart -**************************************************************************************************************************) - - TLib3MFPackagePart = class(TLib3MFBase) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetPath(): String; - procedure SetPath(const APath: String); - end; - - -(************************************************************************************************************************* - Class definition for Resource + Function type definitions for FunctionFromImage3D **************************************************************************************************************************) - TLib3MFResource = class(TLib3MFBase) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetResourceID(): Cardinal; - function GetUniqueResourceID(): Cardinal; - function PackagePart(): TLib3MFPackagePart; - procedure SetPackagePart(const APackagePart: TLib3MFPackagePart); - function GetModelResourceID(): Cardinal; - end; - + (** + * Returns the selected 3D image. + * + * @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. + * @param[out] pImage3D - image instance + * @return error code or 0 (success) + *) + TLib3MFFunctionFromImage3D_GetImage3DFunc = function(pFunctionFromImage3D: TLib3MFHandle; out pImage3D: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Sets the 3D image of the selector. + * + * @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. + * @param[in] pImage3D - image instance + * @return error code or 0 (success) + *) + TLib3MFFunctionFromImage3D_SetImage3DFunc = function(pFunctionFromImage3D: TLib3MFHandle; const pImage3D: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Sets the texture filter of the selector. + * + * @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. + * @param[in] eFilter - texture filter + * @return error code or 0 (success) + *) + TLib3MFFunctionFromImage3D_SetFilterFunc = function(pFunctionFromImage3D: TLib3MFHandle; const eFilter: Integer): TLib3MFResult; cdecl; + + (** + * Returns the texture filter of the selector. + * + * @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. + * @param[out] pFilter - texture filter + * @return error code or 0 (success) + *) + TLib3MFFunctionFromImage3D_GetFilterFunc = function(pFunctionFromImage3D: TLib3MFHandle; out pFilter: Integer): TLib3MFResult; cdecl; + + (** + * Sets the tile styles of the selector. + * + * @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. + * @param[in] eTileStyleU - tile style in U + * @param[in] eTileStyleV - tile style in V + * @param[in] eTileStyleW - tile style in W + * @return error code or 0 (success) + *) + TLib3MFFunctionFromImage3D_SetTileStylesFunc = function(pFunctionFromImage3D: TLib3MFHandle; const eTileStyleU: Integer; const eTileStyleV: Integer; const eTileStyleW: Integer): TLib3MFResult; cdecl; + + (** + * Retrieves the tile styles of the selector. + * + * @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. + * @param[out] pTileStyleU - tile style in U + * @param[out] pTileStyleV - tile style in V + * @param[out] pTileStyleW - tile style in W + * @return error code or 0 (success) + *) + TLib3MFFunctionFromImage3D_GetTileStylesFunc = function(pFunctionFromImage3D: TLib3MFHandle; out pTileStyleU: Integer; out pTileStyleV: Integer; out pTileStyleW: Integer): TLib3MFResult; cdecl; + + (** + * returns the offset value for the pixel values in the Image3D + * + * @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. + * @param[out] pOffset - the offset value for the pixel values in the Image3D + * @return error code or 0 (success) + *) + TLib3MFFunctionFromImage3D_GetOffsetFunc = function(pFunctionFromImage3D: TLib3MFHandle; out pOffset: Double): TLib3MFResult; cdecl; + + (** + * Sets the offset value for the pixel values in the Image3D + * + * @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. + * @param[in] dOffset - the offset value for the pixel values in the Image3D + * @return error code or 0 (success) + *) + TLib3MFFunctionFromImage3D_SetOffsetFunc = function(pFunctionFromImage3D: TLib3MFHandle; const dOffset: Double): TLib3MFResult; cdecl; + + (** + * returns the scale value for the pixel values in the Image3D + * + * @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. + * @param[out] pScale - the scale value for the pixel values in the Image3D + * @return error code or 0 (success) + *) + TLib3MFFunctionFromImage3D_GetScaleFunc = function(pFunctionFromImage3D: TLib3MFHandle; out pScale: Double): TLib3MFResult; cdecl; + + (** + * Sets the scale value for the pixel values in the Image3D + * + * @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. + * @param[in] dScale - the scale value for the pixel values in the Image3D + * @return error code or 0 (success) + *) + TLib3MFFunctionFromImage3D_SetScaleFunc = function(pFunctionFromImage3D: TLib3MFHandle; const dScale: Double): TLib3MFResult; cdecl; + (************************************************************************************************************************* - Class definition for ResourceIterator + Function type definitions for BuildItem **************************************************************************************************************************) - TLib3MFResourceIterator = class(TLib3MFBase) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function MoveNext(): Boolean; - function MovePrevious(): Boolean; - function GetCurrent(): TLib3MFResource; - function Clone(): TLib3MFResourceIterator; - function Count(): QWord; - end; - - -(************************************************************************************************************************* - Class definition for SliceStackIterator -**************************************************************************************************************************) - - TLib3MFSliceStackIterator = class(TLib3MFResourceIterator) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetCurrentSliceStack(): TLib3MFSliceStack; - end; - - -(************************************************************************************************************************* - Class definition for ObjectIterator -**************************************************************************************************************************) - - TLib3MFObjectIterator = class(TLib3MFResourceIterator) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetCurrentObject(): TLib3MFObject; - end; - - -(************************************************************************************************************************* - Class definition for MeshObjectIterator -**************************************************************************************************************************) - - TLib3MFMeshObjectIterator = class(TLib3MFResourceIterator) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetCurrentMeshObject(): TLib3MFMeshObject; - end; - - -(************************************************************************************************************************* - Class definition for ComponentsObjectIterator -**************************************************************************************************************************) - - TLib3MFComponentsObjectIterator = class(TLib3MFResourceIterator) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetCurrentComponentsObject(): TLib3MFComponentsObject; - end; - - -(************************************************************************************************************************* - Class definition for Texture2DIterator -**************************************************************************************************************************) - - TLib3MFTexture2DIterator = class(TLib3MFResourceIterator) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetCurrentTexture2D(): TLib3MFTexture2D; - end; - - -(************************************************************************************************************************* - Class definition for BaseMaterialGroupIterator -**************************************************************************************************************************) - - TLib3MFBaseMaterialGroupIterator = class(TLib3MFResourceIterator) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetCurrentBaseMaterialGroup(): TLib3MFBaseMaterialGroup; - end; - - -(************************************************************************************************************************* - Class definition for ColorGroupIterator -**************************************************************************************************************************) - - TLib3MFColorGroupIterator = class(TLib3MFResourceIterator) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetCurrentColorGroup(): TLib3MFColorGroup; - end; - + (** + * Retrieves the object resource associated to a build item + * + * @param[in] pBuildItem - BuildItem instance. + * @param[out] pObjectResource - returns the associated resource instance + * @return error code or 0 (success) + *) + TLib3MFBuildItem_GetObjectResourceFunc = function(pBuildItem: TLib3MFHandle; out pObjectResource: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * returns, whether a build item has a UUID and, if true, the build item's UUID + * + * @param[in] pBuildItem - BuildItem instance. + * @param[out] pHasUUID - flag whether the build item has a UUID + * @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) + * @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL + * @return error code or 0 (success) + *) + TLib3MFBuildItem_GetUUIDFunc = function(pBuildItem: TLib3MFHandle; out pHasUUID: Byte; const nUUIDBufferSize: Cardinal; out pUUIDNeededChars: Cardinal; pUUIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * sets the build item's UUID + * + * @param[in] pBuildItem - BuildItem instance. + * @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + * @return error code or 0 (success) + *) + TLib3MFBuildItem_SetUUIDFunc = function(pBuildItem: TLib3MFHandle; const pUUID: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Retrieves the object UniqueResourceID associated to a build item + * + * @param[in] pBuildItem - BuildItem instance. + * @param[out] pUniqueResourceID - returns the UniqueResourceID of the object + * @return error code or 0 (success) + *) + TLib3MFBuildItem_GetObjectResourceIDFunc = function(pBuildItem: TLib3MFHandle; out pUniqueResourceID: Cardinal): TLib3MFResult; cdecl; + + (** + * Checks, if a build item has a non-identity transformation matrix + * + * @param[in] pBuildItem - BuildItem instance. + * @param[out] pHasTransform - returns true, if the transformation matrix is not the identity + * @return error code or 0 (success) + *) + TLib3MFBuildItem_HasObjectTransformFunc = function(pBuildItem: TLib3MFHandle; out pHasTransform: Byte): TLib3MFResult; cdecl; + + (** + * Retrieves a build item's transformation matrix. + * + * @param[in] pBuildItem - BuildItem instance. + * @param[out] pTransform - returns the transformation matrix + * @return error code or 0 (success) + *) + TLib3MFBuildItem_GetObjectTransformFunc = function(pBuildItem: TLib3MFHandle; pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + + (** + * Sets a build item's transformation matrix. + * + * @param[in] pBuildItem - BuildItem instance. + * @param[in] pTransform - new transformation matrix + * @return error code or 0 (success) + *) + TLib3MFBuildItem_SetObjectTransformFunc = function(pBuildItem: TLib3MFHandle; const pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + + (** + * Retrieves a build item's part number string + * + * @param[in] pBuildItem - BuildItem instance. + * @param[in] nPartNumberBufferSize - size of the buffer (including trailing 0) + * @param[out] pPartNumberNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pPartNumberBuffer - buffer of Returns a build item's part number string, may be NULL + * @return error code or 0 (success) + *) + TLib3MFBuildItem_GetPartNumberFunc = function(pBuildItem: TLib3MFHandle; const nPartNumberBufferSize: Cardinal; out pPartNumberNeededChars: Cardinal; pPartNumberBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Sets a build item's part number string + * + * @param[in] pBuildItem - BuildItem instance. + * @param[in] pSetPartnumber - new part number string for referencing parts from the outside world + * @return error code or 0 (success) + *) + TLib3MFBuildItem_SetPartNumberFunc = function(pBuildItem: TLib3MFHandle; const pSetPartnumber: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Returns the metadatagroup of this build item + * + * @param[in] pBuildItem - BuildItem instance. + * @param[out] pMetaDataGroup - returns an Instance of the metadatagroup of this build item + * @return error code or 0 (success) + *) + TLib3MFBuildItem_GetMetaDataGroupFunc = function(pBuildItem: TLib3MFHandle; out pMetaDataGroup: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Returns the outbox of a build item + * + * @param[in] pBuildItem - BuildItem instance. + * @param[out] pOutbox - Outbox of this build item + * @return error code or 0 (success) + *) + TLib3MFBuildItem_GetOutboxFunc = function(pBuildItem: TLib3MFHandle; pOutbox: PLib3MFBox): TLib3MFResult; cdecl; + (************************************************************************************************************************* - Class definition for Texture2DGroupIterator + Function type definitions for BuildItemIterator **************************************************************************************************************************) - TLib3MFTexture2DGroupIterator = class(TLib3MFResourceIterator) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetCurrentTexture2DGroup(): TLib3MFTexture2DGroup; - end; - + (** + * Iterates to the next build item in the list. + * + * @param[in] pBuildItemIterator - BuildItemIterator instance. + * @param[out] pHasNext - Iterates to the next build item in the list. + * @return error code or 0 (success) + *) + TLib3MFBuildItemIterator_MoveNextFunc = function(pBuildItemIterator: TLib3MFHandle; out pHasNext: Byte): TLib3MFResult; cdecl; + + (** + * Iterates to the previous build item in the list. + * + * @param[in] pBuildItemIterator - BuildItemIterator instance. + * @param[out] pHasPrevious - Iterates to the previous build item in the list. + * @return error code or 0 (success) + *) + TLib3MFBuildItemIterator_MovePreviousFunc = function(pBuildItemIterator: TLib3MFHandle; out pHasPrevious: Byte): TLib3MFResult; cdecl; + + (** + * Returns the build item the iterator points at. + * + * @param[in] pBuildItemIterator - BuildItemIterator instance. + * @param[out] pBuildItem - returns the build item instance. + * @return error code or 0 (success) + *) + TLib3MFBuildItemIterator_GetCurrentFunc = function(pBuildItemIterator: TLib3MFHandle; out pBuildItem: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Creates a new build item iterator with the same build item list. + * + * @param[in] pBuildItemIterator - BuildItemIterator instance. + * @param[out] pOutBuildItemIterator - returns the cloned Iterator instance + * @return error code or 0 (success) + *) + TLib3MFBuildItemIterator_CloneFunc = function(pBuildItemIterator: TLib3MFHandle; out pOutBuildItemIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Returns the number of build items the iterator captures. + * + * @param[in] pBuildItemIterator - BuildItemIterator instance. + * @param[out] pCount - returns the number of build items the iterator captures. + * @return error code or 0 (success) + *) + TLib3MFBuildItemIterator_CountFunc = function(pBuildItemIterator: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + (************************************************************************************************************************* - Class definition for CompositeMaterialsIterator + Function type definitions for Slice **************************************************************************************************************************) - TLib3MFCompositeMaterialsIterator = class(TLib3MFResourceIterator) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetCurrentCompositeMaterials(): TLib3MFCompositeMaterials; - end; - + (** + * Set all vertices of a slice. All polygons will be cleared. + * + * @param[in] pSlice - Slice instance. + * @param[in] nVerticesCount - Number of elements in buffer + * @param[in] pVerticesBuffer - Position2D buffer of contains the positions. + * @return error code or 0 (success) + *) + TLib3MFSlice_SetVerticesFunc = function(pSlice: TLib3MFHandle; const nVerticesCount: QWord; const pVerticesBuffer: PLib3MFPosition2D): TLib3MFResult; cdecl; + + (** + * Get all vertices of a slice + * + * @param[in] pSlice - Slice instance. + * @param[in] nVerticesCount - Number of elements in buffer + * @param[out] pVerticesNeededCount - will be filled with the count of the written elements, or needed buffer size. + * @param[out] pVerticesBuffer - Position2D buffer of contains the positions. + * @return error code or 0 (success) + *) + TLib3MFSlice_GetVerticesFunc = function(pSlice: TLib3MFHandle; const nVerticesCount: QWord; out pVerticesNeededCount: QWord; pVerticesBuffer: PLib3MFPosition2D): TLib3MFResult; cdecl; + + (** + * Get the number of vertices in a slice + * + * @param[in] pSlice - Slice instance. + * @param[out] pCount - the number of vertices in the slice + * @return error code or 0 (success) + *) + TLib3MFSlice_GetVertexCountFunc = function(pSlice: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + + (** + * Add a new polygon to this slice + * + * @param[in] pSlice - Slice instance. + * @param[in] nIndicesCount - Number of elements in buffer + * @param[in] pIndicesBuffer - uint32 buffer of the new indices of the new polygon + * @param[out] pIndex - the index of the new polygon + * @return error code or 0 (success) + *) + TLib3MFSlice_AddPolygonFunc = function(pSlice: TLib3MFHandle; const nIndicesCount: QWord; const pIndicesBuffer: PCardinal; out pIndex: QWord): TLib3MFResult; cdecl; + + (** + * Get the number of polygons in the slice + * + * @param[in] pSlice - Slice instance. + * @param[out] pCount - the number of polygons in the slice + * @return error code or 0 (success) + *) + TLib3MFSlice_GetPolygonCountFunc = function(pSlice: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + + (** + * Set all indices of a polygon + * + * @param[in] pSlice - Slice instance. + * @param[in] nIndex - the index of the polygon to manipulate + * @param[in] nIndicesCount - Number of elements in buffer + * @param[in] pIndicesBuffer - uint32 buffer of the new indices of the index-th polygon + * @return error code or 0 (success) + *) + TLib3MFSlice_SetPolygonIndicesFunc = function(pSlice: TLib3MFHandle; const nIndex: QWord; const nIndicesCount: QWord; const pIndicesBuffer: PCardinal): TLib3MFResult; cdecl; + + (** + * Get all vertices of a slice + * + * @param[in] pSlice - Slice instance. + * @param[in] nIndex - the index of the polygon to manipulate + * @param[in] nIndicesCount - Number of elements in buffer + * @param[out] pIndicesNeededCount - will be filled with the count of the written elements, or needed buffer size. + * @param[out] pIndicesBuffer - uint32 buffer of the indices of the index-th polygon + * @return error code or 0 (success) + *) + TLib3MFSlice_GetPolygonIndicesFunc = function(pSlice: TLib3MFHandle; const nIndex: QWord; const nIndicesCount: QWord; out pIndicesNeededCount: QWord; pIndicesBuffer: PCardinal): TLib3MFResult; cdecl; + + (** + * Get the number of vertices in a slice + * + * @param[in] pSlice - Slice instance. + * @param[in] nIndex - the index of the polygon to manipulate + * @param[out] pCount - the number of indices of the index-th polygon + * @return error code or 0 (success) + *) + TLib3MFSlice_GetPolygonIndexCountFunc = function(pSlice: TLib3MFHandle; const nIndex: QWord; out pCount: QWord): TLib3MFResult; cdecl; + + (** + * Get the upper Z-Coordinate of this slice. + * + * @param[in] pSlice - Slice instance. + * @param[out] pZTop - the upper Z-Coordinate of this slice + * @return error code or 0 (success) + *) + TLib3MFSlice_GetZTopFunc = function(pSlice: TLib3MFHandle; out pZTop: Double): TLib3MFResult; cdecl; + (************************************************************************************************************************* - Class definition for MultiPropertyGroupIterator + Function type definitions for SliceStack **************************************************************************************************************************) - TLib3MFMultiPropertyGroupIterator = class(TLib3MFResourceIterator) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetCurrentMultiPropertyGroup(): TLib3MFMultiPropertyGroup; - end; - + (** + * Get the lower Z-Coordinate of the slice stack. + * + * @param[in] pSliceStack - SliceStack instance. + * @param[out] pZBottom - the lower Z-Coordinate the slice stack + * @return error code or 0 (success) + *) + TLib3MFSliceStack_GetBottomZFunc = function(pSliceStack: TLib3MFHandle; out pZBottom: Double): TLib3MFResult; cdecl; + + (** + * Returns the number of slices + * + * @param[in] pSliceStack - SliceStack instance. + * @param[out] pCount - the number of slices + * @return error code or 0 (success) + *) + TLib3MFSliceStack_GetSliceCountFunc = function(pSliceStack: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + + (** + * Query a slice from the slice stack + * + * @param[in] pSliceStack - SliceStack instance. + * @param[in] nSliceIndex - the index of the slice + * @param[out] pTheSlice - the Slice instance + * @return error code or 0 (success) + *) + TLib3MFSliceStack_GetSliceFunc = function(pSliceStack: TLib3MFHandle; const nSliceIndex: QWord; out pTheSlice: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Returns the number of slices + * + * @param[in] pSliceStack - SliceStack instance. + * @param[in] dZTop - upper Z coordinate of the slice + * @param[out] pTheSlice - a new Slice instance + * @return error code or 0 (success) + *) + TLib3MFSliceStack_AddSliceFunc = function(pSliceStack: TLib3MFHandle; const dZTop: Double; out pTheSlice: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Returns the number of slice refs + * + * @param[in] pSliceStack - SliceStack instance. + * @param[out] pCount - the number of slicereferences + * @return error code or 0 (success) + *) + TLib3MFSliceStack_GetSliceRefCountFunc = function(pSliceStack: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + + (** + * Adds another existing slicestack as sliceref in this slicestack + * + * @param[in] pSliceStack - SliceStack instance. + * @param[in] pTheSliceStack - the slicestack to use as sliceref + * @return error code or 0 (success) + *) + TLib3MFSliceStack_AddSliceStackReferenceFunc = function(pSliceStack: TLib3MFHandle; const pTheSliceStack: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Adds another existing slicestack as sliceref in this slicestack + * + * @param[in] pSliceStack - SliceStack instance. + * @param[in] nSliceRefIndex - the index of the slice ref + * @param[out] pTheSliceStack - the slicestack that is used as sliceref + * @return error code or 0 (success) + *) + TLib3MFSliceStack_GetSliceStackReferenceFunc = function(pSliceStack: TLib3MFHandle; const nSliceRefIndex: QWord; out pTheSliceStack: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Removes the indirection of slices via slice-refs, i.e. creates the slices of all slice refs of this SliceStack as actual slices of this SliceStack. All previously existing slices or slicerefs will be removed. + * + * @param[in] pSliceStack - SliceStack instance. + * @return error code or 0 (success) + *) + TLib3MFSliceStack_CollapseSliceReferencesFunc = function(pSliceStack: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Sets the package path where this Slice should be stored. Input an empty string to reset the path + * + * @param[in] pSliceStack - SliceStack instance. + * @param[in] pPath - the package path where this Slice should be stored + * @return error code or 0 (success) + *) + TLib3MFSliceStack_SetOwnPathFunc = function(pSliceStack: TLib3MFHandle; const pPath: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Obtains the package path where this Slice should be stored. Returns an empty string if the slicestack is stored within the root model. + * + * @param[in] pSliceStack - SliceStack instance. + * @param[in] nPathBufferSize - size of the buffer (including trailing 0) + * @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pPathBuffer - buffer of the package path where this Slice will be stored, may be NULL + * @return error code or 0 (success) + *) + TLib3MFSliceStack_GetOwnPathFunc = function(pSliceStack: TLib3MFHandle; const nPathBufferSize: Cardinal; out pPathNeededChars: Cardinal; pPathBuffer: PAnsiChar): TLib3MFResult; cdecl; + (************************************************************************************************************************* - Class definition for MetaData + Function type definitions for Consumer **************************************************************************************************************************) - TLib3MFMetaData = class(TLib3MFBase) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetNameSpace(): String; - procedure SetNameSpace(const ANameSpace: String); - function GetName(): String; - procedure SetName(const AName: String); - function GetKey(): String; - function GetMustPreserve(): Boolean; - procedure SetMustPreserve(const AMustPreserve: Boolean); - function GetType(): String; - procedure SetType(const AType: String); - function GetValue(): String; - procedure SetValue(const AValue: String); - end; - + (** + * Gets the consumerid + * + * @param[in] pConsumer - Consumer instance. + * @param[in] nConsumerIDBufferSize - size of the buffer (including trailing 0) + * @param[out] pConsumerIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pConsumerIDBuffer - buffer of A unique identifier for the consumers, may be NULL + * @return error code or 0 (success) + *) + TLib3MFConsumer_GetConsumerIDFunc = function(pConsumer: TLib3MFHandle; const nConsumerIDBufferSize: Cardinal; out pConsumerIDNeededChars: Cardinal; pConsumerIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Getts the keyid + * + * @param[in] pConsumer - Consumer instance. + * @param[in] nKeyIDBufferSize - size of the buffer (including trailing 0) + * @param[out] pKeyIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pKeyIDBuffer - buffer of The identifier for the key of this consumer, may be NULL + * @return error code or 0 (success) + *) + TLib3MFConsumer_GetKeyIDFunc = function(pConsumer: TLib3MFHandle; const nKeyIDBufferSize: Cardinal; out pKeyIDNeededChars: Cardinal; pKeyIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Gets the keyvalue associated with this consumer + * + * @param[in] pConsumer - Consumer instance. + * @param[in] nKeyValueBufferSize - size of the buffer (including trailing 0) + * @param[out] pKeyValueNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pKeyValueBuffer - buffer of The public key, when available, of this consumer, may be NULL + * @return error code or 0 (success) + *) + TLib3MFConsumer_GetKeyValueFunc = function(pConsumer: TLib3MFHandle; const nKeyValueBufferSize: Cardinal; out pKeyValueNeededChars: Cardinal; pKeyValueBuffer: PAnsiChar): TLib3MFResult; cdecl; + (************************************************************************************************************************* - Class definition for MetaDataGroup + Function type definitions for AccessRight **************************************************************************************************************************) - TLib3MFMetaDataGroup = class(TLib3MFBase) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetMetaDataCount(): Cardinal; - function GetMetaData(const AIndex: Cardinal): TLib3MFMetaData; - function GetMetaDataByKey(const ANameSpace: String; const AName: String): TLib3MFMetaData; - procedure RemoveMetaDataByIndex(const AIndex: Cardinal); - procedure RemoveMetaData(const ATheMetaData: TLib3MFMetaData); - function AddMetaData(const ANameSpace: String; const AName: String; const AValue: String; const AType: String; const AMustPreserve: Boolean): TLib3MFMetaData; - end; - + (** + * Gets the consumer associated with this access right + * + * @param[in] pAccessRight - AccessRight instance. + * @param[out] pConsumer - The consumer instance + * @return error code or 0 (success) + *) + TLib3MFAccessRight_GetConsumerFunc = function(pAccessRight: TLib3MFHandle; out pConsumer: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Gets the associated encryption algorithm + * + * @param[in] pAccessRight - AccessRight instance. + * @param[out] pAlgorithm - The algorithm used for the key in this accessright + * @return error code or 0 (success) + *) + TLib3MFAccessRight_GetWrappingAlgorithmFunc = function(pAccessRight: TLib3MFHandle; out pAlgorithm: Integer): TLib3MFResult; cdecl; + + (** + * Gets the associated mask generation function algorithm + * + * @param[in] pAccessRight - AccessRight instance. + * @param[out] pAlgorithm - The MFG1 algorithm + * @return error code or 0 (success) + *) + TLib3MFAccessRight_GetMgfAlgorithmFunc = function(pAccessRight: TLib3MFHandle; out pAlgorithm: Integer): TLib3MFResult; cdecl; + + (** + * Gets the digest method assoicated + * + * @param[in] pAccessRight - AccessRight instance. + * @param[out] pAlgorithm - The digest method for this accessright + * @return error code or 0 (success) + *) + TLib3MFAccessRight_GetDigestMethodFunc = function(pAccessRight: TLib3MFHandle; out pAlgorithm: Integer): TLib3MFResult; cdecl; + (************************************************************************************************************************* - Class definition for Object + Function type definitions for ContentEncryptionParams **************************************************************************************************************************) - TLib3MFObject = class(TLib3MFResource) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetType(): TLib3MFObjectType; - procedure SetType(const AObjectType: TLib3MFObjectType); - function GetName(): String; - procedure SetName(const AName: String); - function GetPartNumber(): String; - procedure SetPartNumber(const APartNumber: String); - function IsMeshObject(): Boolean; - function IsComponentsObject(): Boolean; - function IsValid(): Boolean; - procedure SetAttachmentAsThumbnail(const AAttachment: TLib3MFAttachment); - function GetThumbnailAttachment(): TLib3MFAttachment; - procedure ClearThumbnailAttachment(); - function GetOutbox(): TLib3MFBox; - function GetUUID(out AHasUUID: Boolean): String; - procedure SetUUID(const AUUID: String); - function GetMetaDataGroup(): TLib3MFMetaDataGroup; - procedure SetSlicesMeshResolution(const AMeshResolution: TLib3MFSlicesMeshResolution); - function GetSlicesMeshResolution(): TLib3MFSlicesMeshResolution; - function HasSlices(const ARecursive: Boolean): Boolean; - procedure ClearSliceStack(); - function GetSliceStack(): TLib3MFSliceStack; - procedure AssignSliceStack(const ASliceStackInstance: TLib3MFSliceStack); - end; - + (** + * Returns the encryption method to be used in this encryption process + * + * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. + * @param[out] pAlgorithm - + * @return error code or 0 (success) + *) + TLib3MFContentEncryptionParams_GetEncryptionAlgorithmFunc = function(pContentEncryptionParams: TLib3MFHandle; out pAlgorithm: Integer): TLib3MFResult; cdecl; + + (** + * Gets the key for the resource associated + * + * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. + * @param[in] nByteDataCount - Number of elements in buffer + * @param[out] pByteDataNeededCount - will be filled with the count of the written elements, or needed buffer size. + * @param[out] pByteDataBuffer - uint8 buffer of Pointer to a buffer where to place the key. + * @return error code or 0 (success) + *) + TLib3MFContentEncryptionParams_GetKeyFunc = function(pContentEncryptionParams: TLib3MFHandle; const nByteDataCount: QWord; out pByteDataNeededCount: QWord; pByteDataBuffer: PByte): TLib3MFResult; cdecl; + + (** + * Gets the IV data + * + * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. + * @param[in] nByteDataCount - Number of elements in buffer + * @param[out] pByteDataNeededCount - will be filled with the count of the written elements, or needed buffer size. + * @param[out] pByteDataBuffer - uint8 buffer of Pointer to a buffer where to place the data. + * @return error code or 0 (success) + *) + TLib3MFContentEncryptionParams_GetInitializationVectorFunc = function(pContentEncryptionParams: TLib3MFHandle; const nByteDataCount: QWord; out pByteDataNeededCount: QWord; pByteDataBuffer: PByte): TLib3MFResult; cdecl; + + (** + * A handler descriptor that uniquely identifies the context of the resource. Each resource will be assigned a different value + * + * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. + * @param[in] nByteDataCount - Number of elements in buffer + * @param[out] pByteDataNeededCount - will be filled with the count of the written elements, or needed buffer size. + * @param[out] pByteDataBuffer - uint8 buffer of Pointer to a buffer where to place the data. + * @return error code or 0 (success) + *) + TLib3MFContentEncryptionParams_GetAuthenticationTagFunc = function(pContentEncryptionParams: TLib3MFHandle; const nByteDataCount: QWord; out pByteDataNeededCount: QWord; pByteDataBuffer: PByte): TLib3MFResult; cdecl; + + (** + * Sets the authentication tag + * + * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. + * @param[in] nByteDataCount - Number of elements in buffer + * @param[in] pByteDataBuffer - uint8 buffer of The authentication tag size + * @return error code or 0 (success) + *) + TLib3MFContentEncryptionParams_SetAuthenticationTagFunc = function(pContentEncryptionParams: TLib3MFHandle; const nByteDataCount: QWord; const pByteDataBuffer: PByte): TLib3MFResult; cdecl; + + (** + * A handler descriptor that uniquely identifies the context of the resource. Each resource will be assigned a different value + * + * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. + * @param[in] nByteDataCount - Number of elements in buffer + * @param[out] pByteDataNeededCount - will be filled with the count of the written elements, or needed buffer size. + * @param[out] pByteDataBuffer - uint8 buffer of Buffer where the data will be placed + * @return error code or 0 (success) + *) + TLib3MFContentEncryptionParams_GetAdditionalAuthenticationDataFunc = function(pContentEncryptionParams: TLib3MFHandle; const nByteDataCount: QWord; out pByteDataNeededCount: QWord; pByteDataBuffer: PByte): TLib3MFResult; cdecl; + + (** + * A handler descriptor that uniquely identifies the context of the resource. Each resource will be assigned a different value + * + * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. + * @param[out] pDescriptor - + * @return error code or 0 (success) + *) + TLib3MFContentEncryptionParams_GetDescriptorFunc = function(pContentEncryptionParams: TLib3MFHandle; out pDescriptor: QWord): TLib3MFResult; cdecl; + + (** + * Gets the resourcedatagroup keyuuid + * + * @param[in] pContentEncryptionParams - ContentEncryptionParams instance. + * @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) + * @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pUUIDBuffer - buffer of The resourcedatagroup keyuuid that may be use to reference an external key, may be NULL + * @return error code or 0 (success) + *) + TLib3MFContentEncryptionParams_GetKeyUUIDFunc = function(pContentEncryptionParams: TLib3MFHandle; const nUUIDBufferSize: Cardinal; out pUUIDNeededChars: Cardinal; pUUIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + (************************************************************************************************************************* - Class definition for MeshObject + Function type definitions for ResourceData **************************************************************************************************************************) - TLib3MFMeshObject = class(TLib3MFObject) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetVertexCount(): Cardinal; - function GetTriangleCount(): Cardinal; - function GetVertex(const AIndex: Cardinal): TLib3MFPosition; - procedure SetVertex(const AIndex: Cardinal; const ACoordinates: TLib3MFPosition); - function AddVertex(const ACoordinates: TLib3MFPosition): Cardinal; - procedure GetVertices(out AVertices: ArrayOfLib3MFPosition); - function GetTriangle(const AIndex: Cardinal): TLib3MFTriangle; - procedure SetTriangle(const AIndex: Cardinal; const AIndices: TLib3MFTriangle); - function AddTriangle(const AIndices: TLib3MFTriangle): Cardinal; - procedure GetTriangleIndices(out AIndices: ArrayOfLib3MFTriangle); - procedure SetObjectLevelProperty(const AUniqueResourceID: Cardinal; const APropertyID: Cardinal); - function GetObjectLevelProperty(out AUniqueResourceID: Cardinal; out APropertyID: Cardinal): Boolean; - procedure SetTriangleProperties(const AIndex: Cardinal; const AProperties: TLib3MFTriangleProperties); - procedure GetTriangleProperties(const AIndex: Cardinal; out AProperty: TLib3MFTriangleProperties); - procedure SetAllTriangleProperties(const APropertiesArray: ArrayOfLib3MFTriangleProperties); - procedure GetAllTriangleProperties(out APropertiesArray: ArrayOfLib3MFTriangleProperties); - procedure ClearAllProperties(); - procedure SetGeometry(const AVertices: ArrayOfLib3MFPosition; const AIndices: ArrayOfLib3MFTriangle); - function IsManifoldAndOriented(): Boolean; - function BeamLattice(): TLib3MFBeamLattice; - end; - + (** + * Gets the encrypted part path + * + * @param[in] pResourceData - ResourceData instance. + * @param[out] pPath - The part path + * @return error code or 0 (success) + *) + TLib3MFResourceData_GetPathFunc = function(pResourceData: TLib3MFHandle; out pPath: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Gets the encryption algorithm used to encrypt this ResourceData + * + * @param[in] pResourceData - ResourceData instance. + * @param[out] pEncryptionAlgorithm - The encryption algorithm + * @return error code or 0 (success) + *) + TLib3MFResourceData_GetEncryptionAlgorithmFunc = function(pResourceData: TLib3MFHandle; out pEncryptionAlgorithm: Integer): TLib3MFResult; cdecl; + + (** + * Tells whether this ResourceData is compressed or not + * + * @param[in] pResourceData - ResourceData instance. + * @param[out] pCompression - The compression method + * @return error code or 0 (success) + *) + TLib3MFResourceData_GetCompressionFunc = function(pResourceData: TLib3MFHandle; out pCompression: Integer): TLib3MFResult; cdecl; + + (** + * Tells whether this ResourceData is compressed or not + * + * @param[in] pResourceData - ResourceData instance. + * @param[in] nByteDataCount - Number of elements in buffer + * @param[out] pByteDataNeededCount - will be filled with the count of the written elements, or needed buffer size. + * @param[out] pByteDataBuffer - uint8 buffer of The compression method + * @return error code or 0 (success) + *) + TLib3MFResourceData_GetAdditionalAuthenticationDataFunc = function(pResourceData: TLib3MFHandle; const nByteDataCount: QWord; out pByteDataNeededCount: QWord; pByteDataBuffer: PByte): TLib3MFResult; cdecl; + (************************************************************************************************************************* - Class definition for BeamLattice + Function type definitions for ResourceDataGroup **************************************************************************************************************************) - TLib3MFBeamLattice = class(TLib3MFBase) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetMinLength(): Double; - procedure SetMinLength(const AMinLength: Double); - procedure GetClipping(out AClipMode: TLib3MFBeamLatticeClipMode; out AUniqueResourceID: Cardinal); - procedure SetClipping(const AClipMode: TLib3MFBeamLatticeClipMode; const AUniqueResourceID: Cardinal); - function GetRepresentation(out AUniqueResourceID: Cardinal): Boolean; - procedure SetRepresentation(const AUniqueResourceID: Cardinal); - procedure GetBallOptions(out ABallMode: TLib3MFBeamLatticeBallMode; out ABallRadius: Double); - procedure SetBallOptions(const ABallMode: TLib3MFBeamLatticeBallMode; const ABallRadius: Double); - function GetBeamCount(): Cardinal; - function GetBeam(const AIndex: Cardinal): TLib3MFBeam; - function AddBeam(const ABeamInfo: TLib3MFBeam): Cardinal; - procedure SetBeam(const AIndex: Cardinal; const ABeamInfo: TLib3MFBeam); - procedure SetBeams(const ABeamInfo: ArrayOfLib3MFBeam); - procedure GetBeams(out ABeamInfo: ArrayOfLib3MFBeam); - function GetBallCount(): Cardinal; - function GetBall(const AIndex: Cardinal): TLib3MFBall; - function AddBall(const ABallInfo: TLib3MFBall): Cardinal; - procedure SetBall(const AIndex: Cardinal; const ABallInfo: TLib3MFBall); - procedure SetBalls(const ABallInfo: ArrayOfLib3MFBall); - procedure GetBalls(out ABallInfo: ArrayOfLib3MFBall); - function GetBeamSetCount(): Cardinal; - function AddBeamSet(): TLib3MFBeamSet; - function GetBeamSet(const AIndex: Cardinal): TLib3MFBeamSet; - end; - - -(************************************************************************************************************************* - Class definition for Component -**************************************************************************************************************************) - - TLib3MFComponent = class(TLib3MFBase) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function GetObjectResource(): TLib3MFObject; - function GetObjectResourceID(): Cardinal; - function GetUUID(out AHasUUID: Boolean): String; - procedure SetUUID(const AUUID: String); - function HasTransform(): Boolean; - function GetTransform(): TLib3MFTransform; - procedure SetTransform(const ATransform: TLib3MFTransform); - end; - + (** + * Sets the resourcedatagroup keyuuid + * + * @param[in] pResourceDataGroup - ResourceDataGroup instance. + * @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) + * @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pUUIDBuffer - buffer of The new resourcedatagroup keyuuid., may be NULL + * @return error code or 0 (success) + *) + TLib3MFResourceDataGroup_GetKeyUUIDFunc = function(pResourceDataGroup: TLib3MFHandle; const nUUIDBufferSize: Cardinal; out pUUIDNeededChars: Cardinal; pUUIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Add accessright to resourcedatagroup element + * + * @param[in] pResourceDataGroup - ResourceDataGroup instance. + * @param[in] pConsumer - The Consumer reference + * @param[in] eWrappingAlgorithm - The key wrapping algorithm to be used + * @param[in] eMgfAlgorithm - The mask generation function to be used + * @param[in] eDigestMethod - The digest mechanism to be used + * @param[out] pTheAccessRight - The acess right instance + * @return error code or 0 (success) + *) + TLib3MFResourceDataGroup_AddAccessRightFunc = function(pResourceDataGroup: TLib3MFHandle; const pConsumer: TLib3MFHandle; const eWrappingAlgorithm: Integer; const eMgfAlgorithm: Integer; const eDigestMethod: Integer; out pTheAccessRight: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Finds the AccessRight associated with a Consumer + * + * @param[in] pResourceDataGroup - ResourceDataGroup instance. + * @param[in] pConsumer - The Consumer instance + * @param[out] pTheAccessRight - The AcessRight instance + * @return error code or 0 (success) + *) + TLib3MFResourceDataGroup_FindAccessRightByConsumerFunc = function(pResourceDataGroup: TLib3MFHandle; const pConsumer: TLib3MFHandle; out pTheAccessRight: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Removes access from a Consumer on this resource data group + * + * @param[in] pResourceDataGroup - ResourceDataGroup instance. + * @param[in] pConsumer - The Consumer instance + * @return error code or 0 (success) + *) + TLib3MFResourceDataGroup_RemoveAccessRightFunc = function(pResourceDataGroup: TLib3MFHandle; const pConsumer: TLib3MFHandle): TLib3MFResult; cdecl; + (************************************************************************************************************************* - Class definition for ComponentsObject + Function type definitions for KeyStore **************************************************************************************************************************) - TLib3MFComponentsObject = class(TLib3MFObject) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - function AddComponent(const AObjectResource: TLib3MFObject; const ATransform: TLib3MFTransform): TLib3MFComponent; - function GetComponent(const AIndex: Cardinal): TLib3MFComponent; - function GetComponentCount(): Cardinal; - end; - + (** + * Adds a consumer to the keystore + * + * @param[in] pKeyStore - KeyStore instance. + * @param[in] pConsumerID - A unique identifier for the consumer + * @param[in] pKeyID - The id of the key of the consumer + * @param[in] pKeyValue - The public key for this consumer in PEM format + * @param[out] pConsumer - The consumer instance + * @return error code or 0 (success) + *) + TLib3MFKeyStore_AddConsumerFunc = function(pKeyStore: TLib3MFHandle; const pConsumerID: PAnsiChar; const pKeyID: PAnsiChar; const pKeyValue: PAnsiChar; out pConsumer: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Gets the number of consumers in the keystore + * + * @param[in] pKeyStore - KeyStore instance. + * @param[out] pCount - The consumer count + * @return error code or 0 (success) + *) + TLib3MFKeyStore_GetConsumerCountFunc = function(pKeyStore: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + + (** + * Get a consumer from the keystore + * + * @param[in] pKeyStore - KeyStore instance. + * @param[in] nConsumerIndex - The index of the consumer + * @param[out] pConsumer - The consumer instance + * @return error code or 0 (success) + *) + TLib3MFKeyStore_GetConsumerFunc = function(pKeyStore: TLib3MFHandle; const nConsumerIndex: QWord; out pConsumer: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Removes a consumer from the keystore + * + * @param[in] pKeyStore - KeyStore instance. + * @param[in] pConsumer - The consumer instance to remove + * @return error code or 0 (success) + *) + TLib3MFKeyStore_RemoveConsumerFunc = function(pKeyStore: TLib3MFHandle; const pConsumer: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Finds a consumer by ID + * + * @param[in] pKeyStore - KeyStore instance. + * @param[in] pConsumerID - The ID of the consumer + * @param[out] pConsumer - The consumer instance + * @return error code or 0 (success) + *) + TLib3MFKeyStore_FindConsumerFunc = function(pKeyStore: TLib3MFHandle; const pConsumerID: PAnsiChar; out pConsumer: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Gets the number of resource data group in the keysore + * + * @param[in] pKeyStore - KeyStore instance. + * @param[out] pCount - The number of resource data available + * @return error code or 0 (success) + *) + TLib3MFKeyStore_GetResourceDataGroupCountFunc = function(pKeyStore: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + + (** + * Adds a resource data group into the keystore. + * + * @param[in] pKeyStore - KeyStore instance. + * @param[out] pResourceDataGroup - The resource data group instance + * @return error code or 0 (success) + *) + TLib3MFKeyStore_AddResourceDataGroupFunc = function(pKeyStore: TLib3MFHandle; out pResourceDataGroup: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Gets a resource data group + * + * @param[in] pKeyStore - KeyStore instance. + * @param[in] nResourceDataIndex - The index of the resource data + * @param[out] pResourceDataGroup - The resource data group instance + * @return error code or 0 (success) + *) + TLib3MFKeyStore_GetResourceDataGroupFunc = function(pKeyStore: TLib3MFHandle; const nResourceDataIndex: QWord; out pResourceDataGroup: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Removes a resource data group + * + * @param[in] pKeyStore - KeyStore instance. + * @param[in] pResourceDataGroup - The resource data group instance + * @return error code or 0 (success) + *) + TLib3MFKeyStore_RemoveResourceDataGroupFunc = function(pKeyStore: TLib3MFHandle; const pResourceDataGroup: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Finds a resource data group that contains a particular resourcedata + * + * @param[in] pKeyStore - KeyStore instance. + * @param[in] pPartPath - The target path for the resourcedata hold by the resource data group + * @param[out] pResourceDataGroup - The data resource instance + * @return error code or 0 (success) + *) + TLib3MFKeyStore_FindResourceDataGroupFunc = function(pKeyStore: TLib3MFHandle; const pPartPath: TLib3MFHandle; out pResourceDataGroup: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Add resourcedata to resourcedatagroup element + * + * @param[in] pKeyStore - KeyStore instance. + * @param[in] pResourceDataGroup - The resource data group where to add this resource data + * @param[in] pPartPath - The path of the part to be encrypted + * @param[in] eAlgorithm - The encryption algorithm to be used to encrypt this resource + * @param[in] eCompression - Whether compression should be used prior to encryption + * @param[in] nAdditionalAuthenticationDataCount - Number of elements in buffer + * @param[in] pAdditionalAuthenticationDataBuffer - uint8 buffer of Additional data to be encrypted along the contents for better security + * @param[out] pResourceData - The data resource instance + * @return error code or 0 (success) + *) + TLib3MFKeyStore_AddResourceDataFunc = function(pKeyStore: TLib3MFHandle; const pResourceDataGroup: TLib3MFHandle; const pPartPath: TLib3MFHandle; const eAlgorithm: Integer; const eCompression: Integer; const nAdditionalAuthenticationDataCount: QWord; const pAdditionalAuthenticationDataBuffer: PByte; out pResourceData: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Removes a resource data + * + * @param[in] pKeyStore - KeyStore instance. + * @param[in] pResourceData - The resource data to be removed + * @return error code or 0 (success) + *) + TLib3MFKeyStore_RemoveResourceDataFunc = function(pKeyStore: TLib3MFHandle; const pResourceData: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Finds a resource data on this resource group + * + * @param[in] pKeyStore - KeyStore instance. + * @param[in] pResourcePath - The target path for the resourcedata + * @param[out] pResourceData - The resource data instance + * @return error code or 0 (success) + *) + TLib3MFKeyStore_FindResourceDataFunc = function(pKeyStore: TLib3MFHandle; const pResourcePath: TLib3MFHandle; out pResourceData: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Gets the number of resource data in the keysore + * + * @param[in] pKeyStore - KeyStore instance. + * @param[out] pCount - The number of resource data available + * @return error code or 0 (success) + *) + TLib3MFKeyStore_GetResourceDataCountFunc = function(pKeyStore: TLib3MFHandle; out pCount: QWord): TLib3MFResult; cdecl; + + (** + * Gets a resource data + * + * @param[in] pKeyStore - KeyStore instance. + * @param[in] nResourceDataIndex - The index of the resource data + * @param[out] pResourceData - The data resource instance + * @return error code or 0 (success) + *) + TLib3MFKeyStore_GetResourceDataFunc = function(pKeyStore: TLib3MFHandle; const nResourceDataIndex: QWord; out pResourceData: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Gets the keystore UUID + * + * @param[in] pKeyStore - KeyStore instance. + * @param[out] pHasUUID - flag whether the keystore has a UUID + * @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) + * @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pUUIDBuffer - buffer of returns the keystore uuid., may be NULL + * @return error code or 0 (success) + *) + TLib3MFKeyStore_GetUUIDFunc = function(pKeyStore: TLib3MFHandle; out pHasUUID: Byte; const nUUIDBufferSize: Cardinal; out pUUIDNeededChars: Cardinal; pUUIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Sets the keystore UUID + * + * @param[in] pKeyStore - KeyStore instance. + * @param[in] pUUID - The new keystore uuid. + * @return error code or 0 (success) + *) + TLib3MFKeyStore_SetUUIDFunc = function(pKeyStore: TLib3MFHandle; const pUUID: PAnsiChar): TLib3MFResult; cdecl; + (************************************************************************************************************************* - Class definition for BeamSet + Function type definitions for Model **************************************************************************************************************************) - TLib3MFBeamSet = class(TLib3MFBase) - public - constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); - destructor Destroy; override; - procedure SetName(const AName: String); - function GetName(): String; - procedure SetIdentifier(const AIdentifier: String); - function GetIdentifier(): String; - function GetReferenceCount(): Cardinal; - procedure SetReferences(const AReferences: TCardinalDynArray); - procedure GetReferences(out AReferences: TCardinalDynArray); - function GetBallReferenceCount(): Cardinal; + (** + * Returns the PackagePart within the OPC package that holds the root model. + * + * @param[in] pModel - Model instance. + * @param[out] pRootModelPart - the PackagePart within the OPC package that holds the model-file + * @return error code or 0 (success) + *) + TLib3MFModel_RootModelPartFunc = function(pModel: TLib3MFHandle; out pRootModelPart: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Returns a new PackagePart for use within the OPC package. + * + * @param[in] pModel - Model instance. + * @param[in] pAbsolutePath - the absolute Path (physical location) within the OPC package + * @param[out] pModelPart - the new PackagePart within the OPC package + * @return error code or 0 (success) + *) + TLib3MFModel_FindOrCreatePackagePartFunc = function(pModel: TLib3MFHandle; const pAbsolutePath: PAnsiChar; out pModelPart: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * sets the units of a model. + * + * @param[in] pModel - Model instance. + * @param[in] eUnit - Unit enum value for the model unit + * @return error code or 0 (success) + *) + TLib3MFModel_SetUnitFunc = function(pModel: TLib3MFHandle; const eUnit: Integer): TLib3MFResult; cdecl; + + (** + * returns the units of a model. + * + * @param[in] pModel - Model instance. + * @param[out] pUnit - Unit enum value for the model unit + * @return error code or 0 (success) + *) + TLib3MFModel_GetUnitFunc = function(pModel: TLib3MFHandle; out pUnit: Integer): TLib3MFResult; cdecl; + + (** + * retrieves the language of a model + * + * @param[in] pModel - Model instance. + * @param[in] nLanguageBufferSize - size of the buffer (including trailing 0) + * @param[out] pLanguageNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pLanguageBuffer - buffer of language identifier, may be NULL + * @return error code or 0 (success) + *) + TLib3MFModel_GetLanguageFunc = function(pModel: TLib3MFHandle; const nLanguageBufferSize: Cardinal; out pLanguageNeededChars: Cardinal; pLanguageBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * sets the language of a model + * + * @param[in] pModel - Model instance. + * @param[in] pLanguage - language identifier + * @return error code or 0 (success) + *) + TLib3MFModel_SetLanguageFunc = function(pModel: TLib3MFHandle; const pLanguage: PAnsiChar): TLib3MFResult; cdecl; + + (** + * creates a model writer instance for a specific file type + * + * @param[in] pModel - Model instance. + * @param[in] pWriterClass - string identifier for the file type + * @param[out] pWriterInstance - string identifier for the file type + * @return error code or 0 (success) + *) + TLib3MFModel_QueryWriterFunc = function(pModel: TLib3MFHandle; const pWriterClass: PAnsiChar; out pWriterInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a model reader instance for a specific file type + * + * @param[in] pModel - Model instance. + * @param[in] pReaderClass - string identifier for the file type + * @param[out] pReaderInstance - string identifier for the file type + * @return error code or 0 (success) + *) + TLib3MFModel_QueryReaderFunc = function(pModel: TLib3MFHandle; const pReaderClass: PAnsiChar; out pReaderInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * finds a model resource by its UniqueResourceID + * + * @param[in] pModel - Model instance. + * @param[in] nUniqueResourceID - UniqueResourceID + * @param[out] pResource - returns the resource instance + * @return error code or 0 (success) + *) + TLib3MFModel_GetResourceByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pResource: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * finds a model texture by its UniqueResourceID + * + * @param[in] pModel - Model instance. + * @param[in] nUniqueResourceID - UniqueResourceID + * @param[out] pTextureInstance - returns the texture2d instance + * @return error code or 0 (success) + *) + TLib3MFModel_GetTexture2DByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pTextureInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * returns a Property's type + * + * @param[in] pModel - Model instance. + * @param[in] nUniqueResourceID - Resource ID of the Property to Query + * @param[out] pThePropertyType - returns a Property's type + * @return error code or 0 (success) + *) + TLib3MFModel_GetPropertyTypeByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pThePropertyType: Integer): TLib3MFResult; cdecl; + + (** + * finds a model base material group by its UniqueResourceID + * + * @param[in] pModel - Model instance. + * @param[in] nUniqueResourceID - UniqueResourceID + * @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance + * @return error code or 0 (success) + *) + TLib3MFModel_GetBaseMaterialGroupByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pBaseMaterialGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * finds a model texture2d group by its UniqueResourceID + * + * @param[in] pModel - Model instance. + * @param[in] nUniqueResourceID - UniqueResourceID + * @param[out] pTexture2DGroupInstance - returns the Texture2DGroup instance + * @return error code or 0 (success) + *) + TLib3MFModel_GetTexture2DGroupByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pTexture2DGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * finds a model CompositeMaterials by its UniqueResourceID + * + * @param[in] pModel - Model instance. + * @param[in] nUniqueResourceID - UniqueResourceID + * @param[out] pCompositeMaterialsInstance - returns the CompositeMaterials instance + * @return error code or 0 (success) + *) + TLib3MFModel_GetCompositeMaterialsByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pCompositeMaterialsInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * finds a model MultiPropertyGroup by its UniqueResourceID + * + * @param[in] pModel - Model instance. + * @param[in] nUniqueResourceID - UniqueResourceID + * @param[out] pMultiPropertyGroupInstance - returns the MultiPropertyGroup instance + * @return error code or 0 (success) + *) + TLib3MFModel_GetMultiPropertyGroupByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pMultiPropertyGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * finds a mesh object by its UniqueResourceID + * + * @param[in] pModel - Model instance. + * @param[in] nUniqueResourceID - UniqueResourceID + * @param[out] pMeshObjectInstance - returns the mesh object instance + * @return error code or 0 (success) + *) + TLib3MFModel_GetMeshObjectByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pMeshObjectInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * finds a components object by its UniqueResourceID + * + * @param[in] pModel - Model instance. + * @param[in] nUniqueResourceID - UniqueResourceID + * @param[out] pComponentsObjectInstance - returns the components object instance + * @return error code or 0 (success) + *) + TLib3MFModel_GetComponentsObjectByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pComponentsObjectInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * finds a model color group by its UniqueResourceID + * + * @param[in] pModel - Model instance. + * @param[in] nUniqueResourceID - UniqueResourceID + * @param[out] pColorGroupInstance - returns the ColorGroup instance + * @return error code or 0 (success) + *) + TLib3MFModel_GetColorGroupByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pColorGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * finds a model slicestack by its UniqueResourceID + * + * @param[in] pModel - Model instance. + * @param[in] nUniqueResourceID - UniqueResourceID + * @param[out] pSliceStacInstance - returns the slicestack instance + * @return error code or 0 (success) + *) + TLib3MFModel_GetSliceStackByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pSliceStacInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * finds a level set object by its UniqueResourceID + * + * @param[in] pModel - Model instance. + * @param[in] nUniqueResourceID - UniqueResourceID + * @param[out] pLevelSetObjectInstance - returns the level set object instance + * @return error code or 0 (success) + *) + TLib3MFModel_GetLevelSetByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pLevelSetObjectInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * returns, whether a build has a UUID and, if true, the build's UUID + * + * @param[in] pModel - Model instance. + * @param[out] pHasUUID - flag whether the build has a UUID + * @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) + * @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL + * @return error code or 0 (success) + *) + TLib3MFModel_GetBuildUUIDFunc = function(pModel: TLib3MFHandle; out pHasUUID: Byte; const nUUIDBufferSize: Cardinal; out pUUIDNeededChars: Cardinal; pUUIDBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * sets the build's UUID + * + * @param[in] pModel - Model instance. + * @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + * @return error code or 0 (success) + *) + TLib3MFModel_SetBuildUUIDFunc = function(pModel: TLib3MFHandle; const pUUID: PAnsiChar): TLib3MFResult; cdecl; + + (** + * creates a build item iterator instance with all build items. + * + * @param[in] pModel - Model instance. + * @param[out] pBuildItemIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetBuildItemsFunc = function(pModel: TLib3MFHandle; out pBuildItemIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Returns the outbox of a Model + * + * @param[in] pModel - Model instance. + * @param[out] pOutbox - Outbox of this Model + * @return error code or 0 (success) + *) + TLib3MFModel_GetOutboxFunc = function(pModel: TLib3MFHandle; pOutbox: PLib3MFBox): TLib3MFResult; cdecl; + + (** + * creates a resource iterator instance with all resources. + * + * @param[in] pModel - Model instance. + * @param[out] pResourceIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetResourcesFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a resource iterator instance with all object resources. + * + * @param[in] pModel - Model instance. + * @param[out] pResourceIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetObjectsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a resource iterator instance with all mesh object resources. + * + * @param[in] pModel - Model instance. + * @param[out] pResourceIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetMeshObjectsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a resource iterator instance with all components object resources. + * + * @param[in] pModel - Model instance. + * @param[out] pResourceIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetComponentsObjectsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a Texture2DIterator instance with all texture2d resources. + * + * @param[in] pModel - Model instance. + * @param[out] pResourceIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetTexture2DsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a BaseMaterialGroupIterator instance with all base material resources. + * + * @param[in] pModel - Model instance. + * @param[out] pResourceIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetBaseMaterialGroupsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a ColorGroupIterator instance with all ColorGroup resources. + * + * @param[in] pModel - Model instance. + * @param[out] pResourceIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetColorGroupsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a Texture2DGroupIterator instance with all base material resources. + * + * @param[in] pModel - Model instance. + * @param[out] pResourceIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetTexture2DGroupsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a CompositeMaterialsIterator instance with all CompositeMaterials resources. + * + * @param[in] pModel - Model instance. + * @param[out] pResourceIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetCompositeMaterialsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a MultiPropertyGroupsIterator instance with all MultiPropertyGroup resources. + * + * @param[in] pModel - Model instance. + * @param[out] pResourceIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetMultiPropertyGroupsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a resource iterator instance with all slice stack resources. + * + * @param[in] pModel - Model instance. + * @param[out] pResourceIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetSliceStacksFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a resource iterator instance with all image3d resources. + * + * @param[in] pModel - Model instance. + * @param[out] pResourceIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetImage3DsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. + * + * @param[in] pModel - Model instance. + * @param[out] pMergedModelInstance - returns the merged model instance + * @return error code or 0 (success) + *) + TLib3MFModel_MergeToModelFunc = function(pModel: TLib3MFHandle; out pMergedModelInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Merges the given model into this model. + * + * @param[in] pModel - Model instance. + * @param[in] pModelInstance - model to be merged + * @return error code or 0 (success) + *) + TLib3MFModel_MergeFromModelFunc = function(pModel: TLib3MFHandle; const pModelInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds an empty mesh object to the model. + * + * @param[in] pModel - Model instance. + * @param[out] pMeshObjectInstance - returns the mesh object instance + * @return error code or 0 (success) + *) + TLib3MFModel_AddMeshObjectFunc = function(pModel: TLib3MFHandle; out pMeshObjectInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds an empty component object to the model. + * + * @param[in] pModel - Model instance. + * @param[out] pComponentsObjectInstance - returns the components object instance + * @return error code or 0 (success) + *) + TLib3MFModel_AddComponentsObjectFunc = function(pModel: TLib3MFHandle; out pComponentsObjectInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a new model slicestack by its id + * + * @param[in] pModel - Model instance. + * @param[in] dZBottom - Bottom Z value of the slicestack + * @param[out] pSliceStackInstance - returns the new slicestack instance + * @return error code or 0 (success) + *) + TLib3MFModel_AddSliceStackFunc = function(pModel: TLib3MFHandle; const dZBottom: Double; out pSliceStackInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds a texture2d resource to the model. Its path is given by that of an existing attachment. + * + * @param[in] pModel - Model instance. + * @param[in] pTextureAttachment - attachment containing the image data. + * @param[out] pTexture2DInstance - returns the new texture instance. + * @return error code or 0 (success) + *) + TLib3MFModel_AddTexture2DFromAttachmentFunc = function(pModel: TLib3MFHandle; const pTextureAttachment: TLib3MFHandle; out pTexture2DInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds an empty BaseMaterialGroup resource to the model. + * + * @param[in] pModel - Model instance. + * @param[out] pBaseMaterialGroupInstance - returns the new base material instance. + * @return error code or 0 (success) + *) + TLib3MFModel_AddBaseMaterialGroupFunc = function(pModel: TLib3MFHandle; out pBaseMaterialGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds an empty ColorGroup resource to the model. + * + * @param[in] pModel - Model instance. + * @param[out] pColorGroupInstance - returns the new ColorGroup instance. + * @return error code or 0 (success) + *) + TLib3MFModel_AddColorGroupFunc = function(pModel: TLib3MFHandle; out pColorGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds an empty Texture2DGroup resource to the model. + * + * @param[in] pModel - Model instance. + * @param[in] pTexture2DInstance - The texture2D instance of the created Texture2DGroup. + * @param[out] pTexture2DGroupInstance - returns the new Texture2DGroup instance. + * @return error code or 0 (success) + *) + TLib3MFModel_AddTexture2DGroupFunc = function(pModel: TLib3MFHandle; const pTexture2DInstance: TLib3MFHandle; out pTexture2DGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds an empty CompositeMaterials resource to the model. + * + * @param[in] pModel - Model instance. + * @param[in] pBaseMaterialGroupInstance - The BaseMaterialGroup instance of the created CompositeMaterials. + * @param[out] pCompositeMaterialsInstance - returns the new CompositeMaterials instance. + * @return error code or 0 (success) + *) + TLib3MFModel_AddCompositeMaterialsFunc = function(pModel: TLib3MFHandle; const pBaseMaterialGroupInstance: TLib3MFHandle; out pCompositeMaterialsInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds an empty MultiPropertyGroup resource to the model. + * + * @param[in] pModel - Model instance. + * @param[out] pMultiPropertyGroupInstance - returns the new MultiPropertyGroup instance. + * @return error code or 0 (success) + *) + TLib3MFModel_AddMultiPropertyGroupFunc = function(pModel: TLib3MFHandle; out pMultiPropertyGroupInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a new 3D Image Resource + * + * @param[in] pModel - Model instance. + * @param[in] nColumnCount - the number of columns in each sheet. + * @param[in] nRowCount - the number of rows in each sheet. + * @param[in] nSheetCount - the number of sheets in the image stack. + * @param[out] pInstance - returns the new ImageStack instance + * @return error code or 0 (success) + *) + TLib3MFModel_AddImageStackFunc = function(pModel: TLib3MFHandle; const nColumnCount: Cardinal; const nRowCount: Cardinal; const nSheetCount: Cardinal; out pInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * finds an ImageStack object by its UniqueResourceID + * + * @param[in] pModel - Model instance. + * @param[in] nUniqueResourceID - UniqueResourceID + * @param[out] pImageStackInstance - returns the image stack instance + * @return error code or 0 (success) + *) + TLib3MFModel_GetImageStackByIDFunc = function(pModel: TLib3MFHandle; const nUniqueResourceID: Cardinal; out pImageStackInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds a build item to the model. + * + * @param[in] pModel - Model instance. + * @param[in] pObject - Object instance. + * @param[in] pTransform - Transformation matrix. + * @param[out] pBuildItemInstance - returns the build item instance. + * @return error code or 0 (success) + *) + TLib3MFModel_AddBuildItemFunc = function(pModel: TLib3MFHandle; const pObject: TLib3MFHandle; const pTransform: PLib3MFTransform; out pBuildItemInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * removes a build item from the model + * + * @param[in] pModel - Model instance. + * @param[in] pBuildItemInstance - Build item to remove. + * @return error code or 0 (success) + *) + TLib3MFModel_RemoveBuildItemFunc = function(pModel: TLib3MFHandle; const pBuildItemInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Returns the metadata of the model as MetaDataGroup + * + * @param[in] pModel - Model instance. + * @param[out] pTheMetaDataGroup - returns an Instance of the metadatagroup of the model + * @return error code or 0 (success) + *) + TLib3MFModel_GetMetaDataGroupFunc = function(pModel: TLib3MFHandle; out pTheMetaDataGroup: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds an attachment stream to the model. The OPC part will be related to the model stream with a certain relationship type. + * + * @param[in] pModel - Model instance. + * @param[in] pURI - Path of the attachment + * @param[in] pRelationShipType - Relationship type of the attachment + * @param[out] pAttachmentInstance - Instance of the attachment object + * @return error code or 0 (success) + *) + TLib3MFModel_AddAttachmentFunc = function(pModel: TLib3MFHandle; const pURI: PAnsiChar; const pRelationShipType: PAnsiChar; out pAttachmentInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Removes attachment from the model. + * + * @param[in] pModel - Model instance. + * @param[in] pAttachmentInstance - Attachment instance to remove + * @return error code or 0 (success) + *) + TLib3MFModel_RemoveAttachmentFunc = function(pModel: TLib3MFHandle; const pAttachmentInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * retrieves an attachment stream object from the model.. + * + * @param[in] pModel - Model instance. + * @param[in] nIndex - Index of the attachment stream + * @param[out] pAttachmentInstance - Instance of the attachment object + * @return error code or 0 (success) + *) + TLib3MFModel_GetAttachmentFunc = function(pModel: TLib3MFHandle; const nIndex: Cardinal; out pAttachmentInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * retrieves an attachment stream object from the model. + * + * @param[in] pModel - Model instance. + * @param[in] pURI - Path URI in the package + * @param[out] pAttachmentInstance - Instance of the attachment object + * @return error code or 0 (success) + *) + TLib3MFModel_FindAttachmentFunc = function(pModel: TLib3MFHandle; const pURI: PAnsiChar; out pAttachmentInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * retrieves the number of attachments of the model. + * + * @param[in] pModel - Model instance. + * @param[out] pAttachmentCount - Returns the number of attachments. + * @return error code or 0 (success) + *) + TLib3MFModel_GetAttachmentCountFunc = function(pModel: TLib3MFHandle; out pAttachmentCount: Cardinal): TLib3MFResult; cdecl; + + (** + * Retrieve whether the OPC package contains a package thumbnail. + * + * @param[in] pModel - Model instance. + * @param[out] pHasThumbnail - returns whether the OPC package contains a package thumbnail + * @return error code or 0 (success) + *) + TLib3MFModel_HasPackageThumbnailAttachmentFunc = function(pModel: TLib3MFHandle; out pHasThumbnail: Byte): TLib3MFResult; cdecl; + + (** + * Create a new or the existing package thumbnail for the OPC package. + * + * @param[in] pModel - Model instance. + * @param[out] pAttachment - Instance of a new or the existing thumbnailattachment object. + * @return error code or 0 (success) + *) + TLib3MFModel_CreatePackageThumbnailAttachmentFunc = function(pModel: TLib3MFHandle; out pAttachment: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Get the attachment to the OPC package containing the package thumbnail. + * + * @param[in] pModel - Model instance. + * @param[out] pAttachment - Instance of the thumbnailattachment object or NULL. + * @return error code or 0 (success) + *) + TLib3MFModel_GetPackageThumbnailAttachmentFunc = function(pModel: TLib3MFHandle; out pAttachment: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Remove the attachment to the OPC package containing the package thumbnail. + * + * @param[in] pModel - Model instance. + * @return error code or 0 (success) + *) + TLib3MFModel_RemovePackageThumbnailAttachmentFunc = function(pModel: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Adds a new Content Type to the model. + * + * @param[in] pModel - Model instance. + * @param[in] pExtension - File Extension + * @param[in] pContentType - Content Type Identifier + * @return error code or 0 (success) + *) + TLib3MFModel_AddCustomContentTypeFunc = function(pModel: TLib3MFHandle; const pExtension: PAnsiChar; const pContentType: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Removes a custom Content Type from the model (UTF8 version). + * + * @param[in] pModel - Model instance. + * @param[in] pExtension - File Extension + * @return error code or 0 (success) + *) + TLib3MFModel_RemoveCustomContentTypeFunc = function(pModel: TLib3MFHandle; const pExtension: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Sets the random number generator callback for use in the library + * + * @param[in] pModel - Model instance. + * @param[in] pTheCallback - The callback used to generate random numbers + * @param[in] pUserData - Userdata to be passed to the callback function + * @return error code or 0 (success) + *) + TLib3MFModel_SetRandomNumberCallbackFunc = function(pModel: TLib3MFHandle; const pTheCallback: PLib3MF_RandomNumberCallback; const pUserData: Pointer): TLib3MFResult; cdecl; + + (** + * Gets the keystore associated with this model + * + * @param[in] pModel - Model instance. + * @param[out] pKeyStore - The package keystore + * @return error code or 0 (success) + *) + TLib3MFModel_GetKeyStoreFunc = function(pModel: TLib3MFHandle; out pKeyStore: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a resource iterator for all functions + * + * @param[in] pModel - Model instance. + * @param[out] pTheResourceIterator - returns the resource iterator + * @return error code or 0 (success) + *) + TLib3MFModel_GetFunctionsFunc = function(pModel: TLib3MFHandle; out pTheResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds a function described by nodes to the model + * + * @param[in] pModel - Model instance. + * @param[out] pFunctionInstance - returns the function instance + * @return error code or 0 (success) + *) + TLib3MFModel_AddImplicitFunctionFunc = function(pModel: TLib3MFHandle; out pFunctionInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds a function defined by an image3d to the model + * + * @param[in] pModel - Model instance. + * @param[in] pImage3DInstance - the Image3D-instance used for this function + * @param[out] pFunctionInstance - returns the function instance + * @return error code or 0 (success) + *) + TLib3MFModel_AddFunctionFromImage3DFunc = function(pModel: TLib3MFHandle; const pImage3DInstance: TLib3MFHandle; out pFunctionInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds a volume data resource to the model. + * + * @param[in] pModel - Model instance. + * @param[out] pVolumeDataInstance - returns the new volume data instance. + * @return error code or 0 (success) + *) + TLib3MFModel_AddVolumeDataFunc = function(pModel: TLib3MFHandle; out pVolumeDataInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * adds an empty boundary shape object to the model. + * + * @param[in] pModel - Model instance. + * @param[out] pLevelSetInstance - returns the mesh object instance + * @return error code or 0 (success) + *) + TLib3MFModel_AddLevelSetFunc = function(pModel: TLib3MFHandle; out pLevelSetInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * creates a resource iterator instance with all boundary shape resources. + * + * @param[in] pModel - Model instance. + * @param[out] pResourceIterator - returns the iterator instance. + * @return error code or 0 (success) + *) + TLib3MFModel_GetLevelSetsFunc = function(pModel: TLib3MFHandle; out pResourceIterator: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Removes a resource from the model + * + * @param[in] pModel - Model instance. + * @param[in] pResource - The resource to remove + * @return error code or 0 (success) + *) + TLib3MFModel_RemoveResourceFunc = function(pModel: TLib3MFHandle; const pResource: TLib3MFHandle): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Global function definitions +**************************************************************************************************************************) + + (** + * retrieves the binary version of this library. + * + * @param[out] pMajor - returns the major version of this library + * @param[out] pMinor - returns the minor version of this library + * @param[out] pMicro - returns the micro version of this library + * @return error code or 0 (success) + *) + TLib3MFGetLibraryVersionFunc = function(out pMajor: Cardinal; out pMinor: Cardinal; out pMicro: Cardinal): TLib3MFResult; cdecl; + + (** + * retrieves prerelease information of this library. + * + * @param[out] pHasPrereleaseInfo - Does the library provide prerelease version? + * @param[in] nPrereleaseInfoBufferSize - size of the buffer (including trailing 0) + * @param[out] pPrereleaseInfoNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pPrereleaseInfoBuffer - buffer of retrieves prerelease information of this library., may be NULL + * @return error code or 0 (success) + *) + TLib3MFGetPrereleaseInformationFunc = function(out pHasPrereleaseInfo: Byte; const nPrereleaseInfoBufferSize: Cardinal; out pPrereleaseInfoNeededChars: Cardinal; pPrereleaseInfoBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * retrieves build information of this library. + * + * @param[out] pHasBuildInfo - Does the library provide build version? + * @param[in] nBuildInformationBufferSize - size of the buffer (including trailing 0) + * @param[out] pBuildInformationNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pBuildInformationBuffer - buffer of retrieves build information of this library., may be NULL + * @return error code or 0 (success) + *) + TLib3MFGetBuildInformationFunc = function(out pHasBuildInfo: Byte; const nBuildInformationBufferSize: Cardinal; out pBuildInformationNeededChars: Cardinal; pBuildInformationBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * retrieves whether a specification is supported, and if so, which version. + * + * @param[in] pSpecificationURL - URL of extension to check + * @param[out] pIsSupported - returns whether this specification is supported + * @param[out] pMajor - returns the major version of the extension (if IsSupported) + * @param[out] pMinor - returns the minor version of the extension (if IsSupported) + * @param[out] pMicro - returns the micro version of the extension (if IsSupported) + * @return error code or 0 (success) + *) + TLib3MFGetSpecificationVersionFunc = function(const pSpecificationURL: PAnsiChar; out pIsSupported: Byte; out pMajor: Cardinal; out pMinor: Cardinal; out pMicro: Cardinal): TLib3MFResult; cdecl; + + (** + * creates an empty model instance. + * + * @param[out] pModel - returns an empty model instance + * @return error code or 0 (success) + *) + TLib3MFCreateModelFunc = function(out pModel: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * releases shared ownership of an object instance + * + * @param[in] pInstance - the object instance to release + * @return error code or 0 (success) + *) + TLib3MFReleaseFunc = function(const pInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * acquires shared ownership of an object instance + * + * @param[in] pInstance - the object instance to acquire + * @return error code or 0 (success) + *) + TLib3MFAcquireFunc = function(const pInstance: TLib3MFHandle): TLib3MFResult; cdecl; + + (** + * Sets the journal file path + * + * @param[in] pJournalPath - File name of the journal file + * @return error code or 0 (success) + *) + TLib3MFSetJournalFunc = function(const pJournalPath: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Retrieves the last error string of an instance + * + * @param[in] pInstance - Object where the error occured. + * @param[in] nLastErrorStringBufferSize - size of the buffer (including trailing 0) + * @param[out] pLastErrorStringNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pLastErrorStringBuffer - buffer of Last Error String, may be NULL + * @param[out] pHasLastError - Returns if the instance has a last error. + * @return error code or 0 (success) + *) + TLib3MFGetLastErrorFunc = function(const pInstance: TLib3MFHandle; const nLastErrorStringBufferSize: Cardinal; out pLastErrorStringNeededChars: Cardinal; pLastErrorStringBuffer: PAnsiChar; out pHasLastError: Byte): TLib3MFResult; cdecl; + + (** + * Returns the address of the SymbolLookupMethod + * + * @param[out] pSymbolLookupMethod - Address of the SymbolAddressMethod + * @return error code or 0 (success) + *) + TLib3MFGetSymbolLookupMethodFunc = function(out pSymbolLookupMethod: Pointer): TLib3MFResult; cdecl; + + (** + * Return an English text for a progress identifier.|Note: this is the only function you can call from your callback function. + * + * @param[in] eTheProgressIdentifier - the progress identifier that is passed to the callback function + * @param[in] nProgressMessageBufferSize - size of the buffer (including trailing 0) + * @param[out] pProgressMessageNeededChars - will be filled with the count of the written bytes, or needed buffer size. + * @param[out] pProgressMessageBuffer - buffer of English text for the progress identifier, may be NULL + * @return error code or 0 (success) + *) + TLib3MFRetrieveProgressMessageFunc = function(const eTheProgressIdentifier: Integer; const nProgressMessageBufferSize: Cardinal; out pProgressMessageNeededChars: Cardinal; pProgressMessageBuffer: PAnsiChar): TLib3MFResult; cdecl; + + (** + * Creates a Color from uint8 RGBA values + * + * @param[in] nRed - Red value of color (0-255) + * @param[in] nGreen - Green value of color (0-255) + * @param[in] nBlue - Blue value of color (0-255) + * @param[in] nAlpha - Alpha value of color (0-255) + * @param[out] pTheColor - Assembled color + * @return error code or 0 (success) + *) + TLib3MFRGBAToColorFunc = function(const nRed: Byte; const nGreen: Byte; const nBlue: Byte; const nAlpha: Byte; pTheColor: PLib3MFColor): TLib3MFResult; cdecl; + + (** + * Creates a Color from uint8 RGBA values + * + * @param[in] fRed - Red value of color (0-1) + * @param[in] fGreen - Green value of color (0-1) + * @param[in] fBlue - Blue value of color (0-1) + * @param[in] fAlpha - Alpha value of color (0-1) + * @param[out] pTheColor - Assembled color + * @return error code or 0 (success) + *) + TLib3MFFloatRGBAToColorFunc = function(const fRed: Single; const fGreen: Single; const fBlue: Single; const fAlpha: Single; pTheColor: PLib3MFColor): TLib3MFResult; cdecl; + + (** + * Calculates uint8-RGBA-values from a Color + * + * @param[in] pTheColor - Color to handle + * @param[out] pRed - Red value of color (0-255) + * @param[out] pGreen - Green value of color (0-255) + * @param[out] pBlue - Blue value of color (0-255) + * @param[out] pAlpha - Alpha value of color (0-255) + * @return error code or 0 (success) + *) + TLib3MFColorToRGBAFunc = function(const pTheColor: PLib3MFColor; out pRed: Byte; out pGreen: Byte; out pBlue: Byte; out pAlpha: Byte): TLib3MFResult; cdecl; + + (** + * Calculates float-RGBA-values from a Color + * + * @param[in] pTheColor - Color to handle + * @param[out] pRed - Red value of color (0-1) + * @param[out] pGreen - Green value of color (0-1) + * @param[out] pBlue - Blue value of color (0-1) + * @param[out] pAlpha - Alpha value of color (0-1) + * @return error code or 0 (success) + *) + TLib3MFColorToFloatRGBAFunc = function(const pTheColor: PLib3MFColor; out pRed: Single; out pGreen: Single; out pBlue: Single; out pAlpha: Single): TLib3MFResult; cdecl; + + (** + * Creates an identity transform + * + * @param[out] pTransform - Transformation matrix. + * @return error code or 0 (success) + *) + TLib3MFGetIdentityTransformFunc = function(pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + + (** + * Creates a uniform scale transform + * + * @param[in] fFactor - Factor in X, Y and Z + * @param[out] pTransform - Transformation matrix. + * @return error code or 0 (success) + *) + TLib3MFGetUniformScaleTransformFunc = function(const fFactor: Single; pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + + (** + * Creates a scale transform + * + * @param[in] fFactorX - Factor in X + * @param[in] fFactorY - Factor in Y + * @param[in] fFactorZ - Factor in Z + * @param[out] pTransform - Transformation matrix. + * @return error code or 0 (success) + *) + TLib3MFGetScaleTransformFunc = function(const fFactorX: Single; const fFactorY: Single; const fFactorZ: Single; pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + + (** + * Creates an translation transform + * + * @param[in] fVectorX - Translation in X + * @param[in] fVectorY - Translation in Y + * @param[in] fVectorZ - Translation in Z + * @param[out] pTransform - Transformation matrix. + * @return error code or 0 (success) + *) + TLib3MFGetTranslationTransformFunc = function(const fVectorX: Single; const fVectorY: Single; const fVectorZ: Single; pTransform: PLib3MFTransform): TLib3MFResult; cdecl; + + +(************************************************************************************************************************* + Helper function pointer definitions +**************************************************************************************************************************) +TLib3MFSymbolLookupMethod = function(const pSymbolName: PAnsiChar; out pValue: Pointer): TLib3MFResult; cdecl; + +(************************************************************************************************************************* + Exception definition +**************************************************************************************************************************) + + ELib3MFException = class(Exception) + private + FErrorCode: TLib3MFResult; + FCustomMessage: String; + public + property ErrorCode: TLib3MFResult read FErrorCode; + property CustomMessage: String read FCustomMessage; + constructor Create(AErrorCode: TLib3MFResult; AMessage: String); + constructor CreateCustomMessage(AErrorCode: TLib3MFResult; AMessage: String); + end; + + +(************************************************************************************************************************* + Class definition for Base +**************************************************************************************************************************) + + TLib3MFBase = class(TObject) + private + FWrapper: TLib3MFWrapper; + FHandle: TLib3MFHandle; + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + property TheHandle: TLib3MFHandle read FHandle; + function ClassTypeId(): QWord; + end; + + +(************************************************************************************************************************* + Class definition for Writer +**************************************************************************************************************************) + + TLib3MFWriter = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + procedure WriteToFile(const AFilename: String); + function GetStreamSize(): QWord; + procedure WriteToBuffer(out ABuffer: TByteDynArray); + procedure WriteToCallback(const ATheWriteCallback: PLib3MF_WriteCallback; const ATheSeekCallback: PLib3MF_SeekCallback; const AUserData: Pointer); + procedure SetProgressCallback(const AProgressCallback: PLib3MF_ProgressCallback; const AUserData: Pointer); + function GetDecimalPrecision(): Cardinal; + procedure SetDecimalPrecision(const ADecimalPrecision: Cardinal); + procedure SetStrictModeActive(const AStrictModeActive: Boolean); + function GetStrictModeActive(): Boolean; + function GetWarning(const AIndex: Cardinal; out AErrorCode: Cardinal): String; + function GetWarningCount(): Cardinal; + procedure AddKeyWrappingCallback(const AConsumerID: String; const ATheCallback: PLib3MF_KeyWrappingCallback; const AUserData: Pointer); + procedure SetContentEncryptionCallback(const ATheCallback: PLib3MF_ContentEncryptionCallback; const AUserData: Pointer); + end; + + +(************************************************************************************************************************* + Class definition for Reader +**************************************************************************************************************************) + + TLib3MFReader = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + procedure ReadFromFile(const AFilename: String); + procedure ReadFromBuffer(const ABuffer: TByteDynArray); + procedure ReadFromCallback(const ATheReadCallback: PLib3MF_ReadCallback; const AStreamSize: QWord; const ATheSeekCallback: PLib3MF_SeekCallback; const AUserData: Pointer); + procedure SetProgressCallback(const AProgressCallback: PLib3MF_ProgressCallback; const AUserData: Pointer); + procedure AddRelationToRead(const ARelationShipType: String); + procedure RemoveRelationToRead(const ARelationShipType: String); + procedure SetStrictModeActive(const AStrictModeActive: Boolean); + function GetStrictModeActive(): Boolean; + function GetWarning(const AIndex: Cardinal; out AErrorCode: Cardinal): String; + function GetWarningCount(): Cardinal; + procedure AddKeyWrappingCallback(const AConsumerID: String; const ATheCallback: PLib3MF_KeyWrappingCallback; const AUserData: Pointer); + procedure SetContentEncryptionCallback(const ATheCallback: PLib3MF_ContentEncryptionCallback; const AUserData: Pointer); + end; + + +(************************************************************************************************************************* + Class definition for PackagePart +**************************************************************************************************************************) + + TLib3MFPackagePart = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetPath(): String; + procedure SetPath(const APath: String); + end; + + +(************************************************************************************************************************* + Class definition for Resource +**************************************************************************************************************************) + + TLib3MFResource = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetResourceID(): Cardinal; + function GetUniqueResourceID(): Cardinal; + function PackagePart(): TLib3MFPackagePart; + procedure SetPackagePart(const APackagePart: TLib3MFPackagePart); + function GetModelResourceID(): Cardinal; + end; + + +(************************************************************************************************************************* + Class definition for ResourceIterator +**************************************************************************************************************************) + + TLib3MFResourceIterator = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function MoveNext(): Boolean; + function MovePrevious(): Boolean; + function GetCurrent(): TLib3MFResource; + function Clone(): TLib3MFResourceIterator; + function Count(): QWord; + end; + + +(************************************************************************************************************************* + Class definition for SliceStackIterator +**************************************************************************************************************************) + + TLib3MFSliceStackIterator = class(TLib3MFResourceIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrentSliceStack(): TLib3MFSliceStack; + end; + + +(************************************************************************************************************************* + Class definition for ObjectIterator +**************************************************************************************************************************) + + TLib3MFObjectIterator = class(TLib3MFResourceIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrentObject(): TLib3MFObject; + end; + + +(************************************************************************************************************************* + Class definition for MeshObjectIterator +**************************************************************************************************************************) + + TLib3MFMeshObjectIterator = class(TLib3MFResourceIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrentMeshObject(): TLib3MFMeshObject; + end; + + +(************************************************************************************************************************* + Class definition for ComponentsObjectIterator +**************************************************************************************************************************) + + TLib3MFComponentsObjectIterator = class(TLib3MFResourceIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrentComponentsObject(): TLib3MFComponentsObject; + end; + + +(************************************************************************************************************************* + Class definition for Texture2DIterator +**************************************************************************************************************************) + + TLib3MFTexture2DIterator = class(TLib3MFResourceIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrentTexture2D(): TLib3MFTexture2D; + end; + + +(************************************************************************************************************************* + Class definition for BaseMaterialGroupIterator +**************************************************************************************************************************) + + TLib3MFBaseMaterialGroupIterator = class(TLib3MFResourceIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrentBaseMaterialGroup(): TLib3MFBaseMaterialGroup; + end; + + +(************************************************************************************************************************* + Class definition for ColorGroupIterator +**************************************************************************************************************************) + + TLib3MFColorGroupIterator = class(TLib3MFResourceIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrentColorGroup(): TLib3MFColorGroup; + end; + + +(************************************************************************************************************************* + Class definition for Texture2DGroupIterator +**************************************************************************************************************************) + + TLib3MFTexture2DGroupIterator = class(TLib3MFResourceIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrentTexture2DGroup(): TLib3MFTexture2DGroup; + end; + + +(************************************************************************************************************************* + Class definition for CompositeMaterialsIterator +**************************************************************************************************************************) + + TLib3MFCompositeMaterialsIterator = class(TLib3MFResourceIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrentCompositeMaterials(): TLib3MFCompositeMaterials; + end; + + +(************************************************************************************************************************* + Class definition for MultiPropertyGroupIterator +**************************************************************************************************************************) + + TLib3MFMultiPropertyGroupIterator = class(TLib3MFResourceIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrentMultiPropertyGroup(): TLib3MFMultiPropertyGroup; + end; + + +(************************************************************************************************************************* + Class definition for Image3DIterator +**************************************************************************************************************************) + + TLib3MFImage3DIterator = class(TLib3MFResourceIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrentImage3D(): TLib3MFImage3D; + end; + + +(************************************************************************************************************************* + Class definition for FunctionIterator +**************************************************************************************************************************) + + TLib3MFFunctionIterator = class(TLib3MFResourceIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrentFunction(): TLib3MFFunction; + end; + + +(************************************************************************************************************************* + Class definition for LevelSetIterator +**************************************************************************************************************************) + + TLib3MFLevelSetIterator = class(TLib3MFResourceIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrentLevelSet(): TLib3MFLevelSet; + end; + + +(************************************************************************************************************************* + Class definition for MetaData +**************************************************************************************************************************) + + TLib3MFMetaData = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetNameSpace(): String; + procedure SetNameSpace(const ANameSpace: String); + function GetName(): String; + procedure SetName(const AName: String); + function GetKey(): String; + function GetMustPreserve(): Boolean; + procedure SetMustPreserve(const AMustPreserve: Boolean); + function GetType(): String; + procedure SetType(const AType: String); + function GetValue(): String; + procedure SetValue(const AValue: String); + end; + + +(************************************************************************************************************************* + Class definition for MetaDataGroup +**************************************************************************************************************************) + + TLib3MFMetaDataGroup = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetMetaDataCount(): Cardinal; + function GetMetaData(const AIndex: Cardinal): TLib3MFMetaData; + function GetMetaDataByKey(const ANameSpace: String; const AName: String): TLib3MFMetaData; + procedure RemoveMetaDataByIndex(const AIndex: Cardinal); + procedure RemoveMetaData(const ATheMetaData: TLib3MFMetaData); + function AddMetaData(const ANameSpace: String; const AName: String; const AValue: String; const AType: String; const AMustPreserve: Boolean): TLib3MFMetaData; + end; + + +(************************************************************************************************************************* + Class definition for Object +**************************************************************************************************************************) + + TLib3MFObject = class(TLib3MFResource) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetType(): TLib3MFObjectType; + procedure SetType(const AObjectType: TLib3MFObjectType); + function GetName(): String; + procedure SetName(const AName: String); + function GetPartNumber(): String; + procedure SetPartNumber(const APartNumber: String); + function IsMeshObject(): Boolean; + function IsComponentsObject(): Boolean; + function IsLevelSetObject(): Boolean; + function IsValid(): Boolean; + procedure SetAttachmentAsThumbnail(const AAttachment: TLib3MFAttachment); + function GetThumbnailAttachment(): TLib3MFAttachment; + procedure ClearThumbnailAttachment(); + function GetOutbox(): TLib3MFBox; + function GetUUID(out AHasUUID: Boolean): String; + procedure SetUUID(const AUUID: String); + function GetMetaDataGroup(): TLib3MFMetaDataGroup; + procedure SetSlicesMeshResolution(const AMeshResolution: TLib3MFSlicesMeshResolution); + function GetSlicesMeshResolution(): TLib3MFSlicesMeshResolution; + function HasSlices(const ARecursive: Boolean): Boolean; + procedure ClearSliceStack(); + function GetSliceStack(): TLib3MFSliceStack; + procedure AssignSliceStack(const ASliceStackInstance: TLib3MFSliceStack); + end; + + +(************************************************************************************************************************* + Class definition for MeshObject +**************************************************************************************************************************) + + TLib3MFMeshObject = class(TLib3MFObject) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetVertexCount(): Cardinal; + function GetTriangleCount(): Cardinal; + function GetVertex(const AIndex: Cardinal): TLib3MFPosition; + procedure SetVertex(const AIndex: Cardinal; const ACoordinates: TLib3MFPosition); + function AddVertex(const ACoordinates: TLib3MFPosition): Cardinal; + procedure GetVertices(out AVertices: ArrayOfLib3MFPosition); + function GetTriangle(const AIndex: Cardinal): TLib3MFTriangle; + procedure SetTriangle(const AIndex: Cardinal; const AIndices: TLib3MFTriangle); + function AddTriangle(const AIndices: TLib3MFTriangle): Cardinal; + procedure GetTriangleIndices(out AIndices: ArrayOfLib3MFTriangle); + procedure SetObjectLevelProperty(const AUniqueResourceID: Cardinal; const APropertyID: Cardinal); + function GetObjectLevelProperty(out AUniqueResourceID: Cardinal; out APropertyID: Cardinal): Boolean; + procedure SetTriangleProperties(const AIndex: Cardinal; const AProperties: TLib3MFTriangleProperties); + procedure GetTriangleProperties(const AIndex: Cardinal; out AProperty: TLib3MFTriangleProperties); + procedure SetAllTriangleProperties(const APropertiesArray: ArrayOfLib3MFTriangleProperties); + procedure GetAllTriangleProperties(out APropertiesArray: ArrayOfLib3MFTriangleProperties); + procedure ClearAllProperties(); + procedure SetGeometry(const AVertices: ArrayOfLib3MFPosition; const AIndices: ArrayOfLib3MFTriangle); + function IsManifoldAndOriented(): Boolean; + function BeamLattice(): TLib3MFBeamLattice; + function GetVolumeData(): TLib3MFVolumeData; + procedure SetVolumeData(const ATheVolumeData: TLib3MFVolumeData); + end; + + +(************************************************************************************************************************* + Class definition for LevelSet +**************************************************************************************************************************) + + TLib3MFLevelSet = class(TLib3MFObject) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetFunction(): TLib3MFFunction; + procedure SetFunction(const ATheFunction: TLib3MFFunction); + function GetTransform(): TLib3MFTransform; + procedure SetTransform(const ATransform: TLib3MFTransform); + function GetChannelName(): String; + procedure SetChannelName(const AChannelName: String); + procedure SetMinFeatureSize(const AMinFeatureSize: Double); + function GetMinFeatureSize(): Double; + procedure SetFallBackValue(const AFallBackValue: Double); + function GetFallBackValue(): Double; + procedure SetMeshBBoxOnly(const AMeshBBoxOnly: Boolean); + function GetMeshBBoxOnly(): Boolean; + procedure SetMesh(const ATheMesh: TLib3MFMeshObject); + function GetMesh(): TLib3MFMeshObject; + function GetVolumeData(): TLib3MFVolumeData; + procedure SetVolumeData(const ATheVolumeData: TLib3MFVolumeData); + end; + + +(************************************************************************************************************************* + Class definition for BeamLattice +**************************************************************************************************************************) + + TLib3MFBeamLattice = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetMinLength(): Double; + procedure SetMinLength(const AMinLength: Double); + procedure GetClipping(out AClipMode: TLib3MFBeamLatticeClipMode; out AUniqueResourceID: Cardinal); + procedure SetClipping(const AClipMode: TLib3MFBeamLatticeClipMode; const AUniqueResourceID: Cardinal); + function GetRepresentation(out AUniqueResourceID: Cardinal): Boolean; + procedure SetRepresentation(const AUniqueResourceID: Cardinal); + procedure GetBallOptions(out ABallMode: TLib3MFBeamLatticeBallMode; out ABallRadius: Double); + procedure SetBallOptions(const ABallMode: TLib3MFBeamLatticeBallMode; const ABallRadius: Double); + function GetBeamCount(): Cardinal; + function GetBeam(const AIndex: Cardinal): TLib3MFBeam; + function AddBeam(const ABeamInfo: TLib3MFBeam): Cardinal; + procedure SetBeam(const AIndex: Cardinal; const ABeamInfo: TLib3MFBeam); + procedure SetBeams(const ABeamInfo: ArrayOfLib3MFBeam); + procedure GetBeams(out ABeamInfo: ArrayOfLib3MFBeam); + function GetBallCount(): Cardinal; + function GetBall(const AIndex: Cardinal): TLib3MFBall; + function AddBall(const ABallInfo: TLib3MFBall): Cardinal; + procedure SetBall(const AIndex: Cardinal; const ABallInfo: TLib3MFBall); + procedure SetBalls(const ABallInfo: ArrayOfLib3MFBall); + procedure GetBalls(out ABallInfo: ArrayOfLib3MFBall); + function GetBeamSetCount(): Cardinal; + function AddBeamSet(): TLib3MFBeamSet; + function GetBeamSet(const AIndex: Cardinal): TLib3MFBeamSet; + end; + + +(************************************************************************************************************************* + Class definition for FunctionReference +**************************************************************************************************************************) + + TLib3MFFunctionReference = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetFunctionResourceID(): Cardinal; + procedure SetFunctionResourceID(const AUniqueResourceID: Cardinal); + function GetTransform(): TLib3MFTransform; + procedure SetTransform(const ATransform: TLib3MFTransform); + function GetChannelName(): String; + procedure SetChannelName(const AChannelName: String); + procedure SetMinFeatureSize(const AMinFeatureSize: Double); + function GetMinFeatureSize(): Double; + procedure SetFallBackValue(const AFallBackValue: Double); + function GetFallBackValue(): Double; + end; + + +(************************************************************************************************************************* + Class definition for VolumeDataColor +**************************************************************************************************************************) + + TLib3MFVolumeDataColor = class(TLib3MFFunctionReference) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for MaterialMapping +**************************************************************************************************************************) + + TLib3MFMaterialMapping = class(TLib3MFFunctionReference) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for VolumeDataComposite +**************************************************************************************************************************) + + TLib3MFVolumeDataComposite = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetBaseMaterialGroup(): TLib3MFBaseMaterialGroup; + procedure SetBaseMaterialGroup(const ABaseMaterialGroupInstance: TLib3MFBaseMaterialGroup); + function GetMaterialMappingCount(): Cardinal; + function GetMaterialMapping(const AIndex: Cardinal): TLib3MFMaterialMapping; + function AddMaterialMapping(const ATransform: TLib3MFTransform): TLib3MFMaterialMapping; + procedure RemoveMaterialMapping(const AIndex: Cardinal); + end; + + +(************************************************************************************************************************* + Class definition for VolumeDataProperty +**************************************************************************************************************************) + + TLib3MFVolumeDataProperty = class(TLib3MFFunctionReference) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetName(): String; + procedure SetIsRequired(const AIsRequired: Boolean); + function IsRequired(): Boolean; + end; + + +(************************************************************************************************************************* + Class definition for VolumeData +**************************************************************************************************************************) + + TLib3MFVolumeData = class(TLib3MFResource) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetComposite(): TLib3MFVolumeDataComposite; + function CreateNewComposite(): TLib3MFVolumeDataComposite; + procedure RemoveComposite(); + function GetColor(): TLib3MFVolumeDataColor; + function CreateNewColor(const ATheFunction: TLib3MFFunction): TLib3MFVolumeDataColor; + procedure RemoveColor(); + function GetPropertyCount(): Cardinal; + function GetProperty(const AIndex: Cardinal): TLib3MFVolumeDataProperty; + function AddPropertyFromFunction(const AName: String; const ATheFunction: TLib3MFFunction): TLib3MFVolumeDataProperty; + procedure RemoveProperty(const AIndex: Cardinal); + end; + + +(************************************************************************************************************************* + Class definition for Component +**************************************************************************************************************************) + + TLib3MFComponent = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetObjectResource(): TLib3MFObject; + function GetObjectResourceID(): Cardinal; + function GetUUID(out AHasUUID: Boolean): String; + procedure SetUUID(const AUUID: String); + function HasTransform(): Boolean; + function GetTransform(): TLib3MFTransform; + procedure SetTransform(const ATransform: TLib3MFTransform); + end; + + +(************************************************************************************************************************* + Class definition for ComponentsObject +**************************************************************************************************************************) + + TLib3MFComponentsObject = class(TLib3MFObject) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function AddComponent(const AObjectResource: TLib3MFObject; const ATransform: TLib3MFTransform): TLib3MFComponent; + function GetComponent(const AIndex: Cardinal): TLib3MFComponent; + function GetComponentCount(): Cardinal; + end; + + +(************************************************************************************************************************* + Class definition for BeamSet +**************************************************************************************************************************) + + TLib3MFBeamSet = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + procedure SetName(const AName: String); + function GetName(): String; + procedure SetIdentifier(const AIdentifier: String); + function GetIdentifier(): String; + function GetReferenceCount(): Cardinal; + procedure SetReferences(const AReferences: TCardinalDynArray); + procedure GetReferences(out AReferences: TCardinalDynArray); + function GetBallReferenceCount(): Cardinal; procedure SetBallReferences(const ABallReferences: TCardinalDynArray); procedure GetBallReferences(out ABallReferences: TCardinalDynArray); end; (************************************************************************************************************************* - Class definition for BaseMaterialGroup + Class definition for BaseMaterialGroup +**************************************************************************************************************************) + + TLib3MFBaseMaterialGroup = class(TLib3MFResource) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCount(): Cardinal; + procedure GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + function AddMaterial(const AName: String; const ADisplayColor: TLib3MFColor): Cardinal; + procedure RemoveMaterial(const APropertyID: Cardinal); + function GetName(const APropertyID: Cardinal): String; + procedure SetName(const APropertyID: Cardinal; const AName: String); + procedure SetDisplayColor(const APropertyID: Cardinal; const ATheColor: TLib3MFColor); + function GetDisplayColor(const APropertyID: Cardinal): TLib3MFColor; + end; + + +(************************************************************************************************************************* + Class definition for ColorGroup +**************************************************************************************************************************) + + TLib3MFColorGroup = class(TLib3MFResource) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCount(): Cardinal; + procedure GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + function AddColor(const ATheColor: TLib3MFColor): Cardinal; + procedure RemoveColor(const APropertyID: Cardinal); + procedure SetColor(const APropertyID: Cardinal; const ATheColor: TLib3MFColor); + function GetColor(const APropertyID: Cardinal): TLib3MFColor; + end; + + +(************************************************************************************************************************* + Class definition for Texture2DGroup +**************************************************************************************************************************) + + TLib3MFTexture2DGroup = class(TLib3MFResource) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCount(): Cardinal; + procedure GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + function AddTex2Coord(const AUVCoordinate: TLib3MFTex2Coord): Cardinal; + function GetTex2Coord(const APropertyID: Cardinal): TLib3MFTex2Coord; + procedure RemoveTex2Coord(const APropertyID: Cardinal); + function GetTexture2D(): TLib3MFTexture2D; + end; + + +(************************************************************************************************************************* + Class definition for CompositeMaterials +**************************************************************************************************************************) + + TLib3MFCompositeMaterials = class(TLib3MFResource) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCount(): Cardinal; + procedure GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + function GetBaseMaterialGroup(): TLib3MFBaseMaterialGroup; + function AddComposite(const AComposite: ArrayOfLib3MFCompositeConstituent): Cardinal; + procedure RemoveComposite(const APropertyID: Cardinal); + procedure GetComposite(const APropertyID: Cardinal; out AComposite: ArrayOfLib3MFCompositeConstituent); + end; + + +(************************************************************************************************************************* + Class definition for MultiPropertyGroup +**************************************************************************************************************************) + + TLib3MFMultiPropertyGroup = class(TLib3MFResource) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCount(): Cardinal; + procedure GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + function AddMultiProperty(const APropertyIDs: TCardinalDynArray): Cardinal; + procedure SetMultiProperty(const APropertyID: Cardinal; const APropertyIDs: TCardinalDynArray); + procedure GetMultiProperty(const APropertyID: Cardinal; out APropertyIDs: TCardinalDynArray); + procedure RemoveMultiProperty(const APropertyID: Cardinal); + function GetLayerCount(): Cardinal; + function AddLayer(const ATheLayer: TLib3MFMultiPropertyLayer): Cardinal; + function GetLayer(const ALayerIndex: Cardinal): TLib3MFMultiPropertyLayer; + procedure RemoveLayer(const ALayerIndex: Cardinal); + end; + + +(************************************************************************************************************************* + Class definition for Image3D +**************************************************************************************************************************) + + TLib3MFImage3D = class(TLib3MFResource) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetName(): String; + procedure SetName(const AName: String); + function IsImageStack(): Boolean; + end; + + +(************************************************************************************************************************* + Class definition for ImageStack +**************************************************************************************************************************) + + TLib3MFImageStack = class(TLib3MFImage3D) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetRowCount(): Cardinal; + procedure SetRowCount(const ARowCount: Cardinal); + function GetColumnCount(): Cardinal; + procedure SetColumnCount(const AColumnCount: Cardinal); + function GetSheetCount(): Cardinal; + function GetSheet(const AIndex: Cardinal): TLib3MFAttachment; + procedure SetSheet(const AIndex: Cardinal; const ASheet: TLib3MFAttachment); + function CreateEmptySheet(const AIndex: Cardinal; const APath: String): TLib3MFAttachment; + function CreateSheetFromBuffer(const AIndex: Cardinal; const APath: String; const AData: TByteDynArray): TLib3MFAttachment; + function CreateSheetFromFile(const AIndex: Cardinal; const APath: String; const AFileName: String): TLib3MFAttachment; + end; + + +(************************************************************************************************************************* + Class definition for Attachment +**************************************************************************************************************************) + + TLib3MFAttachment = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetPath(): String; + procedure SetPath(const APath: String); + function PackagePart(): TLib3MFPackagePart; + function GetRelationShipType(): String; + procedure SetRelationShipType(const APath: String); + procedure WriteToFile(const AFileName: String); + procedure ReadFromFile(const AFileName: String); + procedure ReadFromCallback(const ATheReadCallback: PLib3MF_ReadCallback; const AStreamSize: QWord; const ATheSeekCallback: PLib3MF_SeekCallback; const AUserData: Pointer); + function GetStreamSize(): QWord; + procedure WriteToBuffer(out ABuffer: TByteDynArray); + procedure ReadFromBuffer(const ABuffer: TByteDynArray); + end; + + +(************************************************************************************************************************* + Class definition for Texture2D +**************************************************************************************************************************) + + TLib3MFTexture2D = class(TLib3MFResource) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetAttachment(): TLib3MFAttachment; + procedure SetAttachment(const AAttachment: TLib3MFAttachment); + function GetContentType(): TLib3MFTextureType; + procedure SetContentType(const AContentType: TLib3MFTextureType); + procedure GetTileStyleUV(out ATileStyleU: TLib3MFTextureTileStyle; out ATileStyleV: TLib3MFTextureTileStyle); + procedure SetTileStyleUV(const ATileStyleU: TLib3MFTextureTileStyle; const ATileStyleV: TLib3MFTextureTileStyle); + function GetFilter(): TLib3MFTextureFilter; + procedure SetFilter(const AFilter: TLib3MFTextureFilter); + end; + + +(************************************************************************************************************************* + Class definition for ImplicitPort +**************************************************************************************************************************) + + TLib3MFImplicitPort = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetIdentifier(): String; + procedure SetIdentifier(const AIdentifier: String); + function GetDisplayName(): String; + procedure SetDisplayName(const ADisplayName: String); + procedure SetType(const AImplicitPortType: TLib3MFImplicitPortType); + function GetType(): TLib3MFImplicitPortType; + function GetReference(): String; + procedure SetReference(const AReference: String); + end; + + +(************************************************************************************************************************* + Class definition for Iterator +**************************************************************************************************************************) + + TLib3MFIterator = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function MoveNext(): Boolean; + function MovePrevious(): Boolean; + function Count(): QWord; + end; + + +(************************************************************************************************************************* + Class definition for ImplicitPortIterator +**************************************************************************************************************************) + + TLib3MFImplicitPortIterator = class(TLib3MFIterator) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetCurrent(): TLib3MFImplicitPort; + end; + + +(************************************************************************************************************************* + Class definition for ImplicitNode +**************************************************************************************************************************) + + TLib3MFImplicitNode = class(TLib3MFBase) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetIdentifier(): String; + procedure SetIdentifier(const AIdentifier: String); + function GetDisplayName(): String; + procedure SetDisplayName(const ADisplayName: String); + function GetTag(): String; + procedure SetTag(const ATag: String); + function GetNodeType(): TLib3MFImplicitNodeType; + function AddInput(const AIdentifier: String; const ADisplayName: String): TLib3MFImplicitPort; + function GetInputs(): TLib3MFImplicitPortIterator; + function AddOutput(const AIdentifier: String; const ADisplayName: String): TLib3MFImplicitPort; + function GetOutputs(): TLib3MFImplicitPortIterator; + function FindInput(const AIdentifier: String): TLib3MFImplicitPort; + function FindOutput(const AIdentifier: String): TLib3MFImplicitPort; + function AreTypesValid(): Boolean; + end; + + +(************************************************************************************************************************* + Class definition for OneInputNode +**************************************************************************************************************************) + + TLib3MFOneInputNode = class(TLib3MFImplicitNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetInputA(): TLib3MFImplicitPort; + function GetOutputResult(): TLib3MFImplicitPort; + end; + + +(************************************************************************************************************************* + Class definition for SinNode +**************************************************************************************************************************) + + TLib3MFSinNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for CosNode +**************************************************************************************************************************) + + TLib3MFCosNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for TanNode +**************************************************************************************************************************) + + TLib3MFTanNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for ArcSinNode +**************************************************************************************************************************) + + TLib3MFArcSinNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for ArcCosNode +**************************************************************************************************************************) + + TLib3MFArcCosNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for ArcTanNode +**************************************************************************************************************************) + + TLib3MFArcTanNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for SinhNode +**************************************************************************************************************************) + + TLib3MFSinhNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for CoshNode +**************************************************************************************************************************) + + TLib3MFCoshNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for TanhNode +**************************************************************************************************************************) + + TLib3MFTanhNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for RoundNode +**************************************************************************************************************************) + + TLib3MFRoundNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for CeilNode +**************************************************************************************************************************) + + TLib3MFCeilNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for FloorNode +**************************************************************************************************************************) + + TLib3MFFloorNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for SignNode +**************************************************************************************************************************) + + TLib3MFSignNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for FractNode +**************************************************************************************************************************) + + TLib3MFFractNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for AbsNode +**************************************************************************************************************************) + + TLib3MFAbsNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for ExpNode +**************************************************************************************************************************) + + TLib3MFExpNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for LogNode +**************************************************************************************************************************) + + TLib3MFLogNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for Log2Node +**************************************************************************************************************************) + + TLib3MFLog2Node = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for Log10Node +**************************************************************************************************************************) + + TLib3MFLog10Node = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for LengthNode +**************************************************************************************************************************) + + TLib3MFLengthNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for TransposeNode +**************************************************************************************************************************) + + TLib3MFTransposeNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for InverseNode +**************************************************************************************************************************) + + TLib3MFInverseNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for SqrtNode +**************************************************************************************************************************) + + TLib3MFSqrtNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for ResourceIdNode +**************************************************************************************************************************) + + TLib3MFResourceIdNode = class(TLib3MFImplicitNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + procedure SetResource(const AResource: TLib3MFResource); + function GetResource(): TLib3MFResource; + function GetOutputValue(): TLib3MFImplicitPort; + end; + + +(************************************************************************************************************************* + Class definition for TwoInputNode +**************************************************************************************************************************) + + TLib3MFTwoInputNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetInputB(): TLib3MFImplicitPort; + end; + + +(************************************************************************************************************************* + Class definition for AdditionNode +**************************************************************************************************************************) + + TLib3MFAdditionNode = class(TLib3MFTwoInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for SubtractionNode +**************************************************************************************************************************) + + TLib3MFSubtractionNode = class(TLib3MFTwoInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for MultiplicationNode +**************************************************************************************************************************) + + TLib3MFMultiplicationNode = class(TLib3MFTwoInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for DivisionNode +**************************************************************************************************************************) + + TLib3MFDivisionNode = class(TLib3MFTwoInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for DotNode +**************************************************************************************************************************) + + TLib3MFDotNode = class(TLib3MFTwoInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for CrossNode +**************************************************************************************************************************) + + TLib3MFCrossNode = class(TLib3MFTwoInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for ArcTan2Node +**************************************************************************************************************************) + + TLib3MFArcTan2Node = class(TLib3MFTwoInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for MatVecMultiplicationNode +**************************************************************************************************************************) + + TLib3MFMatVecMultiplicationNode = class(TLib3MFTwoInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for MinNode +**************************************************************************************************************************) + + TLib3MFMinNode = class(TLib3MFTwoInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for MaxNode +**************************************************************************************************************************) + + TLib3MFMaxNode = class(TLib3MFTwoInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for FmodNode +**************************************************************************************************************************) + + TLib3MFFmodNode = class(TLib3MFTwoInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for ModNode +**************************************************************************************************************************) + + TLib3MFModNode = class(TLib3MFTwoInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for PowNode +**************************************************************************************************************************) + + TLib3MFPowNode = class(TLib3MFTwoInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for SelectNode +**************************************************************************************************************************) + + TLib3MFSelectNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetInputB(): TLib3MFImplicitPort; + function GetInputC(): TLib3MFImplicitPort; + function GetInputD(): TLib3MFImplicitPort; + end; + + +(************************************************************************************************************************* + Class definition for ClampNode +**************************************************************************************************************************) + + TLib3MFClampNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetInputMin(): TLib3MFImplicitPort; + function GetInputMax(): TLib3MFImplicitPort; + end; + + +(************************************************************************************************************************* + Class definition for ComposeVectorNode +**************************************************************************************************************************) + + TLib3MFComposeVectorNode = class(TLib3MFImplicitNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetInputX(): TLib3MFImplicitPort; + function GetInputY(): TLib3MFImplicitPort; + function GetInputZ(): TLib3MFImplicitPort; + function GetOutputResult(): TLib3MFImplicitPort; + end; + + +(************************************************************************************************************************* + Class definition for VectorFromScalarNode +**************************************************************************************************************************) + + TLib3MFVectorFromScalarNode = class(TLib3MFOneInputNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + end; + + +(************************************************************************************************************************* + Class definition for DecomposeVectorNode +**************************************************************************************************************************) + + TLib3MFDecomposeVectorNode = class(TLib3MFImplicitNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetInputA(): TLib3MFImplicitPort; + function GetOutputX(): TLib3MFImplicitPort; + function GetOutputY(): TLib3MFImplicitPort; + function GetOutputZ(): TLib3MFImplicitPort; + end; + + +(************************************************************************************************************************* + Class definition for ComposeMatrixNode +**************************************************************************************************************************) + + TLib3MFComposeMatrixNode = class(TLib3MFImplicitNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetInputM00(): TLib3MFImplicitPort; + function GetInputM01(): TLib3MFImplicitPort; + function GetInputM02(): TLib3MFImplicitPort; + function GetInputM03(): TLib3MFImplicitPort; + function GetInputM10(): TLib3MFImplicitPort; + function GetInputM11(): TLib3MFImplicitPort; + function GetInputM12(): TLib3MFImplicitPort; + function GetInputM13(): TLib3MFImplicitPort; + function GetInputM20(): TLib3MFImplicitPort; + function GetInputM21(): TLib3MFImplicitPort; + function GetInputM22(): TLib3MFImplicitPort; + function GetInputM23(): TLib3MFImplicitPort; + function GetInputM30(): TLib3MFImplicitPort; + function GetInputM31(): TLib3MFImplicitPort; + function GetInputM32(): TLib3MFImplicitPort; + function GetInputM33(): TLib3MFImplicitPort; + function GetOutputResult(): TLib3MFImplicitPort; + end; + + +(************************************************************************************************************************* + Class definition for MatrixFromRowsNode +**************************************************************************************************************************) + + TLib3MFMatrixFromRowsNode = class(TLib3MFImplicitNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetInputA(): TLib3MFImplicitPort; + function GetInputB(): TLib3MFImplicitPort; + function GetInputC(): TLib3MFImplicitPort; + function GetInputD(): TLib3MFImplicitPort; + function GetOutputResult(): TLib3MFImplicitPort; + end; + + +(************************************************************************************************************************* + Class definition for MatrixFromColumnsNode +**************************************************************************************************************************) + + TLib3MFMatrixFromColumnsNode = class(TLib3MFImplicitNode) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetInputA(): TLib3MFImplicitPort; + function GetInputB(): TLib3MFImplicitPort; + function GetInputC(): TLib3MFImplicitPort; + function GetInputD(): TLib3MFImplicitPort; + function GetOutputResult(): TLib3MFImplicitPort; + end; + + +(************************************************************************************************************************* + Class definition for ConstantNode **************************************************************************************************************************) - TLib3MFBaseMaterialGroup = class(TLib3MFResource) + TLib3MFConstantNode = class(TLib3MFImplicitNode) public constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); destructor Destroy; override; - function GetCount(): Cardinal; - procedure GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); - function AddMaterial(const AName: String; const ADisplayColor: TLib3MFColor): Cardinal; - procedure RemoveMaterial(const APropertyID: Cardinal); - function GetName(const APropertyID: Cardinal): String; - procedure SetName(const APropertyID: Cardinal; const AName: String); - procedure SetDisplayColor(const APropertyID: Cardinal; const ATheColor: TLib3MFColor); - function GetDisplayColor(const APropertyID: Cardinal): TLib3MFColor; + procedure SetConstant(const AValue: Double); + function GetConstant(): Double; + function GetOutputValue(): TLib3MFImplicitPort; end; (************************************************************************************************************************* - Class definition for ColorGroup + Class definition for ConstVecNode **************************************************************************************************************************) - TLib3MFColorGroup = class(TLib3MFResource) + TLib3MFConstVecNode = class(TLib3MFImplicitNode) public constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); destructor Destroy; override; - function GetCount(): Cardinal; - procedure GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); - function AddColor(const ATheColor: TLib3MFColor): Cardinal; - procedure RemoveColor(const APropertyID: Cardinal); - procedure SetColor(const APropertyID: Cardinal; const ATheColor: TLib3MFColor); - function GetColor(const APropertyID: Cardinal): TLib3MFColor; + procedure SetVector(const AValue: TLib3MFVector); + function GetVector(): TLib3MFVector; + function GetOutputVector(): TLib3MFImplicitPort; end; (************************************************************************************************************************* - Class definition for Texture2DGroup + Class definition for ConstMatNode **************************************************************************************************************************) - TLib3MFTexture2DGroup = class(TLib3MFResource) + TLib3MFConstMatNode = class(TLib3MFImplicitNode) public constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); destructor Destroy; override; - function GetCount(): Cardinal; - procedure GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); - function AddTex2Coord(const AUVCoordinate: TLib3MFTex2Coord): Cardinal; - function GetTex2Coord(const APropertyID: Cardinal): TLib3MFTex2Coord; - procedure RemoveTex2Coord(const APropertyID: Cardinal); - function GetTexture2D(): TLib3MFTexture2D; + procedure SetMatrix(const AValue: TLib3MFMatrix4x4); + function GetMatrix(): TLib3MFMatrix4x4; + function GetOutputMatrix(): TLib3MFImplicitPort; end; (************************************************************************************************************************* - Class definition for CompositeMaterials + Class definition for MeshNode **************************************************************************************************************************) - TLib3MFCompositeMaterials = class(TLib3MFResource) + TLib3MFMeshNode = class(TLib3MFImplicitNode) public constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); destructor Destroy; override; - function GetCount(): Cardinal; - procedure GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); - function GetBaseMaterialGroup(): TLib3MFBaseMaterialGroup; - function AddComposite(const AComposite: ArrayOfLib3MFCompositeConstituent): Cardinal; - procedure RemoveComposite(const APropertyID: Cardinal); - procedure GetComposite(const APropertyID: Cardinal; out AComposite: ArrayOfLib3MFCompositeConstituent); + function GetInputMesh(): TLib3MFImplicitPort; + function GetInputPos(): TLib3MFImplicitPort; + function GetOutputDistance(): TLib3MFImplicitPort; end; (************************************************************************************************************************* - Class definition for MultiPropertyGroup + Class definition for UnsignedMeshNode **************************************************************************************************************************) - TLib3MFMultiPropertyGroup = class(TLib3MFResource) + TLib3MFUnsignedMeshNode = class(TLib3MFImplicitNode) public constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); destructor Destroy; override; - function GetCount(): Cardinal; - procedure GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); - function AddMultiProperty(const APropertyIDs: TCardinalDynArray): Cardinal; - procedure SetMultiProperty(const APropertyID: Cardinal; const APropertyIDs: TCardinalDynArray); - procedure GetMultiProperty(const APropertyID: Cardinal; out APropertyIDs: TCardinalDynArray); - procedure RemoveMultiProperty(const APropertyID: Cardinal); - function GetLayerCount(): Cardinal; - function AddLayer(const ATheLayer: TLib3MFMultiPropertyLayer): Cardinal; - function GetLayer(const ALayerIndex: Cardinal): TLib3MFMultiPropertyLayer; - procedure RemoveLayer(const ALayerIndex: Cardinal); + function GetInputMesh(): TLib3MFImplicitPort; + function GetInputPos(): TLib3MFImplicitPort; + function GetOutputDistance(): TLib3MFImplicitPort; end; (************************************************************************************************************************* - Class definition for Attachment + Class definition for FunctionCallNode **************************************************************************************************************************) - TLib3MFAttachment = class(TLib3MFBase) + TLib3MFFunctionCallNode = class(TLib3MFImplicitNode) public constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); destructor Destroy; override; - function GetPath(): String; - procedure SetPath(const APath: String); - function PackagePart(): TLib3MFPackagePart; - function GetRelationShipType(): String; - procedure SetRelationShipType(const APath: String); - procedure WriteToFile(const AFileName: String); - procedure ReadFromFile(const AFileName: String); - procedure ReadFromCallback(const ATheReadCallback: PLib3MF_ReadCallback; const AStreamSize: QWord; const ATheSeekCallback: PLib3MF_SeekCallback; const AUserData: Pointer); - function GetStreamSize(): QWord; - procedure WriteToBuffer(out ABuffer: TByteDynArray); - procedure ReadFromBuffer(const ABuffer: TByteDynArray); + function GetInputFunctionID(): TLib3MFImplicitPort; end; (************************************************************************************************************************* - Class definition for Texture2D + Class definition for NodeIterator **************************************************************************************************************************) - TLib3MFTexture2D = class(TLib3MFResource) + TLib3MFNodeIterator = class(TLib3MFIterator) public constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); destructor Destroy; override; - function GetAttachment(): TLib3MFAttachment; - procedure SetAttachment(const AAttachment: TLib3MFAttachment); - function GetContentType(): TLib3MFTextureType; - procedure SetContentType(const AContentType: TLib3MFTextureType); - procedure GetTileStyleUV(out ATileStyleU: TLib3MFTextureTileStyle; out ATileStyleV: TLib3MFTextureTileStyle); - procedure SetTileStyleUV(const ATileStyleU: TLib3MFTextureTileStyle; const ATileStyleV: TLib3MFTextureTileStyle); - function GetFilter(): TLib3MFTextureFilter; + function GetCurrent(): TLib3MFImplicitNode; + end; + + +(************************************************************************************************************************* + Class definition for Function +**************************************************************************************************************************) + + TLib3MFFunction = class(TLib3MFResource) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetDisplayName(): String; + procedure SetDisplayName(const ADisplayName: String); + function AddInput(const AIdentifier: String; const ADisplayName: String; const AType: TLib3MFImplicitPortType): TLib3MFImplicitPort; + function GetInputs(): TLib3MFImplicitPortIterator; + procedure RemoveInput(const AInput: TLib3MFImplicitPort); + function AddOutput(const AIdentifier: String; const ADisplayName: String; const AType: TLib3MFImplicitPortType): TLib3MFImplicitPort; + function GetOutputs(): TLib3MFImplicitPortIterator; + procedure RemoveOutput(const AOutput: TLib3MFImplicitPort); + function FindInput(const AIdentifier: String): TLib3MFImplicitPort; + function FindOutput(const AIdentifier: String): TLib3MFImplicitPort; + end; + + +(************************************************************************************************************************* + Class definition for ImplicitFunction +**************************************************************************************************************************) + + TLib3MFImplicitFunction = class(TLib3MFFunction) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetIdentifier(): String; + procedure SetIdentifier(const AIdentifier: String); + function AddNode(const ANodeType: TLib3MFImplicitNodeType; const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFImplicitNode; + function AddSinNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFSinNode; + function AddCosNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFCosNode; + function AddTanNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFTanNode; + function AddArcSinNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFArcSinNode; + function AddArcCosNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFArcCosNode; + function AddArcTan2Node(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFArcTan2Node; + function AddSinhNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFSinhNode; + function AddCoshNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFCoshNode; + function AddTanhNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFTanhNode; + function AddRoundNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFRoundNode; + function AddCeilNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFCeilNode; + function AddFloorNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFFloorNode; + function AddSignNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFSignNode; + function AddFractNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFFractNode; + function AddAbsNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFAbsNode; + function AddExpNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFExpNode; + function AddLogNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFLogNode; + function AddLog2Node(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFLog2Node; + function AddLog10Node(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFLog10Node; + function AddLengthNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFLengthNode; + function AddTransposeNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFTransposeNode; + function InverseNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFInverseNode; + function AddSqrtNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFSqrtNode; + function AddResourceIdNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFResourceIdNode; + function AddAdditionNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFAdditionNode; + function AddSubtractionNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFSubtractionNode; + function AddMultiplicationNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFMultiplicationNode; + function AddDivisionNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFDivisionNode; + function AddDotNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFDotNode; + function AddCrossNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFCrossNode; + function AddMatVecMultiplicationNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFMatVecMultiplicationNode; + function AddMinNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFMinNode; + function AddMaxNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFMaxNode; + function AddFmodNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFFmodNode; + function AddPowNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFPowNode; + function AddSelectNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFSelectNode; + function AddClampNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFClampNode; + function AddComposeVectorNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFComposeVectorNode; + function AddVectorFromScalarNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFVectorFromScalarNode; + function AddDecomposeVectorNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFDecomposeVectorNode; + function AddComposeMatrixNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFComposeMatrixNode; + function AddMatrixFromRowsNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFMatrixFromRowsNode; + function AddMatrixFromColumnsNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFMatrixFromColumnsNode; + function AddConstantNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFConstantNode; + function AddConstVecNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFConstVecNode; + function AddConstMatNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFConstMatNode; + function AddMeshNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFMeshNode; + function AddUnsignedMeshNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFUnsignedMeshNode; + function AddFunctionCallNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFFunctionCallNode; + function GetNodes(): TLib3MFNodeIterator; + procedure RemoveNode(const ANode: TLib3MFImplicitNode); + procedure AddLink(const ASource: TLib3MFImplicitPort; const ATarget: TLib3MFImplicitPort); + procedure AddLinkByNames(const ASource: String; const ATarget: String); + procedure Clear(); + procedure SortNodesTopologically(); + end; + + +(************************************************************************************************************************* + Class definition for FunctionFromImage3D +**************************************************************************************************************************) + + TLib3MFFunctionFromImage3D = class(TLib3MFFunction) + public + constructor Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + destructor Destroy; override; + function GetImage3D(): TLib3MFImage3D; + procedure SetImage3D(const AImage3D: TLib3MFImage3D); procedure SetFilter(const AFilter: TLib3MFTextureFilter); + function GetFilter(): TLib3MFTextureFilter; + procedure SetTileStyles(const ATileStyleU: TLib3MFTextureTileStyle; const ATileStyleV: TLib3MFTextureTileStyle; const ATileStyleW: TLib3MFTextureTileStyle); + procedure GetTileStyles(out ATileStyleU: TLib3MFTextureTileStyle; out ATileStyleV: TLib3MFTextureTileStyle; out ATileStyleW: TLib3MFTextureTileStyle); + function GetOffset(): Double; + procedure SetOffset(const AOffset: Double); + function GetScale(): Double; + procedure SetScale(const AScale: Double); end; @@ -4910,6 +8920,7 @@ TLib3MFModel = class(TLib3MFBase) function GetComponentsObjectByID(const AUniqueResourceID: Cardinal): TLib3MFComponentsObject; function GetColorGroupByID(const AUniqueResourceID: Cardinal): TLib3MFColorGroup; function GetSliceStackByID(const AUniqueResourceID: Cardinal): TLib3MFSliceStack; + function GetLevelSetByID(const AUniqueResourceID: Cardinal): TLib3MFLevelSet; function GetBuildUUID(out AHasUUID: Boolean): String; procedure SetBuildUUID(const AUUID: String); function GetBuildItems(): TLib3MFBuildItemIterator; @@ -4925,7 +8936,9 @@ TLib3MFModel = class(TLib3MFBase) function GetCompositeMaterials(): TLib3MFCompositeMaterialsIterator; function GetMultiPropertyGroups(): TLib3MFMultiPropertyGroupIterator; function GetSliceStacks(): TLib3MFSliceStackIterator; + function GetImage3Ds(): TLib3MFImage3DIterator; function MergeToModel(): TLib3MFModel; + procedure MergeFromModel(const AModelInstance: TLib3MFModel); function AddMeshObject(): TLib3MFMeshObject; function AddComponentsObject(): TLib3MFComponentsObject; function AddSliceStack(const AZBottom: Double): TLib3MFSliceStack; @@ -4935,6 +8948,8 @@ TLib3MFModel = class(TLib3MFBase) function AddTexture2DGroup(const ATexture2DInstance: TLib3MFTexture2D): TLib3MFTexture2DGroup; function AddCompositeMaterials(const ABaseMaterialGroupInstance: TLib3MFBaseMaterialGroup): TLib3MFCompositeMaterials; function AddMultiPropertyGroup(): TLib3MFMultiPropertyGroup; + function AddImageStack(const AColumnCount: Cardinal; const ARowCount: Cardinal; const ASheetCount: Cardinal): TLib3MFImageStack; + function GetImageStackByID(const AUniqueResourceID: Cardinal): TLib3MFImageStack; function AddBuildItem(const AObject: TLib3MFObject; const ATransform: TLib3MFTransform): TLib3MFBuildItem; procedure RemoveBuildItem(const ABuildItemInstance: TLib3MFBuildItem); function GetMetaDataGroup(): TLib3MFMetaDataGroup; @@ -4951,6 +8966,13 @@ TLib3MFModel = class(TLib3MFBase) procedure RemoveCustomContentType(const AExtension: String); procedure SetRandomNumberCallback(const ATheCallback: PLib3MF_RandomNumberCallback; const AUserData: Pointer); function GetKeyStore(): TLib3MFKeyStore; + function GetFunctions(): TLib3MFFunctionIterator; + function AddImplicitFunction(): TLib3MFImplicitFunction; + function AddFunctionFromImage3D(const AImage3DInstance: TLib3MFImage3D): TLib3MFFunctionFromImage3D; + function AddVolumeData(): TLib3MFVolumeData; + function AddLevelSet(): TLib3MFLevelSet; + function GetLevelSets(): TLib3MFLevelSetIterator; + procedure RemoveResource(const AResource: TLib3MFResource); end; (************************************************************************************************************************* @@ -5008,6 +9030,9 @@ TLib3MFWrapper = class(TObject) FLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupFunc: TLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupFunc; FLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsFunc: TLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsFunc; FLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupFunc: TLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupFunc; + FLib3MFImage3DIterator_GetCurrentImage3DFunc: TLib3MFImage3DIterator_GetCurrentImage3DFunc; + FLib3MFFunctionIterator_GetCurrentFunctionFunc: TLib3MFFunctionIterator_GetCurrentFunctionFunc; + FLib3MFLevelSetIterator_GetCurrentLevelSetFunc: TLib3MFLevelSetIterator_GetCurrentLevelSetFunc; FLib3MFMetaData_GetNameSpaceFunc: TLib3MFMetaData_GetNameSpaceFunc; FLib3MFMetaData_SetNameSpaceFunc: TLib3MFMetaData_SetNameSpaceFunc; FLib3MFMetaData_GetNameFunc: TLib3MFMetaData_GetNameFunc; @@ -5033,6 +9058,7 @@ TLib3MFWrapper = class(TObject) FLib3MFObject_SetPartNumberFunc: TLib3MFObject_SetPartNumberFunc; FLib3MFObject_IsMeshObjectFunc: TLib3MFObject_IsMeshObjectFunc; FLib3MFObject_IsComponentsObjectFunc: TLib3MFObject_IsComponentsObjectFunc; + FLib3MFObject_IsLevelSetObjectFunc: TLib3MFObject_IsLevelSetObjectFunc; FLib3MFObject_IsValidFunc: TLib3MFObject_IsValidFunc; FLib3MFObject_SetAttachmentAsThumbnailFunc: TLib3MFObject_SetAttachmentAsThumbnailFunc; FLib3MFObject_GetThumbnailAttachmentFunc: TLib3MFObject_GetThumbnailAttachmentFunc; @@ -5067,6 +9093,24 @@ TLib3MFWrapper = class(TObject) FLib3MFMeshObject_SetGeometryFunc: TLib3MFMeshObject_SetGeometryFunc; FLib3MFMeshObject_IsManifoldAndOrientedFunc: TLib3MFMeshObject_IsManifoldAndOrientedFunc; FLib3MFMeshObject_BeamLatticeFunc: TLib3MFMeshObject_BeamLatticeFunc; + FLib3MFMeshObject_GetVolumeDataFunc: TLib3MFMeshObject_GetVolumeDataFunc; + FLib3MFMeshObject_SetVolumeDataFunc: TLib3MFMeshObject_SetVolumeDataFunc; + FLib3MFLevelSet_GetFunctionFunc: TLib3MFLevelSet_GetFunctionFunc; + FLib3MFLevelSet_SetFunctionFunc: TLib3MFLevelSet_SetFunctionFunc; + FLib3MFLevelSet_GetTransformFunc: TLib3MFLevelSet_GetTransformFunc; + FLib3MFLevelSet_SetTransformFunc: TLib3MFLevelSet_SetTransformFunc; + FLib3MFLevelSet_GetChannelNameFunc: TLib3MFLevelSet_GetChannelNameFunc; + FLib3MFLevelSet_SetChannelNameFunc: TLib3MFLevelSet_SetChannelNameFunc; + FLib3MFLevelSet_SetMinFeatureSizeFunc: TLib3MFLevelSet_SetMinFeatureSizeFunc; + FLib3MFLevelSet_GetMinFeatureSizeFunc: TLib3MFLevelSet_GetMinFeatureSizeFunc; + FLib3MFLevelSet_SetFallBackValueFunc: TLib3MFLevelSet_SetFallBackValueFunc; + FLib3MFLevelSet_GetFallBackValueFunc: TLib3MFLevelSet_GetFallBackValueFunc; + FLib3MFLevelSet_SetMeshBBoxOnlyFunc: TLib3MFLevelSet_SetMeshBBoxOnlyFunc; + FLib3MFLevelSet_GetMeshBBoxOnlyFunc: TLib3MFLevelSet_GetMeshBBoxOnlyFunc; + FLib3MFLevelSet_SetMeshFunc: TLib3MFLevelSet_SetMeshFunc; + FLib3MFLevelSet_GetMeshFunc: TLib3MFLevelSet_GetMeshFunc; + FLib3MFLevelSet_GetVolumeDataFunc: TLib3MFLevelSet_GetVolumeDataFunc; + FLib3MFLevelSet_SetVolumeDataFunc: TLib3MFLevelSet_SetVolumeDataFunc; FLib3MFBeamLattice_GetMinLengthFunc: TLib3MFBeamLattice_GetMinLengthFunc; FLib3MFBeamLattice_SetMinLengthFunc: TLib3MFBeamLattice_SetMinLengthFunc; FLib3MFBeamLattice_GetClippingFunc: TLib3MFBeamLattice_GetClippingFunc; @@ -5090,6 +9134,35 @@ TLib3MFWrapper = class(TObject) FLib3MFBeamLattice_GetBeamSetCountFunc: TLib3MFBeamLattice_GetBeamSetCountFunc; FLib3MFBeamLattice_AddBeamSetFunc: TLib3MFBeamLattice_AddBeamSetFunc; FLib3MFBeamLattice_GetBeamSetFunc: TLib3MFBeamLattice_GetBeamSetFunc; + FLib3MFFunctionReference_GetFunctionResourceIDFunc: TLib3MFFunctionReference_GetFunctionResourceIDFunc; + FLib3MFFunctionReference_SetFunctionResourceIDFunc: TLib3MFFunctionReference_SetFunctionResourceIDFunc; + FLib3MFFunctionReference_GetTransformFunc: TLib3MFFunctionReference_GetTransformFunc; + FLib3MFFunctionReference_SetTransformFunc: TLib3MFFunctionReference_SetTransformFunc; + FLib3MFFunctionReference_GetChannelNameFunc: TLib3MFFunctionReference_GetChannelNameFunc; + FLib3MFFunctionReference_SetChannelNameFunc: TLib3MFFunctionReference_SetChannelNameFunc; + FLib3MFFunctionReference_SetMinFeatureSizeFunc: TLib3MFFunctionReference_SetMinFeatureSizeFunc; + FLib3MFFunctionReference_GetMinFeatureSizeFunc: TLib3MFFunctionReference_GetMinFeatureSizeFunc; + FLib3MFFunctionReference_SetFallBackValueFunc: TLib3MFFunctionReference_SetFallBackValueFunc; + FLib3MFFunctionReference_GetFallBackValueFunc: TLib3MFFunctionReference_GetFallBackValueFunc; + FLib3MFVolumeDataComposite_GetBaseMaterialGroupFunc: TLib3MFVolumeDataComposite_GetBaseMaterialGroupFunc; + FLib3MFVolumeDataComposite_SetBaseMaterialGroupFunc: TLib3MFVolumeDataComposite_SetBaseMaterialGroupFunc; + FLib3MFVolumeDataComposite_GetMaterialMappingCountFunc: TLib3MFVolumeDataComposite_GetMaterialMappingCountFunc; + FLib3MFVolumeDataComposite_GetMaterialMappingFunc: TLib3MFVolumeDataComposite_GetMaterialMappingFunc; + FLib3MFVolumeDataComposite_AddMaterialMappingFunc: TLib3MFVolumeDataComposite_AddMaterialMappingFunc; + FLib3MFVolumeDataComposite_RemoveMaterialMappingFunc: TLib3MFVolumeDataComposite_RemoveMaterialMappingFunc; + FLib3MFVolumeDataProperty_GetNameFunc: TLib3MFVolumeDataProperty_GetNameFunc; + FLib3MFVolumeDataProperty_SetIsRequiredFunc: TLib3MFVolumeDataProperty_SetIsRequiredFunc; + FLib3MFVolumeDataProperty_IsRequiredFunc: TLib3MFVolumeDataProperty_IsRequiredFunc; + FLib3MFVolumeData_GetCompositeFunc: TLib3MFVolumeData_GetCompositeFunc; + FLib3MFVolumeData_CreateNewCompositeFunc: TLib3MFVolumeData_CreateNewCompositeFunc; + FLib3MFVolumeData_RemoveCompositeFunc: TLib3MFVolumeData_RemoveCompositeFunc; + FLib3MFVolumeData_GetColorFunc: TLib3MFVolumeData_GetColorFunc; + FLib3MFVolumeData_CreateNewColorFunc: TLib3MFVolumeData_CreateNewColorFunc; + FLib3MFVolumeData_RemoveColorFunc: TLib3MFVolumeData_RemoveColorFunc; + FLib3MFVolumeData_GetPropertyCountFunc: TLib3MFVolumeData_GetPropertyCountFunc; + FLib3MFVolumeData_GetPropertyFunc: TLib3MFVolumeData_GetPropertyFunc; + FLib3MFVolumeData_AddPropertyFromFunctionFunc: TLib3MFVolumeData_AddPropertyFromFunctionFunc; + FLib3MFVolumeData_RemovePropertyFunc: TLib3MFVolumeData_RemovePropertyFunc; FLib3MFComponent_GetObjectResourceFunc: TLib3MFComponent_GetObjectResourceFunc; FLib3MFComponent_GetObjectResourceIDFunc: TLib3MFComponent_GetObjectResourceIDFunc; FLib3MFComponent_GetUUIDFunc: TLib3MFComponent_GetUUIDFunc; @@ -5146,6 +9219,19 @@ TLib3MFWrapper = class(TObject) FLib3MFMultiPropertyGroup_AddLayerFunc: TLib3MFMultiPropertyGroup_AddLayerFunc; FLib3MFMultiPropertyGroup_GetLayerFunc: TLib3MFMultiPropertyGroup_GetLayerFunc; FLib3MFMultiPropertyGroup_RemoveLayerFunc: TLib3MFMultiPropertyGroup_RemoveLayerFunc; + FLib3MFImage3D_GetNameFunc: TLib3MFImage3D_GetNameFunc; + FLib3MFImage3D_SetNameFunc: TLib3MFImage3D_SetNameFunc; + FLib3MFImage3D_IsImageStackFunc: TLib3MFImage3D_IsImageStackFunc; + FLib3MFImageStack_GetRowCountFunc: TLib3MFImageStack_GetRowCountFunc; + FLib3MFImageStack_SetRowCountFunc: TLib3MFImageStack_SetRowCountFunc; + FLib3MFImageStack_GetColumnCountFunc: TLib3MFImageStack_GetColumnCountFunc; + FLib3MFImageStack_SetColumnCountFunc: TLib3MFImageStack_SetColumnCountFunc; + FLib3MFImageStack_GetSheetCountFunc: TLib3MFImageStack_GetSheetCountFunc; + FLib3MFImageStack_GetSheetFunc: TLib3MFImageStack_GetSheetFunc; + FLib3MFImageStack_SetSheetFunc: TLib3MFImageStack_SetSheetFunc; + FLib3MFImageStack_CreateEmptySheetFunc: TLib3MFImageStack_CreateEmptySheetFunc; + FLib3MFImageStack_CreateSheetFromBufferFunc: TLib3MFImageStack_CreateSheetFromBufferFunc; + FLib3MFImageStack_CreateSheetFromFileFunc: TLib3MFImageStack_CreateSheetFromFileFunc; FLib3MFAttachment_GetPathFunc: TLib3MFAttachment_GetPathFunc; FLib3MFAttachment_SetPathFunc: TLib3MFAttachment_SetPathFunc; FLib3MFAttachment_PackagePartFunc: TLib3MFAttachment_PackagePartFunc; @@ -5165,6 +9251,173 @@ TLib3MFWrapper = class(TObject) FLib3MFTexture2D_SetTileStyleUVFunc: TLib3MFTexture2D_SetTileStyleUVFunc; FLib3MFTexture2D_GetFilterFunc: TLib3MFTexture2D_GetFilterFunc; FLib3MFTexture2D_SetFilterFunc: TLib3MFTexture2D_SetFilterFunc; + FLib3MFImplicitPort_GetIdentifierFunc: TLib3MFImplicitPort_GetIdentifierFunc; + FLib3MFImplicitPort_SetIdentifierFunc: TLib3MFImplicitPort_SetIdentifierFunc; + FLib3MFImplicitPort_GetDisplayNameFunc: TLib3MFImplicitPort_GetDisplayNameFunc; + FLib3MFImplicitPort_SetDisplayNameFunc: TLib3MFImplicitPort_SetDisplayNameFunc; + FLib3MFImplicitPort_SetTypeFunc: TLib3MFImplicitPort_SetTypeFunc; + FLib3MFImplicitPort_GetTypeFunc: TLib3MFImplicitPort_GetTypeFunc; + FLib3MFImplicitPort_GetReferenceFunc: TLib3MFImplicitPort_GetReferenceFunc; + FLib3MFImplicitPort_SetReferenceFunc: TLib3MFImplicitPort_SetReferenceFunc; + FLib3MFIterator_MoveNextFunc: TLib3MFIterator_MoveNextFunc; + FLib3MFIterator_MovePreviousFunc: TLib3MFIterator_MovePreviousFunc; + FLib3MFIterator_CountFunc: TLib3MFIterator_CountFunc; + FLib3MFImplicitPortIterator_GetCurrentFunc: TLib3MFImplicitPortIterator_GetCurrentFunc; + FLib3MFImplicitNode_GetIdentifierFunc: TLib3MFImplicitNode_GetIdentifierFunc; + FLib3MFImplicitNode_SetIdentifierFunc: TLib3MFImplicitNode_SetIdentifierFunc; + FLib3MFImplicitNode_GetDisplayNameFunc: TLib3MFImplicitNode_GetDisplayNameFunc; + FLib3MFImplicitNode_SetDisplayNameFunc: TLib3MFImplicitNode_SetDisplayNameFunc; + FLib3MFImplicitNode_GetTagFunc: TLib3MFImplicitNode_GetTagFunc; + FLib3MFImplicitNode_SetTagFunc: TLib3MFImplicitNode_SetTagFunc; + FLib3MFImplicitNode_GetNodeTypeFunc: TLib3MFImplicitNode_GetNodeTypeFunc; + FLib3MFImplicitNode_AddInputFunc: TLib3MFImplicitNode_AddInputFunc; + FLib3MFImplicitNode_GetInputsFunc: TLib3MFImplicitNode_GetInputsFunc; + FLib3MFImplicitNode_AddOutputFunc: TLib3MFImplicitNode_AddOutputFunc; + FLib3MFImplicitNode_GetOutputsFunc: TLib3MFImplicitNode_GetOutputsFunc; + FLib3MFImplicitNode_FindInputFunc: TLib3MFImplicitNode_FindInputFunc; + FLib3MFImplicitNode_FindOutputFunc: TLib3MFImplicitNode_FindOutputFunc; + FLib3MFImplicitNode_AreTypesValidFunc: TLib3MFImplicitNode_AreTypesValidFunc; + FLib3MFOneInputNode_GetInputAFunc: TLib3MFOneInputNode_GetInputAFunc; + FLib3MFOneInputNode_GetOutputResultFunc: TLib3MFOneInputNode_GetOutputResultFunc; + FLib3MFResourceIdNode_SetResourceFunc: TLib3MFResourceIdNode_SetResourceFunc; + FLib3MFResourceIdNode_GetResourceFunc: TLib3MFResourceIdNode_GetResourceFunc; + FLib3MFResourceIdNode_GetOutputValueFunc: TLib3MFResourceIdNode_GetOutputValueFunc; + FLib3MFTwoInputNode_GetInputBFunc: TLib3MFTwoInputNode_GetInputBFunc; + FLib3MFSelectNode_GetInputBFunc: TLib3MFSelectNode_GetInputBFunc; + FLib3MFSelectNode_GetInputCFunc: TLib3MFSelectNode_GetInputCFunc; + FLib3MFSelectNode_GetInputDFunc: TLib3MFSelectNode_GetInputDFunc; + FLib3MFClampNode_GetInputMinFunc: TLib3MFClampNode_GetInputMinFunc; + FLib3MFClampNode_GetInputMaxFunc: TLib3MFClampNode_GetInputMaxFunc; + FLib3MFComposeVectorNode_GetInputXFunc: TLib3MFComposeVectorNode_GetInputXFunc; + FLib3MFComposeVectorNode_GetInputYFunc: TLib3MFComposeVectorNode_GetInputYFunc; + FLib3MFComposeVectorNode_GetInputZFunc: TLib3MFComposeVectorNode_GetInputZFunc; + FLib3MFComposeVectorNode_GetOutputResultFunc: TLib3MFComposeVectorNode_GetOutputResultFunc; + FLib3MFDecomposeVectorNode_GetInputAFunc: TLib3MFDecomposeVectorNode_GetInputAFunc; + FLib3MFDecomposeVectorNode_GetOutputXFunc: TLib3MFDecomposeVectorNode_GetOutputXFunc; + FLib3MFDecomposeVectorNode_GetOutputYFunc: TLib3MFDecomposeVectorNode_GetOutputYFunc; + FLib3MFDecomposeVectorNode_GetOutputZFunc: TLib3MFDecomposeVectorNode_GetOutputZFunc; + FLib3MFComposeMatrixNode_GetInputM00Func: TLib3MFComposeMatrixNode_GetInputM00Func; + FLib3MFComposeMatrixNode_GetInputM01Func: TLib3MFComposeMatrixNode_GetInputM01Func; + FLib3MFComposeMatrixNode_GetInputM02Func: TLib3MFComposeMatrixNode_GetInputM02Func; + FLib3MFComposeMatrixNode_GetInputM03Func: TLib3MFComposeMatrixNode_GetInputM03Func; + FLib3MFComposeMatrixNode_GetInputM10Func: TLib3MFComposeMatrixNode_GetInputM10Func; + FLib3MFComposeMatrixNode_GetInputM11Func: TLib3MFComposeMatrixNode_GetInputM11Func; + FLib3MFComposeMatrixNode_GetInputM12Func: TLib3MFComposeMatrixNode_GetInputM12Func; + FLib3MFComposeMatrixNode_GetInputM13Func: TLib3MFComposeMatrixNode_GetInputM13Func; + FLib3MFComposeMatrixNode_GetInputM20Func: TLib3MFComposeMatrixNode_GetInputM20Func; + FLib3MFComposeMatrixNode_GetInputM21Func: TLib3MFComposeMatrixNode_GetInputM21Func; + FLib3MFComposeMatrixNode_GetInputM22Func: TLib3MFComposeMatrixNode_GetInputM22Func; + FLib3MFComposeMatrixNode_GetInputM23Func: TLib3MFComposeMatrixNode_GetInputM23Func; + FLib3MFComposeMatrixNode_GetInputM30Func: TLib3MFComposeMatrixNode_GetInputM30Func; + FLib3MFComposeMatrixNode_GetInputM31Func: TLib3MFComposeMatrixNode_GetInputM31Func; + FLib3MFComposeMatrixNode_GetInputM32Func: TLib3MFComposeMatrixNode_GetInputM32Func; + FLib3MFComposeMatrixNode_GetInputM33Func: TLib3MFComposeMatrixNode_GetInputM33Func; + FLib3MFComposeMatrixNode_GetOutputResultFunc: TLib3MFComposeMatrixNode_GetOutputResultFunc; + FLib3MFMatrixFromRowsNode_GetInputAFunc: TLib3MFMatrixFromRowsNode_GetInputAFunc; + FLib3MFMatrixFromRowsNode_GetInputBFunc: TLib3MFMatrixFromRowsNode_GetInputBFunc; + FLib3MFMatrixFromRowsNode_GetInputCFunc: TLib3MFMatrixFromRowsNode_GetInputCFunc; + FLib3MFMatrixFromRowsNode_GetInputDFunc: TLib3MFMatrixFromRowsNode_GetInputDFunc; + FLib3MFMatrixFromRowsNode_GetOutputResultFunc: TLib3MFMatrixFromRowsNode_GetOutputResultFunc; + FLib3MFMatrixFromColumnsNode_GetInputAFunc: TLib3MFMatrixFromColumnsNode_GetInputAFunc; + FLib3MFMatrixFromColumnsNode_GetInputBFunc: TLib3MFMatrixFromColumnsNode_GetInputBFunc; + FLib3MFMatrixFromColumnsNode_GetInputCFunc: TLib3MFMatrixFromColumnsNode_GetInputCFunc; + FLib3MFMatrixFromColumnsNode_GetInputDFunc: TLib3MFMatrixFromColumnsNode_GetInputDFunc; + FLib3MFMatrixFromColumnsNode_GetOutputResultFunc: TLib3MFMatrixFromColumnsNode_GetOutputResultFunc; + FLib3MFConstantNode_SetConstantFunc: TLib3MFConstantNode_SetConstantFunc; + FLib3MFConstantNode_GetConstantFunc: TLib3MFConstantNode_GetConstantFunc; + FLib3MFConstantNode_GetOutputValueFunc: TLib3MFConstantNode_GetOutputValueFunc; + FLib3MFConstVecNode_SetVectorFunc: TLib3MFConstVecNode_SetVectorFunc; + FLib3MFConstVecNode_GetVectorFunc: TLib3MFConstVecNode_GetVectorFunc; + FLib3MFConstVecNode_GetOutputVectorFunc: TLib3MFConstVecNode_GetOutputVectorFunc; + FLib3MFConstMatNode_SetMatrixFunc: TLib3MFConstMatNode_SetMatrixFunc; + FLib3MFConstMatNode_GetMatrixFunc: TLib3MFConstMatNode_GetMatrixFunc; + FLib3MFConstMatNode_GetOutputMatrixFunc: TLib3MFConstMatNode_GetOutputMatrixFunc; + FLib3MFMeshNode_GetInputMeshFunc: TLib3MFMeshNode_GetInputMeshFunc; + FLib3MFMeshNode_GetInputPosFunc: TLib3MFMeshNode_GetInputPosFunc; + FLib3MFMeshNode_GetOutputDistanceFunc: TLib3MFMeshNode_GetOutputDistanceFunc; + FLib3MFUnsignedMeshNode_GetInputMeshFunc: TLib3MFUnsignedMeshNode_GetInputMeshFunc; + FLib3MFUnsignedMeshNode_GetInputPosFunc: TLib3MFUnsignedMeshNode_GetInputPosFunc; + FLib3MFUnsignedMeshNode_GetOutputDistanceFunc: TLib3MFUnsignedMeshNode_GetOutputDistanceFunc; + FLib3MFFunctionCallNode_GetInputFunctionIDFunc: TLib3MFFunctionCallNode_GetInputFunctionIDFunc; + FLib3MFNodeIterator_GetCurrentFunc: TLib3MFNodeIterator_GetCurrentFunc; + FLib3MFFunction_GetDisplayNameFunc: TLib3MFFunction_GetDisplayNameFunc; + FLib3MFFunction_SetDisplayNameFunc: TLib3MFFunction_SetDisplayNameFunc; + FLib3MFFunction_AddInputFunc: TLib3MFFunction_AddInputFunc; + FLib3MFFunction_GetInputsFunc: TLib3MFFunction_GetInputsFunc; + FLib3MFFunction_RemoveInputFunc: TLib3MFFunction_RemoveInputFunc; + FLib3MFFunction_AddOutputFunc: TLib3MFFunction_AddOutputFunc; + FLib3MFFunction_GetOutputsFunc: TLib3MFFunction_GetOutputsFunc; + FLib3MFFunction_RemoveOutputFunc: TLib3MFFunction_RemoveOutputFunc; + FLib3MFFunction_FindInputFunc: TLib3MFFunction_FindInputFunc; + FLib3MFFunction_FindOutputFunc: TLib3MFFunction_FindOutputFunc; + FLib3MFImplicitFunction_GetIdentifierFunc: TLib3MFImplicitFunction_GetIdentifierFunc; + FLib3MFImplicitFunction_SetIdentifierFunc: TLib3MFImplicitFunction_SetIdentifierFunc; + FLib3MFImplicitFunction_AddNodeFunc: TLib3MFImplicitFunction_AddNodeFunc; + FLib3MFImplicitFunction_AddSinNodeFunc: TLib3MFImplicitFunction_AddSinNodeFunc; + FLib3MFImplicitFunction_AddCosNodeFunc: TLib3MFImplicitFunction_AddCosNodeFunc; + FLib3MFImplicitFunction_AddTanNodeFunc: TLib3MFImplicitFunction_AddTanNodeFunc; + FLib3MFImplicitFunction_AddArcSinNodeFunc: TLib3MFImplicitFunction_AddArcSinNodeFunc; + FLib3MFImplicitFunction_AddArcCosNodeFunc: TLib3MFImplicitFunction_AddArcCosNodeFunc; + FLib3MFImplicitFunction_AddArcTan2NodeFunc: TLib3MFImplicitFunction_AddArcTan2NodeFunc; + FLib3MFImplicitFunction_AddSinhNodeFunc: TLib3MFImplicitFunction_AddSinhNodeFunc; + FLib3MFImplicitFunction_AddCoshNodeFunc: TLib3MFImplicitFunction_AddCoshNodeFunc; + FLib3MFImplicitFunction_AddTanhNodeFunc: TLib3MFImplicitFunction_AddTanhNodeFunc; + FLib3MFImplicitFunction_AddRoundNodeFunc: TLib3MFImplicitFunction_AddRoundNodeFunc; + FLib3MFImplicitFunction_AddCeilNodeFunc: TLib3MFImplicitFunction_AddCeilNodeFunc; + FLib3MFImplicitFunction_AddFloorNodeFunc: TLib3MFImplicitFunction_AddFloorNodeFunc; + FLib3MFImplicitFunction_AddSignNodeFunc: TLib3MFImplicitFunction_AddSignNodeFunc; + FLib3MFImplicitFunction_AddFractNodeFunc: TLib3MFImplicitFunction_AddFractNodeFunc; + FLib3MFImplicitFunction_AddAbsNodeFunc: TLib3MFImplicitFunction_AddAbsNodeFunc; + FLib3MFImplicitFunction_AddExpNodeFunc: TLib3MFImplicitFunction_AddExpNodeFunc; + FLib3MFImplicitFunction_AddLogNodeFunc: TLib3MFImplicitFunction_AddLogNodeFunc; + FLib3MFImplicitFunction_AddLog2NodeFunc: TLib3MFImplicitFunction_AddLog2NodeFunc; + FLib3MFImplicitFunction_AddLog10NodeFunc: TLib3MFImplicitFunction_AddLog10NodeFunc; + FLib3MFImplicitFunction_AddLengthNodeFunc: TLib3MFImplicitFunction_AddLengthNodeFunc; + FLib3MFImplicitFunction_AddTransposeNodeFunc: TLib3MFImplicitFunction_AddTransposeNodeFunc; + FLib3MFImplicitFunction_InverseNodeFunc: TLib3MFImplicitFunction_InverseNodeFunc; + FLib3MFImplicitFunction_AddSqrtNodeFunc: TLib3MFImplicitFunction_AddSqrtNodeFunc; + FLib3MFImplicitFunction_AddResourceIdNodeFunc: TLib3MFImplicitFunction_AddResourceIdNodeFunc; + FLib3MFImplicitFunction_AddAdditionNodeFunc: TLib3MFImplicitFunction_AddAdditionNodeFunc; + FLib3MFImplicitFunction_AddSubtractionNodeFunc: TLib3MFImplicitFunction_AddSubtractionNodeFunc; + FLib3MFImplicitFunction_AddMultiplicationNodeFunc: TLib3MFImplicitFunction_AddMultiplicationNodeFunc; + FLib3MFImplicitFunction_AddDivisionNodeFunc: TLib3MFImplicitFunction_AddDivisionNodeFunc; + FLib3MFImplicitFunction_AddDotNodeFunc: TLib3MFImplicitFunction_AddDotNodeFunc; + FLib3MFImplicitFunction_AddCrossNodeFunc: TLib3MFImplicitFunction_AddCrossNodeFunc; + FLib3MFImplicitFunction_AddMatVecMultiplicationNodeFunc: TLib3MFImplicitFunction_AddMatVecMultiplicationNodeFunc; + FLib3MFImplicitFunction_AddMinNodeFunc: TLib3MFImplicitFunction_AddMinNodeFunc; + FLib3MFImplicitFunction_AddMaxNodeFunc: TLib3MFImplicitFunction_AddMaxNodeFunc; + FLib3MFImplicitFunction_AddFmodNodeFunc: TLib3MFImplicitFunction_AddFmodNodeFunc; + FLib3MFImplicitFunction_AddPowNodeFunc: TLib3MFImplicitFunction_AddPowNodeFunc; + FLib3MFImplicitFunction_AddSelectNodeFunc: TLib3MFImplicitFunction_AddSelectNodeFunc; + FLib3MFImplicitFunction_AddClampNodeFunc: TLib3MFImplicitFunction_AddClampNodeFunc; + FLib3MFImplicitFunction_AddComposeVectorNodeFunc: TLib3MFImplicitFunction_AddComposeVectorNodeFunc; + FLib3MFImplicitFunction_AddVectorFromScalarNodeFunc: TLib3MFImplicitFunction_AddVectorFromScalarNodeFunc; + FLib3MFImplicitFunction_AddDecomposeVectorNodeFunc: TLib3MFImplicitFunction_AddDecomposeVectorNodeFunc; + FLib3MFImplicitFunction_AddComposeMatrixNodeFunc: TLib3MFImplicitFunction_AddComposeMatrixNodeFunc; + FLib3MFImplicitFunction_AddMatrixFromRowsNodeFunc: TLib3MFImplicitFunction_AddMatrixFromRowsNodeFunc; + FLib3MFImplicitFunction_AddMatrixFromColumnsNodeFunc: TLib3MFImplicitFunction_AddMatrixFromColumnsNodeFunc; + FLib3MFImplicitFunction_AddConstantNodeFunc: TLib3MFImplicitFunction_AddConstantNodeFunc; + FLib3MFImplicitFunction_AddConstVecNodeFunc: TLib3MFImplicitFunction_AddConstVecNodeFunc; + FLib3MFImplicitFunction_AddConstMatNodeFunc: TLib3MFImplicitFunction_AddConstMatNodeFunc; + FLib3MFImplicitFunction_AddMeshNodeFunc: TLib3MFImplicitFunction_AddMeshNodeFunc; + FLib3MFImplicitFunction_AddUnsignedMeshNodeFunc: TLib3MFImplicitFunction_AddUnsignedMeshNodeFunc; + FLib3MFImplicitFunction_AddFunctionCallNodeFunc: TLib3MFImplicitFunction_AddFunctionCallNodeFunc; + FLib3MFImplicitFunction_GetNodesFunc: TLib3MFImplicitFunction_GetNodesFunc; + FLib3MFImplicitFunction_RemoveNodeFunc: TLib3MFImplicitFunction_RemoveNodeFunc; + FLib3MFImplicitFunction_AddLinkFunc: TLib3MFImplicitFunction_AddLinkFunc; + FLib3MFImplicitFunction_AddLinkByNamesFunc: TLib3MFImplicitFunction_AddLinkByNamesFunc; + FLib3MFImplicitFunction_ClearFunc: TLib3MFImplicitFunction_ClearFunc; + FLib3MFImplicitFunction_SortNodesTopologicallyFunc: TLib3MFImplicitFunction_SortNodesTopologicallyFunc; + FLib3MFFunctionFromImage3D_GetImage3DFunc: TLib3MFFunctionFromImage3D_GetImage3DFunc; + FLib3MFFunctionFromImage3D_SetImage3DFunc: TLib3MFFunctionFromImage3D_SetImage3DFunc; + FLib3MFFunctionFromImage3D_SetFilterFunc: TLib3MFFunctionFromImage3D_SetFilterFunc; + FLib3MFFunctionFromImage3D_GetFilterFunc: TLib3MFFunctionFromImage3D_GetFilterFunc; + FLib3MFFunctionFromImage3D_SetTileStylesFunc: TLib3MFFunctionFromImage3D_SetTileStylesFunc; + FLib3MFFunctionFromImage3D_GetTileStylesFunc: TLib3MFFunctionFromImage3D_GetTileStylesFunc; + FLib3MFFunctionFromImage3D_GetOffsetFunc: TLib3MFFunctionFromImage3D_GetOffsetFunc; + FLib3MFFunctionFromImage3D_SetOffsetFunc: TLib3MFFunctionFromImage3D_SetOffsetFunc; + FLib3MFFunctionFromImage3D_GetScaleFunc: TLib3MFFunctionFromImage3D_GetScaleFunc; + FLib3MFFunctionFromImage3D_SetScaleFunc: TLib3MFFunctionFromImage3D_SetScaleFunc; FLib3MFBuildItem_GetObjectResourceFunc: TLib3MFBuildItem_GetObjectResourceFunc; FLib3MFBuildItem_GetUUIDFunc: TLib3MFBuildItem_GetUUIDFunc; FLib3MFBuildItem_SetUUIDFunc: TLib3MFBuildItem_SetUUIDFunc; @@ -5259,6 +9512,7 @@ TLib3MFWrapper = class(TObject) FLib3MFModel_GetComponentsObjectByIDFunc: TLib3MFModel_GetComponentsObjectByIDFunc; FLib3MFModel_GetColorGroupByIDFunc: TLib3MFModel_GetColorGroupByIDFunc; FLib3MFModel_GetSliceStackByIDFunc: TLib3MFModel_GetSliceStackByIDFunc; + FLib3MFModel_GetLevelSetByIDFunc: TLib3MFModel_GetLevelSetByIDFunc; FLib3MFModel_GetBuildUUIDFunc: TLib3MFModel_GetBuildUUIDFunc; FLib3MFModel_SetBuildUUIDFunc: TLib3MFModel_SetBuildUUIDFunc; FLib3MFModel_GetBuildItemsFunc: TLib3MFModel_GetBuildItemsFunc; @@ -5274,7 +9528,9 @@ TLib3MFWrapper = class(TObject) FLib3MFModel_GetCompositeMaterialsFunc: TLib3MFModel_GetCompositeMaterialsFunc; FLib3MFModel_GetMultiPropertyGroupsFunc: TLib3MFModel_GetMultiPropertyGroupsFunc; FLib3MFModel_GetSliceStacksFunc: TLib3MFModel_GetSliceStacksFunc; + FLib3MFModel_GetImage3DsFunc: TLib3MFModel_GetImage3DsFunc; FLib3MFModel_MergeToModelFunc: TLib3MFModel_MergeToModelFunc; + FLib3MFModel_MergeFromModelFunc: TLib3MFModel_MergeFromModelFunc; FLib3MFModel_AddMeshObjectFunc: TLib3MFModel_AddMeshObjectFunc; FLib3MFModel_AddComponentsObjectFunc: TLib3MFModel_AddComponentsObjectFunc; FLib3MFModel_AddSliceStackFunc: TLib3MFModel_AddSliceStackFunc; @@ -5284,6 +9540,8 @@ TLib3MFWrapper = class(TObject) FLib3MFModel_AddTexture2DGroupFunc: TLib3MFModel_AddTexture2DGroupFunc; FLib3MFModel_AddCompositeMaterialsFunc: TLib3MFModel_AddCompositeMaterialsFunc; FLib3MFModel_AddMultiPropertyGroupFunc: TLib3MFModel_AddMultiPropertyGroupFunc; + FLib3MFModel_AddImageStackFunc: TLib3MFModel_AddImageStackFunc; + FLib3MFModel_GetImageStackByIDFunc: TLib3MFModel_GetImageStackByIDFunc; FLib3MFModel_AddBuildItemFunc: TLib3MFModel_AddBuildItemFunc; FLib3MFModel_RemoveBuildItemFunc: TLib3MFModel_RemoveBuildItemFunc; FLib3MFModel_GetMetaDataGroupFunc: TLib3MFModel_GetMetaDataGroupFunc; @@ -5300,6 +9558,13 @@ TLib3MFWrapper = class(TObject) FLib3MFModel_RemoveCustomContentTypeFunc: TLib3MFModel_RemoveCustomContentTypeFunc; FLib3MFModel_SetRandomNumberCallbackFunc: TLib3MFModel_SetRandomNumberCallbackFunc; FLib3MFModel_GetKeyStoreFunc: TLib3MFModel_GetKeyStoreFunc; + FLib3MFModel_GetFunctionsFunc: TLib3MFModel_GetFunctionsFunc; + FLib3MFModel_AddImplicitFunctionFunc: TLib3MFModel_AddImplicitFunctionFunc; + FLib3MFModel_AddFunctionFromImage3DFunc: TLib3MFModel_AddFunctionFromImage3DFunc; + FLib3MFModel_AddVolumeDataFunc: TLib3MFModel_AddVolumeDataFunc; + FLib3MFModel_AddLevelSetFunc: TLib3MFModel_AddLevelSetFunc; + FLib3MFModel_GetLevelSetsFunc: TLib3MFModel_GetLevelSetsFunc; + FLib3MFModel_RemoveResourceFunc: TLib3MFModel_RemoveResourceFunc; FLib3MFGetLibraryVersionFunc: TLib3MFGetLibraryVersionFunc; FLib3MFGetPrereleaseInformationFunc: TLib3MFGetPrereleaseInformationFunc; FLib3MFGetBuildInformationFunc: TLib3MFGetBuildInformationFunc; @@ -5377,6 +9642,9 @@ TLib3MFWrapper = class(TObject) property Lib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupFunc: TLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupFunc read FLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupFunc; property Lib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsFunc: TLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsFunc read FLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsFunc; property Lib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupFunc: TLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupFunc read FLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupFunc; + property Lib3MFImage3DIterator_GetCurrentImage3DFunc: TLib3MFImage3DIterator_GetCurrentImage3DFunc read FLib3MFImage3DIterator_GetCurrentImage3DFunc; + property Lib3MFFunctionIterator_GetCurrentFunctionFunc: TLib3MFFunctionIterator_GetCurrentFunctionFunc read FLib3MFFunctionIterator_GetCurrentFunctionFunc; + property Lib3MFLevelSetIterator_GetCurrentLevelSetFunc: TLib3MFLevelSetIterator_GetCurrentLevelSetFunc read FLib3MFLevelSetIterator_GetCurrentLevelSetFunc; property Lib3MFMetaData_GetNameSpaceFunc: TLib3MFMetaData_GetNameSpaceFunc read FLib3MFMetaData_GetNameSpaceFunc; property Lib3MFMetaData_SetNameSpaceFunc: TLib3MFMetaData_SetNameSpaceFunc read FLib3MFMetaData_SetNameSpaceFunc; property Lib3MFMetaData_GetNameFunc: TLib3MFMetaData_GetNameFunc read FLib3MFMetaData_GetNameFunc; @@ -5402,6 +9670,7 @@ TLib3MFWrapper = class(TObject) property Lib3MFObject_SetPartNumberFunc: TLib3MFObject_SetPartNumberFunc read FLib3MFObject_SetPartNumberFunc; property Lib3MFObject_IsMeshObjectFunc: TLib3MFObject_IsMeshObjectFunc read FLib3MFObject_IsMeshObjectFunc; property Lib3MFObject_IsComponentsObjectFunc: TLib3MFObject_IsComponentsObjectFunc read FLib3MFObject_IsComponentsObjectFunc; + property Lib3MFObject_IsLevelSetObjectFunc: TLib3MFObject_IsLevelSetObjectFunc read FLib3MFObject_IsLevelSetObjectFunc; property Lib3MFObject_IsValidFunc: TLib3MFObject_IsValidFunc read FLib3MFObject_IsValidFunc; property Lib3MFObject_SetAttachmentAsThumbnailFunc: TLib3MFObject_SetAttachmentAsThumbnailFunc read FLib3MFObject_SetAttachmentAsThumbnailFunc; property Lib3MFObject_GetThumbnailAttachmentFunc: TLib3MFObject_GetThumbnailAttachmentFunc read FLib3MFObject_GetThumbnailAttachmentFunc; @@ -5436,6 +9705,24 @@ TLib3MFWrapper = class(TObject) property Lib3MFMeshObject_SetGeometryFunc: TLib3MFMeshObject_SetGeometryFunc read FLib3MFMeshObject_SetGeometryFunc; property Lib3MFMeshObject_IsManifoldAndOrientedFunc: TLib3MFMeshObject_IsManifoldAndOrientedFunc read FLib3MFMeshObject_IsManifoldAndOrientedFunc; property Lib3MFMeshObject_BeamLatticeFunc: TLib3MFMeshObject_BeamLatticeFunc read FLib3MFMeshObject_BeamLatticeFunc; + property Lib3MFMeshObject_GetVolumeDataFunc: TLib3MFMeshObject_GetVolumeDataFunc read FLib3MFMeshObject_GetVolumeDataFunc; + property Lib3MFMeshObject_SetVolumeDataFunc: TLib3MFMeshObject_SetVolumeDataFunc read FLib3MFMeshObject_SetVolumeDataFunc; + property Lib3MFLevelSet_GetFunctionFunc: TLib3MFLevelSet_GetFunctionFunc read FLib3MFLevelSet_GetFunctionFunc; + property Lib3MFLevelSet_SetFunctionFunc: TLib3MFLevelSet_SetFunctionFunc read FLib3MFLevelSet_SetFunctionFunc; + property Lib3MFLevelSet_GetTransformFunc: TLib3MFLevelSet_GetTransformFunc read FLib3MFLevelSet_GetTransformFunc; + property Lib3MFLevelSet_SetTransformFunc: TLib3MFLevelSet_SetTransformFunc read FLib3MFLevelSet_SetTransformFunc; + property Lib3MFLevelSet_GetChannelNameFunc: TLib3MFLevelSet_GetChannelNameFunc read FLib3MFLevelSet_GetChannelNameFunc; + property Lib3MFLevelSet_SetChannelNameFunc: TLib3MFLevelSet_SetChannelNameFunc read FLib3MFLevelSet_SetChannelNameFunc; + property Lib3MFLevelSet_SetMinFeatureSizeFunc: TLib3MFLevelSet_SetMinFeatureSizeFunc read FLib3MFLevelSet_SetMinFeatureSizeFunc; + property Lib3MFLevelSet_GetMinFeatureSizeFunc: TLib3MFLevelSet_GetMinFeatureSizeFunc read FLib3MFLevelSet_GetMinFeatureSizeFunc; + property Lib3MFLevelSet_SetFallBackValueFunc: TLib3MFLevelSet_SetFallBackValueFunc read FLib3MFLevelSet_SetFallBackValueFunc; + property Lib3MFLevelSet_GetFallBackValueFunc: TLib3MFLevelSet_GetFallBackValueFunc read FLib3MFLevelSet_GetFallBackValueFunc; + property Lib3MFLevelSet_SetMeshBBoxOnlyFunc: TLib3MFLevelSet_SetMeshBBoxOnlyFunc read FLib3MFLevelSet_SetMeshBBoxOnlyFunc; + property Lib3MFLevelSet_GetMeshBBoxOnlyFunc: TLib3MFLevelSet_GetMeshBBoxOnlyFunc read FLib3MFLevelSet_GetMeshBBoxOnlyFunc; + property Lib3MFLevelSet_SetMeshFunc: TLib3MFLevelSet_SetMeshFunc read FLib3MFLevelSet_SetMeshFunc; + property Lib3MFLevelSet_GetMeshFunc: TLib3MFLevelSet_GetMeshFunc read FLib3MFLevelSet_GetMeshFunc; + property Lib3MFLevelSet_GetVolumeDataFunc: TLib3MFLevelSet_GetVolumeDataFunc read FLib3MFLevelSet_GetVolumeDataFunc; + property Lib3MFLevelSet_SetVolumeDataFunc: TLib3MFLevelSet_SetVolumeDataFunc read FLib3MFLevelSet_SetVolumeDataFunc; property Lib3MFBeamLattice_GetMinLengthFunc: TLib3MFBeamLattice_GetMinLengthFunc read FLib3MFBeamLattice_GetMinLengthFunc; property Lib3MFBeamLattice_SetMinLengthFunc: TLib3MFBeamLattice_SetMinLengthFunc read FLib3MFBeamLattice_SetMinLengthFunc; property Lib3MFBeamLattice_GetClippingFunc: TLib3MFBeamLattice_GetClippingFunc read FLib3MFBeamLattice_GetClippingFunc; @@ -5459,6 +9746,35 @@ TLib3MFWrapper = class(TObject) property Lib3MFBeamLattice_GetBeamSetCountFunc: TLib3MFBeamLattice_GetBeamSetCountFunc read FLib3MFBeamLattice_GetBeamSetCountFunc; property Lib3MFBeamLattice_AddBeamSetFunc: TLib3MFBeamLattice_AddBeamSetFunc read FLib3MFBeamLattice_AddBeamSetFunc; property Lib3MFBeamLattice_GetBeamSetFunc: TLib3MFBeamLattice_GetBeamSetFunc read FLib3MFBeamLattice_GetBeamSetFunc; + property Lib3MFFunctionReference_GetFunctionResourceIDFunc: TLib3MFFunctionReference_GetFunctionResourceIDFunc read FLib3MFFunctionReference_GetFunctionResourceIDFunc; + property Lib3MFFunctionReference_SetFunctionResourceIDFunc: TLib3MFFunctionReference_SetFunctionResourceIDFunc read FLib3MFFunctionReference_SetFunctionResourceIDFunc; + property Lib3MFFunctionReference_GetTransformFunc: TLib3MFFunctionReference_GetTransformFunc read FLib3MFFunctionReference_GetTransformFunc; + property Lib3MFFunctionReference_SetTransformFunc: TLib3MFFunctionReference_SetTransformFunc read FLib3MFFunctionReference_SetTransformFunc; + property Lib3MFFunctionReference_GetChannelNameFunc: TLib3MFFunctionReference_GetChannelNameFunc read FLib3MFFunctionReference_GetChannelNameFunc; + property Lib3MFFunctionReference_SetChannelNameFunc: TLib3MFFunctionReference_SetChannelNameFunc read FLib3MFFunctionReference_SetChannelNameFunc; + property Lib3MFFunctionReference_SetMinFeatureSizeFunc: TLib3MFFunctionReference_SetMinFeatureSizeFunc read FLib3MFFunctionReference_SetMinFeatureSizeFunc; + property Lib3MFFunctionReference_GetMinFeatureSizeFunc: TLib3MFFunctionReference_GetMinFeatureSizeFunc read FLib3MFFunctionReference_GetMinFeatureSizeFunc; + property Lib3MFFunctionReference_SetFallBackValueFunc: TLib3MFFunctionReference_SetFallBackValueFunc read FLib3MFFunctionReference_SetFallBackValueFunc; + property Lib3MFFunctionReference_GetFallBackValueFunc: TLib3MFFunctionReference_GetFallBackValueFunc read FLib3MFFunctionReference_GetFallBackValueFunc; + property Lib3MFVolumeDataComposite_GetBaseMaterialGroupFunc: TLib3MFVolumeDataComposite_GetBaseMaterialGroupFunc read FLib3MFVolumeDataComposite_GetBaseMaterialGroupFunc; + property Lib3MFVolumeDataComposite_SetBaseMaterialGroupFunc: TLib3MFVolumeDataComposite_SetBaseMaterialGroupFunc read FLib3MFVolumeDataComposite_SetBaseMaterialGroupFunc; + property Lib3MFVolumeDataComposite_GetMaterialMappingCountFunc: TLib3MFVolumeDataComposite_GetMaterialMappingCountFunc read FLib3MFVolumeDataComposite_GetMaterialMappingCountFunc; + property Lib3MFVolumeDataComposite_GetMaterialMappingFunc: TLib3MFVolumeDataComposite_GetMaterialMappingFunc read FLib3MFVolumeDataComposite_GetMaterialMappingFunc; + property Lib3MFVolumeDataComposite_AddMaterialMappingFunc: TLib3MFVolumeDataComposite_AddMaterialMappingFunc read FLib3MFVolumeDataComposite_AddMaterialMappingFunc; + property Lib3MFVolumeDataComposite_RemoveMaterialMappingFunc: TLib3MFVolumeDataComposite_RemoveMaterialMappingFunc read FLib3MFVolumeDataComposite_RemoveMaterialMappingFunc; + property Lib3MFVolumeDataProperty_GetNameFunc: TLib3MFVolumeDataProperty_GetNameFunc read FLib3MFVolumeDataProperty_GetNameFunc; + property Lib3MFVolumeDataProperty_SetIsRequiredFunc: TLib3MFVolumeDataProperty_SetIsRequiredFunc read FLib3MFVolumeDataProperty_SetIsRequiredFunc; + property Lib3MFVolumeDataProperty_IsRequiredFunc: TLib3MFVolumeDataProperty_IsRequiredFunc read FLib3MFVolumeDataProperty_IsRequiredFunc; + property Lib3MFVolumeData_GetCompositeFunc: TLib3MFVolumeData_GetCompositeFunc read FLib3MFVolumeData_GetCompositeFunc; + property Lib3MFVolumeData_CreateNewCompositeFunc: TLib3MFVolumeData_CreateNewCompositeFunc read FLib3MFVolumeData_CreateNewCompositeFunc; + property Lib3MFVolumeData_RemoveCompositeFunc: TLib3MFVolumeData_RemoveCompositeFunc read FLib3MFVolumeData_RemoveCompositeFunc; + property Lib3MFVolumeData_GetColorFunc: TLib3MFVolumeData_GetColorFunc read FLib3MFVolumeData_GetColorFunc; + property Lib3MFVolumeData_CreateNewColorFunc: TLib3MFVolumeData_CreateNewColorFunc read FLib3MFVolumeData_CreateNewColorFunc; + property Lib3MFVolumeData_RemoveColorFunc: TLib3MFVolumeData_RemoveColorFunc read FLib3MFVolumeData_RemoveColorFunc; + property Lib3MFVolumeData_GetPropertyCountFunc: TLib3MFVolumeData_GetPropertyCountFunc read FLib3MFVolumeData_GetPropertyCountFunc; + property Lib3MFVolumeData_GetPropertyFunc: TLib3MFVolumeData_GetPropertyFunc read FLib3MFVolumeData_GetPropertyFunc; + property Lib3MFVolumeData_AddPropertyFromFunctionFunc: TLib3MFVolumeData_AddPropertyFromFunctionFunc read FLib3MFVolumeData_AddPropertyFromFunctionFunc; + property Lib3MFVolumeData_RemovePropertyFunc: TLib3MFVolumeData_RemovePropertyFunc read FLib3MFVolumeData_RemovePropertyFunc; property Lib3MFComponent_GetObjectResourceFunc: TLib3MFComponent_GetObjectResourceFunc read FLib3MFComponent_GetObjectResourceFunc; property Lib3MFComponent_GetObjectResourceIDFunc: TLib3MFComponent_GetObjectResourceIDFunc read FLib3MFComponent_GetObjectResourceIDFunc; property Lib3MFComponent_GetUUIDFunc: TLib3MFComponent_GetUUIDFunc read FLib3MFComponent_GetUUIDFunc; @@ -5515,6 +9831,19 @@ TLib3MFWrapper = class(TObject) property Lib3MFMultiPropertyGroup_AddLayerFunc: TLib3MFMultiPropertyGroup_AddLayerFunc read FLib3MFMultiPropertyGroup_AddLayerFunc; property Lib3MFMultiPropertyGroup_GetLayerFunc: TLib3MFMultiPropertyGroup_GetLayerFunc read FLib3MFMultiPropertyGroup_GetLayerFunc; property Lib3MFMultiPropertyGroup_RemoveLayerFunc: TLib3MFMultiPropertyGroup_RemoveLayerFunc read FLib3MFMultiPropertyGroup_RemoveLayerFunc; + property Lib3MFImage3D_GetNameFunc: TLib3MFImage3D_GetNameFunc read FLib3MFImage3D_GetNameFunc; + property Lib3MFImage3D_SetNameFunc: TLib3MFImage3D_SetNameFunc read FLib3MFImage3D_SetNameFunc; + property Lib3MFImage3D_IsImageStackFunc: TLib3MFImage3D_IsImageStackFunc read FLib3MFImage3D_IsImageStackFunc; + property Lib3MFImageStack_GetRowCountFunc: TLib3MFImageStack_GetRowCountFunc read FLib3MFImageStack_GetRowCountFunc; + property Lib3MFImageStack_SetRowCountFunc: TLib3MFImageStack_SetRowCountFunc read FLib3MFImageStack_SetRowCountFunc; + property Lib3MFImageStack_GetColumnCountFunc: TLib3MFImageStack_GetColumnCountFunc read FLib3MFImageStack_GetColumnCountFunc; + property Lib3MFImageStack_SetColumnCountFunc: TLib3MFImageStack_SetColumnCountFunc read FLib3MFImageStack_SetColumnCountFunc; + property Lib3MFImageStack_GetSheetCountFunc: TLib3MFImageStack_GetSheetCountFunc read FLib3MFImageStack_GetSheetCountFunc; + property Lib3MFImageStack_GetSheetFunc: TLib3MFImageStack_GetSheetFunc read FLib3MFImageStack_GetSheetFunc; + property Lib3MFImageStack_SetSheetFunc: TLib3MFImageStack_SetSheetFunc read FLib3MFImageStack_SetSheetFunc; + property Lib3MFImageStack_CreateEmptySheetFunc: TLib3MFImageStack_CreateEmptySheetFunc read FLib3MFImageStack_CreateEmptySheetFunc; + property Lib3MFImageStack_CreateSheetFromBufferFunc: TLib3MFImageStack_CreateSheetFromBufferFunc read FLib3MFImageStack_CreateSheetFromBufferFunc; + property Lib3MFImageStack_CreateSheetFromFileFunc: TLib3MFImageStack_CreateSheetFromFileFunc read FLib3MFImageStack_CreateSheetFromFileFunc; property Lib3MFAttachment_GetPathFunc: TLib3MFAttachment_GetPathFunc read FLib3MFAttachment_GetPathFunc; property Lib3MFAttachment_SetPathFunc: TLib3MFAttachment_SetPathFunc read FLib3MFAttachment_SetPathFunc; property Lib3MFAttachment_PackagePartFunc: TLib3MFAttachment_PackagePartFunc read FLib3MFAttachment_PackagePartFunc; @@ -5534,6 +9863,173 @@ TLib3MFWrapper = class(TObject) property Lib3MFTexture2D_SetTileStyleUVFunc: TLib3MFTexture2D_SetTileStyleUVFunc read FLib3MFTexture2D_SetTileStyleUVFunc; property Lib3MFTexture2D_GetFilterFunc: TLib3MFTexture2D_GetFilterFunc read FLib3MFTexture2D_GetFilterFunc; property Lib3MFTexture2D_SetFilterFunc: TLib3MFTexture2D_SetFilterFunc read FLib3MFTexture2D_SetFilterFunc; + property Lib3MFImplicitPort_GetIdentifierFunc: TLib3MFImplicitPort_GetIdentifierFunc read FLib3MFImplicitPort_GetIdentifierFunc; + property Lib3MFImplicitPort_SetIdentifierFunc: TLib3MFImplicitPort_SetIdentifierFunc read FLib3MFImplicitPort_SetIdentifierFunc; + property Lib3MFImplicitPort_GetDisplayNameFunc: TLib3MFImplicitPort_GetDisplayNameFunc read FLib3MFImplicitPort_GetDisplayNameFunc; + property Lib3MFImplicitPort_SetDisplayNameFunc: TLib3MFImplicitPort_SetDisplayNameFunc read FLib3MFImplicitPort_SetDisplayNameFunc; + property Lib3MFImplicitPort_SetTypeFunc: TLib3MFImplicitPort_SetTypeFunc read FLib3MFImplicitPort_SetTypeFunc; + property Lib3MFImplicitPort_GetTypeFunc: TLib3MFImplicitPort_GetTypeFunc read FLib3MFImplicitPort_GetTypeFunc; + property Lib3MFImplicitPort_GetReferenceFunc: TLib3MFImplicitPort_GetReferenceFunc read FLib3MFImplicitPort_GetReferenceFunc; + property Lib3MFImplicitPort_SetReferenceFunc: TLib3MFImplicitPort_SetReferenceFunc read FLib3MFImplicitPort_SetReferenceFunc; + property Lib3MFIterator_MoveNextFunc: TLib3MFIterator_MoveNextFunc read FLib3MFIterator_MoveNextFunc; + property Lib3MFIterator_MovePreviousFunc: TLib3MFIterator_MovePreviousFunc read FLib3MFIterator_MovePreviousFunc; + property Lib3MFIterator_CountFunc: TLib3MFIterator_CountFunc read FLib3MFIterator_CountFunc; + property Lib3MFImplicitPortIterator_GetCurrentFunc: TLib3MFImplicitPortIterator_GetCurrentFunc read FLib3MFImplicitPortIterator_GetCurrentFunc; + property Lib3MFImplicitNode_GetIdentifierFunc: TLib3MFImplicitNode_GetIdentifierFunc read FLib3MFImplicitNode_GetIdentifierFunc; + property Lib3MFImplicitNode_SetIdentifierFunc: TLib3MFImplicitNode_SetIdentifierFunc read FLib3MFImplicitNode_SetIdentifierFunc; + property Lib3MFImplicitNode_GetDisplayNameFunc: TLib3MFImplicitNode_GetDisplayNameFunc read FLib3MFImplicitNode_GetDisplayNameFunc; + property Lib3MFImplicitNode_SetDisplayNameFunc: TLib3MFImplicitNode_SetDisplayNameFunc read FLib3MFImplicitNode_SetDisplayNameFunc; + property Lib3MFImplicitNode_GetTagFunc: TLib3MFImplicitNode_GetTagFunc read FLib3MFImplicitNode_GetTagFunc; + property Lib3MFImplicitNode_SetTagFunc: TLib3MFImplicitNode_SetTagFunc read FLib3MFImplicitNode_SetTagFunc; + property Lib3MFImplicitNode_GetNodeTypeFunc: TLib3MFImplicitNode_GetNodeTypeFunc read FLib3MFImplicitNode_GetNodeTypeFunc; + property Lib3MFImplicitNode_AddInputFunc: TLib3MFImplicitNode_AddInputFunc read FLib3MFImplicitNode_AddInputFunc; + property Lib3MFImplicitNode_GetInputsFunc: TLib3MFImplicitNode_GetInputsFunc read FLib3MFImplicitNode_GetInputsFunc; + property Lib3MFImplicitNode_AddOutputFunc: TLib3MFImplicitNode_AddOutputFunc read FLib3MFImplicitNode_AddOutputFunc; + property Lib3MFImplicitNode_GetOutputsFunc: TLib3MFImplicitNode_GetOutputsFunc read FLib3MFImplicitNode_GetOutputsFunc; + property Lib3MFImplicitNode_FindInputFunc: TLib3MFImplicitNode_FindInputFunc read FLib3MFImplicitNode_FindInputFunc; + property Lib3MFImplicitNode_FindOutputFunc: TLib3MFImplicitNode_FindOutputFunc read FLib3MFImplicitNode_FindOutputFunc; + property Lib3MFImplicitNode_AreTypesValidFunc: TLib3MFImplicitNode_AreTypesValidFunc read FLib3MFImplicitNode_AreTypesValidFunc; + property Lib3MFOneInputNode_GetInputAFunc: TLib3MFOneInputNode_GetInputAFunc read FLib3MFOneInputNode_GetInputAFunc; + property Lib3MFOneInputNode_GetOutputResultFunc: TLib3MFOneInputNode_GetOutputResultFunc read FLib3MFOneInputNode_GetOutputResultFunc; + property Lib3MFResourceIdNode_SetResourceFunc: TLib3MFResourceIdNode_SetResourceFunc read FLib3MFResourceIdNode_SetResourceFunc; + property Lib3MFResourceIdNode_GetResourceFunc: TLib3MFResourceIdNode_GetResourceFunc read FLib3MFResourceIdNode_GetResourceFunc; + property Lib3MFResourceIdNode_GetOutputValueFunc: TLib3MFResourceIdNode_GetOutputValueFunc read FLib3MFResourceIdNode_GetOutputValueFunc; + property Lib3MFTwoInputNode_GetInputBFunc: TLib3MFTwoInputNode_GetInputBFunc read FLib3MFTwoInputNode_GetInputBFunc; + property Lib3MFSelectNode_GetInputBFunc: TLib3MFSelectNode_GetInputBFunc read FLib3MFSelectNode_GetInputBFunc; + property Lib3MFSelectNode_GetInputCFunc: TLib3MFSelectNode_GetInputCFunc read FLib3MFSelectNode_GetInputCFunc; + property Lib3MFSelectNode_GetInputDFunc: TLib3MFSelectNode_GetInputDFunc read FLib3MFSelectNode_GetInputDFunc; + property Lib3MFClampNode_GetInputMinFunc: TLib3MFClampNode_GetInputMinFunc read FLib3MFClampNode_GetInputMinFunc; + property Lib3MFClampNode_GetInputMaxFunc: TLib3MFClampNode_GetInputMaxFunc read FLib3MFClampNode_GetInputMaxFunc; + property Lib3MFComposeVectorNode_GetInputXFunc: TLib3MFComposeVectorNode_GetInputXFunc read FLib3MFComposeVectorNode_GetInputXFunc; + property Lib3MFComposeVectorNode_GetInputYFunc: TLib3MFComposeVectorNode_GetInputYFunc read FLib3MFComposeVectorNode_GetInputYFunc; + property Lib3MFComposeVectorNode_GetInputZFunc: TLib3MFComposeVectorNode_GetInputZFunc read FLib3MFComposeVectorNode_GetInputZFunc; + property Lib3MFComposeVectorNode_GetOutputResultFunc: TLib3MFComposeVectorNode_GetOutputResultFunc read FLib3MFComposeVectorNode_GetOutputResultFunc; + property Lib3MFDecomposeVectorNode_GetInputAFunc: TLib3MFDecomposeVectorNode_GetInputAFunc read FLib3MFDecomposeVectorNode_GetInputAFunc; + property Lib3MFDecomposeVectorNode_GetOutputXFunc: TLib3MFDecomposeVectorNode_GetOutputXFunc read FLib3MFDecomposeVectorNode_GetOutputXFunc; + property Lib3MFDecomposeVectorNode_GetOutputYFunc: TLib3MFDecomposeVectorNode_GetOutputYFunc read FLib3MFDecomposeVectorNode_GetOutputYFunc; + property Lib3MFDecomposeVectorNode_GetOutputZFunc: TLib3MFDecomposeVectorNode_GetOutputZFunc read FLib3MFDecomposeVectorNode_GetOutputZFunc; + property Lib3MFComposeMatrixNode_GetInputM00Func: TLib3MFComposeMatrixNode_GetInputM00Func read FLib3MFComposeMatrixNode_GetInputM00Func; + property Lib3MFComposeMatrixNode_GetInputM01Func: TLib3MFComposeMatrixNode_GetInputM01Func read FLib3MFComposeMatrixNode_GetInputM01Func; + property Lib3MFComposeMatrixNode_GetInputM02Func: TLib3MFComposeMatrixNode_GetInputM02Func read FLib3MFComposeMatrixNode_GetInputM02Func; + property Lib3MFComposeMatrixNode_GetInputM03Func: TLib3MFComposeMatrixNode_GetInputM03Func read FLib3MFComposeMatrixNode_GetInputM03Func; + property Lib3MFComposeMatrixNode_GetInputM10Func: TLib3MFComposeMatrixNode_GetInputM10Func read FLib3MFComposeMatrixNode_GetInputM10Func; + property Lib3MFComposeMatrixNode_GetInputM11Func: TLib3MFComposeMatrixNode_GetInputM11Func read FLib3MFComposeMatrixNode_GetInputM11Func; + property Lib3MFComposeMatrixNode_GetInputM12Func: TLib3MFComposeMatrixNode_GetInputM12Func read FLib3MFComposeMatrixNode_GetInputM12Func; + property Lib3MFComposeMatrixNode_GetInputM13Func: TLib3MFComposeMatrixNode_GetInputM13Func read FLib3MFComposeMatrixNode_GetInputM13Func; + property Lib3MFComposeMatrixNode_GetInputM20Func: TLib3MFComposeMatrixNode_GetInputM20Func read FLib3MFComposeMatrixNode_GetInputM20Func; + property Lib3MFComposeMatrixNode_GetInputM21Func: TLib3MFComposeMatrixNode_GetInputM21Func read FLib3MFComposeMatrixNode_GetInputM21Func; + property Lib3MFComposeMatrixNode_GetInputM22Func: TLib3MFComposeMatrixNode_GetInputM22Func read FLib3MFComposeMatrixNode_GetInputM22Func; + property Lib3MFComposeMatrixNode_GetInputM23Func: TLib3MFComposeMatrixNode_GetInputM23Func read FLib3MFComposeMatrixNode_GetInputM23Func; + property Lib3MFComposeMatrixNode_GetInputM30Func: TLib3MFComposeMatrixNode_GetInputM30Func read FLib3MFComposeMatrixNode_GetInputM30Func; + property Lib3MFComposeMatrixNode_GetInputM31Func: TLib3MFComposeMatrixNode_GetInputM31Func read FLib3MFComposeMatrixNode_GetInputM31Func; + property Lib3MFComposeMatrixNode_GetInputM32Func: TLib3MFComposeMatrixNode_GetInputM32Func read FLib3MFComposeMatrixNode_GetInputM32Func; + property Lib3MFComposeMatrixNode_GetInputM33Func: TLib3MFComposeMatrixNode_GetInputM33Func read FLib3MFComposeMatrixNode_GetInputM33Func; + property Lib3MFComposeMatrixNode_GetOutputResultFunc: TLib3MFComposeMatrixNode_GetOutputResultFunc read FLib3MFComposeMatrixNode_GetOutputResultFunc; + property Lib3MFMatrixFromRowsNode_GetInputAFunc: TLib3MFMatrixFromRowsNode_GetInputAFunc read FLib3MFMatrixFromRowsNode_GetInputAFunc; + property Lib3MFMatrixFromRowsNode_GetInputBFunc: TLib3MFMatrixFromRowsNode_GetInputBFunc read FLib3MFMatrixFromRowsNode_GetInputBFunc; + property Lib3MFMatrixFromRowsNode_GetInputCFunc: TLib3MFMatrixFromRowsNode_GetInputCFunc read FLib3MFMatrixFromRowsNode_GetInputCFunc; + property Lib3MFMatrixFromRowsNode_GetInputDFunc: TLib3MFMatrixFromRowsNode_GetInputDFunc read FLib3MFMatrixFromRowsNode_GetInputDFunc; + property Lib3MFMatrixFromRowsNode_GetOutputResultFunc: TLib3MFMatrixFromRowsNode_GetOutputResultFunc read FLib3MFMatrixFromRowsNode_GetOutputResultFunc; + property Lib3MFMatrixFromColumnsNode_GetInputAFunc: TLib3MFMatrixFromColumnsNode_GetInputAFunc read FLib3MFMatrixFromColumnsNode_GetInputAFunc; + property Lib3MFMatrixFromColumnsNode_GetInputBFunc: TLib3MFMatrixFromColumnsNode_GetInputBFunc read FLib3MFMatrixFromColumnsNode_GetInputBFunc; + property Lib3MFMatrixFromColumnsNode_GetInputCFunc: TLib3MFMatrixFromColumnsNode_GetInputCFunc read FLib3MFMatrixFromColumnsNode_GetInputCFunc; + property Lib3MFMatrixFromColumnsNode_GetInputDFunc: TLib3MFMatrixFromColumnsNode_GetInputDFunc read FLib3MFMatrixFromColumnsNode_GetInputDFunc; + property Lib3MFMatrixFromColumnsNode_GetOutputResultFunc: TLib3MFMatrixFromColumnsNode_GetOutputResultFunc read FLib3MFMatrixFromColumnsNode_GetOutputResultFunc; + property Lib3MFConstantNode_SetConstantFunc: TLib3MFConstantNode_SetConstantFunc read FLib3MFConstantNode_SetConstantFunc; + property Lib3MFConstantNode_GetConstantFunc: TLib3MFConstantNode_GetConstantFunc read FLib3MFConstantNode_GetConstantFunc; + property Lib3MFConstantNode_GetOutputValueFunc: TLib3MFConstantNode_GetOutputValueFunc read FLib3MFConstantNode_GetOutputValueFunc; + property Lib3MFConstVecNode_SetVectorFunc: TLib3MFConstVecNode_SetVectorFunc read FLib3MFConstVecNode_SetVectorFunc; + property Lib3MFConstVecNode_GetVectorFunc: TLib3MFConstVecNode_GetVectorFunc read FLib3MFConstVecNode_GetVectorFunc; + property Lib3MFConstVecNode_GetOutputVectorFunc: TLib3MFConstVecNode_GetOutputVectorFunc read FLib3MFConstVecNode_GetOutputVectorFunc; + property Lib3MFConstMatNode_SetMatrixFunc: TLib3MFConstMatNode_SetMatrixFunc read FLib3MFConstMatNode_SetMatrixFunc; + property Lib3MFConstMatNode_GetMatrixFunc: TLib3MFConstMatNode_GetMatrixFunc read FLib3MFConstMatNode_GetMatrixFunc; + property Lib3MFConstMatNode_GetOutputMatrixFunc: TLib3MFConstMatNode_GetOutputMatrixFunc read FLib3MFConstMatNode_GetOutputMatrixFunc; + property Lib3MFMeshNode_GetInputMeshFunc: TLib3MFMeshNode_GetInputMeshFunc read FLib3MFMeshNode_GetInputMeshFunc; + property Lib3MFMeshNode_GetInputPosFunc: TLib3MFMeshNode_GetInputPosFunc read FLib3MFMeshNode_GetInputPosFunc; + property Lib3MFMeshNode_GetOutputDistanceFunc: TLib3MFMeshNode_GetOutputDistanceFunc read FLib3MFMeshNode_GetOutputDistanceFunc; + property Lib3MFUnsignedMeshNode_GetInputMeshFunc: TLib3MFUnsignedMeshNode_GetInputMeshFunc read FLib3MFUnsignedMeshNode_GetInputMeshFunc; + property Lib3MFUnsignedMeshNode_GetInputPosFunc: TLib3MFUnsignedMeshNode_GetInputPosFunc read FLib3MFUnsignedMeshNode_GetInputPosFunc; + property Lib3MFUnsignedMeshNode_GetOutputDistanceFunc: TLib3MFUnsignedMeshNode_GetOutputDistanceFunc read FLib3MFUnsignedMeshNode_GetOutputDistanceFunc; + property Lib3MFFunctionCallNode_GetInputFunctionIDFunc: TLib3MFFunctionCallNode_GetInputFunctionIDFunc read FLib3MFFunctionCallNode_GetInputFunctionIDFunc; + property Lib3MFNodeIterator_GetCurrentFunc: TLib3MFNodeIterator_GetCurrentFunc read FLib3MFNodeIterator_GetCurrentFunc; + property Lib3MFFunction_GetDisplayNameFunc: TLib3MFFunction_GetDisplayNameFunc read FLib3MFFunction_GetDisplayNameFunc; + property Lib3MFFunction_SetDisplayNameFunc: TLib3MFFunction_SetDisplayNameFunc read FLib3MFFunction_SetDisplayNameFunc; + property Lib3MFFunction_AddInputFunc: TLib3MFFunction_AddInputFunc read FLib3MFFunction_AddInputFunc; + property Lib3MFFunction_GetInputsFunc: TLib3MFFunction_GetInputsFunc read FLib3MFFunction_GetInputsFunc; + property Lib3MFFunction_RemoveInputFunc: TLib3MFFunction_RemoveInputFunc read FLib3MFFunction_RemoveInputFunc; + property Lib3MFFunction_AddOutputFunc: TLib3MFFunction_AddOutputFunc read FLib3MFFunction_AddOutputFunc; + property Lib3MFFunction_GetOutputsFunc: TLib3MFFunction_GetOutputsFunc read FLib3MFFunction_GetOutputsFunc; + property Lib3MFFunction_RemoveOutputFunc: TLib3MFFunction_RemoveOutputFunc read FLib3MFFunction_RemoveOutputFunc; + property Lib3MFFunction_FindInputFunc: TLib3MFFunction_FindInputFunc read FLib3MFFunction_FindInputFunc; + property Lib3MFFunction_FindOutputFunc: TLib3MFFunction_FindOutputFunc read FLib3MFFunction_FindOutputFunc; + property Lib3MFImplicitFunction_GetIdentifierFunc: TLib3MFImplicitFunction_GetIdentifierFunc read FLib3MFImplicitFunction_GetIdentifierFunc; + property Lib3MFImplicitFunction_SetIdentifierFunc: TLib3MFImplicitFunction_SetIdentifierFunc read FLib3MFImplicitFunction_SetIdentifierFunc; + property Lib3MFImplicitFunction_AddNodeFunc: TLib3MFImplicitFunction_AddNodeFunc read FLib3MFImplicitFunction_AddNodeFunc; + property Lib3MFImplicitFunction_AddSinNodeFunc: TLib3MFImplicitFunction_AddSinNodeFunc read FLib3MFImplicitFunction_AddSinNodeFunc; + property Lib3MFImplicitFunction_AddCosNodeFunc: TLib3MFImplicitFunction_AddCosNodeFunc read FLib3MFImplicitFunction_AddCosNodeFunc; + property Lib3MFImplicitFunction_AddTanNodeFunc: TLib3MFImplicitFunction_AddTanNodeFunc read FLib3MFImplicitFunction_AddTanNodeFunc; + property Lib3MFImplicitFunction_AddArcSinNodeFunc: TLib3MFImplicitFunction_AddArcSinNodeFunc read FLib3MFImplicitFunction_AddArcSinNodeFunc; + property Lib3MFImplicitFunction_AddArcCosNodeFunc: TLib3MFImplicitFunction_AddArcCosNodeFunc read FLib3MFImplicitFunction_AddArcCosNodeFunc; + property Lib3MFImplicitFunction_AddArcTan2NodeFunc: TLib3MFImplicitFunction_AddArcTan2NodeFunc read FLib3MFImplicitFunction_AddArcTan2NodeFunc; + property Lib3MFImplicitFunction_AddSinhNodeFunc: TLib3MFImplicitFunction_AddSinhNodeFunc read FLib3MFImplicitFunction_AddSinhNodeFunc; + property Lib3MFImplicitFunction_AddCoshNodeFunc: TLib3MFImplicitFunction_AddCoshNodeFunc read FLib3MFImplicitFunction_AddCoshNodeFunc; + property Lib3MFImplicitFunction_AddTanhNodeFunc: TLib3MFImplicitFunction_AddTanhNodeFunc read FLib3MFImplicitFunction_AddTanhNodeFunc; + property Lib3MFImplicitFunction_AddRoundNodeFunc: TLib3MFImplicitFunction_AddRoundNodeFunc read FLib3MFImplicitFunction_AddRoundNodeFunc; + property Lib3MFImplicitFunction_AddCeilNodeFunc: TLib3MFImplicitFunction_AddCeilNodeFunc read FLib3MFImplicitFunction_AddCeilNodeFunc; + property Lib3MFImplicitFunction_AddFloorNodeFunc: TLib3MFImplicitFunction_AddFloorNodeFunc read FLib3MFImplicitFunction_AddFloorNodeFunc; + property Lib3MFImplicitFunction_AddSignNodeFunc: TLib3MFImplicitFunction_AddSignNodeFunc read FLib3MFImplicitFunction_AddSignNodeFunc; + property Lib3MFImplicitFunction_AddFractNodeFunc: TLib3MFImplicitFunction_AddFractNodeFunc read FLib3MFImplicitFunction_AddFractNodeFunc; + property Lib3MFImplicitFunction_AddAbsNodeFunc: TLib3MFImplicitFunction_AddAbsNodeFunc read FLib3MFImplicitFunction_AddAbsNodeFunc; + property Lib3MFImplicitFunction_AddExpNodeFunc: TLib3MFImplicitFunction_AddExpNodeFunc read FLib3MFImplicitFunction_AddExpNodeFunc; + property Lib3MFImplicitFunction_AddLogNodeFunc: TLib3MFImplicitFunction_AddLogNodeFunc read FLib3MFImplicitFunction_AddLogNodeFunc; + property Lib3MFImplicitFunction_AddLog2NodeFunc: TLib3MFImplicitFunction_AddLog2NodeFunc read FLib3MFImplicitFunction_AddLog2NodeFunc; + property Lib3MFImplicitFunction_AddLog10NodeFunc: TLib3MFImplicitFunction_AddLog10NodeFunc read FLib3MFImplicitFunction_AddLog10NodeFunc; + property Lib3MFImplicitFunction_AddLengthNodeFunc: TLib3MFImplicitFunction_AddLengthNodeFunc read FLib3MFImplicitFunction_AddLengthNodeFunc; + property Lib3MFImplicitFunction_AddTransposeNodeFunc: TLib3MFImplicitFunction_AddTransposeNodeFunc read FLib3MFImplicitFunction_AddTransposeNodeFunc; + property Lib3MFImplicitFunction_InverseNodeFunc: TLib3MFImplicitFunction_InverseNodeFunc read FLib3MFImplicitFunction_InverseNodeFunc; + property Lib3MFImplicitFunction_AddSqrtNodeFunc: TLib3MFImplicitFunction_AddSqrtNodeFunc read FLib3MFImplicitFunction_AddSqrtNodeFunc; + property Lib3MFImplicitFunction_AddResourceIdNodeFunc: TLib3MFImplicitFunction_AddResourceIdNodeFunc read FLib3MFImplicitFunction_AddResourceIdNodeFunc; + property Lib3MFImplicitFunction_AddAdditionNodeFunc: TLib3MFImplicitFunction_AddAdditionNodeFunc read FLib3MFImplicitFunction_AddAdditionNodeFunc; + property Lib3MFImplicitFunction_AddSubtractionNodeFunc: TLib3MFImplicitFunction_AddSubtractionNodeFunc read FLib3MFImplicitFunction_AddSubtractionNodeFunc; + property Lib3MFImplicitFunction_AddMultiplicationNodeFunc: TLib3MFImplicitFunction_AddMultiplicationNodeFunc read FLib3MFImplicitFunction_AddMultiplicationNodeFunc; + property Lib3MFImplicitFunction_AddDivisionNodeFunc: TLib3MFImplicitFunction_AddDivisionNodeFunc read FLib3MFImplicitFunction_AddDivisionNodeFunc; + property Lib3MFImplicitFunction_AddDotNodeFunc: TLib3MFImplicitFunction_AddDotNodeFunc read FLib3MFImplicitFunction_AddDotNodeFunc; + property Lib3MFImplicitFunction_AddCrossNodeFunc: TLib3MFImplicitFunction_AddCrossNodeFunc read FLib3MFImplicitFunction_AddCrossNodeFunc; + property Lib3MFImplicitFunction_AddMatVecMultiplicationNodeFunc: TLib3MFImplicitFunction_AddMatVecMultiplicationNodeFunc read FLib3MFImplicitFunction_AddMatVecMultiplicationNodeFunc; + property Lib3MFImplicitFunction_AddMinNodeFunc: TLib3MFImplicitFunction_AddMinNodeFunc read FLib3MFImplicitFunction_AddMinNodeFunc; + property Lib3MFImplicitFunction_AddMaxNodeFunc: TLib3MFImplicitFunction_AddMaxNodeFunc read FLib3MFImplicitFunction_AddMaxNodeFunc; + property Lib3MFImplicitFunction_AddFmodNodeFunc: TLib3MFImplicitFunction_AddFmodNodeFunc read FLib3MFImplicitFunction_AddFmodNodeFunc; + property Lib3MFImplicitFunction_AddPowNodeFunc: TLib3MFImplicitFunction_AddPowNodeFunc read FLib3MFImplicitFunction_AddPowNodeFunc; + property Lib3MFImplicitFunction_AddSelectNodeFunc: TLib3MFImplicitFunction_AddSelectNodeFunc read FLib3MFImplicitFunction_AddSelectNodeFunc; + property Lib3MFImplicitFunction_AddClampNodeFunc: TLib3MFImplicitFunction_AddClampNodeFunc read FLib3MFImplicitFunction_AddClampNodeFunc; + property Lib3MFImplicitFunction_AddComposeVectorNodeFunc: TLib3MFImplicitFunction_AddComposeVectorNodeFunc read FLib3MFImplicitFunction_AddComposeVectorNodeFunc; + property Lib3MFImplicitFunction_AddVectorFromScalarNodeFunc: TLib3MFImplicitFunction_AddVectorFromScalarNodeFunc read FLib3MFImplicitFunction_AddVectorFromScalarNodeFunc; + property Lib3MFImplicitFunction_AddDecomposeVectorNodeFunc: TLib3MFImplicitFunction_AddDecomposeVectorNodeFunc read FLib3MFImplicitFunction_AddDecomposeVectorNodeFunc; + property Lib3MFImplicitFunction_AddComposeMatrixNodeFunc: TLib3MFImplicitFunction_AddComposeMatrixNodeFunc read FLib3MFImplicitFunction_AddComposeMatrixNodeFunc; + property Lib3MFImplicitFunction_AddMatrixFromRowsNodeFunc: TLib3MFImplicitFunction_AddMatrixFromRowsNodeFunc read FLib3MFImplicitFunction_AddMatrixFromRowsNodeFunc; + property Lib3MFImplicitFunction_AddMatrixFromColumnsNodeFunc: TLib3MFImplicitFunction_AddMatrixFromColumnsNodeFunc read FLib3MFImplicitFunction_AddMatrixFromColumnsNodeFunc; + property Lib3MFImplicitFunction_AddConstantNodeFunc: TLib3MFImplicitFunction_AddConstantNodeFunc read FLib3MFImplicitFunction_AddConstantNodeFunc; + property Lib3MFImplicitFunction_AddConstVecNodeFunc: TLib3MFImplicitFunction_AddConstVecNodeFunc read FLib3MFImplicitFunction_AddConstVecNodeFunc; + property Lib3MFImplicitFunction_AddConstMatNodeFunc: TLib3MFImplicitFunction_AddConstMatNodeFunc read FLib3MFImplicitFunction_AddConstMatNodeFunc; + property Lib3MFImplicitFunction_AddMeshNodeFunc: TLib3MFImplicitFunction_AddMeshNodeFunc read FLib3MFImplicitFunction_AddMeshNodeFunc; + property Lib3MFImplicitFunction_AddUnsignedMeshNodeFunc: TLib3MFImplicitFunction_AddUnsignedMeshNodeFunc read FLib3MFImplicitFunction_AddUnsignedMeshNodeFunc; + property Lib3MFImplicitFunction_AddFunctionCallNodeFunc: TLib3MFImplicitFunction_AddFunctionCallNodeFunc read FLib3MFImplicitFunction_AddFunctionCallNodeFunc; + property Lib3MFImplicitFunction_GetNodesFunc: TLib3MFImplicitFunction_GetNodesFunc read FLib3MFImplicitFunction_GetNodesFunc; + property Lib3MFImplicitFunction_RemoveNodeFunc: TLib3MFImplicitFunction_RemoveNodeFunc read FLib3MFImplicitFunction_RemoveNodeFunc; + property Lib3MFImplicitFunction_AddLinkFunc: TLib3MFImplicitFunction_AddLinkFunc read FLib3MFImplicitFunction_AddLinkFunc; + property Lib3MFImplicitFunction_AddLinkByNamesFunc: TLib3MFImplicitFunction_AddLinkByNamesFunc read FLib3MFImplicitFunction_AddLinkByNamesFunc; + property Lib3MFImplicitFunction_ClearFunc: TLib3MFImplicitFunction_ClearFunc read FLib3MFImplicitFunction_ClearFunc; + property Lib3MFImplicitFunction_SortNodesTopologicallyFunc: TLib3MFImplicitFunction_SortNodesTopologicallyFunc read FLib3MFImplicitFunction_SortNodesTopologicallyFunc; + property Lib3MFFunctionFromImage3D_GetImage3DFunc: TLib3MFFunctionFromImage3D_GetImage3DFunc read FLib3MFFunctionFromImage3D_GetImage3DFunc; + property Lib3MFFunctionFromImage3D_SetImage3DFunc: TLib3MFFunctionFromImage3D_SetImage3DFunc read FLib3MFFunctionFromImage3D_SetImage3DFunc; + property Lib3MFFunctionFromImage3D_SetFilterFunc: TLib3MFFunctionFromImage3D_SetFilterFunc read FLib3MFFunctionFromImage3D_SetFilterFunc; + property Lib3MFFunctionFromImage3D_GetFilterFunc: TLib3MFFunctionFromImage3D_GetFilterFunc read FLib3MFFunctionFromImage3D_GetFilterFunc; + property Lib3MFFunctionFromImage3D_SetTileStylesFunc: TLib3MFFunctionFromImage3D_SetTileStylesFunc read FLib3MFFunctionFromImage3D_SetTileStylesFunc; + property Lib3MFFunctionFromImage3D_GetTileStylesFunc: TLib3MFFunctionFromImage3D_GetTileStylesFunc read FLib3MFFunctionFromImage3D_GetTileStylesFunc; + property Lib3MFFunctionFromImage3D_GetOffsetFunc: TLib3MFFunctionFromImage3D_GetOffsetFunc read FLib3MFFunctionFromImage3D_GetOffsetFunc; + property Lib3MFFunctionFromImage3D_SetOffsetFunc: TLib3MFFunctionFromImage3D_SetOffsetFunc read FLib3MFFunctionFromImage3D_SetOffsetFunc; + property Lib3MFFunctionFromImage3D_GetScaleFunc: TLib3MFFunctionFromImage3D_GetScaleFunc read FLib3MFFunctionFromImage3D_GetScaleFunc; + property Lib3MFFunctionFromImage3D_SetScaleFunc: TLib3MFFunctionFromImage3D_SetScaleFunc read FLib3MFFunctionFromImage3D_SetScaleFunc; property Lib3MFBuildItem_GetObjectResourceFunc: TLib3MFBuildItem_GetObjectResourceFunc read FLib3MFBuildItem_GetObjectResourceFunc; property Lib3MFBuildItem_GetUUIDFunc: TLib3MFBuildItem_GetUUIDFunc read FLib3MFBuildItem_GetUUIDFunc; property Lib3MFBuildItem_SetUUIDFunc: TLib3MFBuildItem_SetUUIDFunc read FLib3MFBuildItem_SetUUIDFunc; @@ -5628,6 +10124,7 @@ TLib3MFWrapper = class(TObject) property Lib3MFModel_GetComponentsObjectByIDFunc: TLib3MFModel_GetComponentsObjectByIDFunc read FLib3MFModel_GetComponentsObjectByIDFunc; property Lib3MFModel_GetColorGroupByIDFunc: TLib3MFModel_GetColorGroupByIDFunc read FLib3MFModel_GetColorGroupByIDFunc; property Lib3MFModel_GetSliceStackByIDFunc: TLib3MFModel_GetSliceStackByIDFunc read FLib3MFModel_GetSliceStackByIDFunc; + property Lib3MFModel_GetLevelSetByIDFunc: TLib3MFModel_GetLevelSetByIDFunc read FLib3MFModel_GetLevelSetByIDFunc; property Lib3MFModel_GetBuildUUIDFunc: TLib3MFModel_GetBuildUUIDFunc read FLib3MFModel_GetBuildUUIDFunc; property Lib3MFModel_SetBuildUUIDFunc: TLib3MFModel_SetBuildUUIDFunc read FLib3MFModel_SetBuildUUIDFunc; property Lib3MFModel_GetBuildItemsFunc: TLib3MFModel_GetBuildItemsFunc read FLib3MFModel_GetBuildItemsFunc; @@ -5643,7 +10140,9 @@ TLib3MFWrapper = class(TObject) property Lib3MFModel_GetCompositeMaterialsFunc: TLib3MFModel_GetCompositeMaterialsFunc read FLib3MFModel_GetCompositeMaterialsFunc; property Lib3MFModel_GetMultiPropertyGroupsFunc: TLib3MFModel_GetMultiPropertyGroupsFunc read FLib3MFModel_GetMultiPropertyGroupsFunc; property Lib3MFModel_GetSliceStacksFunc: TLib3MFModel_GetSliceStacksFunc read FLib3MFModel_GetSliceStacksFunc; + property Lib3MFModel_GetImage3DsFunc: TLib3MFModel_GetImage3DsFunc read FLib3MFModel_GetImage3DsFunc; property Lib3MFModel_MergeToModelFunc: TLib3MFModel_MergeToModelFunc read FLib3MFModel_MergeToModelFunc; + property Lib3MFModel_MergeFromModelFunc: TLib3MFModel_MergeFromModelFunc read FLib3MFModel_MergeFromModelFunc; property Lib3MFModel_AddMeshObjectFunc: TLib3MFModel_AddMeshObjectFunc read FLib3MFModel_AddMeshObjectFunc; property Lib3MFModel_AddComponentsObjectFunc: TLib3MFModel_AddComponentsObjectFunc read FLib3MFModel_AddComponentsObjectFunc; property Lib3MFModel_AddSliceStackFunc: TLib3MFModel_AddSliceStackFunc read FLib3MFModel_AddSliceStackFunc; @@ -5653,6 +10152,8 @@ TLib3MFWrapper = class(TObject) property Lib3MFModel_AddTexture2DGroupFunc: TLib3MFModel_AddTexture2DGroupFunc read FLib3MFModel_AddTexture2DGroupFunc; property Lib3MFModel_AddCompositeMaterialsFunc: TLib3MFModel_AddCompositeMaterialsFunc read FLib3MFModel_AddCompositeMaterialsFunc; property Lib3MFModel_AddMultiPropertyGroupFunc: TLib3MFModel_AddMultiPropertyGroupFunc read FLib3MFModel_AddMultiPropertyGroupFunc; + property Lib3MFModel_AddImageStackFunc: TLib3MFModel_AddImageStackFunc read FLib3MFModel_AddImageStackFunc; + property Lib3MFModel_GetImageStackByIDFunc: TLib3MFModel_GetImageStackByIDFunc read FLib3MFModel_GetImageStackByIDFunc; property Lib3MFModel_AddBuildItemFunc: TLib3MFModel_AddBuildItemFunc read FLib3MFModel_AddBuildItemFunc; property Lib3MFModel_RemoveBuildItemFunc: TLib3MFModel_RemoveBuildItemFunc read FLib3MFModel_RemoveBuildItemFunc; property Lib3MFModel_GetMetaDataGroupFunc: TLib3MFModel_GetMetaDataGroupFunc read FLib3MFModel_GetMetaDataGroupFunc; @@ -5669,6 +10170,13 @@ TLib3MFWrapper = class(TObject) property Lib3MFModel_RemoveCustomContentTypeFunc: TLib3MFModel_RemoveCustomContentTypeFunc read FLib3MFModel_RemoveCustomContentTypeFunc; property Lib3MFModel_SetRandomNumberCallbackFunc: TLib3MFModel_SetRandomNumberCallbackFunc read FLib3MFModel_SetRandomNumberCallbackFunc; property Lib3MFModel_GetKeyStoreFunc: TLib3MFModel_GetKeyStoreFunc read FLib3MFModel_GetKeyStoreFunc; + property Lib3MFModel_GetFunctionsFunc: TLib3MFModel_GetFunctionsFunc read FLib3MFModel_GetFunctionsFunc; + property Lib3MFModel_AddImplicitFunctionFunc: TLib3MFModel_AddImplicitFunctionFunc read FLib3MFModel_AddImplicitFunctionFunc; + property Lib3MFModel_AddFunctionFromImage3DFunc: TLib3MFModel_AddFunctionFromImage3DFunc read FLib3MFModel_AddFunctionFromImage3DFunc; + property Lib3MFModel_AddVolumeDataFunc: TLib3MFModel_AddVolumeDataFunc read FLib3MFModel_AddVolumeDataFunc; + property Lib3MFModel_AddLevelSetFunc: TLib3MFModel_AddLevelSetFunc read FLib3MFModel_AddLevelSetFunc; + property Lib3MFModel_GetLevelSetsFunc: TLib3MFModel_GetLevelSetsFunc read FLib3MFModel_GetLevelSetsFunc; + property Lib3MFModel_RemoveResourceFunc: TLib3MFModel_RemoveResourceFunc read FLib3MFModel_RemoveResourceFunc; property Lib3MFGetLibraryVersionFunc: TLib3MFGetLibraryVersionFunc read FLib3MFGetLibraryVersionFunc; property Lib3MFGetPrereleaseInformationFunc: TLib3MFGetPrereleaseInformationFunc read FLib3MFGetPrereleaseInformationFunc; property Lib3MFGetBuildInformationFunc: TLib3MFGetBuildInformationFunc read FLib3MFGetBuildInformationFunc; @@ -5715,3020 +10223,6995 @@ TLib3MFWrapper = class(TObject) end; (************************************************************************************************************************* - Enum conversion + Enum conversion +**************************************************************************************************************************) + + function convertPropertyTypeToConst(const AValue: TLib3MFPropertyType): Integer; + function convertConstToPropertyType(const AValue: Integer): TLib3MFPropertyType; + function convertSlicesMeshResolutionToConst(const AValue: TLib3MFSlicesMeshResolution): Integer; + function convertConstToSlicesMeshResolution(const AValue: Integer): TLib3MFSlicesMeshResolution; + function convertModelUnitToConst(const AValue: TLib3MFModelUnit): Integer; + function convertConstToModelUnit(const AValue: Integer): TLib3MFModelUnit; + function convertObjectTypeToConst(const AValue: TLib3MFObjectType): Integer; + function convertConstToObjectType(const AValue: Integer): TLib3MFObjectType; + function convertTextureTypeToConst(const AValue: TLib3MFTextureType): Integer; + function convertConstToTextureType(const AValue: Integer): TLib3MFTextureType; + function convertTextureTileStyleToConst(const AValue: TLib3MFTextureTileStyle): Integer; + function convertConstToTextureTileStyle(const AValue: Integer): TLib3MFTextureTileStyle; + function convertTextureFilterToConst(const AValue: TLib3MFTextureFilter): Integer; + function convertConstToTextureFilter(const AValue: Integer): TLib3MFTextureFilter; + function convertBeamLatticeCapModeToConst(const AValue: TLib3MFBeamLatticeCapMode): Integer; + function convertConstToBeamLatticeCapMode(const AValue: Integer): TLib3MFBeamLatticeCapMode; + function convertBeamLatticeClipModeToConst(const AValue: TLib3MFBeamLatticeClipMode): Integer; + function convertConstToBeamLatticeClipMode(const AValue: Integer): TLib3MFBeamLatticeClipMode; + function convertBeamLatticeBallModeToConst(const AValue: TLib3MFBeamLatticeBallMode): Integer; + function convertConstToBeamLatticeBallMode(const AValue: Integer): TLib3MFBeamLatticeBallMode; + function convertProgressIdentifierToConst(const AValue: TLib3MFProgressIdentifier): Integer; + function convertConstToProgressIdentifier(const AValue: Integer): TLib3MFProgressIdentifier; + function convertBlendMethodToConst(const AValue: TLib3MFBlendMethod): Integer; + function convertConstToBlendMethod(const AValue: Integer): TLib3MFBlendMethod; + function convertChannelNameToConst(const AValue: TLib3MFChannelName): Integer; + function convertConstToChannelName(const AValue: Integer): TLib3MFChannelName; + function convertCompositionMethodToConst(const AValue: TLib3MFCompositionMethod): Integer; + function convertConstToCompositionMethod(const AValue: Integer): TLib3MFCompositionMethod; + function convertCompositionSpaceToConst(const AValue: TLib3MFCompositionSpace): Integer; + function convertConstToCompositionSpace(const AValue: Integer): TLib3MFCompositionSpace; + function convertImplicitNodeTypeToConst(const AValue: TLib3MFImplicitNodeType): Integer; + function convertConstToImplicitNodeType(const AValue: Integer): TLib3MFImplicitNodeType; + function convertImplicitPortTypeToConst(const AValue: TLib3MFImplicitPortType): Integer; + function convertConstToImplicitPortType(const AValue: Integer): TLib3MFImplicitPortType; + function convertImplicitNodeConfigurationToConst(const AValue: TLib3MFImplicitNodeConfiguration): Integer; + function convertConstToImplicitNodeConfiguration(const AValue: Integer): TLib3MFImplicitNodeConfiguration; + function convertEncryptionAlgorithmToConst(const AValue: TLib3MFEncryptionAlgorithm): Integer; + function convertConstToEncryptionAlgorithm(const AValue: Integer): TLib3MFEncryptionAlgorithm; + function convertWrappingAlgorithmToConst(const AValue: TLib3MFWrappingAlgorithm): Integer; + function convertConstToWrappingAlgorithm(const AValue: Integer): TLib3MFWrappingAlgorithm; + function convertMgfAlgorithmToConst(const AValue: TLib3MFMgfAlgorithm): Integer; + function convertConstToMgfAlgorithm(const AValue: Integer): TLib3MFMgfAlgorithm; + function convertDigestMethodToConst(const AValue: TLib3MFDigestMethod): Integer; + function convertConstToDigestMethod(const AValue: Integer): TLib3MFDigestMethod; + function convertCompressionToConst(const AValue: TLib3MFCompression): Integer; + function convertConstToCompression(const AValue: Integer): TLib3MFCompression; + + TLib3MFPolymorphicFactory<_T:class; _B> = record + class function Make(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): _T; static; + end; + function TLib3MFPolymorphicFactoryMakeBase(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBase; + function TLib3MFPolymorphicFactoryMakeWriter(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFWriter; + function TLib3MFPolymorphicFactoryMakeReader(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFReader; + function TLib3MFPolymorphicFactoryMakePackagePart(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFPackagePart; + function TLib3MFPolymorphicFactoryMakeResource(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResource; + function TLib3MFPolymorphicFactoryMakeResourceIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceIterator; + function TLib3MFPolymorphicFactoryMakeSliceStackIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSliceStackIterator; + function TLib3MFPolymorphicFactoryMakeObjectIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFObjectIterator; + function TLib3MFPolymorphicFactoryMakeMeshObjectIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMeshObjectIterator; + function TLib3MFPolymorphicFactoryMakeComponentsObjectIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComponentsObjectIterator; + function TLib3MFPolymorphicFactoryMakeTexture2DIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2DIterator; + function TLib3MFPolymorphicFactoryMakeBaseMaterialGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBaseMaterialGroupIterator; + function TLib3MFPolymorphicFactoryMakeColorGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFColorGroupIterator; + function TLib3MFPolymorphicFactoryMakeTexture2DGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2DGroupIterator; + function TLib3MFPolymorphicFactoryMakeCompositeMaterialsIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCompositeMaterialsIterator; + function TLib3MFPolymorphicFactoryMakeMultiPropertyGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMultiPropertyGroupIterator; + function TLib3MFPolymorphicFactoryMakeImage3DIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImage3DIterator; + function TLib3MFPolymorphicFactoryMakeFunctionIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFunctionIterator; + function TLib3MFPolymorphicFactoryMakeLevelSetIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFLevelSetIterator; + function TLib3MFPolymorphicFactoryMakeMetaData(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMetaData; + function TLib3MFPolymorphicFactoryMakeMetaDataGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMetaDataGroup; + function TLib3MFPolymorphicFactoryMakeObject(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFObject; + function TLib3MFPolymorphicFactoryMakeMeshObject(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMeshObject; + function TLib3MFPolymorphicFactoryMakeLevelSet(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFLevelSet; + function TLib3MFPolymorphicFactoryMakeBeamLattice(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBeamLattice; + function TLib3MFPolymorphicFactoryMakeFunctionReference(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFunctionReference; + function TLib3MFPolymorphicFactoryMakeVolumeDataColor(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFVolumeDataColor; + function TLib3MFPolymorphicFactoryMakeMaterialMapping(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMaterialMapping; + function TLib3MFPolymorphicFactoryMakeVolumeDataComposite(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFVolumeDataComposite; + function TLib3MFPolymorphicFactoryMakeVolumeDataProperty(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFVolumeDataProperty; + function TLib3MFPolymorphicFactoryMakeVolumeData(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFVolumeData; + function TLib3MFPolymorphicFactoryMakeComponent(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComponent; + function TLib3MFPolymorphicFactoryMakeComponentsObject(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComponentsObject; + function TLib3MFPolymorphicFactoryMakeBeamSet(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBeamSet; + function TLib3MFPolymorphicFactoryMakeBaseMaterialGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBaseMaterialGroup; + function TLib3MFPolymorphicFactoryMakeColorGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFColorGroup; + function TLib3MFPolymorphicFactoryMakeTexture2DGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2DGroup; + function TLib3MFPolymorphicFactoryMakeCompositeMaterials(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCompositeMaterials; + function TLib3MFPolymorphicFactoryMakeMultiPropertyGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMultiPropertyGroup; + function TLib3MFPolymorphicFactoryMakeImage3D(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImage3D; + function TLib3MFPolymorphicFactoryMakeImageStack(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImageStack; + function TLib3MFPolymorphicFactoryMakeAttachment(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFAttachment; + function TLib3MFPolymorphicFactoryMakeTexture2D(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2D; + function TLib3MFPolymorphicFactoryMakeImplicitPort(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImplicitPort; + function TLib3MFPolymorphicFactoryMakeIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFIterator; + function TLib3MFPolymorphicFactoryMakeImplicitPortIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImplicitPortIterator; + function TLib3MFPolymorphicFactoryMakeImplicitNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImplicitNode; + function TLib3MFPolymorphicFactoryMakeOneInputNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFOneInputNode; + function TLib3MFPolymorphicFactoryMakeSinNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSinNode; + function TLib3MFPolymorphicFactoryMakeCosNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCosNode; + function TLib3MFPolymorphicFactoryMakeTanNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTanNode; + function TLib3MFPolymorphicFactoryMakeArcSinNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFArcSinNode; + function TLib3MFPolymorphicFactoryMakeArcCosNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFArcCosNode; + function TLib3MFPolymorphicFactoryMakeArcTanNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFArcTanNode; + function TLib3MFPolymorphicFactoryMakeSinhNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSinhNode; + function TLib3MFPolymorphicFactoryMakeCoshNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCoshNode; + function TLib3MFPolymorphicFactoryMakeTanhNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTanhNode; + function TLib3MFPolymorphicFactoryMakeRoundNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFRoundNode; + function TLib3MFPolymorphicFactoryMakeCeilNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCeilNode; + function TLib3MFPolymorphicFactoryMakeFloorNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFloorNode; + function TLib3MFPolymorphicFactoryMakeSignNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSignNode; + function TLib3MFPolymorphicFactoryMakeFractNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFractNode; + function TLib3MFPolymorphicFactoryMakeAbsNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFAbsNode; + function TLib3MFPolymorphicFactoryMakeExpNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFExpNode; + function TLib3MFPolymorphicFactoryMakeLogNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFLogNode; + function TLib3MFPolymorphicFactoryMakeLog2Node(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFLog2Node; + function TLib3MFPolymorphicFactoryMakeLog10Node(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFLog10Node; + function TLib3MFPolymorphicFactoryMakeLengthNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFLengthNode; + function TLib3MFPolymorphicFactoryMakeTransposeNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTransposeNode; + function TLib3MFPolymorphicFactoryMakeInverseNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFInverseNode; + function TLib3MFPolymorphicFactoryMakeSqrtNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSqrtNode; + function TLib3MFPolymorphicFactoryMakeResourceIdNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceIdNode; + function TLib3MFPolymorphicFactoryMakeTwoInputNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTwoInputNode; + function TLib3MFPolymorphicFactoryMakeAdditionNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFAdditionNode; + function TLib3MFPolymorphicFactoryMakeSubtractionNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSubtractionNode; + function TLib3MFPolymorphicFactoryMakeMultiplicationNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMultiplicationNode; + function TLib3MFPolymorphicFactoryMakeDivisionNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFDivisionNode; + function TLib3MFPolymorphicFactoryMakeDotNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFDotNode; + function TLib3MFPolymorphicFactoryMakeCrossNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCrossNode; + function TLib3MFPolymorphicFactoryMakeArcTan2Node(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFArcTan2Node; + function TLib3MFPolymorphicFactoryMakeMatVecMultiplicationNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMatVecMultiplicationNode; + function TLib3MFPolymorphicFactoryMakeMinNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMinNode; + function TLib3MFPolymorphicFactoryMakeMaxNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMaxNode; + function TLib3MFPolymorphicFactoryMakeFmodNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFmodNode; + function TLib3MFPolymorphicFactoryMakeModNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFModNode; + function TLib3MFPolymorphicFactoryMakePowNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFPowNode; + function TLib3MFPolymorphicFactoryMakeSelectNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSelectNode; + function TLib3MFPolymorphicFactoryMakeClampNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFClampNode; + function TLib3MFPolymorphicFactoryMakeComposeVectorNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComposeVectorNode; + function TLib3MFPolymorphicFactoryMakeVectorFromScalarNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFVectorFromScalarNode; + function TLib3MFPolymorphicFactoryMakeDecomposeVectorNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFDecomposeVectorNode; + function TLib3MFPolymorphicFactoryMakeComposeMatrixNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComposeMatrixNode; + function TLib3MFPolymorphicFactoryMakeMatrixFromRowsNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMatrixFromRowsNode; + function TLib3MFPolymorphicFactoryMakeMatrixFromColumnsNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMatrixFromColumnsNode; + function TLib3MFPolymorphicFactoryMakeConstantNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFConstantNode; + function TLib3MFPolymorphicFactoryMakeConstVecNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFConstVecNode; + function TLib3MFPolymorphicFactoryMakeConstMatNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFConstMatNode; + function TLib3MFPolymorphicFactoryMakeMeshNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMeshNode; + function TLib3MFPolymorphicFactoryMakeUnsignedMeshNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFUnsignedMeshNode; + function TLib3MFPolymorphicFactoryMakeFunctionCallNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFunctionCallNode; + function TLib3MFPolymorphicFactoryMakeNodeIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFNodeIterator; + function TLib3MFPolymorphicFactoryMakeFunction(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFunction; + function TLib3MFPolymorphicFactoryMakeImplicitFunction(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImplicitFunction; + function TLib3MFPolymorphicFactoryMakeFunctionFromImage3D(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFunctionFromImage3D; + function TLib3MFPolymorphicFactoryMakeBuildItem(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBuildItem; + function TLib3MFPolymorphicFactoryMakeBuildItemIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBuildItemIterator; + function TLib3MFPolymorphicFactoryMakeSlice(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSlice; + function TLib3MFPolymorphicFactoryMakeSliceStack(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSliceStack; + function TLib3MFPolymorphicFactoryMakeConsumer(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFConsumer; + function TLib3MFPolymorphicFactoryMakeAccessRight(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFAccessRight; + function TLib3MFPolymorphicFactoryMakeContentEncryptionParams(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFContentEncryptionParams; + function TLib3MFPolymorphicFactoryMakeResourceData(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceData; + function TLib3MFPolymorphicFactoryMakeResourceDataGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceDataGroup; + function TLib3MFPolymorphicFactoryMakeKeyStore(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFKeyStore; + function TLib3MFPolymorphicFactoryMakeModel(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFModel; + +implementation + +(************************************************************************************************************************* + Enum conversion +**************************************************************************************************************************) + + function convertPropertyTypeToConst(const AValue: TLib3MFPropertyType): Integer; + begin + case AValue of + ePropertyTypeNoPropertyType: Result := 0; + ePropertyTypeBaseMaterial: Result := 1; + ePropertyTypeTexCoord: Result := 2; + ePropertyTypeColors: Result := 3; + ePropertyTypeComposite: Result := 4; + ePropertyTypeMulti: Result := 5; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToPropertyType(const AValue: Integer): TLib3MFPropertyType; + begin + case AValue of + 0: Result := ePropertyTypeNoPropertyType; + 1: Result := ePropertyTypeBaseMaterial; + 2: Result := ePropertyTypeTexCoord; + 3: Result := ePropertyTypeColors; + 4: Result := ePropertyTypeComposite; + 5: Result := ePropertyTypeMulti; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertSlicesMeshResolutionToConst(const AValue: TLib3MFSlicesMeshResolution): Integer; + begin + case AValue of + eSlicesMeshResolutionFullres: Result := 0; + eSlicesMeshResolutionLowres: Result := 1; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToSlicesMeshResolution(const AValue: Integer): TLib3MFSlicesMeshResolution; + begin + case AValue of + 0: Result := eSlicesMeshResolutionFullres; + 1: Result := eSlicesMeshResolutionLowres; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertModelUnitToConst(const AValue: TLib3MFModelUnit): Integer; + begin + case AValue of + eModelUnitMicroMeter: Result := 0; + eModelUnitMilliMeter: Result := 1; + eModelUnitCentiMeter: Result := 2; + eModelUnitInch: Result := 3; + eModelUnitFoot: Result := 4; + eModelUnitMeter: Result := 5; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToModelUnit(const AValue: Integer): TLib3MFModelUnit; + begin + case AValue of + 0: Result := eModelUnitMicroMeter; + 1: Result := eModelUnitMilliMeter; + 2: Result := eModelUnitCentiMeter; + 3: Result := eModelUnitInch; + 4: Result := eModelUnitFoot; + 5: Result := eModelUnitMeter; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertObjectTypeToConst(const AValue: TLib3MFObjectType): Integer; + begin + case AValue of + eObjectTypeOther: Result := 0; + eObjectTypeModel: Result := 1; + eObjectTypeSupport: Result := 2; + eObjectTypeSolidSupport: Result := 3; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToObjectType(const AValue: Integer): TLib3MFObjectType; + begin + case AValue of + 0: Result := eObjectTypeOther; + 1: Result := eObjectTypeModel; + 2: Result := eObjectTypeSupport; + 3: Result := eObjectTypeSolidSupport; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertTextureTypeToConst(const AValue: TLib3MFTextureType): Integer; + begin + case AValue of + eTextureTypeUnknown: Result := 0; + eTextureTypePNG: Result := 1; + eTextureTypeJPEG: Result := 2; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToTextureType(const AValue: Integer): TLib3MFTextureType; + begin + case AValue of + 0: Result := eTextureTypeUnknown; + 1: Result := eTextureTypePNG; + 2: Result := eTextureTypeJPEG; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertTextureTileStyleToConst(const AValue: TLib3MFTextureTileStyle): Integer; + begin + case AValue of + eTextureTileStyleWrap: Result := 0; + eTextureTileStyleMirror: Result := 1; + eTextureTileStyleClamp: Result := 2; + eTextureTileStyleNoTileStyle: Result := 3; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToTextureTileStyle(const AValue: Integer): TLib3MFTextureTileStyle; + begin + case AValue of + 0: Result := eTextureTileStyleWrap; + 1: Result := eTextureTileStyleMirror; + 2: Result := eTextureTileStyleClamp; + 3: Result := eTextureTileStyleNoTileStyle; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertTextureFilterToConst(const AValue: TLib3MFTextureFilter): Integer; + begin + case AValue of + eTextureFilterAuto: Result := 0; + eTextureFilterLinear: Result := 1; + eTextureFilterNearest: Result := 2; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToTextureFilter(const AValue: Integer): TLib3MFTextureFilter; + begin + case AValue of + 0: Result := eTextureFilterAuto; + 1: Result := eTextureFilterLinear; + 2: Result := eTextureFilterNearest; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertBeamLatticeCapModeToConst(const AValue: TLib3MFBeamLatticeCapMode): Integer; + begin + case AValue of + eBeamLatticeCapModeSphere: Result := 0; + eBeamLatticeCapModeHemiSphere: Result := 1; + eBeamLatticeCapModeButt: Result := 2; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToBeamLatticeCapMode(const AValue: Integer): TLib3MFBeamLatticeCapMode; + begin + case AValue of + 0: Result := eBeamLatticeCapModeSphere; + 1: Result := eBeamLatticeCapModeHemiSphere; + 2: Result := eBeamLatticeCapModeButt; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertBeamLatticeClipModeToConst(const AValue: TLib3MFBeamLatticeClipMode): Integer; + begin + case AValue of + eBeamLatticeClipModeNoClipMode: Result := 0; + eBeamLatticeClipModeInside: Result := 1; + eBeamLatticeClipModeOutside: Result := 2; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToBeamLatticeClipMode(const AValue: Integer): TLib3MFBeamLatticeClipMode; + begin + case AValue of + 0: Result := eBeamLatticeClipModeNoClipMode; + 1: Result := eBeamLatticeClipModeInside; + 2: Result := eBeamLatticeClipModeOutside; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertBeamLatticeBallModeToConst(const AValue: TLib3MFBeamLatticeBallMode): Integer; + begin + case AValue of + eBeamLatticeBallModeBeamLatticeBallModeNone: Result := 0; + eBeamLatticeBallModeMixed: Result := 1; + eBeamLatticeBallModeAll: Result := 2; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToBeamLatticeBallMode(const AValue: Integer): TLib3MFBeamLatticeBallMode; + begin + case AValue of + 0: Result := eBeamLatticeBallModeBeamLatticeBallModeNone; + 1: Result := eBeamLatticeBallModeMixed; + 2: Result := eBeamLatticeBallModeAll; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertProgressIdentifierToConst(const AValue: TLib3MFProgressIdentifier): Integer; + begin + case AValue of + eProgressIdentifierQUERYCANCELED: Result := 0; + eProgressIdentifierDONE: Result := 1; + eProgressIdentifierCLEANUP: Result := 2; + eProgressIdentifierREADSTREAM: Result := 3; + eProgressIdentifierEXTRACTOPCPACKAGE: Result := 4; + eProgressIdentifierREADNONROOTMODELS: Result := 5; + eProgressIdentifierREADROOTMODEL: Result := 6; + eProgressIdentifierREADRESOURCES: Result := 7; + eProgressIdentifierREADMESH: Result := 8; + eProgressIdentifierREADSLICES: Result := 9; + eProgressIdentifierREADBUILD: Result := 10; + eProgressIdentifierREADCUSTOMATTACHMENT: Result := 11; + eProgressIdentifierREADTEXTURETACHMENTS: Result := 12; + eProgressIdentifierCREATEOPCPACKAGE: Result := 13; + eProgressIdentifierWRITEMODELSTOSTREAM: Result := 14; + eProgressIdentifierWRITEROOTMODEL: Result := 15; + eProgressIdentifierWRITENONROOTMODELS: Result := 16; + eProgressIdentifierWRITEATTACHMENTS: Result := 17; + eProgressIdentifierWRITECONTENTTYPES: Result := 18; + eProgressIdentifierWRITENOBJECTS: Result := 19; + eProgressIdentifierWRITENODES: Result := 20; + eProgressIdentifierWRITETRIANGLES: Result := 21; + eProgressIdentifierWRITESLICES: Result := 22; + eProgressIdentifierWRITEKEYSTORE: Result := 23; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToProgressIdentifier(const AValue: Integer): TLib3MFProgressIdentifier; + begin + case AValue of + 0: Result := eProgressIdentifierQUERYCANCELED; + 1: Result := eProgressIdentifierDONE; + 2: Result := eProgressIdentifierCLEANUP; + 3: Result := eProgressIdentifierREADSTREAM; + 4: Result := eProgressIdentifierEXTRACTOPCPACKAGE; + 5: Result := eProgressIdentifierREADNONROOTMODELS; + 6: Result := eProgressIdentifierREADROOTMODEL; + 7: Result := eProgressIdentifierREADRESOURCES; + 8: Result := eProgressIdentifierREADMESH; + 9: Result := eProgressIdentifierREADSLICES; + 10: Result := eProgressIdentifierREADBUILD; + 11: Result := eProgressIdentifierREADCUSTOMATTACHMENT; + 12: Result := eProgressIdentifierREADTEXTURETACHMENTS; + 13: Result := eProgressIdentifierCREATEOPCPACKAGE; + 14: Result := eProgressIdentifierWRITEMODELSTOSTREAM; + 15: Result := eProgressIdentifierWRITEROOTMODEL; + 16: Result := eProgressIdentifierWRITENONROOTMODELS; + 17: Result := eProgressIdentifierWRITEATTACHMENTS; + 18: Result := eProgressIdentifierWRITECONTENTTYPES; + 19: Result := eProgressIdentifierWRITENOBJECTS; + 20: Result := eProgressIdentifierWRITENODES; + 21: Result := eProgressIdentifierWRITETRIANGLES; + 22: Result := eProgressIdentifierWRITESLICES; + 23: Result := eProgressIdentifierWRITEKEYSTORE; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertBlendMethodToConst(const AValue: TLib3MFBlendMethod): Integer; + begin + case AValue of + eBlendMethodNoBlendMethod: Result := 0; + eBlendMethodMix: Result := 1; + eBlendMethodMultiply: Result := 2; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToBlendMethod(const AValue: Integer): TLib3MFBlendMethod; + begin + case AValue of + 0: Result := eBlendMethodNoBlendMethod; + 1: Result := eBlendMethodMix; + 2: Result := eBlendMethodMultiply; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertChannelNameToConst(const AValue: TLib3MFChannelName): Integer; + begin + case AValue of + eChannelNameRed: Result := 0; + eChannelNameGreen: Result := 1; + eChannelNameBlue: Result := 2; + eChannelNameAlpha: Result := 3; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToChannelName(const AValue: Integer): TLib3MFChannelName; + begin + case AValue of + 0: Result := eChannelNameRed; + 1: Result := eChannelNameGreen; + 2: Result := eChannelNameBlue; + 3: Result := eChannelNameAlpha; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertCompositionMethodToConst(const AValue: TLib3MFCompositionMethod): Integer; + begin + case AValue of + eCompositionMethodWeightedSum: Result := 0; + eCompositionMethodMultiply: Result := 1; + eCompositionMethodMin: Result := 2; + eCompositionMethodMax: Result := 3; + eCompositionMethodMask: Result := 4; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToCompositionMethod(const AValue: Integer): TLib3MFCompositionMethod; + begin + case AValue of + 0: Result := eCompositionMethodWeightedSum; + 1: Result := eCompositionMethodMultiply; + 2: Result := eCompositionMethodMin; + 3: Result := eCompositionMethodMax; + 4: Result := eCompositionMethodMask; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertCompositionSpaceToConst(const AValue: TLib3MFCompositionSpace): Integer; + begin + case AValue of + eCompositionSpaceRaw: Result := 0; + eCompositionSpaceLinearColor: Result := 1; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToCompositionSpace(const AValue: Integer): TLib3MFCompositionSpace; + begin + case AValue of + 0: Result := eCompositionSpaceRaw; + 1: Result := eCompositionSpaceLinearColor; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertImplicitNodeTypeToConst(const AValue: TLib3MFImplicitNodeType): Integer; + begin + case AValue of + eImplicitNodeTypeAddition: Result := 1; + eImplicitNodeTypeSubtraction: Result := 2; + eImplicitNodeTypeMultiplication: Result := 3; + eImplicitNodeTypeDivision: Result := 4; + eImplicitNodeTypeConstant: Result := 5; + eImplicitNodeTypeConstVec: Result := 6; + eImplicitNodeTypeConstMat: Result := 7; + eImplicitNodeTypeComposeVector: Result := 8; + eImplicitNodeTypeDecomposeVector: Result := 9; + eImplicitNodeTypeComposeMatrix: Result := 10; + eImplicitNodeTypeMatrixFromColumns: Result := 11; + eImplicitNodeTypeMatrixFromRows: Result := 12; + eImplicitNodeTypeDot: Result := 13; + eImplicitNodeTypeCross: Result := 14; + eImplicitNodeTypeMatVecMultiplication: Result := 15; + eImplicitNodeTypeTranspose: Result := 16; + eImplicitNodeTypeInverse: Result := 17; + eImplicitNodeTypeSinus: Result := 18; + eImplicitNodeTypeCosinus: Result := 19; + eImplicitNodeTypeTan: Result := 20; + eImplicitNodeTypeArcSin: Result := 21; + eImplicitNodeTypeArcCos: Result := 22; + eImplicitNodeTypeArcTan: Result := 23; + eImplicitNodeTypeArcTan2: Result := 24; + eImplicitNodeTypeMin: Result := 25; + eImplicitNodeTypeMax: Result := 26; + eImplicitNodeTypeAbs: Result := 27; + eImplicitNodeTypeFmod: Result := 28; + eImplicitNodeTypePow: Result := 29; + eImplicitNodeTypeSqrt: Result := 30; + eImplicitNodeTypeExp: Result := 31; + eImplicitNodeTypeLog: Result := 32; + eImplicitNodeTypeLog2: Result := 33; + eImplicitNodeTypeLog10: Result := 34; + eImplicitNodeTypeSelect: Result := 35; + eImplicitNodeTypeClamp: Result := 36; + eImplicitNodeTypeSinh: Result := 37; + eImplicitNodeTypeCosh: Result := 38; + eImplicitNodeTypeTanh: Result := 39; + eImplicitNodeTypeRound: Result := 40; + eImplicitNodeTypeCeil: Result := 41; + eImplicitNodeTypeFloor: Result := 42; + eImplicitNodeTypeSign: Result := 43; + eImplicitNodeTypeFract: Result := 44; + eImplicitNodeTypeFunctionCall: Result := 45; + eImplicitNodeTypeMesh: Result := 46; + eImplicitNodeTypeLength: Result := 47; + eImplicitNodeTypeConstResourceID: Result := 48; + eImplicitNodeTypeVectorFromScalar: Result := 49; + eImplicitNodeTypeUnsignedMesh: Result := 50; + eImplicitNodeTypeMod: Result := 51; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToImplicitNodeType(const AValue: Integer): TLib3MFImplicitNodeType; + begin + case AValue of + 1: Result := eImplicitNodeTypeAddition; + 2: Result := eImplicitNodeTypeSubtraction; + 3: Result := eImplicitNodeTypeMultiplication; + 4: Result := eImplicitNodeTypeDivision; + 5: Result := eImplicitNodeTypeConstant; + 6: Result := eImplicitNodeTypeConstVec; + 7: Result := eImplicitNodeTypeConstMat; + 8: Result := eImplicitNodeTypeComposeVector; + 9: Result := eImplicitNodeTypeDecomposeVector; + 10: Result := eImplicitNodeTypeComposeMatrix; + 11: Result := eImplicitNodeTypeMatrixFromColumns; + 12: Result := eImplicitNodeTypeMatrixFromRows; + 13: Result := eImplicitNodeTypeDot; + 14: Result := eImplicitNodeTypeCross; + 15: Result := eImplicitNodeTypeMatVecMultiplication; + 16: Result := eImplicitNodeTypeTranspose; + 17: Result := eImplicitNodeTypeInverse; + 18: Result := eImplicitNodeTypeSinus; + 19: Result := eImplicitNodeTypeCosinus; + 20: Result := eImplicitNodeTypeTan; + 21: Result := eImplicitNodeTypeArcSin; + 22: Result := eImplicitNodeTypeArcCos; + 23: Result := eImplicitNodeTypeArcTan; + 24: Result := eImplicitNodeTypeArcTan2; + 25: Result := eImplicitNodeTypeMin; + 26: Result := eImplicitNodeTypeMax; + 27: Result := eImplicitNodeTypeAbs; + 28: Result := eImplicitNodeTypeFmod; + 29: Result := eImplicitNodeTypePow; + 30: Result := eImplicitNodeTypeSqrt; + 31: Result := eImplicitNodeTypeExp; + 32: Result := eImplicitNodeTypeLog; + 33: Result := eImplicitNodeTypeLog2; + 34: Result := eImplicitNodeTypeLog10; + 35: Result := eImplicitNodeTypeSelect; + 36: Result := eImplicitNodeTypeClamp; + 37: Result := eImplicitNodeTypeSinh; + 38: Result := eImplicitNodeTypeCosh; + 39: Result := eImplicitNodeTypeTanh; + 40: Result := eImplicitNodeTypeRound; + 41: Result := eImplicitNodeTypeCeil; + 42: Result := eImplicitNodeTypeFloor; + 43: Result := eImplicitNodeTypeSign; + 44: Result := eImplicitNodeTypeFract; + 45: Result := eImplicitNodeTypeFunctionCall; + 46: Result := eImplicitNodeTypeMesh; + 47: Result := eImplicitNodeTypeLength; + 48: Result := eImplicitNodeTypeConstResourceID; + 49: Result := eImplicitNodeTypeVectorFromScalar; + 50: Result := eImplicitNodeTypeUnsignedMesh; + 51: Result := eImplicitNodeTypeMod; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertImplicitPortTypeToConst(const AValue: TLib3MFImplicitPortType): Integer; + begin + case AValue of + eImplicitPortTypeScalar: Result := 1; + eImplicitPortTypeVector: Result := 2; + eImplicitPortTypeMatrix: Result := 3; + eImplicitPortTypeResourceID: Result := 4; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToImplicitPortType(const AValue: Integer): TLib3MFImplicitPortType; + begin + case AValue of + 1: Result := eImplicitPortTypeScalar; + 2: Result := eImplicitPortTypeVector; + 3: Result := eImplicitPortTypeMatrix; + 4: Result := eImplicitPortTypeResourceID; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertImplicitNodeConfigurationToConst(const AValue: TLib3MFImplicitNodeConfiguration): Integer; + begin + case AValue of + eImplicitNodeConfigurationDefault: Result := 1; + eImplicitNodeConfigurationScalarToScalar: Result := 2; + eImplicitNodeConfigurationVectorToVector: Result := 3; + eImplicitNodeConfigurationMatrixToMatrix: Result := 4; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToImplicitNodeConfiguration(const AValue: Integer): TLib3MFImplicitNodeConfiguration; + begin + case AValue of + 1: Result := eImplicitNodeConfigurationDefault; + 2: Result := eImplicitNodeConfigurationScalarToScalar; + 3: Result := eImplicitNodeConfigurationVectorToVector; + 4: Result := eImplicitNodeConfigurationMatrixToMatrix; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertEncryptionAlgorithmToConst(const AValue: TLib3MFEncryptionAlgorithm): Integer; + begin + case AValue of + eEncryptionAlgorithmAES256_GCM: Result := 1; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToEncryptionAlgorithm(const AValue: Integer): TLib3MFEncryptionAlgorithm; + begin + case AValue of + 1: Result := eEncryptionAlgorithmAES256_GCM; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertWrappingAlgorithmToConst(const AValue: TLib3MFWrappingAlgorithm): Integer; + begin + case AValue of + eWrappingAlgorithmRSA_OAEP: Result := 0; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToWrappingAlgorithm(const AValue: Integer): TLib3MFWrappingAlgorithm; + begin + case AValue of + 0: Result := eWrappingAlgorithmRSA_OAEP; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertMgfAlgorithmToConst(const AValue: TLib3MFMgfAlgorithm): Integer; + begin + case AValue of + eMgfAlgorithmMGF1_SHA1: Result := 160; + eMgfAlgorithmMGF1_SHA224: Result := 224; + eMgfAlgorithmMGF1_SHA256: Result := 256; + eMgfAlgorithmMGF1_SHA384: Result := 384; + eMgfAlgorithmMGF1_SHA512: Result := 512; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToMgfAlgorithm(const AValue: Integer): TLib3MFMgfAlgorithm; + begin + case AValue of + 160: Result := eMgfAlgorithmMGF1_SHA1; + 224: Result := eMgfAlgorithmMGF1_SHA224; + 256: Result := eMgfAlgorithmMGF1_SHA256; + 384: Result := eMgfAlgorithmMGF1_SHA384; + 512: Result := eMgfAlgorithmMGF1_SHA512; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertDigestMethodToConst(const AValue: TLib3MFDigestMethod): Integer; + begin + case AValue of + eDigestMethodSHA1: Result := 160; + eDigestMethodSHA256: Result := 256; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToDigestMethod(const AValue: Integer): TLib3MFDigestMethod; + begin + case AValue of + 160: Result := eDigestMethodSHA1; + 256: Result := eDigestMethodSHA256; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + function convertCompressionToConst(const AValue: TLib3MFCompression): Integer; + begin + case AValue of + eCompressionNoCompression: Result := 0; + eCompressionDeflate: Result := 1; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); + end; + end; + + function convertConstToCompression(const AValue: Integer): TLib3MFCompression; + begin + case AValue of + 0: Result := eCompressionNoCompression; + 1: Result := eCompressionDeflate; + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); + end; + end; + + + + +(************************************************************************************************************************* + PolymorficFactory implementation +**************************************************************************************************************************) + + (** + * IMPORTANT: PolymorphicFactory method should not be used by application directly. + * It's designed to be used on Lib3MFHandle object only once. + * If it's used on any existing object as a form of dynamic cast then + * TLIB3MFWrapper::AcquireInstance(object: TLIB3MFBase) must be called after instantiating new object. + * This is important to keep reference count matching between application and library sides. + *) + class function TLib3MFPolymorphicFactory<_T, _B>.Make(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): _T; + var + ClassTypeId: QWord; + Obj: TLIB3MFBase; + begin + Result := nil; + Wrapper.CheckError(nil, Wrapper.Lib3MFBase_ClassTypeIdFunc(handle, ClassTypeId)); + case (ClassTypeId) of + QWord($856632D0BAF1D8B7): begin Obj := TLIB3MFBase.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Base" + QWord($E76F642F363FD7E9): begin Obj := TLIB3MFWriter.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Writer" + QWord($2D86831DA59FBE72): begin Obj := TLIB3MFReader.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Reader" + QWord($0E55A826D377483E): begin Obj := TLIB3MFPackagePart.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::PackagePart" + QWord($DFE3889D1B269CBB): begin Obj := TLIB3MFResource.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Resource" + QWord($460F3515E2621DBE): begin Obj := TLIB3MFResourceIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceIterator" + QWord($69684DB99FA813F6): begin Obj := TLIB3MFSliceStackIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::SliceStackIterator" + QWord($DE92510BD2112288): begin Obj := TLIB3MFObjectIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ObjectIterator" + QWord($F4196034E2B9FDE6): begin Obj := TLIB3MFMeshObjectIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MeshObjectIterator" + QWord($564DE4217ED7614A): begin Obj := TLIB3MFComponentsObjectIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObjectIterator" + QWord($4BD32B4870FFC03B): begin Obj := TLIB3MFTexture2DIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DIterator" + QWord($65E6EDD9362C79CB): begin Obj := TLIB3MFBaseMaterialGroupIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroupIterator" + QWord($10274A1757C729C0): begin Obj := TLIB3MFColorGroupIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ColorGroupIterator" + QWord($30D55F4DB88FE0CA): begin Obj := TLIB3MFTexture2DGroupIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroupIterator" + QWord($A99CC6C3F70FB6F9): begin Obj := TLIB3MFCompositeMaterialsIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterialsIterator" + QWord($C2BDF5D8CBBDB1F0): begin Obj := TLIB3MFMultiPropertyGroupIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroupIterator" + QWord($C4B8EC00A82BF336): begin Obj := TLIB3MFImage3DIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Image3DIterator" + QWord($40E9035363ACE65E): begin Obj := TLIB3MFFunctionIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionIterator" + QWord($A0C005C035D5371D): begin Obj := TLIB3MFLevelSetIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::LevelSetIterator" + QWord($D17716D063DE2C22): begin Obj := TLIB3MFMetaData.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MetaData" + QWord($0C3B85369E9B25D3): begin Obj := TLIB3MFMetaDataGroup.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MetaDataGroup" + QWord($2DA2136F577A779C): begin Obj := TLIB3MFObject.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Object" + QWord($3B3A6DC6EC610497): begin Obj := TLIB3MFMeshObject.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MeshObject" + QWord($E8A7D9C192EFD0E2): begin Obj := TLIB3MFLevelSet.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::LevelSet" + QWord($63B3B461B30B4BA5): begin Obj := TLIB3MFBeamLattice.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::BeamLattice" + QWord($4DF17E76926221C2): begin Obj := TLIB3MFFunctionReference.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionReference" + QWord($D85B5B6143E787E3): begin Obj := TLIB3MFVolumeDataColor.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataColor" + QWord($241FE6B4817C3FE4): begin Obj := TLIB3MFMaterialMapping.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MaterialMapping" + QWord($46F1DAC40581B304): begin Obj := TLIB3MFVolumeDataComposite.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataComposite" + QWord($FC368AA44ACE42DA): begin Obj := TLIB3MFVolumeDataProperty.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataProperty" + QWord($9200586FB91587A7): begin Obj := TLIB3MFVolumeData.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeData" + QWord($4ECDB6A6F69F2BEB): begin Obj := TLIB3MFComponent.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Component" + QWord($6522CF04EB283FED): begin Obj := TLIB3MFComponentsObject.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObject" + QWord($30CCDBE90E00B55B): begin Obj := TLIB3MFBeamSet.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::BeamSet" + QWord($B27D4656E16609FA): begin Obj := TLIB3MFBaseMaterialGroup.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroup" + QWord($D085FB2E49CDB5B1): begin Obj := TLIB3MFColorGroup.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ColorGroup" + QWord($BC1208397E37055D): begin Obj := TLIB3MFTexture2DGroup.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroup" + QWord($CE16224D688B86F2): begin Obj := TLIB3MFCompositeMaterials.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterials" + QWord($B989E02E43158FE6): begin Obj := TLIB3MFMultiPropertyGroup.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroup" + QWord($BD938FF2D2663D61): begin Obj := TLIB3MFImage3D.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Image3D" + QWord($13A2561F0CFB712A): begin Obj := TLIB3MFImageStack.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ImageStack" + QWord($8CE7A1191A63A35D): begin Obj := TLIB3MFAttachment.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Attachment" + QWord($E0441CF976B36319): begin Obj := TLIB3MFTexture2D.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2D" + QWord($D5C49B04AF1963CD): begin Obj := TLIB3MFImplicitPort.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitPort" + QWord($52F06268CD098EFE): begin Obj := TLIB3MFIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Iterator" + QWord($C62268F2D7C7012C): begin Obj := TLIB3MFImplicitPortIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitPortIterator" + QWord($E72592A7725AB29B): begin Obj := TLIB3MFImplicitNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitNode" + QWord($B19B9FDA94B0A5E7): begin Obj := TLIB3MFOneInputNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::OneInputNode" + QWord($D5AEA50A56306722): begin Obj := TLIB3MFSinNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::SinNode" + QWord($59BC328F6FB5C5FF): begin Obj := TLIB3MFCosNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::CosNode" + QWord($2614CC572AF350B7): begin Obj := TLIB3MFTanNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::TanNode" + QWord($E554C8A7E72AAF4D): begin Obj := TLIB3MFArcSinNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ArcSinNode" + QWord($943AF6AE0EFD2B8A): begin Obj := TLIB3MFArcCosNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ArcCosNode" + QWord($E47D547615816BAD): begin Obj := TLIB3MFArcTanNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ArcTanNode" + QWord($3C7756A456F2D089): begin Obj := TLIB3MFSinhNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::SinhNode" + QWord($4A993F91E1DE256D): begin Obj := TLIB3MFCoshNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::CoshNode" + QWord($CF077B19B0B78E9D): begin Obj := TLIB3MFTanhNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::TanhNode" + QWord($D9F5A53C657765AE): begin Obj := TLIB3MFRoundNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::RoundNode" + QWord($627E211653E11D93): begin Obj := TLIB3MFCeilNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::CeilNode" + QWord($392A0F4C041D249C): begin Obj := TLIB3MFFloorNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::FloorNode" + QWord($8A45165E6C9646D7): begin Obj := TLIB3MFSignNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::SignNode" + QWord($53E62FD67F4D9A65): begin Obj := TLIB3MFFractNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::FractNode" + QWord($6B641C7060040BE3): begin Obj := TLIB3MFAbsNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::AbsNode" + QWord($3390243A8E2410F3): begin Obj := TLIB3MFExpNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ExpNode" + QWord($0070021D73AA89FD): begin Obj := TLIB3MFLogNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::LogNode" + QWord($E8C0ABF7C5DC7068): begin Obj := TLIB3MFLog2Node.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Log2Node" + QWord($87740AD53454E0DF): begin Obj := TLIB3MFLog10Node.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Log10Node" + QWord($D85889E2739A74B1): begin Obj := TLIB3MFLengthNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::LengthNode" + QWord($A808B7599C158CE6): begin Obj := TLIB3MFTransposeNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::TransposeNode" + QWord($E8601F66A23A0540): begin Obj := TLIB3MFInverseNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::InverseNode" + QWord($9F831944A3DE31DA): begin Obj := TLIB3MFSqrtNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::SqrtNode" + QWord($CA86A77C71CD3FAE): begin Obj := TLIB3MFResourceIdNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceIdNode" + QWord($7DE3951BA4C1064C): begin Obj := TLIB3MFTwoInputNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::TwoInputNode" + QWord($57A2236998DF5248): begin Obj := TLIB3MFAdditionNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::AdditionNode" + QWord($6079B12FFF345D02): begin Obj := TLIB3MFSubtractionNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::SubtractionNode" + QWord($A3C27CF54C2AA76C): begin Obj := TLIB3MFMultiplicationNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MultiplicationNode" + QWord($B896B6413C08CF39): begin Obj := TLIB3MFDivisionNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::DivisionNode" + QWord($FE60932A66375FAD): begin Obj := TLIB3MFDotNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::DotNode" + QWord($106182D38CA5CFE3): begin Obj := TLIB3MFCrossNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::CrossNode" + QWord($B6153EF5DE7E5E11): begin Obj := TLIB3MFArcTan2Node.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ArcTan2Node" + QWord($7570C43B9721D0C0): begin Obj := TLIB3MFMatVecMultiplicationNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MatVecMultiplicationNode" + QWord($846AFDE9A091E997): begin Obj := TLIB3MFMinNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MinNode" + QWord($073F910381BF250D): begin Obj := TLIB3MFMaxNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MaxNode" + QWord($1EF703D298223F2A): begin Obj := TLIB3MFFmodNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::FmodNode" + QWord($EA57335849379F22): begin Obj := TLIB3MFModNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ModNode" + QWord($7700AA17CA1AC0F8): begin Obj := TLIB3MFPowNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::PowNode" + QWord($1127ED71E05A9BD4): begin Obj := TLIB3MFSelectNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::SelectNode" + QWord($77AF68C971B1485F): begin Obj := TLIB3MFClampNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ClampNode" + QWord($49C24B8840C01F7E): begin Obj := TLIB3MFComposeVectorNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ComposeVectorNode" + QWord($2E417B93351375E2): begin Obj := TLIB3MFVectorFromScalarNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::VectorFromScalarNode" + QWord($CC4F8D561CCE35D4): begin Obj := TLIB3MFDecomposeVectorNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::DecomposeVectorNode" + QWord($9EF9EB54A53AA40D): begin Obj := TLIB3MFComposeMatrixNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ComposeMatrixNode" + QWord($D6DFD0A7EB64AC33): begin Obj := TLIB3MFMatrixFromRowsNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MatrixFromRowsNode" + QWord($0DCBEAFCF83F3AAC): begin Obj := TLIB3MFMatrixFromColumnsNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MatrixFromColumnsNode" + QWord($3F8E5D082F966B1B): begin Obj := TLIB3MFConstantNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ConstantNode" + QWord($9C9363B3F708D556): begin Obj := TLIB3MFConstVecNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ConstVecNode" + QWord($F85C90EDCE6F90A4): begin Obj := TLIB3MFConstMatNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ConstMatNode" + QWord($53601FD432E3DEF4): begin Obj := TLIB3MFMeshNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MeshNode" + QWord($29985A628251A9CD): begin Obj := TLIB3MFUnsignedMeshNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::UnsignedMeshNode" + QWord($0765C17C952F24E3): begin Obj := TLIB3MFFunctionCallNode.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionCallNode" + QWord($FC006BC888CAB4D0): begin Obj := TLIB3MFNodeIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::NodeIterator" + QWord($9EFB2757CA1A5231): begin Obj := TLIB3MFFunction.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Function" + QWord($6CE54469EEA83BC1): begin Obj := TLIB3MFImplicitFunction.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitFunction" + QWord($9BD7D3C2026B8CE8): begin Obj := TLIB3MFFunctionFromImage3D.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionFromImage3D" + QWord($68FB2D5FFC4BA12A): begin Obj := TLIB3MFBuildItem.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItem" + QWord($A7D21BD364910860): begin Obj := TLIB3MFBuildItemIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItemIterator" + QWord($2198BCF4D8DF9C40): begin Obj := TLIB3MFSlice.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Slice" + QWord($6594B031B6096238): begin Obj := TLIB3MFSliceStack.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::SliceStack" + QWord($D9E46D5E6D8118EE): begin Obj := TLIB3MFConsumer.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Consumer" + QWord($385C42FC5609498A): begin Obj := TLIB3MFAccessRight.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::AccessRight" + QWord($7FB36B91D4CE4671): begin Obj := TLIB3MFContentEncryptionParams.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ContentEncryptionParams" + QWord($1A47A5E258E22EF9): begin Obj := TLIB3MFResourceData.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceData" + QWord($D59067227E428AA4): begin Obj := TLIB3MFResourceDataGroup.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceDataGroup" + QWord($1CC9E0CC082253C6): begin Obj := TLIB3MFKeyStore.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::KeyStore" + QWord($5A8164ECEDB03F09): begin Obj := TLIB3MFModel.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Model" + end; + if Result = nil then Result := _B.Create(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeBase(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBase; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeWriter(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFWriter; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeReader(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFReader; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakePackagePart(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFPackagePart; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeResource(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResource; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeResourceIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeSliceStackIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSliceStackIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeObjectIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFObjectIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMeshObjectIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMeshObjectIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeComponentsObjectIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComponentsObjectIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeTexture2DIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2DIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeBaseMaterialGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBaseMaterialGroupIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeColorGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFColorGroupIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeTexture2DGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2DGroupIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeCompositeMaterialsIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCompositeMaterialsIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMultiPropertyGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMultiPropertyGroupIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeImage3DIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImage3DIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeFunctionIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFunctionIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeLevelSetIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFLevelSetIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMetaData(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMetaData; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMetaDataGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMetaDataGroup; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeObject(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFObject; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMeshObject(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMeshObject; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeLevelSet(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFLevelSet; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeBeamLattice(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBeamLattice; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeFunctionReference(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFunctionReference; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeVolumeDataColor(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFVolumeDataColor; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMaterialMapping(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMaterialMapping; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeVolumeDataComposite(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFVolumeDataComposite; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeVolumeDataProperty(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFVolumeDataProperty; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeVolumeData(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFVolumeData; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeComponent(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComponent; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeComponentsObject(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComponentsObject; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeBeamSet(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBeamSet; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeBaseMaterialGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBaseMaterialGroup; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeColorGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFColorGroup; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeTexture2DGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2DGroup; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeCompositeMaterials(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCompositeMaterials; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMultiPropertyGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMultiPropertyGroup; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeImage3D(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImage3D; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeImageStack(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImageStack; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeAttachment(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFAttachment; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeTexture2D(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2D; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeImplicitPort(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImplicitPort; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeImplicitPortIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImplicitPortIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeImplicitNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImplicitNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeOneInputNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFOneInputNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeSinNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSinNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeCosNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCosNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeTanNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTanNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeArcSinNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFArcSinNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeArcCosNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFArcCosNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeArcTanNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFArcTanNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeSinhNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSinhNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeCoshNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCoshNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeTanhNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTanhNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeRoundNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFRoundNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeCeilNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCeilNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeFloorNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFloorNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeSignNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSignNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeFractNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFractNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeAbsNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFAbsNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeExpNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFExpNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeLogNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFLogNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeLog2Node(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFLog2Node; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeLog10Node(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFLog10Node; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeLengthNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFLengthNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeTransposeNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTransposeNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeInverseNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFInverseNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeSqrtNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSqrtNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeResourceIdNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceIdNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeTwoInputNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTwoInputNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeAdditionNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFAdditionNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeSubtractionNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSubtractionNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMultiplicationNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMultiplicationNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeDivisionNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFDivisionNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeDotNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFDotNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeCrossNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCrossNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeArcTan2Node(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFArcTan2Node; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMatVecMultiplicationNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMatVecMultiplicationNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMinNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMinNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMaxNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMaxNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeFmodNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFmodNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeModNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFModNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakePowNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFPowNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeSelectNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSelectNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeClampNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFClampNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeComposeVectorNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComposeVectorNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeVectorFromScalarNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFVectorFromScalarNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeDecomposeVectorNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFDecomposeVectorNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeComposeMatrixNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComposeMatrixNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMatrixFromRowsNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMatrixFromRowsNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMatrixFromColumnsNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMatrixFromColumnsNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeConstantNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFConstantNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeConstVecNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFConstVecNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeConstMatNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFConstMatNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeMeshNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMeshNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeUnsignedMeshNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFUnsignedMeshNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeFunctionCallNode(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFunctionCallNode; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeNodeIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFNodeIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeFunction(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFunction; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeImplicitFunction(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFImplicitFunction; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeFunctionFromImage3D(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFFunctionFromImage3D; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeBuildItem(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBuildItem; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeBuildItemIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBuildItemIterator; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeSlice(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSlice; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeSliceStack(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSliceStack; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeConsumer(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFConsumer; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeAccessRight(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFAccessRight; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeContentEncryptionParams(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFContentEncryptionParams; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeResourceData(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceData; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeResourceDataGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceDataGroup; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeKeyStore(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFKeyStore; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + function TLib3MFPolymorphicFactoryMakeModel(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFModel; + begin + Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + end; + +(************************************************************************************************************************* + Exception implementation +**************************************************************************************************************************) + + constructor ELib3MFException.Create(AErrorCode: TLib3MFResult; AMessage: String); + var + ADescription: String; + begin + FErrorCode := AErrorCode; + case FErrorCode of + LIB3MF_ERROR_NOTIMPLEMENTED: ADescription := 'functionality not implemented'; + LIB3MF_ERROR_INVALIDPARAM: ADescription := 'an invalid parameter was passed'; + LIB3MF_ERROR_INVALIDCAST: ADescription := 'a type cast failed'; + LIB3MF_ERROR_BUFFERTOOSMALL: ADescription := 'a provided buffer is too small'; + LIB3MF_ERROR_GENERICEXCEPTION: ADescription := 'a generic exception occurred'; + LIB3MF_ERROR_COULDNOTLOADLIBRARY: ADescription := 'the library could not be loaded'; + LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT: ADescription := 'a required exported symbol could not be found in the library'; + LIB3MF_ERROR_INCOMPATIBLEBINARYVERSION: ADescription := 'the version of the binary interface does not match the bindings interface'; + LIB3MF_ERROR_CALCULATIONABORTED: ADescription := 'a calculation has been aborted'; + LIB3MF_ERROR_SHOULDNOTBECALLED: ADescription := 'functionality should not be called'; + LIB3MF_ERROR_READERCLASSUNKNOWN: ADescription := 'the queried reader class is unknown'; + LIB3MF_ERROR_WRITERCLASSUNKNOWN: ADescription := 'the queried writer class is unknown'; + LIB3MF_ERROR_ITERATORINVALIDINDEX: ADescription := 'the current index of an iterator is invalid'; + LIB3MF_ERROR_INVALIDMODELRESOURCE: ADescription := 'no Model Resource has been given'; + LIB3MF_ERROR_RESOURCENOTFOUND: ADescription := 'Resource not found'; + LIB3MF_ERROR_INVALIDMODEL: ADescription := 'A model is invalid'; + LIB3MF_ERROR_INVALIDOBJECT: ADescription := 'An object is invalid'; + LIB3MF_ERROR_INVALIDMESHOBJECT: ADescription := 'A mesh object is invalid'; + LIB3MF_ERROR_INVALIDCOMPONENTSOBJECT: ADescription := 'A components object is invalid'; + LIB3MF_ERROR_INVALIDCOMPONENT: ADescription := 'A component is invalid'; + LIB3MF_ERROR_INVALIDBUILDITEM: ADescription := 'A build item is invalid'; + LIB3MF_ERROR_INVALIDBASEMATERIALGROUP: ADescription := 'A basematerialgroup is invalid'; + LIB3MF_ERROR_INVALIDSLICESTACKRESOURCE: ADescription := 'A slicestack resource is invalid'; + LIB3MF_ERROR_INVALIDTEXTURERESOURCE: ADescription := 'A texture resource is invalid'; + LIB3MF_ERROR_INVALIDCOLORGROUP: ADescription := 'A color group resource is invalid'; + LIB3MF_ERROR_INVALIDTEXTURE2DGROUP: ADescription := 'A texture2d group resource is invalid'; + LIB3MF_ERROR_INVALIDCOMPOSITEMATERIALS: ADescription := 'A composite materials resource is invalid'; + LIB3MF_ERROR_INVALIDMULTIPROPERTYGROUP: ADescription := 'A MultiPropertyGroup resource is invalid'; + LIB3MF_ERROR_INVALIDRESOURCEINDEX: ADescription := 'A resource index is invalid'; + LIB3MF_ERROR_ATTACHMENTNOTFOUND: ADescription := 'Attachment not found'; + LIB3MF_ERROR_FORBIDDENCYCLICREFERENCE: ADescription := 'A component references one of its ancestors'; + LIB3MF_ERROR_INVALIDATTACHMENTSTREAM: ADescription := 'An attachment stream is invalid'; + LIB3MF_ERROR_INVALIDPROPERTYCOUNT: ADescription := 'Invalid property count.'; + LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: ADescription := 'A progress identifier is unknown'; + LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: ADescription := 'An element buffer exceeds its spec limit'; + LIB3MF_ERROR_INVALIDRESOURCE: ADescription := 'A resource is invalid'; + LIB3MF_ERROR_INVALIDLEVELSET: ADescription := 'A level set is invalid'; + LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: ADescription := 'This object type is not valid for beamlattices'; + LIB3MF_ERROR_INVALIDKEYSTORE: ADescription := 'The keystore object is invalid'; + LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: ADescription := 'The consumer keystore object is invalid'; + LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND: ADescription := 'A consumer has not been found'; + LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: ADescription := 'A resource data has not been found'; + LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: ADescription := 'A Key or Conentent encryption callback has not been registered'; + LIB3MF_ERROR_INVALIDKEYSIZE: ADescription := 'The key size is invalid'; + LIB3MF_ERROR_INCOMPATIBLEPORTTYPES: ADescription := 'Link could not be added, the port types are incompatible'; + LIB3MF_ERROR_GRAPHISCYCLIC: ADescription := 'The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted.'; + LIB3MF_ERROR_INPUTNOTSET: ADescription := 'The input of a node is not set.'; + LIB3MF_ERROR_INVALIDNODECONFIGURATION: ADescription := 'The selected node configuration is not supported'; + else + ADescription := 'unknown'; + end; + + inherited Create(Format('the 3MF Library Error - %s (#%d, %s)', [ ADescription, AErrorCode, AMessage ])); + end; + + constructor ELib3MFException.CreateCustomMessage(AErrorCode: TLib3MFResult; AMessage: String); + begin + FCustomMessage := AMessage; + FErrorCode := AErrorCode; + inherited Create(Format('%s (%d)', [FCustomMessage, AErrorCode])); + end; + +(************************************************************************************************************************* + Class implementation for Base +**************************************************************************************************************************) + + constructor TLib3MFBase.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + if not Assigned(AWrapper) then + raise ELib3MFException.Create(LIB3MF_ERROR_INVALIDPARAM, ''); + if not Assigned(AHandle) then + raise ELib3MFException.Create(LIB3MF_ERROR_INVALIDPARAM, ''); + + inherited Create(); + FWrapper := AWrapper; + FHandle := AHandle; + end; + + destructor TLib3MFBase.Destroy; + begin + FWrapper.Release(self); + inherited; + end; + + function TLib3MFBase.ClassTypeId(): QWord; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBase_ClassTypeIdFunc(FHandle, Result)); + end; + +(************************************************************************************************************************* + Class implementation for Writer +**************************************************************************************************************************) + + constructor TLib3MFWriter.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFWriter.Destroy; + begin + inherited; + end; + + procedure TLib3MFWriter.WriteToFile(const AFilename: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_WriteToFileFunc(FHandle, PAnsiChar(AFilename))); + end; + + function TLib3MFWriter.GetStreamSize(): QWord; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_GetStreamSizeFunc(FHandle, Result)); + end; + + procedure TLib3MFWriter.WriteToBuffer(out ABuffer: TByteDynArray); + var + countNeededBuffer: QWord; + countWrittenBuffer: QWord; + begin + countNeededBuffer:= 0; + countWrittenBuffer:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_WriteToBufferFunc(FHandle, 0, countNeededBuffer, nil)); + SetLength(ABuffer, countNeededBuffer); + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_WriteToBufferFunc(FHandle, countNeededBuffer, countWrittenBuffer, @ABuffer[0])); + end; + + procedure TLib3MFWriter.WriteToCallback(const ATheWriteCallback: PLib3MF_WriteCallback; const ATheSeekCallback: PLib3MF_SeekCallback; const AUserData: Pointer); + begin + if not Assigned(ATheWriteCallback) then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheWriteCallback is a nil value.'); + if not Assigned(ATheSeekCallback) then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheSeekCallback is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_WriteToCallbackFunc(FHandle, ATheWriteCallback, ATheSeekCallback, AUserData)); + end; + + procedure TLib3MFWriter.SetProgressCallback(const AProgressCallback: PLib3MF_ProgressCallback; const AUserData: Pointer); + begin + if not Assigned(AProgressCallback) then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AProgressCallback is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_SetProgressCallbackFunc(FHandle, AProgressCallback, AUserData)); + end; + + function TLib3MFWriter.GetDecimalPrecision(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_GetDecimalPrecisionFunc(FHandle, Result)); + end; + + procedure TLib3MFWriter.SetDecimalPrecision(const ADecimalPrecision: Cardinal); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_SetDecimalPrecisionFunc(FHandle, ADecimalPrecision)); + end; + + procedure TLib3MFWriter.SetStrictModeActive(const AStrictModeActive: Boolean); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_SetStrictModeActiveFunc(FHandle, Ord(AStrictModeActive))); + end; + + function TLib3MFWriter.GetStrictModeActive(): Boolean; + var + ResultStrictModeActive: Byte; + begin + ResultStrictModeActive := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_GetStrictModeActiveFunc(FHandle, ResultStrictModeActive)); + Result := (ResultStrictModeActive <> 0); + end; + + function TLib3MFWriter.GetWarning(const AIndex: Cardinal; out AErrorCode: Cardinal): String; + var + bytesNeededWarning: Cardinal; + bytesWrittenWarning: Cardinal; + bufferWarning: array of Char; + begin + bytesNeededWarning:= 0; + bytesWrittenWarning:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_GetWarningFunc(FHandle, AIndex, AErrorCode, 0, bytesNeededWarning, nil)); + SetLength(bufferWarning, bytesNeededWarning); + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_GetWarningFunc(FHandle, AIndex, AErrorCode, bytesNeededWarning, bytesWrittenWarning, @bufferWarning[0])); + Result := StrPas(@bufferWarning[0]); + end; + + function TLib3MFWriter.GetWarningCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_GetWarningCountFunc(FHandle, Result)); + end; + + procedure TLib3MFWriter.AddKeyWrappingCallback(const AConsumerID: String; const ATheCallback: PLib3MF_KeyWrappingCallback; const AUserData: Pointer); + begin + if not Assigned(ATheCallback) then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheCallback is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_AddKeyWrappingCallbackFunc(FHandle, PAnsiChar(AConsumerID), ATheCallback, AUserData)); + end; + + procedure TLib3MFWriter.SetContentEncryptionCallback(const ATheCallback: PLib3MF_ContentEncryptionCallback; const AUserData: Pointer); + begin + if not Assigned(ATheCallback) then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheCallback is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_SetContentEncryptionCallbackFunc(FHandle, ATheCallback, AUserData)); + end; + +(************************************************************************************************************************* + Class implementation for Reader +**************************************************************************************************************************) + + constructor TLib3MFReader.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFReader.Destroy; + begin + inherited; + end; + + procedure TLib3MFReader.ReadFromFile(const AFilename: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFReader_ReadFromFileFunc(FHandle, PAnsiChar(AFilename))); + end; + + procedure TLib3MFReader.ReadFromBuffer(const ABuffer: TByteDynArray); + var + PtrBuffer: PByte; + LenBuffer: QWord; + begin + LenBuffer := Length(ABuffer); + if LenBuffer > $FFFFFFFF then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); + if LenBuffer > 0 then + PtrBuffer := @ABuffer[0] + else + PtrBuffer := nil; + + FWrapper.CheckError(Self, FWrapper.Lib3MFReader_ReadFromBufferFunc(FHandle, QWord(LenBuffer), PtrBuffer)); + end; + + procedure TLib3MFReader.ReadFromCallback(const ATheReadCallback: PLib3MF_ReadCallback; const AStreamSize: QWord; const ATheSeekCallback: PLib3MF_SeekCallback; const AUserData: Pointer); + begin + if not Assigned(ATheReadCallback) then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheReadCallback is a nil value.'); + if not Assigned(ATheSeekCallback) then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheSeekCallback is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFReader_ReadFromCallbackFunc(FHandle, ATheReadCallback, AStreamSize, ATheSeekCallback, AUserData)); + end; + + procedure TLib3MFReader.SetProgressCallback(const AProgressCallback: PLib3MF_ProgressCallback; const AUserData: Pointer); + begin + if not Assigned(AProgressCallback) then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AProgressCallback is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFReader_SetProgressCallbackFunc(FHandle, AProgressCallback, AUserData)); + end; + + procedure TLib3MFReader.AddRelationToRead(const ARelationShipType: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFReader_AddRelationToReadFunc(FHandle, PAnsiChar(ARelationShipType))); + end; + + procedure TLib3MFReader.RemoveRelationToRead(const ARelationShipType: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFReader_RemoveRelationToReadFunc(FHandle, PAnsiChar(ARelationShipType))); + end; + + procedure TLib3MFReader.SetStrictModeActive(const AStrictModeActive: Boolean); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFReader_SetStrictModeActiveFunc(FHandle, Ord(AStrictModeActive))); + end; + + function TLib3MFReader.GetStrictModeActive(): Boolean; + var + ResultStrictModeActive: Byte; + begin + ResultStrictModeActive := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFReader_GetStrictModeActiveFunc(FHandle, ResultStrictModeActive)); + Result := (ResultStrictModeActive <> 0); + end; + + function TLib3MFReader.GetWarning(const AIndex: Cardinal; out AErrorCode: Cardinal): String; + var + bytesNeededWarning: Cardinal; + bytesWrittenWarning: Cardinal; + bufferWarning: array of Char; + begin + bytesNeededWarning:= 0; + bytesWrittenWarning:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFReader_GetWarningFunc(FHandle, AIndex, AErrorCode, 0, bytesNeededWarning, nil)); + SetLength(bufferWarning, bytesNeededWarning); + FWrapper.CheckError(Self, FWrapper.Lib3MFReader_GetWarningFunc(FHandle, AIndex, AErrorCode, bytesNeededWarning, bytesWrittenWarning, @bufferWarning[0])); + Result := StrPas(@bufferWarning[0]); + end; + + function TLib3MFReader.GetWarningCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFReader_GetWarningCountFunc(FHandle, Result)); + end; + + procedure TLib3MFReader.AddKeyWrappingCallback(const AConsumerID: String; const ATheCallback: PLib3MF_KeyWrappingCallback; const AUserData: Pointer); + begin + if not Assigned(ATheCallback) then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheCallback is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFReader_AddKeyWrappingCallbackFunc(FHandle, PAnsiChar(AConsumerID), ATheCallback, AUserData)); + end; + + procedure TLib3MFReader.SetContentEncryptionCallback(const ATheCallback: PLib3MF_ContentEncryptionCallback; const AUserData: Pointer); + begin + if not Assigned(ATheCallback) then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheCallback is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFReader_SetContentEncryptionCallbackFunc(FHandle, ATheCallback, AUserData)); + end; + +(************************************************************************************************************************* + Class implementation for PackagePart +**************************************************************************************************************************) + + constructor TLib3MFPackagePart.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFPackagePart.Destroy; + begin + inherited; + end; + + function TLib3MFPackagePart.GetPath(): String; + var + bytesNeededPath: Cardinal; + bytesWrittenPath: Cardinal; + bufferPath: array of Char; + begin + bytesNeededPath:= 0; + bytesWrittenPath:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFPackagePart_GetPathFunc(FHandle, 0, bytesNeededPath, nil)); + SetLength(bufferPath, bytesNeededPath); + FWrapper.CheckError(Self, FWrapper.Lib3MFPackagePart_GetPathFunc(FHandle, bytesNeededPath, bytesWrittenPath, @bufferPath[0])); + Result := StrPas(@bufferPath[0]); + end; + + procedure TLib3MFPackagePart.SetPath(const APath: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFPackagePart_SetPathFunc(FHandle, PAnsiChar(APath))); + end; + +(************************************************************************************************************************* + Class implementation for Resource +**************************************************************************************************************************) + + constructor TLib3MFResource.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFResource.Destroy; + begin + inherited; + end; + + function TLib3MFResource.GetResourceID(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFResource_GetResourceIDFunc(FHandle, Result)); + end; + + function TLib3MFResource.GetUniqueResourceID(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFResource_GetUniqueResourceIDFunc(FHandle, Result)); + end; + + function TLib3MFResource.PackagePart(): TLib3MFPackagePart; + var + HPackagePart: TLib3MFHandle; + begin + Result := nil; + HPackagePart := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFResource_PackagePartFunc(FHandle, HPackagePart)); + if Assigned(HPackagePart) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HPackagePart); + end; + + procedure TLib3MFResource.SetPackagePart(const APackagePart: TLib3MFPackagePart); + var + APackagePartHandle: TLib3MFHandle; + begin + if Assigned(APackagePart) then + APackagePartHandle := APackagePart.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'APackagePart is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFResource_SetPackagePartFunc(FHandle, APackagePartHandle)); + end; + + function TLib3MFResource.GetModelResourceID(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFResource_GetModelResourceIDFunc(FHandle, Result)); + end; + +(************************************************************************************************************************* + Class implementation for ResourceIterator +**************************************************************************************************************************) + + constructor TLib3MFResourceIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFResourceIterator.Destroy; + begin + inherited; + end; + + function TLib3MFResourceIterator.MoveNext(): Boolean; + var + ResultHasNext: Byte; + begin + ResultHasNext := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFResourceIterator_MoveNextFunc(FHandle, ResultHasNext)); + Result := (ResultHasNext <> 0); + end; + + function TLib3MFResourceIterator.MovePrevious(): Boolean; + var + ResultHasPrevious: Byte; + begin + ResultHasPrevious := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFResourceIterator_MovePreviousFunc(FHandle, ResultHasPrevious)); + Result := (ResultHasPrevious <> 0); + end; + + function TLib3MFResourceIterator.GetCurrent(): TLib3MFResource; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFResourceIterator_GetCurrentFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + + function TLib3MFResourceIterator.Clone(): TLib3MFResourceIterator; + var + HOutResourceIterator: TLib3MFHandle; + begin + Result := nil; + HOutResourceIterator := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFResourceIterator_CloneFunc(FHandle, HOutResourceIterator)); + if Assigned(HOutResourceIterator) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HOutResourceIterator); + end; + + function TLib3MFResourceIterator.Count(): QWord; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFResourceIterator_CountFunc(FHandle, Result)); + end; + +(************************************************************************************************************************* + Class implementation for SliceStackIterator +**************************************************************************************************************************) + + constructor TLib3MFSliceStackIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFSliceStackIterator.Destroy; + begin + inherited; + end; + + function TLib3MFSliceStackIterator.GetCurrentSliceStack(): TLib3MFSliceStack; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFSliceStackIterator_GetCurrentSliceStackFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + +(************************************************************************************************************************* + Class implementation for ObjectIterator +**************************************************************************************************************************) + + constructor TLib3MFObjectIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFObjectIterator.Destroy; + begin + inherited; + end; + + function TLib3MFObjectIterator.GetCurrentObject(): TLib3MFObject; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFObjectIterator_GetCurrentObjectFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + +(************************************************************************************************************************* + Class implementation for MeshObjectIterator +**************************************************************************************************************************) + + constructor TLib3MFMeshObjectIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFMeshObjectIterator.Destroy; + begin + inherited; + end; + + function TLib3MFMeshObjectIterator.GetCurrentMeshObject(): TLib3MFMeshObject; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObjectIterator_GetCurrentMeshObjectFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + +(************************************************************************************************************************* + Class implementation for ComponentsObjectIterator +**************************************************************************************************************************) + + constructor TLib3MFComponentsObjectIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFComponentsObjectIterator.Destroy; + begin + inherited; + end; + + function TLib3MFComponentsObjectIterator.GetCurrentComponentsObject(): TLib3MFComponentsObject; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComponentsObjectIterator_GetCurrentComponentsObjectFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + +(************************************************************************************************************************* + Class implementation for Texture2DIterator +**************************************************************************************************************************) + + constructor TLib3MFTexture2DIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFTexture2DIterator.Destroy; + begin + inherited; + end; + + function TLib3MFTexture2DIterator.GetCurrentTexture2D(): TLib3MFTexture2D; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DIterator_GetCurrentTexture2DFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + +(************************************************************************************************************************* + Class implementation for BaseMaterialGroupIterator +**************************************************************************************************************************) + + constructor TLib3MFBaseMaterialGroupIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFBaseMaterialGroupIterator.Destroy; + begin + inherited; + end; + + function TLib3MFBaseMaterialGroupIterator.GetCurrentBaseMaterialGroup(): TLib3MFBaseMaterialGroup; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroupIterator_GetCurrentBaseMaterialGroupFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + +(************************************************************************************************************************* + Class implementation for ColorGroupIterator +**************************************************************************************************************************) + + constructor TLib3MFColorGroupIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFColorGroupIterator.Destroy; + begin + inherited; + end; + + function TLib3MFColorGroupIterator.GetCurrentColorGroup(): TLib3MFColorGroup; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroupIterator_GetCurrentColorGroupFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + +(************************************************************************************************************************* + Class implementation for Texture2DGroupIterator +**************************************************************************************************************************) + + constructor TLib3MFTexture2DGroupIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFTexture2DGroupIterator.Destroy; + begin + inherited; + end; + + function TLib3MFTexture2DGroupIterator.GetCurrentTexture2DGroup(): TLib3MFTexture2DGroup; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + +(************************************************************************************************************************* + Class implementation for CompositeMaterialsIterator +**************************************************************************************************************************) + + constructor TLib3MFCompositeMaterialsIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFCompositeMaterialsIterator.Destroy; + begin + inherited; + end; + + function TLib3MFCompositeMaterialsIterator.GetCurrentCompositeMaterials(): TLib3MFCompositeMaterials; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + +(************************************************************************************************************************* + Class implementation for MultiPropertyGroupIterator +**************************************************************************************************************************) + + constructor TLib3MFMultiPropertyGroupIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFMultiPropertyGroupIterator.Destroy; + begin + inherited; + end; + + function TLib3MFMultiPropertyGroupIterator.GetCurrentMultiPropertyGroup(): TLib3MFMultiPropertyGroup; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + +(************************************************************************************************************************* + Class implementation for Image3DIterator +**************************************************************************************************************************) + + constructor TLib3MFImage3DIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFImage3DIterator.Destroy; + begin + inherited; + end; + + function TLib3MFImage3DIterator.GetCurrentImage3D(): TLib3MFImage3D; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImage3DIterator_GetCurrentImage3DFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + +(************************************************************************************************************************* + Class implementation for FunctionIterator +**************************************************************************************************************************) + + constructor TLib3MFFunctionIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFFunctionIterator.Destroy; + begin + inherited; + end; + + function TLib3MFFunctionIterator.GetCurrentFunction(): TLib3MFFunction; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionIterator_GetCurrentFunctionFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + +(************************************************************************************************************************* + Class implementation for LevelSetIterator +**************************************************************************************************************************) + + constructor TLib3MFLevelSetIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFLevelSetIterator.Destroy; + begin + inherited; + end; + + function TLib3MFLevelSetIterator.GetCurrentLevelSet(): TLib3MFLevelSet; + var + HResource: TLib3MFHandle; + begin + Result := nil; + HResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSetIterator_GetCurrentLevelSetFunc(FHandle, HResource)); + if Assigned(HResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + +(************************************************************************************************************************* + Class implementation for MetaData +**************************************************************************************************************************) + + constructor TLib3MFMetaData.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFMetaData.Destroy; + begin + inherited; + end; + + function TLib3MFMetaData.GetNameSpace(): String; + var + bytesNeededNameSpace: Cardinal; + bytesWrittenNameSpace: Cardinal; + bufferNameSpace: array of Char; + begin + bytesNeededNameSpace:= 0; + bytesWrittenNameSpace:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetNameSpaceFunc(FHandle, 0, bytesNeededNameSpace, nil)); + SetLength(bufferNameSpace, bytesNeededNameSpace); + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetNameSpaceFunc(FHandle, bytesNeededNameSpace, bytesWrittenNameSpace, @bufferNameSpace[0])); + Result := StrPas(@bufferNameSpace[0]); + end; + + procedure TLib3MFMetaData.SetNameSpace(const ANameSpace: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_SetNameSpaceFunc(FHandle, PAnsiChar(ANameSpace))); + end; + + function TLib3MFMetaData.GetName(): String; + var + bytesNeededName: Cardinal; + bytesWrittenName: Cardinal; + bufferName: array of Char; + begin + bytesNeededName:= 0; + bytesWrittenName:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetNameFunc(FHandle, 0, bytesNeededName, nil)); + SetLength(bufferName, bytesNeededName); + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetNameFunc(FHandle, bytesNeededName, bytesWrittenName, @bufferName[0])); + Result := StrPas(@bufferName[0]); + end; + + procedure TLib3MFMetaData.SetName(const AName: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_SetNameFunc(FHandle, PAnsiChar(AName))); + end; + + function TLib3MFMetaData.GetKey(): String; + var + bytesNeededKey: Cardinal; + bytesWrittenKey: Cardinal; + bufferKey: array of Char; + begin + bytesNeededKey:= 0; + bytesWrittenKey:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetKeyFunc(FHandle, 0, bytesNeededKey, nil)); + SetLength(bufferKey, bytesNeededKey); + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetKeyFunc(FHandle, bytesNeededKey, bytesWrittenKey, @bufferKey[0])); + Result := StrPas(@bufferKey[0]); + end; + + function TLib3MFMetaData.GetMustPreserve(): Boolean; + var + ResultMustPreserve: Byte; + begin + ResultMustPreserve := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetMustPreserveFunc(FHandle, ResultMustPreserve)); + Result := (ResultMustPreserve <> 0); + end; + + procedure TLib3MFMetaData.SetMustPreserve(const AMustPreserve: Boolean); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_SetMustPreserveFunc(FHandle, Ord(AMustPreserve))); + end; + + function TLib3MFMetaData.GetType(): String; + var + bytesNeededType: Cardinal; + bytesWrittenType: Cardinal; + bufferType: array of Char; + begin + bytesNeededType:= 0; + bytesWrittenType:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetTypeFunc(FHandle, 0, bytesNeededType, nil)); + SetLength(bufferType, bytesNeededType); + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetTypeFunc(FHandle, bytesNeededType, bytesWrittenType, @bufferType[0])); + Result := StrPas(@bufferType[0]); + end; + + procedure TLib3MFMetaData.SetType(const AType: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_SetTypeFunc(FHandle, PAnsiChar(AType))); + end; + + function TLib3MFMetaData.GetValue(): String; + var + bytesNeededValue: Cardinal; + bytesWrittenValue: Cardinal; + bufferValue: array of Char; + begin + bytesNeededValue:= 0; + bytesWrittenValue:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetValueFunc(FHandle, 0, bytesNeededValue, nil)); + SetLength(bufferValue, bytesNeededValue); + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetValueFunc(FHandle, bytesNeededValue, bytesWrittenValue, @bufferValue[0])); + Result := StrPas(@bufferValue[0]); + end; + + procedure TLib3MFMetaData.SetValue(const AValue: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_SetValueFunc(FHandle, PAnsiChar(AValue))); + end; + +(************************************************************************************************************************* + Class implementation for MetaDataGroup +**************************************************************************************************************************) + + constructor TLib3MFMetaDataGroup.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFMetaDataGroup.Destroy; + begin + inherited; + end; + + function TLib3MFMetaDataGroup.GetMetaDataCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaDataGroup_GetMetaDataCountFunc(FHandle, Result)); + end; + + function TLib3MFMetaDataGroup.GetMetaData(const AIndex: Cardinal): TLib3MFMetaData; + var + HMetaData: TLib3MFHandle; + begin + Result := nil; + HMetaData := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaDataGroup_GetMetaDataFunc(FHandle, AIndex, HMetaData)); + if Assigned(HMetaData) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMetaData); + end; + + function TLib3MFMetaDataGroup.GetMetaDataByKey(const ANameSpace: String; const AName: String): TLib3MFMetaData; + var + HMetaData: TLib3MFHandle; + begin + Result := nil; + HMetaData := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaDataGroup_GetMetaDataByKeyFunc(FHandle, PAnsiChar(ANameSpace), PAnsiChar(AName), HMetaData)); + if Assigned(HMetaData) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMetaData); + end; + + procedure TLib3MFMetaDataGroup.RemoveMetaDataByIndex(const AIndex: Cardinal); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaDataGroup_RemoveMetaDataByIndexFunc(FHandle, AIndex)); + end; + + procedure TLib3MFMetaDataGroup.RemoveMetaData(const ATheMetaData: TLib3MFMetaData); + var + ATheMetaDataHandle: TLib3MFHandle; + begin + if Assigned(ATheMetaData) then + ATheMetaDataHandle := ATheMetaData.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheMetaData is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaDataGroup_RemoveMetaDataFunc(FHandle, ATheMetaDataHandle)); + end; + + function TLib3MFMetaDataGroup.AddMetaData(const ANameSpace: String; const AName: String; const AValue: String; const AType: String; const AMustPreserve: Boolean): TLib3MFMetaData; + var + HMetaData: TLib3MFHandle; + begin + Result := nil; + HMetaData := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMetaDataGroup_AddMetaDataFunc(FHandle, PAnsiChar(ANameSpace), PAnsiChar(AName), PAnsiChar(AValue), PAnsiChar(AType), Ord(AMustPreserve), HMetaData)); + if Assigned(HMetaData) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMetaData); + end; + +(************************************************************************************************************************* + Class implementation for Object +**************************************************************************************************************************) + + constructor TLib3MFObject.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFObject.Destroy; + begin + inherited; + end; + + function TLib3MFObject.GetType(): TLib3MFObjectType; + var + ResultObjectType: Integer; + begin + ResultObjectType := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetTypeFunc(FHandle, ResultObjectType)); + Result := convertConstToObjectType(ResultObjectType); + end; + + procedure TLib3MFObject.SetType(const AObjectType: TLib3MFObjectType); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_SetTypeFunc(FHandle, convertObjectTypeToConst(AObjectType))); + end; + + function TLib3MFObject.GetName(): String; + var + bytesNeededName: Cardinal; + bytesWrittenName: Cardinal; + bufferName: array of Char; + begin + bytesNeededName:= 0; + bytesWrittenName:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetNameFunc(FHandle, 0, bytesNeededName, nil)); + SetLength(bufferName, bytesNeededName); + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetNameFunc(FHandle, bytesNeededName, bytesWrittenName, @bufferName[0])); + Result := StrPas(@bufferName[0]); + end; + + procedure TLib3MFObject.SetName(const AName: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_SetNameFunc(FHandle, PAnsiChar(AName))); + end; + + function TLib3MFObject.GetPartNumber(): String; + var + bytesNeededPartNumber: Cardinal; + bytesWrittenPartNumber: Cardinal; + bufferPartNumber: array of Char; + begin + bytesNeededPartNumber:= 0; + bytesWrittenPartNumber:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetPartNumberFunc(FHandle, 0, bytesNeededPartNumber, nil)); + SetLength(bufferPartNumber, bytesNeededPartNumber); + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetPartNumberFunc(FHandle, bytesNeededPartNumber, bytesWrittenPartNumber, @bufferPartNumber[0])); + Result := StrPas(@bufferPartNumber[0]); + end; + + procedure TLib3MFObject.SetPartNumber(const APartNumber: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_SetPartNumberFunc(FHandle, PAnsiChar(APartNumber))); + end; + + function TLib3MFObject.IsMeshObject(): Boolean; + var + ResultIsMeshObject: Byte; + begin + ResultIsMeshObject := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_IsMeshObjectFunc(FHandle, ResultIsMeshObject)); + Result := (ResultIsMeshObject <> 0); + end; + + function TLib3MFObject.IsComponentsObject(): Boolean; + var + ResultIsComponentsObject: Byte; + begin + ResultIsComponentsObject := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_IsComponentsObjectFunc(FHandle, ResultIsComponentsObject)); + Result := (ResultIsComponentsObject <> 0); + end; + + function TLib3MFObject.IsLevelSetObject(): Boolean; + var + ResultIsLevelSetObject: Byte; + begin + ResultIsLevelSetObject := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_IsLevelSetObjectFunc(FHandle, ResultIsLevelSetObject)); + Result := (ResultIsLevelSetObject <> 0); + end; + + function TLib3MFObject.IsValid(): Boolean; + var + ResultIsValid: Byte; + begin + ResultIsValid := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_IsValidFunc(FHandle, ResultIsValid)); + Result := (ResultIsValid <> 0); + end; + + procedure TLib3MFObject.SetAttachmentAsThumbnail(const AAttachment: TLib3MFAttachment); + var + AAttachmentHandle: TLib3MFHandle; + begin + if Assigned(AAttachment) then + AAttachmentHandle := AAttachment.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AAttachment is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_SetAttachmentAsThumbnailFunc(FHandle, AAttachmentHandle)); + end; + + function TLib3MFObject.GetThumbnailAttachment(): TLib3MFAttachment; + var + HAttachment: TLib3MFHandle; + begin + Result := nil; + HAttachment := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetThumbnailAttachmentFunc(FHandle, HAttachment)); + if Assigned(HAttachment) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HAttachment); + end; + + procedure TLib3MFObject.ClearThumbnailAttachment(); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_ClearThumbnailAttachmentFunc(FHandle)); + end; + + function TLib3MFObject.GetOutbox(): TLib3MFBox; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetOutboxFunc(FHandle, @Result)); + end; + + function TLib3MFObject.GetUUID(out AHasUUID: Boolean): String; + var + ResultHasUUID: Byte; + bytesNeededUUID: Cardinal; + bytesWrittenUUID: Cardinal; + bufferUUID: array of Char; + begin + ResultHasUUID := 0; + bytesNeededUUID:= 0; + bytesWrittenUUID:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetUUIDFunc(FHandle, ResultHasUUID, 0, bytesNeededUUID, nil)); + SetLength(bufferUUID, bytesNeededUUID); + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetUUIDFunc(FHandle, ResultHasUUID, bytesNeededUUID, bytesWrittenUUID, @bufferUUID[0])); + AHasUUID := ResultHasUUID <> 0; + Result := StrPas(@bufferUUID[0]); + end; + + procedure TLib3MFObject.SetUUID(const AUUID: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_SetUUIDFunc(FHandle, PAnsiChar(AUUID))); + end; + + function TLib3MFObject.GetMetaDataGroup(): TLib3MFMetaDataGroup; + var + HMetaDataGroup: TLib3MFHandle; + begin + Result := nil; + HMetaDataGroup := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetMetaDataGroupFunc(FHandle, HMetaDataGroup)); + if Assigned(HMetaDataGroup) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMetaDataGroup); + end; + + procedure TLib3MFObject.SetSlicesMeshResolution(const AMeshResolution: TLib3MFSlicesMeshResolution); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_SetSlicesMeshResolutionFunc(FHandle, convertSlicesMeshResolutionToConst(AMeshResolution))); + end; + + function TLib3MFObject.GetSlicesMeshResolution(): TLib3MFSlicesMeshResolution; + var + ResultMeshResolution: Integer; + begin + ResultMeshResolution := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetSlicesMeshResolutionFunc(FHandle, ResultMeshResolution)); + Result := convertConstToSlicesMeshResolution(ResultMeshResolution); + end; + + function TLib3MFObject.HasSlices(const ARecursive: Boolean): Boolean; + var + ResultHasSlices: Byte; + begin + ResultHasSlices := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_HasSlicesFunc(FHandle, Ord(ARecursive), ResultHasSlices)); + Result := (ResultHasSlices <> 0); + end; + + procedure TLib3MFObject.ClearSliceStack(); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_ClearSliceStackFunc(FHandle)); + end; + + function TLib3MFObject.GetSliceStack(): TLib3MFSliceStack; + var + HSliceStackInstance: TLib3MFHandle; + begin + Result := nil; + HSliceStackInstance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetSliceStackFunc(FHandle, HSliceStackInstance)); + if Assigned(HSliceStackInstance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HSliceStackInstance); + end; + + procedure TLib3MFObject.AssignSliceStack(const ASliceStackInstance: TLib3MFSliceStack); + var + ASliceStackInstanceHandle: TLib3MFHandle; + begin + if Assigned(ASliceStackInstance) then + ASliceStackInstanceHandle := ASliceStackInstance.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ASliceStackInstance is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFObject_AssignSliceStackFunc(FHandle, ASliceStackInstanceHandle)); + end; + +(************************************************************************************************************************* + Class implementation for MeshObject +**************************************************************************************************************************) + + constructor TLib3MFMeshObject.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFMeshObject.Destroy; + begin + inherited; + end; + + function TLib3MFMeshObject.GetVertexCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetVertexCountFunc(FHandle, Result)); + end; + + function TLib3MFMeshObject.GetTriangleCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetTriangleCountFunc(FHandle, Result)); + end; + + function TLib3MFMeshObject.GetVertex(const AIndex: Cardinal): TLib3MFPosition; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetVertexFunc(FHandle, AIndex, @Result)); + end; + + procedure TLib3MFMeshObject.SetVertex(const AIndex: Cardinal; const ACoordinates: TLib3MFPosition); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_SetVertexFunc(FHandle, AIndex, @ACoordinates)); + end; + + function TLib3MFMeshObject.AddVertex(const ACoordinates: TLib3MFPosition): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_AddVertexFunc(FHandle, @ACoordinates, Result)); + end; + + procedure TLib3MFMeshObject.GetVertices(out AVertices: ArrayOfLib3MFPosition); + var + countNeededVertices: QWord; + countWrittenVertices: QWord; + begin + countNeededVertices:= 0; + countWrittenVertices:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetVerticesFunc(FHandle, 0, countNeededVertices, nil)); + SetLength(AVertices, countNeededVertices); + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetVerticesFunc(FHandle, countNeededVertices, countWrittenVertices, @AVertices[0])); + end; + + function TLib3MFMeshObject.GetTriangle(const AIndex: Cardinal): TLib3MFTriangle; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetTriangleFunc(FHandle, AIndex, @Result)); + end; + + procedure TLib3MFMeshObject.SetTriangle(const AIndex: Cardinal; const AIndices: TLib3MFTriangle); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_SetTriangleFunc(FHandle, AIndex, @AIndices)); + end; + + function TLib3MFMeshObject.AddTriangle(const AIndices: TLib3MFTriangle): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_AddTriangleFunc(FHandle, @AIndices, Result)); + end; + + procedure TLib3MFMeshObject.GetTriangleIndices(out AIndices: ArrayOfLib3MFTriangle); + var + countNeededIndices: QWord; + countWrittenIndices: QWord; + begin + countNeededIndices:= 0; + countWrittenIndices:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetTriangleIndicesFunc(FHandle, 0, countNeededIndices, nil)); + SetLength(AIndices, countNeededIndices); + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetTriangleIndicesFunc(FHandle, countNeededIndices, countWrittenIndices, @AIndices[0])); + end; + + procedure TLib3MFMeshObject.SetObjectLevelProperty(const AUniqueResourceID: Cardinal; const APropertyID: Cardinal); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_SetObjectLevelPropertyFunc(FHandle, AUniqueResourceID, APropertyID)); + end; + + function TLib3MFMeshObject.GetObjectLevelProperty(out AUniqueResourceID: Cardinal; out APropertyID: Cardinal): Boolean; + var + ResultHasObjectLevelProperty: Byte; + begin + ResultHasObjectLevelProperty := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetObjectLevelPropertyFunc(FHandle, AUniqueResourceID, APropertyID, ResultHasObjectLevelProperty)); + Result := (ResultHasObjectLevelProperty <> 0); + end; + + procedure TLib3MFMeshObject.SetTriangleProperties(const AIndex: Cardinal; const AProperties: TLib3MFTriangleProperties); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_SetTrianglePropertiesFunc(FHandle, AIndex, @AProperties)); + end; + + procedure TLib3MFMeshObject.GetTriangleProperties(const AIndex: Cardinal; out AProperty: TLib3MFTriangleProperties); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetTrianglePropertiesFunc(FHandle, AIndex, @AProperty)); + end; + + procedure TLib3MFMeshObject.SetAllTriangleProperties(const APropertiesArray: ArrayOfLib3MFTriangleProperties); + var + PtrPropertiesArray: PLib3MFTriangleProperties; + LenPropertiesArray: QWord; + begin + LenPropertiesArray := Length(APropertiesArray); + if LenPropertiesArray > $FFFFFFFF then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); + if LenPropertiesArray > 0 then + PtrPropertiesArray := @APropertiesArray[0] + else + PtrPropertiesArray := nil; + + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_SetAllTrianglePropertiesFunc(FHandle, QWord(LenPropertiesArray), PtrPropertiesArray)); + end; + + procedure TLib3MFMeshObject.GetAllTriangleProperties(out APropertiesArray: ArrayOfLib3MFTriangleProperties); + var + countNeededPropertiesArray: QWord; + countWrittenPropertiesArray: QWord; + begin + countNeededPropertiesArray:= 0; + countWrittenPropertiesArray:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetAllTrianglePropertiesFunc(FHandle, 0, countNeededPropertiesArray, nil)); + SetLength(APropertiesArray, countNeededPropertiesArray); + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetAllTrianglePropertiesFunc(FHandle, countNeededPropertiesArray, countWrittenPropertiesArray, @APropertiesArray[0])); + end; + + procedure TLib3MFMeshObject.ClearAllProperties(); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_ClearAllPropertiesFunc(FHandle)); + end; + + procedure TLib3MFMeshObject.SetGeometry(const AVertices: ArrayOfLib3MFPosition; const AIndices: ArrayOfLib3MFTriangle); + var + PtrVertices: PLib3MFPosition; + LenVertices: QWord; + PtrIndices: PLib3MFTriangle; + LenIndices: QWord; + begin + LenVertices := Length(AVertices); + if LenVertices > $FFFFFFFF then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); + if LenVertices > 0 then + PtrVertices := @AVertices[0] + else + PtrVertices := nil; + + LenIndices := Length(AIndices); + if LenIndices > $FFFFFFFF then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); + if LenIndices > 0 then + PtrIndices := @AIndices[0] + else + PtrIndices := nil; + + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_SetGeometryFunc(FHandle, QWord(LenVertices), PtrVertices, QWord(LenIndices), PtrIndices)); + end; + + function TLib3MFMeshObject.IsManifoldAndOriented(): Boolean; + var + ResultIsManifoldAndOriented: Byte; + begin + ResultIsManifoldAndOriented := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_IsManifoldAndOrientedFunc(FHandle, ResultIsManifoldAndOriented)); + Result := (ResultIsManifoldAndOriented <> 0); + end; + + function TLib3MFMeshObject.BeamLattice(): TLib3MFBeamLattice; + var + HTheBeamLattice: TLib3MFHandle; + begin + Result := nil; + HTheBeamLattice := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_BeamLatticeFunc(FHandle, HTheBeamLattice)); + if Assigned(HTheBeamLattice) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheBeamLattice); + end; + + function TLib3MFMeshObject.GetVolumeData(): TLib3MFVolumeData; + var + HTheVolumeData: TLib3MFHandle; + begin + Result := nil; + HTheVolumeData := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetVolumeDataFunc(FHandle, HTheVolumeData)); + if Assigned(HTheVolumeData) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheVolumeData); + end; + + procedure TLib3MFMeshObject.SetVolumeData(const ATheVolumeData: TLib3MFVolumeData); + var + ATheVolumeDataHandle: TLib3MFHandle; + begin + if Assigned(ATheVolumeData) then + ATheVolumeDataHandle := ATheVolumeData.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheVolumeData is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_SetVolumeDataFunc(FHandle, ATheVolumeDataHandle)); + end; + +(************************************************************************************************************************* + Class implementation for LevelSet +**************************************************************************************************************************) + + constructor TLib3MFLevelSet.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFLevelSet.Destroy; + begin + inherited; + end; + + function TLib3MFLevelSet.GetFunction(): TLib3MFFunction; + var + HTheFunction: TLib3MFHandle; + begin + Result := nil; + HTheFunction := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_GetFunctionFunc(FHandle, HTheFunction)); + if Assigned(HTheFunction) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheFunction); + end; + + procedure TLib3MFLevelSet.SetFunction(const ATheFunction: TLib3MFFunction); + var + ATheFunctionHandle: TLib3MFHandle; + begin + if Assigned(ATheFunction) then + ATheFunctionHandle := ATheFunction.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheFunction is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_SetFunctionFunc(FHandle, ATheFunctionHandle)); + end; + + function TLib3MFLevelSet.GetTransform(): TLib3MFTransform; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_GetTransformFunc(FHandle, @Result)); + end; + + procedure TLib3MFLevelSet.SetTransform(const ATransform: TLib3MFTransform); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_SetTransformFunc(FHandle, @ATransform)); + end; + + function TLib3MFLevelSet.GetChannelName(): String; + var + bytesNeededChannelName: Cardinal; + bytesWrittenChannelName: Cardinal; + bufferChannelName: array of Char; + begin + bytesNeededChannelName:= 0; + bytesWrittenChannelName:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_GetChannelNameFunc(FHandle, 0, bytesNeededChannelName, nil)); + SetLength(bufferChannelName, bytesNeededChannelName); + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_GetChannelNameFunc(FHandle, bytesNeededChannelName, bytesWrittenChannelName, @bufferChannelName[0])); + Result := StrPas(@bufferChannelName[0]); + end; + + procedure TLib3MFLevelSet.SetChannelName(const AChannelName: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_SetChannelNameFunc(FHandle, PAnsiChar(AChannelName))); + end; + + procedure TLib3MFLevelSet.SetMinFeatureSize(const AMinFeatureSize: Double); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_SetMinFeatureSizeFunc(FHandle, AMinFeatureSize)); + end; + + function TLib3MFLevelSet.GetMinFeatureSize(): Double; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_GetMinFeatureSizeFunc(FHandle, Result)); + end; + + procedure TLib3MFLevelSet.SetFallBackValue(const AFallBackValue: Double); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_SetFallBackValueFunc(FHandle, AFallBackValue)); + end; + + function TLib3MFLevelSet.GetFallBackValue(): Double; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_GetFallBackValueFunc(FHandle, Result)); + end; + + procedure TLib3MFLevelSet.SetMeshBBoxOnly(const AMeshBBoxOnly: Boolean); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_SetMeshBBoxOnlyFunc(FHandle, Ord(AMeshBBoxOnly))); + end; + + function TLib3MFLevelSet.GetMeshBBoxOnly(): Boolean; + var + ResultMeshBBoxOnly: Byte; + begin + ResultMeshBBoxOnly := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_GetMeshBBoxOnlyFunc(FHandle, ResultMeshBBoxOnly)); + Result := (ResultMeshBBoxOnly <> 0); + end; + + procedure TLib3MFLevelSet.SetMesh(const ATheMesh: TLib3MFMeshObject); + var + ATheMeshHandle: TLib3MFHandle; + begin + if Assigned(ATheMesh) then + ATheMeshHandle := ATheMesh.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheMesh is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_SetMeshFunc(FHandle, ATheMeshHandle)); + end; + + function TLib3MFLevelSet.GetMesh(): TLib3MFMeshObject; + var + HTheMesh: TLib3MFHandle; + begin + Result := nil; + HTheMesh := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_GetMeshFunc(FHandle, HTheMesh)); + if Assigned(HTheMesh) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheMesh); + end; + + function TLib3MFLevelSet.GetVolumeData(): TLib3MFVolumeData; + var + HTheVolumeData: TLib3MFHandle; + begin + Result := nil; + HTheVolumeData := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_GetVolumeDataFunc(FHandle, HTheVolumeData)); + if Assigned(HTheVolumeData) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheVolumeData); + end; + + procedure TLib3MFLevelSet.SetVolumeData(const ATheVolumeData: TLib3MFVolumeData); + var + ATheVolumeDataHandle: TLib3MFHandle; + begin + if Assigned(ATheVolumeData) then + ATheVolumeDataHandle := ATheVolumeData.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheVolumeData is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFLevelSet_SetVolumeDataFunc(FHandle, ATheVolumeDataHandle)); + end; + +(************************************************************************************************************************* + Class implementation for BeamLattice +**************************************************************************************************************************) + + constructor TLib3MFBeamLattice.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFBeamLattice.Destroy; + begin + inherited; + end; + + function TLib3MFBeamLattice.GetMinLength(): Double; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetMinLengthFunc(FHandle, Result)); + end; + + procedure TLib3MFBeamLattice.SetMinLength(const AMinLength: Double); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetMinLengthFunc(FHandle, AMinLength)); + end; + + procedure TLib3MFBeamLattice.GetClipping(out AClipMode: TLib3MFBeamLatticeClipMode; out AUniqueResourceID: Cardinal); + var + ResultClipMode: Integer; + begin + ResultClipMode := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetClippingFunc(FHandle, ResultClipMode, AUniqueResourceID)); + AClipMode := convertConstToBeamLatticeClipMode(ResultClipMode); + end; + + procedure TLib3MFBeamLattice.SetClipping(const AClipMode: TLib3MFBeamLatticeClipMode; const AUniqueResourceID: Cardinal); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetClippingFunc(FHandle, convertBeamLatticeClipModeToConst(AClipMode), AUniqueResourceID)); + end; + + function TLib3MFBeamLattice.GetRepresentation(out AUniqueResourceID: Cardinal): Boolean; + var + ResultHasRepresentation: Byte; + begin + ResultHasRepresentation := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetRepresentationFunc(FHandle, ResultHasRepresentation, AUniqueResourceID)); + Result := (ResultHasRepresentation <> 0); + end; + + procedure TLib3MFBeamLattice.SetRepresentation(const AUniqueResourceID: Cardinal); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetRepresentationFunc(FHandle, AUniqueResourceID)); + end; + + procedure TLib3MFBeamLattice.GetBallOptions(out ABallMode: TLib3MFBeamLatticeBallMode; out ABallRadius: Double); + var + ResultBallMode: Integer; + begin + ResultBallMode := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBallOptionsFunc(FHandle, ResultBallMode, ABallRadius)); + ABallMode := convertConstToBeamLatticeBallMode(ResultBallMode); + end; + + procedure TLib3MFBeamLattice.SetBallOptions(const ABallMode: TLib3MFBeamLatticeBallMode; const ABallRadius: Double); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetBallOptionsFunc(FHandle, convertBeamLatticeBallModeToConst(ABallMode), ABallRadius)); + end; + + function TLib3MFBeamLattice.GetBeamCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBeamCountFunc(FHandle, Result)); + end; + + function TLib3MFBeamLattice.GetBeam(const AIndex: Cardinal): TLib3MFBeam; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBeamFunc(FHandle, AIndex, @Result)); + end; + + function TLib3MFBeamLattice.AddBeam(const ABeamInfo: TLib3MFBeam): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_AddBeamFunc(FHandle, @ABeamInfo, Result)); + end; + + procedure TLib3MFBeamLattice.SetBeam(const AIndex: Cardinal; const ABeamInfo: TLib3MFBeam); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetBeamFunc(FHandle, AIndex, @ABeamInfo)); + end; + + procedure TLib3MFBeamLattice.SetBeams(const ABeamInfo: ArrayOfLib3MFBeam); + var + PtrBeamInfo: PLib3MFBeam; + LenBeamInfo: QWord; + begin + LenBeamInfo := Length(ABeamInfo); + if LenBeamInfo > $FFFFFFFF then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); + if LenBeamInfo > 0 then + PtrBeamInfo := @ABeamInfo[0] + else + PtrBeamInfo := nil; + + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetBeamsFunc(FHandle, QWord(LenBeamInfo), PtrBeamInfo)); + end; + + procedure TLib3MFBeamLattice.GetBeams(out ABeamInfo: ArrayOfLib3MFBeam); + var + countNeededBeamInfo: QWord; + countWrittenBeamInfo: QWord; + begin + countNeededBeamInfo:= 0; + countWrittenBeamInfo:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBeamsFunc(FHandle, 0, countNeededBeamInfo, nil)); + SetLength(ABeamInfo, countNeededBeamInfo); + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBeamsFunc(FHandle, countNeededBeamInfo, countWrittenBeamInfo, @ABeamInfo[0])); + end; + + function TLib3MFBeamLattice.GetBallCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBallCountFunc(FHandle, Result)); + end; + + function TLib3MFBeamLattice.GetBall(const AIndex: Cardinal): TLib3MFBall; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBallFunc(FHandle, AIndex, @Result)); + end; + + function TLib3MFBeamLattice.AddBall(const ABallInfo: TLib3MFBall): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_AddBallFunc(FHandle, @ABallInfo, Result)); + end; + + procedure TLib3MFBeamLattice.SetBall(const AIndex: Cardinal; const ABallInfo: TLib3MFBall); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetBallFunc(FHandle, AIndex, @ABallInfo)); + end; + + procedure TLib3MFBeamLattice.SetBalls(const ABallInfo: ArrayOfLib3MFBall); + var + PtrBallInfo: PLib3MFBall; + LenBallInfo: QWord; + begin + LenBallInfo := Length(ABallInfo); + if LenBallInfo > $FFFFFFFF then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); + if LenBallInfo > 0 then + PtrBallInfo := @ABallInfo[0] + else + PtrBallInfo := nil; + + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetBallsFunc(FHandle, QWord(LenBallInfo), PtrBallInfo)); + end; + + procedure TLib3MFBeamLattice.GetBalls(out ABallInfo: ArrayOfLib3MFBall); + var + countNeededBallInfo: QWord; + countWrittenBallInfo: QWord; + begin + countNeededBallInfo:= 0; + countWrittenBallInfo:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBallsFunc(FHandle, 0, countNeededBallInfo, nil)); + SetLength(ABallInfo, countNeededBallInfo); + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBallsFunc(FHandle, countNeededBallInfo, countWrittenBallInfo, @ABallInfo[0])); + end; + + function TLib3MFBeamLattice.GetBeamSetCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBeamSetCountFunc(FHandle, Result)); + end; + + function TLib3MFBeamLattice.AddBeamSet(): TLib3MFBeamSet; + var + HBeamSet: TLib3MFHandle; + begin + Result := nil; + HBeamSet := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_AddBeamSetFunc(FHandle, HBeamSet)); + if Assigned(HBeamSet) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HBeamSet); + end; + + function TLib3MFBeamLattice.GetBeamSet(const AIndex: Cardinal): TLib3MFBeamSet; + var + HBeamSet: TLib3MFHandle; + begin + Result := nil; + HBeamSet := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBeamSetFunc(FHandle, AIndex, HBeamSet)); + if Assigned(HBeamSet) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HBeamSet); + end; + +(************************************************************************************************************************* + Class implementation for FunctionReference +**************************************************************************************************************************) + + constructor TLib3MFFunctionReference.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFFunctionReference.Destroy; + begin + inherited; + end; + + function TLib3MFFunctionReference.GetFunctionResourceID(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionReference_GetFunctionResourceIDFunc(FHandle, Result)); + end; + + procedure TLib3MFFunctionReference.SetFunctionResourceID(const AUniqueResourceID: Cardinal); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionReference_SetFunctionResourceIDFunc(FHandle, AUniqueResourceID)); + end; + + function TLib3MFFunctionReference.GetTransform(): TLib3MFTransform; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionReference_GetTransformFunc(FHandle, @Result)); + end; + + procedure TLib3MFFunctionReference.SetTransform(const ATransform: TLib3MFTransform); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionReference_SetTransformFunc(FHandle, @ATransform)); + end; + + function TLib3MFFunctionReference.GetChannelName(): String; + var + bytesNeededChannelName: Cardinal; + bytesWrittenChannelName: Cardinal; + bufferChannelName: array of Char; + begin + bytesNeededChannelName:= 0; + bytesWrittenChannelName:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionReference_GetChannelNameFunc(FHandle, 0, bytesNeededChannelName, nil)); + SetLength(bufferChannelName, bytesNeededChannelName); + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionReference_GetChannelNameFunc(FHandle, bytesNeededChannelName, bytesWrittenChannelName, @bufferChannelName[0])); + Result := StrPas(@bufferChannelName[0]); + end; + + procedure TLib3MFFunctionReference.SetChannelName(const AChannelName: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionReference_SetChannelNameFunc(FHandle, PAnsiChar(AChannelName))); + end; + + procedure TLib3MFFunctionReference.SetMinFeatureSize(const AMinFeatureSize: Double); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionReference_SetMinFeatureSizeFunc(FHandle, AMinFeatureSize)); + end; + + function TLib3MFFunctionReference.GetMinFeatureSize(): Double; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionReference_GetMinFeatureSizeFunc(FHandle, Result)); + end; + + procedure TLib3MFFunctionReference.SetFallBackValue(const AFallBackValue: Double); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionReference_SetFallBackValueFunc(FHandle, AFallBackValue)); + end; + + function TLib3MFFunctionReference.GetFallBackValue(): Double; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionReference_GetFallBackValueFunc(FHandle, Result)); + end; + +(************************************************************************************************************************* + Class implementation for VolumeDataColor +**************************************************************************************************************************) + + constructor TLib3MFVolumeDataColor.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFVolumeDataColor.Destroy; + begin + inherited; + end; + +(************************************************************************************************************************* + Class implementation for MaterialMapping +**************************************************************************************************************************) + + constructor TLib3MFMaterialMapping.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFMaterialMapping.Destroy; + begin + inherited; + end; + +(************************************************************************************************************************* + Class implementation for VolumeDataComposite +**************************************************************************************************************************) + + constructor TLib3MFVolumeDataComposite.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFVolumeDataComposite.Destroy; + begin + inherited; + end; + + function TLib3MFVolumeDataComposite.GetBaseMaterialGroup(): TLib3MFBaseMaterialGroup; + var + HBaseMaterialGroupInstance: TLib3MFHandle; + begin + Result := nil; + HBaseMaterialGroupInstance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeDataComposite_GetBaseMaterialGroupFunc(FHandle, HBaseMaterialGroupInstance)); + if Assigned(HBaseMaterialGroupInstance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HBaseMaterialGroupInstance); + end; + + procedure TLib3MFVolumeDataComposite.SetBaseMaterialGroup(const ABaseMaterialGroupInstance: TLib3MFBaseMaterialGroup); + var + ABaseMaterialGroupInstanceHandle: TLib3MFHandle; + begin + if Assigned(ABaseMaterialGroupInstance) then + ABaseMaterialGroupInstanceHandle := ABaseMaterialGroupInstance.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ABaseMaterialGroupInstance is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeDataComposite_SetBaseMaterialGroupFunc(FHandle, ABaseMaterialGroupInstanceHandle)); + end; + + function TLib3MFVolumeDataComposite.GetMaterialMappingCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeDataComposite_GetMaterialMappingCountFunc(FHandle, Result)); + end; + + function TLib3MFVolumeDataComposite.GetMaterialMapping(const AIndex: Cardinal): TLib3MFMaterialMapping; + var + HTheMaterialMapping: TLib3MFHandle; + begin + Result := nil; + HTheMaterialMapping := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeDataComposite_GetMaterialMappingFunc(FHandle, AIndex, HTheMaterialMapping)); + if Assigned(HTheMaterialMapping) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheMaterialMapping); + end; + + function TLib3MFVolumeDataComposite.AddMaterialMapping(const ATransform: TLib3MFTransform): TLib3MFMaterialMapping; + var + HTheMaterialMapping: TLib3MFHandle; + begin + Result := nil; + HTheMaterialMapping := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeDataComposite_AddMaterialMappingFunc(FHandle, @ATransform, HTheMaterialMapping)); + if Assigned(HTheMaterialMapping) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheMaterialMapping); + end; + + procedure TLib3MFVolumeDataComposite.RemoveMaterialMapping(const AIndex: Cardinal); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeDataComposite_RemoveMaterialMappingFunc(FHandle, AIndex)); + end; + +(************************************************************************************************************************* + Class implementation for VolumeDataProperty +**************************************************************************************************************************) + + constructor TLib3MFVolumeDataProperty.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFVolumeDataProperty.Destroy; + begin + inherited; + end; + + function TLib3MFVolumeDataProperty.GetName(): String; + var + bytesNeededPropertyName: Cardinal; + bytesWrittenPropertyName: Cardinal; + bufferPropertyName: array of Char; + begin + bytesNeededPropertyName:= 0; + bytesWrittenPropertyName:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeDataProperty_GetNameFunc(FHandle, 0, bytesNeededPropertyName, nil)); + SetLength(bufferPropertyName, bytesNeededPropertyName); + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeDataProperty_GetNameFunc(FHandle, bytesNeededPropertyName, bytesWrittenPropertyName, @bufferPropertyName[0])); + Result := StrPas(@bufferPropertyName[0]); + end; + + procedure TLib3MFVolumeDataProperty.SetIsRequired(const AIsRequired: Boolean); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeDataProperty_SetIsRequiredFunc(FHandle, Ord(AIsRequired))); + end; + + function TLib3MFVolumeDataProperty.IsRequired(): Boolean; + var + ResultIsRequired: Byte; + begin + ResultIsRequired := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeDataProperty_IsRequiredFunc(FHandle, ResultIsRequired)); + Result := (ResultIsRequired <> 0); + end; + +(************************************************************************************************************************* + Class implementation for VolumeData +**************************************************************************************************************************) + + constructor TLib3MFVolumeData.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFVolumeData.Destroy; + begin + inherited; + end; + + function TLib3MFVolumeData.GetComposite(): TLib3MFVolumeDataComposite; + var + HTheCompositeData: TLib3MFHandle; + begin + Result := nil; + HTheCompositeData := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeData_GetCompositeFunc(FHandle, HTheCompositeData)); + if Assigned(HTheCompositeData) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheCompositeData); + end; + + function TLib3MFVolumeData.CreateNewComposite(): TLib3MFVolumeDataComposite; + var + HTheCompositeData: TLib3MFHandle; + begin + Result := nil; + HTheCompositeData := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeData_CreateNewCompositeFunc(FHandle, HTheCompositeData)); + if Assigned(HTheCompositeData) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheCompositeData); + end; + + procedure TLib3MFVolumeData.RemoveComposite(); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeData_RemoveCompositeFunc(FHandle)); + end; + + function TLib3MFVolumeData.GetColor(): TLib3MFVolumeDataColor; + var + HTheColorData: TLib3MFHandle; + begin + Result := nil; + HTheColorData := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeData_GetColorFunc(FHandle, HTheColorData)); + if Assigned(HTheColorData) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheColorData); + end; + + function TLib3MFVolumeData.CreateNewColor(const ATheFunction: TLib3MFFunction): TLib3MFVolumeDataColor; + var + ATheFunctionHandle: TLib3MFHandle; + HTheColorData: TLib3MFHandle; + begin + if Assigned(ATheFunction) then + ATheFunctionHandle := ATheFunction.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheFunction is a nil value.'); + Result := nil; + HTheColorData := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeData_CreateNewColorFunc(FHandle, ATheFunctionHandle, HTheColorData)); + if Assigned(HTheColorData) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheColorData); + end; + + procedure TLib3MFVolumeData.RemoveColor(); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeData_RemoveColorFunc(FHandle)); + end; + + function TLib3MFVolumeData.GetPropertyCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeData_GetPropertyCountFunc(FHandle, Result)); + end; + + function TLib3MFVolumeData.GetProperty(const AIndex: Cardinal): TLib3MFVolumeDataProperty; + var + HTheVolumeDataProperty: TLib3MFHandle; + begin + Result := nil; + HTheVolumeDataProperty := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeData_GetPropertyFunc(FHandle, AIndex, HTheVolumeDataProperty)); + if Assigned(HTheVolumeDataProperty) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheVolumeDataProperty); + end; + + function TLib3MFVolumeData.AddPropertyFromFunction(const AName: String; const ATheFunction: TLib3MFFunction): TLib3MFVolumeDataProperty; + var + ATheFunctionHandle: TLib3MFHandle; + HTheVolumeDataProperty: TLib3MFHandle; + begin + if Assigned(ATheFunction) then + ATheFunctionHandle := ATheFunction.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheFunction is a nil value.'); + Result := nil; + HTheVolumeDataProperty := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeData_AddPropertyFromFunctionFunc(FHandle, PAnsiChar(AName), ATheFunctionHandle, HTheVolumeDataProperty)); + if Assigned(HTheVolumeDataProperty) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheVolumeDataProperty); + end; + + procedure TLib3MFVolumeData.RemoveProperty(const AIndex: Cardinal); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFVolumeData_RemovePropertyFunc(FHandle, AIndex)); + end; + +(************************************************************************************************************************* + Class implementation for Component +**************************************************************************************************************************) + + constructor TLib3MFComponent.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFComponent.Destroy; + begin + inherited; + end; + + function TLib3MFComponent.GetObjectResource(): TLib3MFObject; + var + HObjectResource: TLib3MFHandle; + begin + Result := nil; + HObjectResource := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_GetObjectResourceFunc(FHandle, HObjectResource)); + if Assigned(HObjectResource) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HObjectResource); + end; + + function TLib3MFComponent.GetObjectResourceID(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_GetObjectResourceIDFunc(FHandle, Result)); + end; + + function TLib3MFComponent.GetUUID(out AHasUUID: Boolean): String; + var + ResultHasUUID: Byte; + bytesNeededUUID: Cardinal; + bytesWrittenUUID: Cardinal; + bufferUUID: array of Char; + begin + ResultHasUUID := 0; + bytesNeededUUID:= 0; + bytesWrittenUUID:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_GetUUIDFunc(FHandle, ResultHasUUID, 0, bytesNeededUUID, nil)); + SetLength(bufferUUID, bytesNeededUUID); + FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_GetUUIDFunc(FHandle, ResultHasUUID, bytesNeededUUID, bytesWrittenUUID, @bufferUUID[0])); + AHasUUID := ResultHasUUID <> 0; + Result := StrPas(@bufferUUID[0]); + end; + + procedure TLib3MFComponent.SetUUID(const AUUID: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_SetUUIDFunc(FHandle, PAnsiChar(AUUID))); + end; + + function TLib3MFComponent.HasTransform(): Boolean; + var + ResultHasTransform: Byte; + begin + ResultHasTransform := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_HasTransformFunc(FHandle, ResultHasTransform)); + Result := (ResultHasTransform <> 0); + end; + + function TLib3MFComponent.GetTransform(): TLib3MFTransform; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_GetTransformFunc(FHandle, @Result)); + end; + + procedure TLib3MFComponent.SetTransform(const ATransform: TLib3MFTransform); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_SetTransformFunc(FHandle, @ATransform)); + end; + +(************************************************************************************************************************* + Class implementation for ComponentsObject +**************************************************************************************************************************) + + constructor TLib3MFComponentsObject.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFComponentsObject.Destroy; + begin + inherited; + end; + + function TLib3MFComponentsObject.AddComponent(const AObjectResource: TLib3MFObject; const ATransform: TLib3MFTransform): TLib3MFComponent; + var + AObjectResourceHandle: TLib3MFHandle; + HComponentInstance: TLib3MFHandle; + begin + if Assigned(AObjectResource) then + AObjectResourceHandle := AObjectResource.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AObjectResource is a nil value.'); + Result := nil; + HComponentInstance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComponentsObject_AddComponentFunc(FHandle, AObjectResourceHandle, @ATransform, HComponentInstance)); + if Assigned(HComponentInstance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HComponentInstance); + end; + + function TLib3MFComponentsObject.GetComponent(const AIndex: Cardinal): TLib3MFComponent; + var + HComponentInstance: TLib3MFHandle; + begin + Result := nil; + HComponentInstance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComponentsObject_GetComponentFunc(FHandle, AIndex, HComponentInstance)); + if Assigned(HComponentInstance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HComponentInstance); + end; + + function TLib3MFComponentsObject.GetComponentCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFComponentsObject_GetComponentCountFunc(FHandle, Result)); + end; + +(************************************************************************************************************************* + Class implementation for BeamSet +**************************************************************************************************************************) + + constructor TLib3MFBeamSet.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFBeamSet.Destroy; + begin + inherited; + end; + + procedure TLib3MFBeamSet.SetName(const AName: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_SetNameFunc(FHandle, PAnsiChar(AName))); + end; + + function TLib3MFBeamSet.GetName(): String; + var + bytesNeededName: Cardinal; + bytesWrittenName: Cardinal; + bufferName: array of Char; + begin + bytesNeededName:= 0; + bytesWrittenName:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetNameFunc(FHandle, 0, bytesNeededName, nil)); + SetLength(bufferName, bytesNeededName); + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetNameFunc(FHandle, bytesNeededName, bytesWrittenName, @bufferName[0])); + Result := StrPas(@bufferName[0]); + end; + + procedure TLib3MFBeamSet.SetIdentifier(const AIdentifier: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_SetIdentifierFunc(FHandle, PAnsiChar(AIdentifier))); + end; + + function TLib3MFBeamSet.GetIdentifier(): String; + var + bytesNeededIdentifier: Cardinal; + bytesWrittenIdentifier: Cardinal; + bufferIdentifier: array of Char; + begin + bytesNeededIdentifier:= 0; + bytesWrittenIdentifier:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetIdentifierFunc(FHandle, 0, bytesNeededIdentifier, nil)); + SetLength(bufferIdentifier, bytesNeededIdentifier); + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetIdentifierFunc(FHandle, bytesNeededIdentifier, bytesWrittenIdentifier, @bufferIdentifier[0])); + Result := StrPas(@bufferIdentifier[0]); + end; + + function TLib3MFBeamSet.GetReferenceCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetReferenceCountFunc(FHandle, Result)); + end; + + procedure TLib3MFBeamSet.SetReferences(const AReferences: TCardinalDynArray); + var + PtrReferences: PCardinal; + LenReferences: QWord; + begin + LenReferences := Length(AReferences); + if LenReferences > $FFFFFFFF then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); + if LenReferences > 0 then + PtrReferences := @AReferences[0] + else + PtrReferences := nil; + + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_SetReferencesFunc(FHandle, QWord(LenReferences), PtrReferences)); + end; + + procedure TLib3MFBeamSet.GetReferences(out AReferences: TCardinalDynArray); + var + countNeededReferences: QWord; + countWrittenReferences: QWord; + begin + countNeededReferences:= 0; + countWrittenReferences:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetReferencesFunc(FHandle, 0, countNeededReferences, nil)); + SetLength(AReferences, countNeededReferences); + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetReferencesFunc(FHandle, countNeededReferences, countWrittenReferences, @AReferences[0])); + end; + + function TLib3MFBeamSet.GetBallReferenceCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetBallReferenceCountFunc(FHandle, Result)); + end; + + procedure TLib3MFBeamSet.SetBallReferences(const ABallReferences: TCardinalDynArray); + var + PtrBallReferences: PCardinal; + LenBallReferences: QWord; + begin + LenBallReferences := Length(ABallReferences); + if LenBallReferences > $FFFFFFFF then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); + if LenBallReferences > 0 then + PtrBallReferences := @ABallReferences[0] + else + PtrBallReferences := nil; + + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_SetBallReferencesFunc(FHandle, QWord(LenBallReferences), PtrBallReferences)); + end; + + procedure TLib3MFBeamSet.GetBallReferences(out ABallReferences: TCardinalDynArray); + var + countNeededBallReferences: QWord; + countWrittenBallReferences: QWord; + begin + countNeededBallReferences:= 0; + countWrittenBallReferences:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetBallReferencesFunc(FHandle, 0, countNeededBallReferences, nil)); + SetLength(ABallReferences, countNeededBallReferences); + FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetBallReferencesFunc(FHandle, countNeededBallReferences, countWrittenBallReferences, @ABallReferences[0])); + end; + +(************************************************************************************************************************* + Class implementation for BaseMaterialGroup **************************************************************************************************************************) - function convertPropertyTypeToConst(const AValue: TLib3MFPropertyType): Integer; - function convertConstToPropertyType(const AValue: Integer): TLib3MFPropertyType; - function convertSlicesMeshResolutionToConst(const AValue: TLib3MFSlicesMeshResolution): Integer; - function convertConstToSlicesMeshResolution(const AValue: Integer): TLib3MFSlicesMeshResolution; - function convertModelUnitToConst(const AValue: TLib3MFModelUnit): Integer; - function convertConstToModelUnit(const AValue: Integer): TLib3MFModelUnit; - function convertObjectTypeToConst(const AValue: TLib3MFObjectType): Integer; - function convertConstToObjectType(const AValue: Integer): TLib3MFObjectType; - function convertTextureTypeToConst(const AValue: TLib3MFTextureType): Integer; - function convertConstToTextureType(const AValue: Integer): TLib3MFTextureType; - function convertTextureTileStyleToConst(const AValue: TLib3MFTextureTileStyle): Integer; - function convertConstToTextureTileStyle(const AValue: Integer): TLib3MFTextureTileStyle; - function convertTextureFilterToConst(const AValue: TLib3MFTextureFilter): Integer; - function convertConstToTextureFilter(const AValue: Integer): TLib3MFTextureFilter; - function convertBeamLatticeCapModeToConst(const AValue: TLib3MFBeamLatticeCapMode): Integer; - function convertConstToBeamLatticeCapMode(const AValue: Integer): TLib3MFBeamLatticeCapMode; - function convertBeamLatticeClipModeToConst(const AValue: TLib3MFBeamLatticeClipMode): Integer; - function convertConstToBeamLatticeClipMode(const AValue: Integer): TLib3MFBeamLatticeClipMode; - function convertBeamLatticeBallModeToConst(const AValue: TLib3MFBeamLatticeBallMode): Integer; - function convertConstToBeamLatticeBallMode(const AValue: Integer): TLib3MFBeamLatticeBallMode; - function convertProgressIdentifierToConst(const AValue: TLib3MFProgressIdentifier): Integer; - function convertConstToProgressIdentifier(const AValue: Integer): TLib3MFProgressIdentifier; - function convertBlendMethodToConst(const AValue: TLib3MFBlendMethod): Integer; - function convertConstToBlendMethod(const AValue: Integer): TLib3MFBlendMethod; - function convertEncryptionAlgorithmToConst(const AValue: TLib3MFEncryptionAlgorithm): Integer; - function convertConstToEncryptionAlgorithm(const AValue: Integer): TLib3MFEncryptionAlgorithm; - function convertWrappingAlgorithmToConst(const AValue: TLib3MFWrappingAlgorithm): Integer; - function convertConstToWrappingAlgorithm(const AValue: Integer): TLib3MFWrappingAlgorithm; - function convertMgfAlgorithmToConst(const AValue: TLib3MFMgfAlgorithm): Integer; - function convertConstToMgfAlgorithm(const AValue: Integer): TLib3MFMgfAlgorithm; - function convertDigestMethodToConst(const AValue: TLib3MFDigestMethod): Integer; - function convertConstToDigestMethod(const AValue: Integer): TLib3MFDigestMethod; - function convertCompressionToConst(const AValue: TLib3MFCompression): Integer; - function convertConstToCompression(const AValue: Integer): TLib3MFCompression; + constructor TLib3MFBaseMaterialGroup.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; - TLib3MFPolymorphicFactory<_T:class; _B> = record - class function Make(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): _T; static; + destructor TLib3MFBaseMaterialGroup.Destroy; + begin + inherited; end; - function TLib3MFPolymorphicFactoryMakeBase(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBase; - function TLib3MFPolymorphicFactoryMakeWriter(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFWriter; - function TLib3MFPolymorphicFactoryMakeReader(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFReader; - function TLib3MFPolymorphicFactoryMakePackagePart(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFPackagePart; - function TLib3MFPolymorphicFactoryMakeResource(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResource; - function TLib3MFPolymorphicFactoryMakeResourceIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceIterator; - function TLib3MFPolymorphicFactoryMakeSliceStackIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSliceStackIterator; - function TLib3MFPolymorphicFactoryMakeObjectIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFObjectIterator; - function TLib3MFPolymorphicFactoryMakeMeshObjectIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMeshObjectIterator; - function TLib3MFPolymorphicFactoryMakeComponentsObjectIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComponentsObjectIterator; - function TLib3MFPolymorphicFactoryMakeTexture2DIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2DIterator; - function TLib3MFPolymorphicFactoryMakeBaseMaterialGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBaseMaterialGroupIterator; - function TLib3MFPolymorphicFactoryMakeColorGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFColorGroupIterator; - function TLib3MFPolymorphicFactoryMakeTexture2DGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2DGroupIterator; - function TLib3MFPolymorphicFactoryMakeCompositeMaterialsIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCompositeMaterialsIterator; - function TLib3MFPolymorphicFactoryMakeMultiPropertyGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMultiPropertyGroupIterator; - function TLib3MFPolymorphicFactoryMakeMetaData(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMetaData; - function TLib3MFPolymorphicFactoryMakeMetaDataGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMetaDataGroup; - function TLib3MFPolymorphicFactoryMakeObject(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFObject; - function TLib3MFPolymorphicFactoryMakeMeshObject(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMeshObject; - function TLib3MFPolymorphicFactoryMakeBeamLattice(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBeamLattice; - function TLib3MFPolymorphicFactoryMakeComponent(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComponent; - function TLib3MFPolymorphicFactoryMakeComponentsObject(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComponentsObject; - function TLib3MFPolymorphicFactoryMakeBeamSet(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBeamSet; - function TLib3MFPolymorphicFactoryMakeBaseMaterialGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBaseMaterialGroup; - function TLib3MFPolymorphicFactoryMakeColorGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFColorGroup; - function TLib3MFPolymorphicFactoryMakeTexture2DGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2DGroup; - function TLib3MFPolymorphicFactoryMakeCompositeMaterials(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCompositeMaterials; - function TLib3MFPolymorphicFactoryMakeMultiPropertyGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMultiPropertyGroup; - function TLib3MFPolymorphicFactoryMakeAttachment(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFAttachment; - function TLib3MFPolymorphicFactoryMakeTexture2D(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2D; - function TLib3MFPolymorphicFactoryMakeBuildItem(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBuildItem; - function TLib3MFPolymorphicFactoryMakeBuildItemIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBuildItemIterator; - function TLib3MFPolymorphicFactoryMakeSlice(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSlice; - function TLib3MFPolymorphicFactoryMakeSliceStack(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSliceStack; - function TLib3MFPolymorphicFactoryMakeConsumer(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFConsumer; - function TLib3MFPolymorphicFactoryMakeAccessRight(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFAccessRight; - function TLib3MFPolymorphicFactoryMakeContentEncryptionParams(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFContentEncryptionParams; - function TLib3MFPolymorphicFactoryMakeResourceData(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceData; - function TLib3MFPolymorphicFactoryMakeResourceDataGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceDataGroup; - function TLib3MFPolymorphicFactoryMakeKeyStore(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFKeyStore; - function TLib3MFPolymorphicFactoryMakeModel(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFModel; -implementation + function TLib3MFBaseMaterialGroup.GetCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_GetCountFunc(FHandle, Result)); + end; + + procedure TLib3MFBaseMaterialGroup.GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + var + countNeededPropertyIDs: QWord; + countWrittenPropertyIDs: QWord; + begin + countNeededPropertyIDs:= 0; + countWrittenPropertyIDs:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_GetAllPropertyIDsFunc(FHandle, 0, countNeededPropertyIDs, nil)); + SetLength(APropertyIDs, countNeededPropertyIDs); + FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_GetAllPropertyIDsFunc(FHandle, countNeededPropertyIDs, countWrittenPropertyIDs, @APropertyIDs[0])); + end; + + function TLib3MFBaseMaterialGroup.AddMaterial(const AName: String; const ADisplayColor: TLib3MFColor): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_AddMaterialFunc(FHandle, PAnsiChar(AName), @ADisplayColor, Result)); + end; + + procedure TLib3MFBaseMaterialGroup.RemoveMaterial(const APropertyID: Cardinal); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_RemoveMaterialFunc(FHandle, APropertyID)); + end; + + function TLib3MFBaseMaterialGroup.GetName(const APropertyID: Cardinal): String; + var + bytesNeededName: Cardinal; + bytesWrittenName: Cardinal; + bufferName: array of Char; + begin + bytesNeededName:= 0; + bytesWrittenName:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_GetNameFunc(FHandle, APropertyID, 0, bytesNeededName, nil)); + SetLength(bufferName, bytesNeededName); + FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_GetNameFunc(FHandle, APropertyID, bytesNeededName, bytesWrittenName, @bufferName[0])); + Result := StrPas(@bufferName[0]); + end; + + procedure TLib3MFBaseMaterialGroup.SetName(const APropertyID: Cardinal; const AName: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_SetNameFunc(FHandle, APropertyID, PAnsiChar(AName))); + end; + + procedure TLib3MFBaseMaterialGroup.SetDisplayColor(const APropertyID: Cardinal; const ATheColor: TLib3MFColor); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_SetDisplayColorFunc(FHandle, APropertyID, @ATheColor)); + end; + + function TLib3MFBaseMaterialGroup.GetDisplayColor(const APropertyID: Cardinal): TLib3MFColor; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_GetDisplayColorFunc(FHandle, APropertyID, @Result)); + end; (************************************************************************************************************************* - Enum conversion + Class implementation for ColorGroup +**************************************************************************************************************************) + + constructor TLib3MFColorGroup.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFColorGroup.Destroy; + begin + inherited; + end; + + function TLib3MFColorGroup.GetCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_GetCountFunc(FHandle, Result)); + end; + + procedure TLib3MFColorGroup.GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + var + countNeededPropertyIDs: QWord; + countWrittenPropertyIDs: QWord; + begin + countNeededPropertyIDs:= 0; + countWrittenPropertyIDs:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_GetAllPropertyIDsFunc(FHandle, 0, countNeededPropertyIDs, nil)); + SetLength(APropertyIDs, countNeededPropertyIDs); + FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_GetAllPropertyIDsFunc(FHandle, countNeededPropertyIDs, countWrittenPropertyIDs, @APropertyIDs[0])); + end; + + function TLib3MFColorGroup.AddColor(const ATheColor: TLib3MFColor): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_AddColorFunc(FHandle, @ATheColor, Result)); + end; + + procedure TLib3MFColorGroup.RemoveColor(const APropertyID: Cardinal); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_RemoveColorFunc(FHandle, APropertyID)); + end; + + procedure TLib3MFColorGroup.SetColor(const APropertyID: Cardinal; const ATheColor: TLib3MFColor); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_SetColorFunc(FHandle, APropertyID, @ATheColor)); + end; + + function TLib3MFColorGroup.GetColor(const APropertyID: Cardinal): TLib3MFColor; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_GetColorFunc(FHandle, APropertyID, @Result)); + end; + +(************************************************************************************************************************* + Class implementation for Texture2DGroup **************************************************************************************************************************) - function convertPropertyTypeToConst(const AValue: TLib3MFPropertyType): Integer; + constructor TLib3MFTexture2DGroup.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFTexture2DGroup.Destroy; begin - case AValue of - ePropertyTypeNoPropertyType: Result := 0; - ePropertyTypeBaseMaterial: Result := 1; - ePropertyTypeTexCoord: Result := 2; - ePropertyTypeColors: Result := 3; - ePropertyTypeComposite: Result := 4; - ePropertyTypeMulti: Result := 5; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + inherited; end; - - function convertConstToPropertyType(const AValue: Integer): TLib3MFPropertyType; + + function TLib3MFTexture2DGroup.GetCount(): Cardinal; begin - case AValue of - 0: Result := ePropertyTypeNoPropertyType; - 1: Result := ePropertyTypeBaseMaterial; - 2: Result := ePropertyTypeTexCoord; - 3: Result := ePropertyTypeColors; - 4: Result := ePropertyTypeComposite; - 5: Result := ePropertyTypeMulti; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_GetCountFunc(FHandle, Result)); end; - - - function convertSlicesMeshResolutionToConst(const AValue: TLib3MFSlicesMeshResolution): Integer; + + procedure TLib3MFTexture2DGroup.GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + var + countNeededPropertyIDs: QWord; + countWrittenPropertyIDs: QWord; begin - case AValue of - eSlicesMeshResolutionFullres: Result := 0; - eSlicesMeshResolutionLowres: Result := 1; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + countNeededPropertyIDs:= 0; + countWrittenPropertyIDs:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_GetAllPropertyIDsFunc(FHandle, 0, countNeededPropertyIDs, nil)); + SetLength(APropertyIDs, countNeededPropertyIDs); + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_GetAllPropertyIDsFunc(FHandle, countNeededPropertyIDs, countWrittenPropertyIDs, @APropertyIDs[0])); end; - - function convertConstToSlicesMeshResolution(const AValue: Integer): TLib3MFSlicesMeshResolution; + + function TLib3MFTexture2DGroup.AddTex2Coord(const AUVCoordinate: TLib3MFTex2Coord): Cardinal; begin - case AValue of - 0: Result := eSlicesMeshResolutionFullres; - 1: Result := eSlicesMeshResolutionLowres; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_AddTex2CoordFunc(FHandle, @AUVCoordinate, Result)); end; - - - function convertModelUnitToConst(const AValue: TLib3MFModelUnit): Integer; + + function TLib3MFTexture2DGroup.GetTex2Coord(const APropertyID: Cardinal): TLib3MFTex2Coord; begin - case AValue of - eModelUnitMicroMeter: Result := 0; - eModelUnitMilliMeter: Result := 1; - eModelUnitCentiMeter: Result := 2; - eModelUnitInch: Result := 3; - eModelUnitFoot: Result := 4; - eModelUnitMeter: Result := 5; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_GetTex2CoordFunc(FHandle, APropertyID, @Result)); end; - - function convertConstToModelUnit(const AValue: Integer): TLib3MFModelUnit; + + procedure TLib3MFTexture2DGroup.RemoveTex2Coord(const APropertyID: Cardinal); begin - case AValue of - 0: Result := eModelUnitMicroMeter; - 1: Result := eModelUnitMilliMeter; - 2: Result := eModelUnitCentiMeter; - 3: Result := eModelUnitInch; - 4: Result := eModelUnitFoot; - 5: Result := eModelUnitMeter; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_RemoveTex2CoordFunc(FHandle, APropertyID)); end; - - - function convertObjectTypeToConst(const AValue: TLib3MFObjectType): Integer; + + function TLib3MFTexture2DGroup.GetTexture2D(): TLib3MFTexture2D; + var + HTexture2DInstance: TLib3MFHandle; begin - case AValue of - eObjectTypeOther: Result := 0; - eObjectTypeModel: Result := 1; - eObjectTypeSupport: Result := 2; - eObjectTypeSolidSupport: Result := 3; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + Result := nil; + HTexture2DInstance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_GetTexture2DFunc(FHandle, HTexture2DInstance)); + if Assigned(HTexture2DInstance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTexture2DInstance); end; - - function convertConstToObjectType(const AValue: Integer): TLib3MFObjectType; + +(************************************************************************************************************************* + Class implementation for CompositeMaterials +**************************************************************************************************************************) + + constructor TLib3MFCompositeMaterials.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - case AValue of - 0: Result := eObjectTypeOther; - 1: Result := eObjectTypeModel; - 2: Result := eObjectTypeSupport; - 3: Result := eObjectTypeSolidSupport; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + inherited Create(AWrapper, AHandle); end; - - - function convertTextureTypeToConst(const AValue: TLib3MFTextureType): Integer; + + destructor TLib3MFCompositeMaterials.Destroy; begin - case AValue of - eTextureTypeUnknown: Result := 0; - eTextureTypePNG: Result := 1; - eTextureTypeJPEG: Result := 2; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + inherited; end; - - function convertConstToTextureType(const AValue: Integer): TLib3MFTextureType; + + function TLib3MFCompositeMaterials.GetCount(): Cardinal; begin - case AValue of - 0: Result := eTextureTypeUnknown; - 1: Result := eTextureTypePNG; - 2: Result := eTextureTypeJPEG; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_GetCountFunc(FHandle, Result)); end; - - - function convertTextureTileStyleToConst(const AValue: TLib3MFTextureTileStyle): Integer; + + procedure TLib3MFCompositeMaterials.GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + var + countNeededPropertyIDs: QWord; + countWrittenPropertyIDs: QWord; begin - case AValue of - eTextureTileStyleWrap: Result := 0; - eTextureTileStyleMirror: Result := 1; - eTextureTileStyleClamp: Result := 2; - eTextureTileStyleNoTileStyle: Result := 3; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + countNeededPropertyIDs:= 0; + countWrittenPropertyIDs:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_GetAllPropertyIDsFunc(FHandle, 0, countNeededPropertyIDs, nil)); + SetLength(APropertyIDs, countNeededPropertyIDs); + FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_GetAllPropertyIDsFunc(FHandle, countNeededPropertyIDs, countWrittenPropertyIDs, @APropertyIDs[0])); end; - - function convertConstToTextureTileStyle(const AValue: Integer): TLib3MFTextureTileStyle; + + function TLib3MFCompositeMaterials.GetBaseMaterialGroup(): TLib3MFBaseMaterialGroup; + var + HBaseMaterialGroupInstance: TLib3MFHandle; begin - case AValue of - 0: Result := eTextureTileStyleWrap; - 1: Result := eTextureTileStyleMirror; - 2: Result := eTextureTileStyleClamp; - 3: Result := eTextureTileStyleNoTileStyle; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + Result := nil; + HBaseMaterialGroupInstance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_GetBaseMaterialGroupFunc(FHandle, HBaseMaterialGroupInstance)); + if Assigned(HBaseMaterialGroupInstance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HBaseMaterialGroupInstance); end; - - - function convertTextureFilterToConst(const AValue: TLib3MFTextureFilter): Integer; + + function TLib3MFCompositeMaterials.AddComposite(const AComposite: ArrayOfLib3MFCompositeConstituent): Cardinal; + var + PtrComposite: PLib3MFCompositeConstituent; + LenComposite: QWord; begin - case AValue of - eTextureFilterAuto: Result := 0; - eTextureFilterLinear: Result := 1; - eTextureFilterNearest: Result := 2; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + LenComposite := Length(AComposite); + if LenComposite > $FFFFFFFF then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); + if LenComposite > 0 then + PtrComposite := @AComposite[0] + else + PtrComposite := nil; + + FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_AddCompositeFunc(FHandle, QWord(LenComposite), PtrComposite, Result)); end; - - function convertConstToTextureFilter(const AValue: Integer): TLib3MFTextureFilter; + + procedure TLib3MFCompositeMaterials.RemoveComposite(const APropertyID: Cardinal); begin - case AValue of - 0: Result := eTextureFilterAuto; - 1: Result := eTextureFilterLinear; - 2: Result := eTextureFilterNearest; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_RemoveCompositeFunc(FHandle, APropertyID)); end; - - - function convertBeamLatticeCapModeToConst(const AValue: TLib3MFBeamLatticeCapMode): Integer; + + procedure TLib3MFCompositeMaterials.GetComposite(const APropertyID: Cardinal; out AComposite: ArrayOfLib3MFCompositeConstituent); + var + countNeededComposite: QWord; + countWrittenComposite: QWord; begin - case AValue of - eBeamLatticeCapModeSphere: Result := 0; - eBeamLatticeCapModeHemiSphere: Result := 1; - eBeamLatticeCapModeButt: Result := 2; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + countNeededComposite:= 0; + countWrittenComposite:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_GetCompositeFunc(FHandle, APropertyID, 0, countNeededComposite, nil)); + SetLength(AComposite, countNeededComposite); + FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_GetCompositeFunc(FHandle, APropertyID, countNeededComposite, countWrittenComposite, @AComposite[0])); + end; + +(************************************************************************************************************************* + Class implementation for MultiPropertyGroup +**************************************************************************************************************************) + + constructor TLib3MFMultiPropertyGroup.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + begin + inherited Create(AWrapper, AHandle); end; - - function convertConstToBeamLatticeCapMode(const AValue: Integer): TLib3MFBeamLatticeCapMode; + + destructor TLib3MFMultiPropertyGroup.Destroy; begin - case AValue of - 0: Result := eBeamLatticeCapModeSphere; - 1: Result := eBeamLatticeCapModeHemiSphere; - 2: Result := eBeamLatticeCapModeButt; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + inherited; end; - - - function convertBeamLatticeClipModeToConst(const AValue: TLib3MFBeamLatticeClipMode): Integer; + + function TLib3MFMultiPropertyGroup.GetCount(): Cardinal; begin - case AValue of - eBeamLatticeClipModeNoClipMode: Result := 0; - eBeamLatticeClipModeInside: Result := 1; - eBeamLatticeClipModeOutside: Result := 2; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetCountFunc(FHandle, Result)); end; - - function convertConstToBeamLatticeClipMode(const AValue: Integer): TLib3MFBeamLatticeClipMode; + + procedure TLib3MFMultiPropertyGroup.GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + var + countNeededPropertyIDs: QWord; + countWrittenPropertyIDs: QWord; begin - case AValue of - 0: Result := eBeamLatticeClipModeNoClipMode; - 1: Result := eBeamLatticeClipModeInside; - 2: Result := eBeamLatticeClipModeOutside; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + countNeededPropertyIDs:= 0; + countWrittenPropertyIDs:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetAllPropertyIDsFunc(FHandle, 0, countNeededPropertyIDs, nil)); + SetLength(APropertyIDs, countNeededPropertyIDs); + FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetAllPropertyIDsFunc(FHandle, countNeededPropertyIDs, countWrittenPropertyIDs, @APropertyIDs[0])); end; - - - function convertBeamLatticeBallModeToConst(const AValue: TLib3MFBeamLatticeBallMode): Integer; + + function TLib3MFMultiPropertyGroup.AddMultiProperty(const APropertyIDs: TCardinalDynArray): Cardinal; + var + PtrPropertyIDs: PCardinal; + LenPropertyIDs: QWord; begin - case AValue of - eBeamLatticeBallModeNone: Result := 0; - eBeamLatticeBallModeMixed: Result := 1; - eBeamLatticeBallModeAll: Result := 2; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + LenPropertyIDs := Length(APropertyIDs); + if LenPropertyIDs > $FFFFFFFF then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); + if LenPropertyIDs > 0 then + PtrPropertyIDs := @APropertyIDs[0] + else + PtrPropertyIDs := nil; + + FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_AddMultiPropertyFunc(FHandle, QWord(LenPropertyIDs), PtrPropertyIDs, Result)); end; - - function convertConstToBeamLatticeBallMode(const AValue: Integer): TLib3MFBeamLatticeBallMode; + + procedure TLib3MFMultiPropertyGroup.SetMultiProperty(const APropertyID: Cardinal; const APropertyIDs: TCardinalDynArray); + var + PtrPropertyIDs: PCardinal; + LenPropertyIDs: QWord; begin - case AValue of - 0: Result := eBeamLatticeBallModeNone; - 1: Result := eBeamLatticeBallModeMixed; - 2: Result := eBeamLatticeBallModeAll; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + LenPropertyIDs := Length(APropertyIDs); + if LenPropertyIDs > $FFFFFFFF then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); + if LenPropertyIDs > 0 then + PtrPropertyIDs := @APropertyIDs[0] + else + PtrPropertyIDs := nil; + + FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_SetMultiPropertyFunc(FHandle, APropertyID, QWord(LenPropertyIDs), PtrPropertyIDs)); end; - - - function convertProgressIdentifierToConst(const AValue: TLib3MFProgressIdentifier): Integer; + + procedure TLib3MFMultiPropertyGroup.GetMultiProperty(const APropertyID: Cardinal; out APropertyIDs: TCardinalDynArray); + var + countNeededPropertyIDs: QWord; + countWrittenPropertyIDs: QWord; begin - case AValue of - eProgressIdentifierQUERYCANCELED: Result := 0; - eProgressIdentifierDONE: Result := 1; - eProgressIdentifierCLEANUP: Result := 2; - eProgressIdentifierREADSTREAM: Result := 3; - eProgressIdentifierEXTRACTOPCPACKAGE: Result := 4; - eProgressIdentifierREADNONROOTMODELS: Result := 5; - eProgressIdentifierREADROOTMODEL: Result := 6; - eProgressIdentifierREADRESOURCES: Result := 7; - eProgressIdentifierREADMESH: Result := 8; - eProgressIdentifierREADSLICES: Result := 9; - eProgressIdentifierREADBUILD: Result := 10; - eProgressIdentifierREADCUSTOMATTACHMENT: Result := 11; - eProgressIdentifierREADTEXTURETACHMENTS: Result := 12; - eProgressIdentifierCREATEOPCPACKAGE: Result := 13; - eProgressIdentifierWRITEMODELSTOSTREAM: Result := 14; - eProgressIdentifierWRITEROOTMODEL: Result := 15; - eProgressIdentifierWRITENONROOTMODELS: Result := 16; - eProgressIdentifierWRITEATTACHMENTS: Result := 17; - eProgressIdentifierWRITECONTENTTYPES: Result := 18; - eProgressIdentifierWRITENOBJECTS: Result := 19; - eProgressIdentifierWRITENODES: Result := 20; - eProgressIdentifierWRITETRIANGLES: Result := 21; - eProgressIdentifierWRITESLICES: Result := 22; - eProgressIdentifierWRITEKEYSTORE: Result := 23; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + countNeededPropertyIDs:= 0; + countWrittenPropertyIDs:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetMultiPropertyFunc(FHandle, APropertyID, 0, countNeededPropertyIDs, nil)); + SetLength(APropertyIDs, countNeededPropertyIDs); + FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetMultiPropertyFunc(FHandle, APropertyID, countNeededPropertyIDs, countWrittenPropertyIDs, @APropertyIDs[0])); end; - - function convertConstToProgressIdentifier(const AValue: Integer): TLib3MFProgressIdentifier; + + procedure TLib3MFMultiPropertyGroup.RemoveMultiProperty(const APropertyID: Cardinal); begin - case AValue of - 0: Result := eProgressIdentifierQUERYCANCELED; - 1: Result := eProgressIdentifierDONE; - 2: Result := eProgressIdentifierCLEANUP; - 3: Result := eProgressIdentifierREADSTREAM; - 4: Result := eProgressIdentifierEXTRACTOPCPACKAGE; - 5: Result := eProgressIdentifierREADNONROOTMODELS; - 6: Result := eProgressIdentifierREADROOTMODEL; - 7: Result := eProgressIdentifierREADRESOURCES; - 8: Result := eProgressIdentifierREADMESH; - 9: Result := eProgressIdentifierREADSLICES; - 10: Result := eProgressIdentifierREADBUILD; - 11: Result := eProgressIdentifierREADCUSTOMATTACHMENT; - 12: Result := eProgressIdentifierREADTEXTURETACHMENTS; - 13: Result := eProgressIdentifierCREATEOPCPACKAGE; - 14: Result := eProgressIdentifierWRITEMODELSTOSTREAM; - 15: Result := eProgressIdentifierWRITEROOTMODEL; - 16: Result := eProgressIdentifierWRITENONROOTMODELS; - 17: Result := eProgressIdentifierWRITEATTACHMENTS; - 18: Result := eProgressIdentifierWRITECONTENTTYPES; - 19: Result := eProgressIdentifierWRITENOBJECTS; - 20: Result := eProgressIdentifierWRITENODES; - 21: Result := eProgressIdentifierWRITETRIANGLES; - 22: Result := eProgressIdentifierWRITESLICES; - 23: Result := eProgressIdentifierWRITEKEYSTORE; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_RemoveMultiPropertyFunc(FHandle, APropertyID)); end; - - - function convertBlendMethodToConst(const AValue: TLib3MFBlendMethod): Integer; + + function TLib3MFMultiPropertyGroup.GetLayerCount(): Cardinal; begin - case AValue of - eBlendMethodNoBlendMethod: Result := 0; - eBlendMethodMix: Result := 1; - eBlendMethodMultiply: Result := 2; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetLayerCountFunc(FHandle, Result)); end; - - function convertConstToBlendMethod(const AValue: Integer): TLib3MFBlendMethod; + + function TLib3MFMultiPropertyGroup.AddLayer(const ATheLayer: TLib3MFMultiPropertyLayer): Cardinal; begin - case AValue of - 0: Result := eBlendMethodNoBlendMethod; - 1: Result := eBlendMethodMix; - 2: Result := eBlendMethodMultiply; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_AddLayerFunc(FHandle, @ATheLayer, Result)); end; - - - function convertEncryptionAlgorithmToConst(const AValue: TLib3MFEncryptionAlgorithm): Integer; + + function TLib3MFMultiPropertyGroup.GetLayer(const ALayerIndex: Cardinal): TLib3MFMultiPropertyLayer; begin - case AValue of - eEncryptionAlgorithmAES256_GCM: Result := 1; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetLayerFunc(FHandle, ALayerIndex, @Result)); end; - - function convertConstToEncryptionAlgorithm(const AValue: Integer): TLib3MFEncryptionAlgorithm; + + procedure TLib3MFMultiPropertyGroup.RemoveLayer(const ALayerIndex: Cardinal); begin - case AValue of - 1: Result := eEncryptionAlgorithmAES256_GCM; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_RemoveLayerFunc(FHandle, ALayerIndex)); end; - - - function convertWrappingAlgorithmToConst(const AValue: TLib3MFWrappingAlgorithm): Integer; + +(************************************************************************************************************************* + Class implementation for Image3D +**************************************************************************************************************************) + + constructor TLib3MFImage3D.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - case AValue of - eWrappingAlgorithmRSA_OAEP: Result := 0; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + inherited Create(AWrapper, AHandle); end; - - function convertConstToWrappingAlgorithm(const AValue: Integer): TLib3MFWrappingAlgorithm; + + destructor TLib3MFImage3D.Destroy; begin - case AValue of - 0: Result := eWrappingAlgorithmRSA_OAEP; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + inherited; end; - - - function convertMgfAlgorithmToConst(const AValue: TLib3MFMgfAlgorithm): Integer; + + function TLib3MFImage3D.GetName(): String; + var + bytesNeededName: Cardinal; + bytesWrittenName: Cardinal; + bufferName: array of Char; begin - case AValue of - eMgfAlgorithmMGF1_SHA1: Result := 160; - eMgfAlgorithmMGF1_SHA224: Result := 224; - eMgfAlgorithmMGF1_SHA256: Result := 256; - eMgfAlgorithmMGF1_SHA384: Result := 384; - eMgfAlgorithmMGF1_SHA512: Result := 512; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + bytesNeededName:= 0; + bytesWrittenName:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFImage3D_GetNameFunc(FHandle, 0, bytesNeededName, nil)); + SetLength(bufferName, bytesNeededName); + FWrapper.CheckError(Self, FWrapper.Lib3MFImage3D_GetNameFunc(FHandle, bytesNeededName, bytesWrittenName, @bufferName[0])); + Result := StrPas(@bufferName[0]); end; - - function convertConstToMgfAlgorithm(const AValue: Integer): TLib3MFMgfAlgorithm; + + procedure TLib3MFImage3D.SetName(const AName: String); begin - case AValue of - 160: Result := eMgfAlgorithmMGF1_SHA1; - 224: Result := eMgfAlgorithmMGF1_SHA224; - 256: Result := eMgfAlgorithmMGF1_SHA256; - 384: Result := eMgfAlgorithmMGF1_SHA384; - 512: Result := eMgfAlgorithmMGF1_SHA512; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFImage3D_SetNameFunc(FHandle, PAnsiChar(AName))); end; - - - function convertDigestMethodToConst(const AValue: TLib3MFDigestMethod): Integer; + + function TLib3MFImage3D.IsImageStack(): Boolean; + var + ResultIsImageStack: Byte; begin - case AValue of - eDigestMethodSHA1: Result := 160; - eDigestMethodSHA256: Result := 256; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + ResultIsImageStack := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFImage3D_IsImageStackFunc(FHandle, ResultIsImageStack)); + Result := (ResultIsImageStack <> 0); end; - - function convertConstToDigestMethod(const AValue: Integer): TLib3MFDigestMethod; + +(************************************************************************************************************************* + Class implementation for ImageStack +**************************************************************************************************************************) + + constructor TLib3MFImageStack.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - case AValue of - 160: Result := eDigestMethodSHA1; - 256: Result := eDigestMethodSHA256; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + inherited Create(AWrapper, AHandle); end; - - - function convertCompressionToConst(const AValue: TLib3MFCompression): Integer; + + destructor TLib3MFImageStack.Destroy; begin - case AValue of - eCompressionNoCompression: Result := 0; - eCompressionDeflate: Result := 1; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum value'); - end; + inherited; end; - - function convertConstToCompression(const AValue: Integer): TLib3MFCompression; + + function TLib3MFImageStack.GetRowCount(): Cardinal; begin - case AValue of - 0: Result := eCompressionNoCompression; - 1: Result := eCompressionDeflate; - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'invalid enum constant'); - end; + FWrapper.CheckError(Self, FWrapper.Lib3MFImageStack_GetRowCountFunc(FHandle, Result)); end; - - + procedure TLib3MFImageStack.SetRowCount(const ARowCount: Cardinal); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFImageStack_SetRowCountFunc(FHandle, ARowCount)); + end; -(************************************************************************************************************************* - PolymorficFactory implementation -**************************************************************************************************************************) + function TLib3MFImageStack.GetColumnCount(): Cardinal; + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFImageStack_GetColumnCountFunc(FHandle, Result)); + end; - (** - * IMPORTANT: PolymorphicFactory method should not be used by application directly. - * It's designed to be used on Lib3MFHandle object only once. - * If it's used on any existing object as a form of dynamic cast then - * TLIB3MFWrapper::AcquireInstance(object: TLIB3MFBase) must be called after instantiating new object. - * This is important to keep reference count matching between application and library sides. - *) - class function TLib3MFPolymorphicFactory<_T, _B>.Make(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): _T; - var - ClassTypeId: QWord; - Obj: TLIB3MFBase; + procedure TLib3MFImageStack.SetColumnCount(const AColumnCount: Cardinal); begin - Result := nil; - Wrapper.CheckError(nil, Wrapper.Lib3MFBase_ClassTypeIdFunc(handle, ClassTypeId)); - case (ClassTypeId) of - QWord($856632D0BAF1D8B7): begin Obj := TLIB3MFBase.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Base" - QWord($E76F642F363FD7E9): begin Obj := TLIB3MFWriter.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Writer" - QWord($2D86831DA59FBE72): begin Obj := TLIB3MFReader.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Reader" - QWord($0E55A826D377483E): begin Obj := TLIB3MFPackagePart.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::PackagePart" - QWord($DFE3889D1B269CBB): begin Obj := TLIB3MFResource.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Resource" - QWord($460F3515E2621DBE): begin Obj := TLIB3MFResourceIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceIterator" - QWord($69684DB99FA813F6): begin Obj := TLIB3MFSliceStackIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::SliceStackIterator" - QWord($DE92510BD2112288): begin Obj := TLIB3MFObjectIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ObjectIterator" - QWord($F4196034E2B9FDE6): begin Obj := TLIB3MFMeshObjectIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MeshObjectIterator" - QWord($564DE4217ED7614A): begin Obj := TLIB3MFComponentsObjectIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObjectIterator" - QWord($4BD32B4870FFC03B): begin Obj := TLIB3MFTexture2DIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DIterator" - QWord($65E6EDD9362C79CB): begin Obj := TLIB3MFBaseMaterialGroupIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroupIterator" - QWord($10274A1757C729C0): begin Obj := TLIB3MFColorGroupIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ColorGroupIterator" - QWord($30D55F4DB88FE0CA): begin Obj := TLIB3MFTexture2DGroupIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroupIterator" - QWord($A99CC6C3F70FB6F9): begin Obj := TLIB3MFCompositeMaterialsIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterialsIterator" - QWord($C2BDF5D8CBBDB1F0): begin Obj := TLIB3MFMultiPropertyGroupIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroupIterator" - QWord($D17716D063DE2C22): begin Obj := TLIB3MFMetaData.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MetaData" - QWord($0C3B85369E9B25D3): begin Obj := TLIB3MFMetaDataGroup.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MetaDataGroup" - QWord($2DA2136F577A779C): begin Obj := TLIB3MFObject.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Object" - QWord($3B3A6DC6EC610497): begin Obj := TLIB3MFMeshObject.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MeshObject" - QWord($63B3B461B30B4BA5): begin Obj := TLIB3MFBeamLattice.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::BeamLattice" - QWord($4ECDB6A6F69F2BEB): begin Obj := TLIB3MFComponent.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Component" - QWord($6522CF04EB283FED): begin Obj := TLIB3MFComponentsObject.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObject" - QWord($30CCDBE90E00B55B): begin Obj := TLIB3MFBeamSet.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::BeamSet" - QWord($B27D4656E16609FA): begin Obj := TLIB3MFBaseMaterialGroup.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroup" - QWord($D085FB2E49CDB5B1): begin Obj := TLIB3MFColorGroup.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ColorGroup" - QWord($BC1208397E37055D): begin Obj := TLIB3MFTexture2DGroup.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroup" - QWord($CE16224D688B86F2): begin Obj := TLIB3MFCompositeMaterials.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterials" - QWord($B989E02E43158FE6): begin Obj := TLIB3MFMultiPropertyGroup.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroup" - QWord($8CE7A1191A63A35D): begin Obj := TLIB3MFAttachment.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Attachment" - QWord($E0441CF976B36319): begin Obj := TLIB3MFTexture2D.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2D" - QWord($68FB2D5FFC4BA12A): begin Obj := TLIB3MFBuildItem.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItem" - QWord($A7D21BD364910860): begin Obj := TLIB3MFBuildItemIterator.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::BuildItemIterator" - QWord($2198BCF4D8DF9C40): begin Obj := TLIB3MFSlice.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Slice" - QWord($6594B031B6096238): begin Obj := TLIB3MFSliceStack.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::SliceStack" - QWord($D9E46D5E6D8118EE): begin Obj := TLIB3MFConsumer.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Consumer" - QWord($385C42FC5609498A): begin Obj := TLIB3MFAccessRight.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::AccessRight" - QWord($7FB36B91D4CE4671): begin Obj := TLIB3MFContentEncryptionParams.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ContentEncryptionParams" - QWord($1A47A5E258E22EF9): begin Obj := TLIB3MFResourceData.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceData" - QWord($D59067227E428AA4): begin Obj := TLIB3MFResourceDataGroup.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceDataGroup" - QWord($1CC9E0CC082253C6): begin Obj := TLIB3MFKeyStore.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::KeyStore" - QWord($5A8164ECEDB03F09): begin Obj := TLIB3MFModel.Create(Wrapper, Handle); if Obj.inheritsFrom(_T) then Result := Obj as _T; end; // First 64 bits of SHA1 of a string: "Lib3MF::Model" - end; - if Result = nil then Result := _B.Create(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFImageStack_SetColumnCountFunc(FHandle, AColumnCount)); end; - function TLib3MFPolymorphicFactoryMakeBase(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBase; + + function TLib3MFImageStack.GetSheetCount(): Cardinal; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFImageStack_GetSheetCountFunc(FHandle, Result)); end; - function TLib3MFPolymorphicFactoryMakeWriter(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFWriter; + + function TLib3MFImageStack.GetSheet(const AIndex: Cardinal): TLib3MFAttachment; + var + HSheet: TLib3MFHandle; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + Result := nil; + HSheet := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImageStack_GetSheetFunc(FHandle, AIndex, HSheet)); + if Assigned(HSheet) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HSheet); end; - function TLib3MFPolymorphicFactoryMakeReader(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFReader; + + procedure TLib3MFImageStack.SetSheet(const AIndex: Cardinal; const ASheet: TLib3MFAttachment); + var + ASheetHandle: TLib3MFHandle; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + if Assigned(ASheet) then + ASheetHandle := ASheet.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ASheet is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFImageStack_SetSheetFunc(FHandle, AIndex, ASheetHandle)); end; - function TLib3MFPolymorphicFactoryMakePackagePart(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFPackagePart; + + function TLib3MFImageStack.CreateEmptySheet(const AIndex: Cardinal; const APath: String): TLib3MFAttachment; + var + HSheet: TLib3MFHandle; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + Result := nil; + HSheet := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImageStack_CreateEmptySheetFunc(FHandle, AIndex, PAnsiChar(APath), HSheet)); + if Assigned(HSheet) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HSheet); end; - function TLib3MFPolymorphicFactoryMakeResource(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResource; + + function TLib3MFImageStack.CreateSheetFromBuffer(const AIndex: Cardinal; const APath: String; const AData: TByteDynArray): TLib3MFAttachment; + var + PtrData: PByte; + LenData: QWord; + HSheet: TLib3MFHandle; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + LenData := Length(AData); + if LenData > $FFFFFFFF then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); + if LenData > 0 then + PtrData := @AData[0] + else + PtrData := nil; + + Result := nil; + HSheet := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImageStack_CreateSheetFromBufferFunc(FHandle, AIndex, PAnsiChar(APath), QWord(LenData), PtrData, HSheet)); + if Assigned(HSheet) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HSheet); end; - function TLib3MFPolymorphicFactoryMakeResourceIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceIterator; + + function TLib3MFImageStack.CreateSheetFromFile(const AIndex: Cardinal; const APath: String; const AFileName: String): TLib3MFAttachment; + var + HSheet: TLib3MFHandle; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + Result := nil; + HSheet := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImageStack_CreateSheetFromFileFunc(FHandle, AIndex, PAnsiChar(APath), PAnsiChar(AFileName), HSheet)); + if Assigned(HSheet) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HSheet); end; - function TLib3MFPolymorphicFactoryMakeSliceStackIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSliceStackIterator; + +(************************************************************************************************************************* + Class implementation for Attachment +**************************************************************************************************************************) + + constructor TLib3MFAttachment.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + inherited Create(AWrapper, AHandle); end; - function TLib3MFPolymorphicFactoryMakeObjectIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFObjectIterator; + + destructor TLib3MFAttachment.Destroy; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + inherited; end; - function TLib3MFPolymorphicFactoryMakeMeshObjectIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMeshObjectIterator; + + function TLib3MFAttachment.GetPath(): String; + var + bytesNeededPath: Cardinal; + bytesWrittenPath: Cardinal; + bufferPath: array of Char; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + bytesNeededPath:= 0; + bytesWrittenPath:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_GetPathFunc(FHandle, 0, bytesNeededPath, nil)); + SetLength(bufferPath, bytesNeededPath); + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_GetPathFunc(FHandle, bytesNeededPath, bytesWrittenPath, @bufferPath[0])); + Result := StrPas(@bufferPath[0]); end; - function TLib3MFPolymorphicFactoryMakeComponentsObjectIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComponentsObjectIterator; + + procedure TLib3MFAttachment.SetPath(const APath: String); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_SetPathFunc(FHandle, PAnsiChar(APath))); end; - function TLib3MFPolymorphicFactoryMakeTexture2DIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2DIterator; + + function TLib3MFAttachment.PackagePart(): TLib3MFPackagePart; + var + HPackagePart: TLib3MFHandle; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + Result := nil; + HPackagePart := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_PackagePartFunc(FHandle, HPackagePart)); + if Assigned(HPackagePart) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HPackagePart); end; - function TLib3MFPolymorphicFactoryMakeBaseMaterialGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBaseMaterialGroupIterator; + + function TLib3MFAttachment.GetRelationShipType(): String; + var + bytesNeededPath: Cardinal; + bytesWrittenPath: Cardinal; + bufferPath: array of Char; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + bytesNeededPath:= 0; + bytesWrittenPath:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_GetRelationShipTypeFunc(FHandle, 0, bytesNeededPath, nil)); + SetLength(bufferPath, bytesNeededPath); + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_GetRelationShipTypeFunc(FHandle, bytesNeededPath, bytesWrittenPath, @bufferPath[0])); + Result := StrPas(@bufferPath[0]); end; - function TLib3MFPolymorphicFactoryMakeColorGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFColorGroupIterator; + + procedure TLib3MFAttachment.SetRelationShipType(const APath: String); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_SetRelationShipTypeFunc(FHandle, PAnsiChar(APath))); end; - function TLib3MFPolymorphicFactoryMakeTexture2DGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2DGroupIterator; + + procedure TLib3MFAttachment.WriteToFile(const AFileName: String); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_WriteToFileFunc(FHandle, PAnsiChar(AFileName))); end; - function TLib3MFPolymorphicFactoryMakeCompositeMaterialsIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCompositeMaterialsIterator; + + procedure TLib3MFAttachment.ReadFromFile(const AFileName: String); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_ReadFromFileFunc(FHandle, PAnsiChar(AFileName))); end; - function TLib3MFPolymorphicFactoryMakeMultiPropertyGroupIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMultiPropertyGroupIterator; + + procedure TLib3MFAttachment.ReadFromCallback(const ATheReadCallback: PLib3MF_ReadCallback; const AStreamSize: QWord; const ATheSeekCallback: PLib3MF_SeekCallback; const AUserData: Pointer); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + if not Assigned(ATheReadCallback) then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheReadCallback is a nil value.'); + if not Assigned(ATheSeekCallback) then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheSeekCallback is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_ReadFromCallbackFunc(FHandle, ATheReadCallback, AStreamSize, ATheSeekCallback, AUserData)); end; - function TLib3MFPolymorphicFactoryMakeMetaData(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMetaData; + + function TLib3MFAttachment.GetStreamSize(): QWord; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_GetStreamSizeFunc(FHandle, Result)); end; - function TLib3MFPolymorphicFactoryMakeMetaDataGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMetaDataGroup; + + procedure TLib3MFAttachment.WriteToBuffer(out ABuffer: TByteDynArray); + var + countNeededBuffer: QWord; + countWrittenBuffer: QWord; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + countNeededBuffer:= 0; + countWrittenBuffer:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_WriteToBufferFunc(FHandle, 0, countNeededBuffer, nil)); + SetLength(ABuffer, countNeededBuffer); + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_WriteToBufferFunc(FHandle, countNeededBuffer, countWrittenBuffer, @ABuffer[0])); end; - function TLib3MFPolymorphicFactoryMakeObject(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFObject; + + procedure TLib3MFAttachment.ReadFromBuffer(const ABuffer: TByteDynArray); + var + PtrBuffer: PByte; + LenBuffer: QWord; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + LenBuffer := Length(ABuffer); + if LenBuffer > $FFFFFFFF then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); + if LenBuffer > 0 then + PtrBuffer := @ABuffer[0] + else + PtrBuffer := nil; + + FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_ReadFromBufferFunc(FHandle, QWord(LenBuffer), PtrBuffer)); end; - function TLib3MFPolymorphicFactoryMakeMeshObject(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMeshObject; + +(************************************************************************************************************************* + Class implementation for Texture2D +**************************************************************************************************************************) + + constructor TLib3MFTexture2D.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + inherited Create(AWrapper, AHandle); end; - function TLib3MFPolymorphicFactoryMakeBeamLattice(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBeamLattice; + + destructor TLib3MFTexture2D.Destroy; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + inherited; end; - function TLib3MFPolymorphicFactoryMakeComponent(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComponent; + + function TLib3MFTexture2D.GetAttachment(): TLib3MFAttachment; + var + HAttachment: TLib3MFHandle; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + Result := nil; + HAttachment := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_GetAttachmentFunc(FHandle, HAttachment)); + if Assigned(HAttachment) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HAttachment); end; - function TLib3MFPolymorphicFactoryMakeComponentsObject(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFComponentsObject; + + procedure TLib3MFTexture2D.SetAttachment(const AAttachment: TLib3MFAttachment); + var + AAttachmentHandle: TLib3MFHandle; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + if Assigned(AAttachment) then + AAttachmentHandle := AAttachment.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AAttachment is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_SetAttachmentFunc(FHandle, AAttachmentHandle)); end; - function TLib3MFPolymorphicFactoryMakeBeamSet(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBeamSet; + + function TLib3MFTexture2D.GetContentType(): TLib3MFTextureType; + var + ResultContentType: Integer; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + ResultContentType := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_GetContentTypeFunc(FHandle, ResultContentType)); + Result := convertConstToTextureType(ResultContentType); end; - function TLib3MFPolymorphicFactoryMakeBaseMaterialGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBaseMaterialGroup; + + procedure TLib3MFTexture2D.SetContentType(const AContentType: TLib3MFTextureType); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_SetContentTypeFunc(FHandle, convertTextureTypeToConst(AContentType))); end; - function TLib3MFPolymorphicFactoryMakeColorGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFColorGroup; + + procedure TLib3MFTexture2D.GetTileStyleUV(out ATileStyleU: TLib3MFTextureTileStyle; out ATileStyleV: TLib3MFTextureTileStyle); + var + ResultTileStyleU: Integer; + ResultTileStyleV: Integer; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + ResultTileStyleU := 0; + ResultTileStyleV := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_GetTileStyleUVFunc(FHandle, ResultTileStyleU, ResultTileStyleV)); + ATileStyleU := convertConstToTextureTileStyle(ResultTileStyleU); + ATileStyleV := convertConstToTextureTileStyle(ResultTileStyleV); end; - function TLib3MFPolymorphicFactoryMakeTexture2DGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2DGroup; + + procedure TLib3MFTexture2D.SetTileStyleUV(const ATileStyleU: TLib3MFTextureTileStyle; const ATileStyleV: TLib3MFTextureTileStyle); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_SetTileStyleUVFunc(FHandle, convertTextureTileStyleToConst(ATileStyleU), convertTextureTileStyleToConst(ATileStyleV))); end; - function TLib3MFPolymorphicFactoryMakeCompositeMaterials(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFCompositeMaterials; + + function TLib3MFTexture2D.GetFilter(): TLib3MFTextureFilter; + var + ResultFilter: Integer; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + ResultFilter := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_GetFilterFunc(FHandle, ResultFilter)); + Result := convertConstToTextureFilter(ResultFilter); end; - function TLib3MFPolymorphicFactoryMakeMultiPropertyGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFMultiPropertyGroup; + + procedure TLib3MFTexture2D.SetFilter(const AFilter: TLib3MFTextureFilter); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_SetFilterFunc(FHandle, convertTextureFilterToConst(AFilter))); end; - function TLib3MFPolymorphicFactoryMakeAttachment(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFAttachment; + +(************************************************************************************************************************* + Class implementation for ImplicitPort +**************************************************************************************************************************) + + constructor TLib3MFImplicitPort.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + inherited Create(AWrapper, AHandle); end; - function TLib3MFPolymorphicFactoryMakeTexture2D(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFTexture2D; + + destructor TLib3MFImplicitPort.Destroy; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + inherited; end; - function TLib3MFPolymorphicFactoryMakeBuildItem(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBuildItem; + + function TLib3MFImplicitPort.GetIdentifier(): String; + var + bytesNeededIdentifier: Cardinal; + bytesWrittenIdentifier: Cardinal; + bufferIdentifier: array of Char; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + bytesNeededIdentifier:= 0; + bytesWrittenIdentifier:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitPort_GetIdentifierFunc(FHandle, 0, bytesNeededIdentifier, nil)); + SetLength(bufferIdentifier, bytesNeededIdentifier); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitPort_GetIdentifierFunc(FHandle, bytesNeededIdentifier, bytesWrittenIdentifier, @bufferIdentifier[0])); + Result := StrPas(@bufferIdentifier[0]); end; - function TLib3MFPolymorphicFactoryMakeBuildItemIterator(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFBuildItemIterator; + + procedure TLib3MFImplicitPort.SetIdentifier(const AIdentifier: String); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitPort_SetIdentifierFunc(FHandle, PAnsiChar(AIdentifier))); end; - function TLib3MFPolymorphicFactoryMakeSlice(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSlice; + + function TLib3MFImplicitPort.GetDisplayName(): String; + var + bytesNeededDisplayName: Cardinal; + bytesWrittenDisplayName: Cardinal; + bufferDisplayName: array of Char; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + bytesNeededDisplayName:= 0; + bytesWrittenDisplayName:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitPort_GetDisplayNameFunc(FHandle, 0, bytesNeededDisplayName, nil)); + SetLength(bufferDisplayName, bytesNeededDisplayName); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitPort_GetDisplayNameFunc(FHandle, bytesNeededDisplayName, bytesWrittenDisplayName, @bufferDisplayName[0])); + Result := StrPas(@bufferDisplayName[0]); end; - function TLib3MFPolymorphicFactoryMakeSliceStack(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFSliceStack; + + procedure TLib3MFImplicitPort.SetDisplayName(const ADisplayName: String); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitPort_SetDisplayNameFunc(FHandle, PAnsiChar(ADisplayName))); end; - function TLib3MFPolymorphicFactoryMakeConsumer(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFConsumer; + + procedure TLib3MFImplicitPort.SetType(const AImplicitPortType: TLib3MFImplicitPortType); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitPort_SetTypeFunc(FHandle, convertImplicitPortTypeToConst(AImplicitPortType))); end; - function TLib3MFPolymorphicFactoryMakeAccessRight(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFAccessRight; + + function TLib3MFImplicitPort.GetType(): TLib3MFImplicitPortType; + var + ResultImplicitPortType: Integer; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + ResultImplicitPortType := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitPort_GetTypeFunc(FHandle, ResultImplicitPortType)); + Result := convertConstToImplicitPortType(ResultImplicitPortType); end; - function TLib3MFPolymorphicFactoryMakeContentEncryptionParams(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFContentEncryptionParams; + + function TLib3MFImplicitPort.GetReference(): String; + var + bytesNeededReference: Cardinal; + bytesWrittenReference: Cardinal; + bufferReference: array of Char; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + bytesNeededReference:= 0; + bytesWrittenReference:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitPort_GetReferenceFunc(FHandle, 0, bytesNeededReference, nil)); + SetLength(bufferReference, bytesNeededReference); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitPort_GetReferenceFunc(FHandle, bytesNeededReference, bytesWrittenReference, @bufferReference[0])); + Result := StrPas(@bufferReference[0]); end; - function TLib3MFPolymorphicFactoryMakeResourceData(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceData; + + procedure TLib3MFImplicitPort.SetReference(const AReference: String); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitPort_SetReferenceFunc(FHandle, PAnsiChar(AReference))); end; - function TLib3MFPolymorphicFactoryMakeResourceDataGroup(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFResourceDataGroup; + +(************************************************************************************************************************* + Class implementation for Iterator +**************************************************************************************************************************) + + constructor TLib3MFIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + inherited Create(AWrapper, AHandle); end; - function TLib3MFPolymorphicFactoryMakeKeyStore(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFKeyStore; + + destructor TLib3MFIterator.Destroy; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + inherited; end; - function TLib3MFPolymorphicFactoryMakeModel(Wrapper: TLib3MFWrapper; Handle: TLib3MFHandle): TLIB3MFModel; + + function TLib3MFIterator.MoveNext(): Boolean; + var + ResultHasNext: Byte; begin - Result := TLib3MFPolymorphicFactory.Make(Wrapper, Handle); + ResultHasNext := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFIterator_MoveNextFunc(FHandle, ResultHasNext)); + Result := (ResultHasNext <> 0); end; -(************************************************************************************************************************* - Exception implementation -**************************************************************************************************************************) - - constructor ELib3MFException.Create(AErrorCode: TLib3MFResult; AMessage: String); + function TLib3MFIterator.MovePrevious(): Boolean; var - ADescription: String; + ResultHasPrevious: Byte; begin - FErrorCode := AErrorCode; - case FErrorCode of - LIB3MF_ERROR_NOTIMPLEMENTED: ADescription := 'functionality not implemented'; - LIB3MF_ERROR_INVALIDPARAM: ADescription := 'an invalid parameter was passed'; - LIB3MF_ERROR_INVALIDCAST: ADescription := 'a type cast failed'; - LIB3MF_ERROR_BUFFERTOOSMALL: ADescription := 'a provided buffer is too small'; - LIB3MF_ERROR_GENERICEXCEPTION: ADescription := 'a generic exception occurred'; - LIB3MF_ERROR_COULDNOTLOADLIBRARY: ADescription := 'the library could not be loaded'; - LIB3MF_ERROR_COULDNOTFINDLIBRARYEXPORT: ADescription := 'a required exported symbol could not be found in the library'; - LIB3MF_ERROR_INCOMPATIBLEBINARYVERSION: ADescription := 'the version of the binary interface does not match the bindings interface'; - LIB3MF_ERROR_CALCULATIONABORTED: ADescription := 'a calculation has been aborted'; - LIB3MF_ERROR_SHOULDNOTBECALLED: ADescription := 'functionality should not be called'; - LIB3MF_ERROR_READERCLASSUNKNOWN: ADescription := 'the queried reader class is unknown'; - LIB3MF_ERROR_WRITERCLASSUNKNOWN: ADescription := 'the queried writer class is unknown'; - LIB3MF_ERROR_ITERATORINVALIDINDEX: ADescription := 'the current index of an iterator is invalid'; - LIB3MF_ERROR_INVALIDMODELRESOURCE: ADescription := 'no Model Resource has been given'; - LIB3MF_ERROR_RESOURCENOTFOUND: ADescription := 'Resource not found'; - LIB3MF_ERROR_INVALIDMODEL: ADescription := 'A model is invalid'; - LIB3MF_ERROR_INVALIDOBJECT: ADescription := 'An object is invalid'; - LIB3MF_ERROR_INVALIDMESHOBJECT: ADescription := 'A mesh object is invalid'; - LIB3MF_ERROR_INVALIDCOMPONENTSOBJECT: ADescription := 'A components object is invalid'; - LIB3MF_ERROR_INVALIDCOMPONENT: ADescription := 'A component is invalid'; - LIB3MF_ERROR_INVALIDBUILDITEM: ADescription := 'A build item is invalid'; - LIB3MF_ERROR_INVALIDBASEMATERIALGROUP: ADescription := 'A basematerialgroup is invalid'; - LIB3MF_ERROR_INVALIDSLICESTACKRESOURCE: ADescription := 'A slicestack resource is invalid'; - LIB3MF_ERROR_INVALIDTEXTURERESOURCE: ADescription := 'A texture resource is invalid'; - LIB3MF_ERROR_INVALIDCOLORGROUP: ADescription := 'A color group resource is invalid'; - LIB3MF_ERROR_INVALIDTEXTURE2DGROUP: ADescription := 'A texture2d group resource is invalid'; - LIB3MF_ERROR_INVALIDCOMPOSITEMATERIALS: ADescription := 'A composite materials resource is invalid'; - LIB3MF_ERROR_INVALIDMULTIPROPERTYGROUP: ADescription := 'A MultiPropertyGroup resource is invalid'; - LIB3MF_ERROR_INVALIDRESOURCEINDEX: ADescription := 'A resource index is invalid'; - LIB3MF_ERROR_ATTACHMENTNOTFOUND: ADescription := 'Attachment not found'; - LIB3MF_ERROR_FORBIDDENCYCLICREFERENCE: ADescription := 'A component references one of its ancestors'; - LIB3MF_ERROR_INVALIDATTACHMENTSTREAM: ADescription := 'An attachment stream is invalid'; - LIB3MF_ERROR_INVALIDPROPERTYCOUNT: ADescription := 'Invalid property count.'; - LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: ADescription := 'A progress identifier is unknown'; - LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: ADescription := 'An element buffer exceeds its spec limit'; - LIB3MF_ERROR_INVALIDRESOURCE: ADescription := 'A resource is invalid'; - LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: ADescription := 'This object type is not valid for beamlattices'; - LIB3MF_ERROR_INVALIDKEYSTORE: ADescription := 'The keystore object is invalid'; - LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: ADescription := 'The consumer keystore object is invalid'; - LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND: ADescription := 'A consumer has not been found'; - LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: ADescription := 'A resource data has not been found'; - LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: ADescription := 'A Key or Conentent encryption callback has not been registered'; - LIB3MF_ERROR_INVALIDKEYSIZE: ADescription := 'The key siue is invalid'; - else - ADescription := 'unknown'; - end; - - inherited Create(Format('the 3MF Library Error - %s (#%d, %s)', [ ADescription, AErrorCode, AMessage ])); + ResultHasPrevious := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFIterator_MovePreviousFunc(FHandle, ResultHasPrevious)); + Result := (ResultHasPrevious <> 0); end; - constructor ELib3MFException.CreateCustomMessage(AErrorCode: TLib3MFResult; AMessage: String); + function TLib3MFIterator.Count(): QWord; begin - FCustomMessage := AMessage; - FErrorCode := AErrorCode; - inherited Create(Format('%s (%d)', [FCustomMessage, AErrorCode])); + FWrapper.CheckError(Self, FWrapper.Lib3MFIterator_CountFunc(FHandle, Result)); end; (************************************************************************************************************************* - Class implementation for Base + Class implementation for ImplicitPortIterator **************************************************************************************************************************) - constructor TLib3MFBase.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFImplicitPortIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - if not Assigned(AWrapper) then - raise ELib3MFException.Create(LIB3MF_ERROR_INVALIDPARAM, ''); - if not Assigned(AHandle) then - raise ELib3MFException.Create(LIB3MF_ERROR_INVALIDPARAM, ''); - - inherited Create(); - FWrapper := AWrapper; - FHandle := AHandle; + inherited Create(AWrapper, AHandle); end; - destructor TLib3MFBase.Destroy; + destructor TLib3MFImplicitPortIterator.Destroy; begin - FWrapper.Release(self); inherited; end; - function TLib3MFBase.ClassTypeId(): QWord; + function TLib3MFImplicitPortIterator.GetCurrent(): TLib3MFImplicitPort; + var + HPort: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBase_ClassTypeIdFunc(FHandle, Result)); + Result := nil; + HPort := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitPortIterator_GetCurrentFunc(FHandle, HPort)); + if Assigned(HPort) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HPort); end; (************************************************************************************************************************* - Class implementation for Writer + Class implementation for ImplicitNode **************************************************************************************************************************) - constructor TLib3MFWriter.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFImplicitNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFWriter.Destroy; + destructor TLib3MFImplicitNode.Destroy; begin inherited; end; - procedure TLib3MFWriter.WriteToFile(const AFilename: String); + function TLib3MFImplicitNode.GetIdentifier(): String; + var + bytesNeededIdentifier: Cardinal; + bytesWrittenIdentifier: Cardinal; + bufferIdentifier: array of Char; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_WriteToFileFunc(FHandle, PAnsiChar(AFilename))); + bytesNeededIdentifier:= 0; + bytesWrittenIdentifier:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_GetIdentifierFunc(FHandle, 0, bytesNeededIdentifier, nil)); + SetLength(bufferIdentifier, bytesNeededIdentifier); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_GetIdentifierFunc(FHandle, bytesNeededIdentifier, bytesWrittenIdentifier, @bufferIdentifier[0])); + Result := StrPas(@bufferIdentifier[0]); end; - function TLib3MFWriter.GetStreamSize(): QWord; + procedure TLib3MFImplicitNode.SetIdentifier(const AIdentifier: String); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_GetStreamSizeFunc(FHandle, Result)); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_SetIdentifierFunc(FHandle, PAnsiChar(AIdentifier))); end; - procedure TLib3MFWriter.WriteToBuffer(out ABuffer: TByteDynArray); + function TLib3MFImplicitNode.GetDisplayName(): String; var - countNeededBuffer: QWord; - countWrittenBuffer: QWord; + bytesNeededDisplayName: Cardinal; + bytesWrittenDisplayName: Cardinal; + bufferDisplayName: array of Char; + begin + bytesNeededDisplayName:= 0; + bytesWrittenDisplayName:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_GetDisplayNameFunc(FHandle, 0, bytesNeededDisplayName, nil)); + SetLength(bufferDisplayName, bytesNeededDisplayName); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_GetDisplayNameFunc(FHandle, bytesNeededDisplayName, bytesWrittenDisplayName, @bufferDisplayName[0])); + Result := StrPas(@bufferDisplayName[0]); + end; + + procedure TLib3MFImplicitNode.SetDisplayName(const ADisplayName: String); begin - countNeededBuffer:= 0; - countWrittenBuffer:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_WriteToBufferFunc(FHandle, 0, countNeededBuffer, nil)); - SetLength(ABuffer, countNeededBuffer); - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_WriteToBufferFunc(FHandle, countNeededBuffer, countWrittenBuffer, @ABuffer[0])); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_SetDisplayNameFunc(FHandle, PAnsiChar(ADisplayName))); end; - procedure TLib3MFWriter.WriteToCallback(const ATheWriteCallback: PLib3MF_WriteCallback; const ATheSeekCallback: PLib3MF_SeekCallback; const AUserData: Pointer); + function TLib3MFImplicitNode.GetTag(): String; + var + bytesNeededTag: Cardinal; + bytesWrittenTag: Cardinal; + bufferTag: array of Char; begin - if not Assigned(ATheWriteCallback) then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheWriteCallback is a nil value.'); - if not Assigned(ATheSeekCallback) then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheSeekCallback is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_WriteToCallbackFunc(FHandle, ATheWriteCallback, ATheSeekCallback, AUserData)); + bytesNeededTag:= 0; + bytesWrittenTag:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_GetTagFunc(FHandle, 0, bytesNeededTag, nil)); + SetLength(bufferTag, bytesNeededTag); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_GetTagFunc(FHandle, bytesNeededTag, bytesWrittenTag, @bufferTag[0])); + Result := StrPas(@bufferTag[0]); end; - procedure TLib3MFWriter.SetProgressCallback(const AProgressCallback: PLib3MF_ProgressCallback; const AUserData: Pointer); + procedure TLib3MFImplicitNode.SetTag(const ATag: String); begin - if not Assigned(AProgressCallback) then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AProgressCallback is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_SetProgressCallbackFunc(FHandle, AProgressCallback, AUserData)); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_SetTagFunc(FHandle, PAnsiChar(ATag))); end; - function TLib3MFWriter.GetDecimalPrecision(): Cardinal; + function TLib3MFImplicitNode.GetNodeType(): TLib3MFImplicitNodeType; + var + ResultType: Integer; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_GetDecimalPrecisionFunc(FHandle, Result)); + ResultType := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_GetNodeTypeFunc(FHandle, ResultType)); + Result := convertConstToImplicitNodeType(ResultType); end; - procedure TLib3MFWriter.SetDecimalPrecision(const ADecimalPrecision: Cardinal); + function TLib3MFImplicitNode.AddInput(const AIdentifier: String; const ADisplayName: String): TLib3MFImplicitPort; + var + HPort: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_SetDecimalPrecisionFunc(FHandle, ADecimalPrecision)); + Result := nil; + HPort := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_AddInputFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), HPort)); + if Assigned(HPort) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HPort); end; - procedure TLib3MFWriter.SetStrictModeActive(const AStrictModeActive: Boolean); + function TLib3MFImplicitNode.GetInputs(): TLib3MFImplicitPortIterator; + var + HIterator: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_SetStrictModeActiveFunc(FHandle, Ord(AStrictModeActive))); + Result := nil; + HIterator := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_GetInputsFunc(FHandle, HIterator)); + if Assigned(HIterator) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HIterator); end; - function TLib3MFWriter.GetStrictModeActive(): Boolean; + function TLib3MFImplicitNode.AddOutput(const AIdentifier: String; const ADisplayName: String): TLib3MFImplicitPort; var - ResultStrictModeActive: Byte; + HPort: TLib3MFHandle; begin - ResultStrictModeActive := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_GetStrictModeActiveFunc(FHandle, ResultStrictModeActive)); - Result := (ResultStrictModeActive <> 0); + Result := nil; + HPort := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_AddOutputFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), HPort)); + if Assigned(HPort) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HPort); end; - function TLib3MFWriter.GetWarning(const AIndex: Cardinal; out AErrorCode: Cardinal): String; + function TLib3MFImplicitNode.GetOutputs(): TLib3MFImplicitPortIterator; var - bytesNeededWarning: Cardinal; - bytesWrittenWarning: Cardinal; - bufferWarning: array of Char; + HIterator: TLib3MFHandle; begin - bytesNeededWarning:= 0; - bytesWrittenWarning:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_GetWarningFunc(FHandle, AIndex, AErrorCode, 0, bytesNeededWarning, nil)); - SetLength(bufferWarning, bytesNeededWarning); - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_GetWarningFunc(FHandle, AIndex, AErrorCode, bytesNeededWarning, bytesWrittenWarning, @bufferWarning[0])); - Result := StrPas(@bufferWarning[0]); + Result := nil; + HIterator := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_GetOutputsFunc(FHandle, HIterator)); + if Assigned(HIterator) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HIterator); end; - function TLib3MFWriter.GetWarningCount(): Cardinal; + function TLib3MFImplicitNode.FindInput(const AIdentifier: String): TLib3MFImplicitPort; + var + HInput: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_GetWarningCountFunc(FHandle, Result)); + Result := nil; + HInput := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_FindInputFunc(FHandle, PAnsiChar(AIdentifier), HInput)); + if Assigned(HInput) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HInput); end; - procedure TLib3MFWriter.AddKeyWrappingCallback(const AConsumerID: String; const ATheCallback: PLib3MF_KeyWrappingCallback; const AUserData: Pointer); + function TLib3MFImplicitNode.FindOutput(const AIdentifier: String): TLib3MFImplicitPort; + var + HOutput: TLib3MFHandle; begin - if not Assigned(ATheCallback) then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheCallback is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_AddKeyWrappingCallbackFunc(FHandle, PAnsiChar(AConsumerID), ATheCallback, AUserData)); + Result := nil; + HOutput := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_FindOutputFunc(FHandle, PAnsiChar(AIdentifier), HOutput)); + if Assigned(HOutput) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HOutput); end; - procedure TLib3MFWriter.SetContentEncryptionCallback(const ATheCallback: PLib3MF_ContentEncryptionCallback; const AUserData: Pointer); + function TLib3MFImplicitNode.AreTypesValid(): Boolean; + var + ResultValid: Byte; begin - if not Assigned(ATheCallback) then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheCallback is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFWriter_SetContentEncryptionCallbackFunc(FHandle, ATheCallback, AUserData)); + ResultValid := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitNode_AreTypesValidFunc(FHandle, ResultValid)); + Result := (ResultValid <> 0); end; (************************************************************************************************************************* - Class implementation for Reader + Class implementation for OneInputNode **************************************************************************************************************************) - constructor TLib3MFReader.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFOneInputNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFReader.Destroy; + destructor TLib3MFOneInputNode.Destroy; begin inherited; end; - procedure TLib3MFReader.ReadFromFile(const AFilename: String); + function TLib3MFOneInputNode.GetInputA(): TLib3MFImplicitPort; + var + HInput: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFReader_ReadFromFileFunc(FHandle, PAnsiChar(AFilename))); + Result := nil; + HInput := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFOneInputNode_GetInputAFunc(FHandle, HInput)); + if Assigned(HInput) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HInput); end; - procedure TLib3MFReader.ReadFromBuffer(const ABuffer: TByteDynArray); + function TLib3MFOneInputNode.GetOutputResult(): TLib3MFImplicitPort; var - PtrBuffer: PByte; - LenBuffer: QWord; + HResult: TLib3MFHandle; begin - LenBuffer := Length(ABuffer); - if LenBuffer > $FFFFFFFF then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); - if LenBuffer > 0 then - PtrBuffer := @ABuffer[0] - else - PtrBuffer := nil; - - FWrapper.CheckError(Self, FWrapper.Lib3MFReader_ReadFromBufferFunc(FHandle, QWord(LenBuffer), PtrBuffer)); + Result := nil; + HResult := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFOneInputNode_GetOutputResultFunc(FHandle, HResult)); + if Assigned(HResult) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResult); end; - procedure TLib3MFReader.ReadFromCallback(const ATheReadCallback: PLib3MF_ReadCallback; const AStreamSize: QWord; const ATheSeekCallback: PLib3MF_SeekCallback; const AUserData: Pointer); +(************************************************************************************************************************* + Class implementation for SinNode +**************************************************************************************************************************) + + constructor TLib3MFSinNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - if not Assigned(ATheReadCallback) then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheReadCallback is a nil value.'); - if not Assigned(ATheSeekCallback) then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheSeekCallback is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFReader_ReadFromCallbackFunc(FHandle, ATheReadCallback, AStreamSize, ATheSeekCallback, AUserData)); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFReader.SetProgressCallback(const AProgressCallback: PLib3MF_ProgressCallback; const AUserData: Pointer); + destructor TLib3MFSinNode.Destroy; begin - if not Assigned(AProgressCallback) then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AProgressCallback is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFReader_SetProgressCallbackFunc(FHandle, AProgressCallback, AUserData)); + inherited; end; - procedure TLib3MFReader.AddRelationToRead(const ARelationShipType: String); +(************************************************************************************************************************* + Class implementation for CosNode +**************************************************************************************************************************) + + constructor TLib3MFCosNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFReader_AddRelationToReadFunc(FHandle, PAnsiChar(ARelationShipType))); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFReader.RemoveRelationToRead(const ARelationShipType: String); + destructor TLib3MFCosNode.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFReader_RemoveRelationToReadFunc(FHandle, PAnsiChar(ARelationShipType))); + inherited; end; - procedure TLib3MFReader.SetStrictModeActive(const AStrictModeActive: Boolean); +(************************************************************************************************************************* + Class implementation for TanNode +**************************************************************************************************************************) + + constructor TLib3MFTanNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFReader_SetStrictModeActiveFunc(FHandle, Ord(AStrictModeActive))); + inherited Create(AWrapper, AHandle); end; - function TLib3MFReader.GetStrictModeActive(): Boolean; - var - ResultStrictModeActive: Byte; + destructor TLib3MFTanNode.Destroy; begin - ResultStrictModeActive := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFReader_GetStrictModeActiveFunc(FHandle, ResultStrictModeActive)); - Result := (ResultStrictModeActive <> 0); + inherited; end; - function TLib3MFReader.GetWarning(const AIndex: Cardinal; out AErrorCode: Cardinal): String; - var - bytesNeededWarning: Cardinal; - bytesWrittenWarning: Cardinal; - bufferWarning: array of Char; +(************************************************************************************************************************* + Class implementation for ArcSinNode +**************************************************************************************************************************) + + constructor TLib3MFArcSinNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - bytesNeededWarning:= 0; - bytesWrittenWarning:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFReader_GetWarningFunc(FHandle, AIndex, AErrorCode, 0, bytesNeededWarning, nil)); - SetLength(bufferWarning, bytesNeededWarning); - FWrapper.CheckError(Self, FWrapper.Lib3MFReader_GetWarningFunc(FHandle, AIndex, AErrorCode, bytesNeededWarning, bytesWrittenWarning, @bufferWarning[0])); - Result := StrPas(@bufferWarning[0]); + inherited Create(AWrapper, AHandle); end; - function TLib3MFReader.GetWarningCount(): Cardinal; + destructor TLib3MFArcSinNode.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFReader_GetWarningCountFunc(FHandle, Result)); + inherited; end; - procedure TLib3MFReader.AddKeyWrappingCallback(const AConsumerID: String; const ATheCallback: PLib3MF_KeyWrappingCallback; const AUserData: Pointer); +(************************************************************************************************************************* + Class implementation for ArcCosNode +**************************************************************************************************************************) + + constructor TLib3MFArcCosNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - if not Assigned(ATheCallback) then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheCallback is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFReader_AddKeyWrappingCallbackFunc(FHandle, PAnsiChar(AConsumerID), ATheCallback, AUserData)); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFReader.SetContentEncryptionCallback(const ATheCallback: PLib3MF_ContentEncryptionCallback; const AUserData: Pointer); + destructor TLib3MFArcCosNode.Destroy; begin - if not Assigned(ATheCallback) then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheCallback is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFReader_SetContentEncryptionCallbackFunc(FHandle, ATheCallback, AUserData)); + inherited; end; (************************************************************************************************************************* - Class implementation for PackagePart + Class implementation for ArcTanNode **************************************************************************************************************************) - constructor TLib3MFPackagePart.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFArcTanNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFPackagePart.Destroy; + destructor TLib3MFArcTanNode.Destroy; begin inherited; end; - function TLib3MFPackagePart.GetPath(): String; - var - bytesNeededPath: Cardinal; - bytesWrittenPath: Cardinal; - bufferPath: array of Char; +(************************************************************************************************************************* + Class implementation for SinhNode +**************************************************************************************************************************) + + constructor TLib3MFSinhNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - bytesNeededPath:= 0; - bytesWrittenPath:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFPackagePart_GetPathFunc(FHandle, 0, bytesNeededPath, nil)); - SetLength(bufferPath, bytesNeededPath); - FWrapper.CheckError(Self, FWrapper.Lib3MFPackagePart_GetPathFunc(FHandle, bytesNeededPath, bytesWrittenPath, @bufferPath[0])); - Result := StrPas(@bufferPath[0]); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFPackagePart.SetPath(const APath: String); + destructor TLib3MFSinhNode.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFPackagePart_SetPathFunc(FHandle, PAnsiChar(APath))); + inherited; end; (************************************************************************************************************************* - Class implementation for Resource + Class implementation for CoshNode **************************************************************************************************************************) - constructor TLib3MFResource.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFCoshNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFResource.Destroy; + destructor TLib3MFCoshNode.Destroy; begin inherited; end; - function TLib3MFResource.GetResourceID(): Cardinal; - begin - FWrapper.CheckError(Self, FWrapper.Lib3MFResource_GetResourceIDFunc(FHandle, Result)); - end; +(************************************************************************************************************************* + Class implementation for TanhNode +**************************************************************************************************************************) - function TLib3MFResource.GetUniqueResourceID(): Cardinal; + constructor TLib3MFTanhNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFResource_GetUniqueResourceIDFunc(FHandle, Result)); + inherited Create(AWrapper, AHandle); end; - function TLib3MFResource.PackagePart(): TLib3MFPackagePart; - var - HPackagePart: TLib3MFHandle; + destructor TLib3MFTanhNode.Destroy; begin - Result := nil; - HPackagePart := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFResource_PackagePartFunc(FHandle, HPackagePart)); - if Assigned(HPackagePart) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HPackagePart); + inherited; end; - procedure TLib3MFResource.SetPackagePart(const APackagePart: TLib3MFPackagePart); - var - APackagePartHandle: TLib3MFHandle; +(************************************************************************************************************************* + Class implementation for RoundNode +**************************************************************************************************************************) + + constructor TLib3MFRoundNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - if Assigned(APackagePart) then - APackagePartHandle := APackagePart.TheHandle - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'APackagePart is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFResource_SetPackagePartFunc(FHandle, APackagePartHandle)); + inherited Create(AWrapper, AHandle); end; - function TLib3MFResource.GetModelResourceID(): Cardinal; + destructor TLib3MFRoundNode.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFResource_GetModelResourceIDFunc(FHandle, Result)); + inherited; end; (************************************************************************************************************************* - Class implementation for ResourceIterator + Class implementation for CeilNode **************************************************************************************************************************) - constructor TLib3MFResourceIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFCeilNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFResourceIterator.Destroy; + destructor TLib3MFCeilNode.Destroy; begin inherited; end; - function TLib3MFResourceIterator.MoveNext(): Boolean; - var - ResultHasNext: Byte; +(************************************************************************************************************************* + Class implementation for FloorNode +**************************************************************************************************************************) + + constructor TLib3MFFloorNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - ResultHasNext := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFResourceIterator_MoveNextFunc(FHandle, ResultHasNext)); - Result := (ResultHasNext <> 0); + inherited Create(AWrapper, AHandle); end; - function TLib3MFResourceIterator.MovePrevious(): Boolean; - var - ResultHasPrevious: Byte; + destructor TLib3MFFloorNode.Destroy; begin - ResultHasPrevious := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFResourceIterator_MovePreviousFunc(FHandle, ResultHasPrevious)); - Result := (ResultHasPrevious <> 0); + inherited; end; - function TLib3MFResourceIterator.GetCurrent(): TLib3MFResource; - var - HResource: TLib3MFHandle; +(************************************************************************************************************************* + Class implementation for SignNode +**************************************************************************************************************************) + + constructor TLib3MFSignNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - Result := nil; - HResource := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFResourceIterator_GetCurrentFunc(FHandle, HResource)); - if Assigned(HResource) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + inherited Create(AWrapper, AHandle); end; - function TLib3MFResourceIterator.Clone(): TLib3MFResourceIterator; - var - HOutResourceIterator: TLib3MFHandle; + destructor TLib3MFSignNode.Destroy; begin - Result := nil; - HOutResourceIterator := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFResourceIterator_CloneFunc(FHandle, HOutResourceIterator)); - if Assigned(HOutResourceIterator) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HOutResourceIterator); + inherited; end; - function TLib3MFResourceIterator.Count(): QWord; +(************************************************************************************************************************* + Class implementation for FractNode +**************************************************************************************************************************) + + constructor TLib3MFFractNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFResourceIterator_CountFunc(FHandle, Result)); + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFFractNode.Destroy; + begin + inherited; end; (************************************************************************************************************************* - Class implementation for SliceStackIterator + Class implementation for AbsNode **************************************************************************************************************************) - constructor TLib3MFSliceStackIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFAbsNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFSliceStackIterator.Destroy; + destructor TLib3MFAbsNode.Destroy; begin inherited; end; - function TLib3MFSliceStackIterator.GetCurrentSliceStack(): TLib3MFSliceStack; - var - HResource: TLib3MFHandle; - begin - Result := nil; - HResource := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFSliceStackIterator_GetCurrentSliceStackFunc(FHandle, HResource)); - if Assigned(HResource) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); - end; - (************************************************************************************************************************* - Class implementation for ObjectIterator + Class implementation for ExpNode **************************************************************************************************************************) - constructor TLib3MFObjectIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFExpNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFObjectIterator.Destroy; + destructor TLib3MFExpNode.Destroy; begin inherited; end; - function TLib3MFObjectIterator.GetCurrentObject(): TLib3MFObject; - var - HResource: TLib3MFHandle; - begin - Result := nil; - HResource := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFObjectIterator_GetCurrentObjectFunc(FHandle, HResource)); - if Assigned(HResource) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); - end; - (************************************************************************************************************************* - Class implementation for MeshObjectIterator + Class implementation for LogNode **************************************************************************************************************************) - constructor TLib3MFMeshObjectIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFLogNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFMeshObjectIterator.Destroy; + destructor TLib3MFLogNode.Destroy; begin inherited; end; - function TLib3MFMeshObjectIterator.GetCurrentMeshObject(): TLib3MFMeshObject; - var - HResource: TLib3MFHandle; - begin - Result := nil; - HResource := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObjectIterator_GetCurrentMeshObjectFunc(FHandle, HResource)); - if Assigned(HResource) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); - end; - (************************************************************************************************************************* - Class implementation for ComponentsObjectIterator + Class implementation for Log2Node **************************************************************************************************************************) - constructor TLib3MFComponentsObjectIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFLog2Node.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFComponentsObjectIterator.Destroy; + destructor TLib3MFLog2Node.Destroy; begin inherited; end; - function TLib3MFComponentsObjectIterator.GetCurrentComponentsObject(): TLib3MFComponentsObject; - var - HResource: TLib3MFHandle; +(************************************************************************************************************************* + Class implementation for Log10Node +**************************************************************************************************************************) + + constructor TLib3MFLog10Node.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - Result := nil; - HResource := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFComponentsObjectIterator_GetCurrentComponentsObjectFunc(FHandle, HResource)); - if Assigned(HResource) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFLog10Node.Destroy; + begin + inherited; end; (************************************************************************************************************************* - Class implementation for Texture2DIterator + Class implementation for LengthNode **************************************************************************************************************************) - constructor TLib3MFTexture2DIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFLengthNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFTexture2DIterator.Destroy; + destructor TLib3MFLengthNode.Destroy; begin inherited; end; - function TLib3MFTexture2DIterator.GetCurrentTexture2D(): TLib3MFTexture2D; - var - HResource: TLib3MFHandle; +(************************************************************************************************************************* + Class implementation for TransposeNode +**************************************************************************************************************************) + + constructor TLib3MFTransposeNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - Result := nil; - HResource := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DIterator_GetCurrentTexture2DFunc(FHandle, HResource)); - if Assigned(HResource) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFTransposeNode.Destroy; + begin + inherited; end; (************************************************************************************************************************* - Class implementation for BaseMaterialGroupIterator + Class implementation for InverseNode **************************************************************************************************************************) - constructor TLib3MFBaseMaterialGroupIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFInverseNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFBaseMaterialGroupIterator.Destroy; + destructor TLib3MFInverseNode.Destroy; begin inherited; end; - function TLib3MFBaseMaterialGroupIterator.GetCurrentBaseMaterialGroup(): TLib3MFBaseMaterialGroup; - var - HResource: TLib3MFHandle; +(************************************************************************************************************************* + Class implementation for SqrtNode +**************************************************************************************************************************) + + constructor TLib3MFSqrtNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - Result := nil; - HResource := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroupIterator_GetCurrentBaseMaterialGroupFunc(FHandle, HResource)); - if Assigned(HResource) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFSqrtNode.Destroy; + begin + inherited; end; (************************************************************************************************************************* - Class implementation for ColorGroupIterator + Class implementation for ResourceIdNode **************************************************************************************************************************) - constructor TLib3MFColorGroupIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFResourceIdNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFColorGroupIterator.Destroy; + destructor TLib3MFResourceIdNode.Destroy; begin inherited; end; - function TLib3MFColorGroupIterator.GetCurrentColorGroup(): TLib3MFColorGroup; + procedure TLib3MFResourceIdNode.SetResource(const AResource: TLib3MFResource); + var + AResourceHandle: TLib3MFHandle; + begin + if Assigned(AResource) then + AResourceHandle := AResource.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AResource is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFResourceIdNode_SetResourceFunc(FHandle, AResourceHandle)); + end; + + function TLib3MFResourceIdNode.GetResource(): TLib3MFResource; var HResource: TLib3MFHandle; begin Result := nil; HResource := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroupIterator_GetCurrentColorGroupFunc(FHandle, HResource)); + FWrapper.CheckError(Self, FWrapper.Lib3MFResourceIdNode_GetResourceFunc(FHandle, HResource)); if Assigned(HResource) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + end; + + function TLib3MFResourceIdNode.GetOutputValue(): TLib3MFImplicitPort; + var + HValue: TLib3MFHandle; + begin + Result := nil; + HValue := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFResourceIdNode_GetOutputValueFunc(FHandle, HValue)); + if Assigned(HValue) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HValue); end; (************************************************************************************************************************* - Class implementation for Texture2DGroupIterator + Class implementation for TwoInputNode **************************************************************************************************************************) - constructor TLib3MFTexture2DGroupIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFTwoInputNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFTexture2DGroupIterator.Destroy; + destructor TLib3MFTwoInputNode.Destroy; begin inherited; end; - function TLib3MFTexture2DGroupIterator.GetCurrentTexture2DGroup(): TLib3MFTexture2DGroup; + function TLib3MFTwoInputNode.GetInputB(): TLib3MFImplicitPort; var - HResource: TLib3MFHandle; + HB: TLib3MFHandle; begin Result := nil; - HResource := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupFunc(FHandle, HResource)); - if Assigned(HResource) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + HB := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFTwoInputNode_GetInputBFunc(FHandle, HB)); + if Assigned(HB) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HB); end; (************************************************************************************************************************* - Class implementation for CompositeMaterialsIterator + Class implementation for AdditionNode **************************************************************************************************************************) - constructor TLib3MFCompositeMaterialsIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFAdditionNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFCompositeMaterialsIterator.Destroy; + destructor TLib3MFAdditionNode.Destroy; begin inherited; end; - function TLib3MFCompositeMaterialsIterator.GetCurrentCompositeMaterials(): TLib3MFCompositeMaterials; - var - HResource: TLib3MFHandle; - begin - Result := nil; - HResource := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsFunc(FHandle, HResource)); - if Assigned(HResource) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); - end; - (************************************************************************************************************************* - Class implementation for MultiPropertyGroupIterator + Class implementation for SubtractionNode **************************************************************************************************************************) - constructor TLib3MFMultiPropertyGroupIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFSubtractionNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFMultiPropertyGroupIterator.Destroy; + destructor TLib3MFSubtractionNode.Destroy; begin inherited; end; - function TLib3MFMultiPropertyGroupIterator.GetCurrentMultiPropertyGroup(): TLib3MFMultiPropertyGroup; - var - HResource: TLib3MFHandle; +(************************************************************************************************************************* + Class implementation for MultiplicationNode +**************************************************************************************************************************) + + constructor TLib3MFMultiplicationNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - Result := nil; - HResource := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupFunc(FHandle, HResource)); - if Assigned(HResource) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResource); + inherited Create(AWrapper, AHandle); + end; + + destructor TLib3MFMultiplicationNode.Destroy; + begin + inherited; end; (************************************************************************************************************************* - Class implementation for MetaData + Class implementation for DivisionNode **************************************************************************************************************************) - constructor TLib3MFMetaData.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFDivisionNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFMetaData.Destroy; + destructor TLib3MFDivisionNode.Destroy; begin inherited; end; - function TLib3MFMetaData.GetNameSpace(): String; - var - bytesNeededNameSpace: Cardinal; - bytesWrittenNameSpace: Cardinal; - bufferNameSpace: array of Char; - begin - bytesNeededNameSpace:= 0; - bytesWrittenNameSpace:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetNameSpaceFunc(FHandle, 0, bytesNeededNameSpace, nil)); - SetLength(bufferNameSpace, bytesNeededNameSpace); - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetNameSpaceFunc(FHandle, bytesNeededNameSpace, bytesWrittenNameSpace, @bufferNameSpace[0])); - Result := StrPas(@bufferNameSpace[0]); - end; +(************************************************************************************************************************* + Class implementation for DotNode +**************************************************************************************************************************) - procedure TLib3MFMetaData.SetNameSpace(const ANameSpace: String); + constructor TLib3MFDotNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_SetNameSpaceFunc(FHandle, PAnsiChar(ANameSpace))); + inherited Create(AWrapper, AHandle); end; - function TLib3MFMetaData.GetName(): String; - var - bytesNeededName: Cardinal; - bytesWrittenName: Cardinal; - bufferName: array of Char; + destructor TLib3MFDotNode.Destroy; begin - bytesNeededName:= 0; - bytesWrittenName:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetNameFunc(FHandle, 0, bytesNeededName, nil)); - SetLength(bufferName, bytesNeededName); - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetNameFunc(FHandle, bytesNeededName, bytesWrittenName, @bufferName[0])); - Result := StrPas(@bufferName[0]); + inherited; end; - procedure TLib3MFMetaData.SetName(const AName: String); +(************************************************************************************************************************* + Class implementation for CrossNode +**************************************************************************************************************************) + + constructor TLib3MFCrossNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_SetNameFunc(FHandle, PAnsiChar(AName))); + inherited Create(AWrapper, AHandle); end; - function TLib3MFMetaData.GetKey(): String; - var - bytesNeededKey: Cardinal; - bytesWrittenKey: Cardinal; - bufferKey: array of Char; + destructor TLib3MFCrossNode.Destroy; begin - bytesNeededKey:= 0; - bytesWrittenKey:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetKeyFunc(FHandle, 0, bytesNeededKey, nil)); - SetLength(bufferKey, bytesNeededKey); - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetKeyFunc(FHandle, bytesNeededKey, bytesWrittenKey, @bufferKey[0])); - Result := StrPas(@bufferKey[0]); + inherited; end; - function TLib3MFMetaData.GetMustPreserve(): Boolean; - var - ResultMustPreserve: Byte; +(************************************************************************************************************************* + Class implementation for ArcTan2Node +**************************************************************************************************************************) + + constructor TLib3MFArcTan2Node.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - ResultMustPreserve := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetMustPreserveFunc(FHandle, ResultMustPreserve)); - Result := (ResultMustPreserve <> 0); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFMetaData.SetMustPreserve(const AMustPreserve: Boolean); + destructor TLib3MFArcTan2Node.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_SetMustPreserveFunc(FHandle, Ord(AMustPreserve))); + inherited; end; - function TLib3MFMetaData.GetType(): String; - var - bytesNeededType: Cardinal; - bytesWrittenType: Cardinal; - bufferType: array of Char; +(************************************************************************************************************************* + Class implementation for MatVecMultiplicationNode +**************************************************************************************************************************) + + constructor TLib3MFMatVecMultiplicationNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - bytesNeededType:= 0; - bytesWrittenType:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetTypeFunc(FHandle, 0, bytesNeededType, nil)); - SetLength(bufferType, bytesNeededType); - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetTypeFunc(FHandle, bytesNeededType, bytesWrittenType, @bufferType[0])); - Result := StrPas(@bufferType[0]); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFMetaData.SetType(const AType: String); + destructor TLib3MFMatVecMultiplicationNode.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_SetTypeFunc(FHandle, PAnsiChar(AType))); + inherited; end; - function TLib3MFMetaData.GetValue(): String; - var - bytesNeededValue: Cardinal; - bytesWrittenValue: Cardinal; - bufferValue: array of Char; +(************************************************************************************************************************* + Class implementation for MinNode +**************************************************************************************************************************) + + constructor TLib3MFMinNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - bytesNeededValue:= 0; - bytesWrittenValue:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetValueFunc(FHandle, 0, bytesNeededValue, nil)); - SetLength(bufferValue, bytesNeededValue); - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_GetValueFunc(FHandle, bytesNeededValue, bytesWrittenValue, @bufferValue[0])); - Result := StrPas(@bufferValue[0]); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFMetaData.SetValue(const AValue: String); + destructor TLib3MFMinNode.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaData_SetValueFunc(FHandle, PAnsiChar(AValue))); + inherited; end; (************************************************************************************************************************* - Class implementation for MetaDataGroup + Class implementation for MaxNode **************************************************************************************************************************) - constructor TLib3MFMetaDataGroup.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFMaxNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFMetaDataGroup.Destroy; + destructor TLib3MFMaxNode.Destroy; begin inherited; end; - function TLib3MFMetaDataGroup.GetMetaDataCount(): Cardinal; +(************************************************************************************************************************* + Class implementation for FmodNode +**************************************************************************************************************************) + + constructor TLib3MFFmodNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaDataGroup_GetMetaDataCountFunc(FHandle, Result)); + inherited Create(AWrapper, AHandle); end; - function TLib3MFMetaDataGroup.GetMetaData(const AIndex: Cardinal): TLib3MFMetaData; - var - HMetaData: TLib3MFHandle; + destructor TLib3MFFmodNode.Destroy; begin - Result := nil; - HMetaData := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaDataGroup_GetMetaDataFunc(FHandle, AIndex, HMetaData)); - if Assigned(HMetaData) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMetaData); + inherited; end; - function TLib3MFMetaDataGroup.GetMetaDataByKey(const ANameSpace: String; const AName: String): TLib3MFMetaData; - var - HMetaData: TLib3MFHandle; +(************************************************************************************************************************* + Class implementation for ModNode +**************************************************************************************************************************) + + constructor TLib3MFModNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - Result := nil; - HMetaData := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaDataGroup_GetMetaDataByKeyFunc(FHandle, PAnsiChar(ANameSpace), PAnsiChar(AName), HMetaData)); - if Assigned(HMetaData) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMetaData); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFMetaDataGroup.RemoveMetaDataByIndex(const AIndex: Cardinal); + destructor TLib3MFModNode.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaDataGroup_RemoveMetaDataByIndexFunc(FHandle, AIndex)); + inherited; end; - procedure TLib3MFMetaDataGroup.RemoveMetaData(const ATheMetaData: TLib3MFMetaData); - var - ATheMetaDataHandle: TLib3MFHandle; +(************************************************************************************************************************* + Class implementation for PowNode +**************************************************************************************************************************) + + constructor TLib3MFPowNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - if Assigned(ATheMetaData) then - ATheMetaDataHandle := ATheMetaData.TheHandle - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheMetaData is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaDataGroup_RemoveMetaDataFunc(FHandle, ATheMetaDataHandle)); + inherited Create(AWrapper, AHandle); end; - function TLib3MFMetaDataGroup.AddMetaData(const ANameSpace: String; const AName: String; const AValue: String; const AType: String; const AMustPreserve: Boolean): TLib3MFMetaData; - var - HMetaData: TLib3MFHandle; + destructor TLib3MFPowNode.Destroy; begin - Result := nil; - HMetaData := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFMetaDataGroup_AddMetaDataFunc(FHandle, PAnsiChar(ANameSpace), PAnsiChar(AName), PAnsiChar(AValue), PAnsiChar(AType), Ord(AMustPreserve), HMetaData)); - if Assigned(HMetaData) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMetaData); + inherited; end; (************************************************************************************************************************* - Class implementation for Object + Class implementation for SelectNode **************************************************************************************************************************) - constructor TLib3MFObject.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFSelectNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFObject.Destroy; + destructor TLib3MFSelectNode.Destroy; begin inherited; end; - function TLib3MFObject.GetType(): TLib3MFObjectType; + function TLib3MFSelectNode.GetInputB(): TLib3MFImplicitPort; var - ResultObjectType: Integer; + HB: TLib3MFHandle; begin - ResultObjectType := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetTypeFunc(FHandle, ResultObjectType)); - Result := convertConstToObjectType(ResultObjectType); + Result := nil; + HB := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFSelectNode_GetInputBFunc(FHandle, HB)); + if Assigned(HB) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HB); end; - procedure TLib3MFObject.SetType(const AObjectType: TLib3MFObjectType); + function TLib3MFSelectNode.GetInputC(): TLib3MFImplicitPort; + var + HC: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_SetTypeFunc(FHandle, convertObjectTypeToConst(AObjectType))); + Result := nil; + HC := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFSelectNode_GetInputCFunc(FHandle, HC)); + if Assigned(HC) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HC); end; - function TLib3MFObject.GetName(): String; + function TLib3MFSelectNode.GetInputD(): TLib3MFImplicitPort; var - bytesNeededName: Cardinal; - bytesWrittenName: Cardinal; - bufferName: array of Char; + HD: TLib3MFHandle; begin - bytesNeededName:= 0; - bytesWrittenName:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetNameFunc(FHandle, 0, bytesNeededName, nil)); - SetLength(bufferName, bytesNeededName); - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetNameFunc(FHandle, bytesNeededName, bytesWrittenName, @bufferName[0])); - Result := StrPas(@bufferName[0]); + Result := nil; + HD := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFSelectNode_GetInputDFunc(FHandle, HD)); + if Assigned(HD) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HD); end; - procedure TLib3MFObject.SetName(const AName: String); - begin - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_SetNameFunc(FHandle, PAnsiChar(AName))); - end; +(************************************************************************************************************************* + Class implementation for ClampNode +**************************************************************************************************************************) - function TLib3MFObject.GetPartNumber(): String; - var - bytesNeededPartNumber: Cardinal; - bytesWrittenPartNumber: Cardinal; - bufferPartNumber: array of Char; + constructor TLib3MFClampNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - bytesNeededPartNumber:= 0; - bytesWrittenPartNumber:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetPartNumberFunc(FHandle, 0, bytesNeededPartNumber, nil)); - SetLength(bufferPartNumber, bytesNeededPartNumber); - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetPartNumberFunc(FHandle, bytesNeededPartNumber, bytesWrittenPartNumber, @bufferPartNumber[0])); - Result := StrPas(@bufferPartNumber[0]); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFObject.SetPartNumber(const APartNumber: String); + destructor TLib3MFClampNode.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_SetPartNumberFunc(FHandle, PAnsiChar(APartNumber))); + inherited; end; - function TLib3MFObject.IsMeshObject(): Boolean; + function TLib3MFClampNode.GetInputMin(): TLib3MFImplicitPort; var - ResultIsMeshObject: Byte; + HMin: TLib3MFHandle; begin - ResultIsMeshObject := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_IsMeshObjectFunc(FHandle, ResultIsMeshObject)); - Result := (ResultIsMeshObject <> 0); + Result := nil; + HMin := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFClampNode_GetInputMinFunc(FHandle, HMin)); + if Assigned(HMin) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMin); end; - function TLib3MFObject.IsComponentsObject(): Boolean; + function TLib3MFClampNode.GetInputMax(): TLib3MFImplicitPort; var - ResultIsComponentsObject: Byte; + HMax: TLib3MFHandle; begin - ResultIsComponentsObject := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_IsComponentsObjectFunc(FHandle, ResultIsComponentsObject)); - Result := (ResultIsComponentsObject <> 0); + Result := nil; + HMax := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFClampNode_GetInputMaxFunc(FHandle, HMax)); + if Assigned(HMax) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMax); end; - function TLib3MFObject.IsValid(): Boolean; - var - ResultIsValid: Byte; +(************************************************************************************************************************* + Class implementation for ComposeVectorNode +**************************************************************************************************************************) + + constructor TLib3MFComposeVectorNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - ResultIsValid := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_IsValidFunc(FHandle, ResultIsValid)); - Result := (ResultIsValid <> 0); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFObject.SetAttachmentAsThumbnail(const AAttachment: TLib3MFAttachment); - var - AAttachmentHandle: TLib3MFHandle; + destructor TLib3MFComposeVectorNode.Destroy; begin - if Assigned(AAttachment) then - AAttachmentHandle := AAttachment.TheHandle - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AAttachment is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_SetAttachmentAsThumbnailFunc(FHandle, AAttachmentHandle)); + inherited; end; - function TLib3MFObject.GetThumbnailAttachment(): TLib3MFAttachment; + function TLib3MFComposeVectorNode.GetInputX(): TLib3MFImplicitPort; var - HAttachment: TLib3MFHandle; + HX: TLib3MFHandle; begin Result := nil; - HAttachment := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetThumbnailAttachmentFunc(FHandle, HAttachment)); - if Assigned(HAttachment) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HAttachment); + HX := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeVectorNode_GetInputXFunc(FHandle, HX)); + if Assigned(HX) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HX); end; - procedure TLib3MFObject.ClearThumbnailAttachment(); + function TLib3MFComposeVectorNode.GetInputY(): TLib3MFImplicitPort; + var + HY: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_ClearThumbnailAttachmentFunc(FHandle)); + Result := nil; + HY := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeVectorNode_GetInputYFunc(FHandle, HY)); + if Assigned(HY) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HY); end; - function TLib3MFObject.GetOutbox(): TLib3MFBox; + function TLib3MFComposeVectorNode.GetInputZ(): TLib3MFImplicitPort; + var + HZ: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetOutboxFunc(FHandle, @Result)); + Result := nil; + HZ := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeVectorNode_GetInputZFunc(FHandle, HZ)); + if Assigned(HZ) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HZ); end; - function TLib3MFObject.GetUUID(out AHasUUID: Boolean): String; + function TLib3MFComposeVectorNode.GetOutputResult(): TLib3MFImplicitPort; var - ResultHasUUID: Byte; - bytesNeededUUID: Cardinal; - bytesWrittenUUID: Cardinal; - bufferUUID: array of Char; + HResult: TLib3MFHandle; begin - ResultHasUUID := 0; - bytesNeededUUID:= 0; - bytesWrittenUUID:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetUUIDFunc(FHandle, ResultHasUUID, 0, bytesNeededUUID, nil)); - SetLength(bufferUUID, bytesNeededUUID); - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetUUIDFunc(FHandle, ResultHasUUID, bytesNeededUUID, bytesWrittenUUID, @bufferUUID[0])); - AHasUUID := ResultHasUUID <> 0; - Result := StrPas(@bufferUUID[0]); + Result := nil; + HResult := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeVectorNode_GetOutputResultFunc(FHandle, HResult)); + if Assigned(HResult) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResult); end; - procedure TLib3MFObject.SetUUID(const AUUID: String); +(************************************************************************************************************************* + Class implementation for VectorFromScalarNode +**************************************************************************************************************************) + + constructor TLib3MFVectorFromScalarNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_SetUUIDFunc(FHandle, PAnsiChar(AUUID))); + inherited Create(AWrapper, AHandle); end; - function TLib3MFObject.GetMetaDataGroup(): TLib3MFMetaDataGroup; - var - HMetaDataGroup: TLib3MFHandle; + destructor TLib3MFVectorFromScalarNode.Destroy; begin - Result := nil; - HMetaDataGroup := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetMetaDataGroupFunc(FHandle, HMetaDataGroup)); - if Assigned(HMetaDataGroup) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMetaDataGroup); + inherited; end; - procedure TLib3MFObject.SetSlicesMeshResolution(const AMeshResolution: TLib3MFSlicesMeshResolution); +(************************************************************************************************************************* + Class implementation for DecomposeVectorNode +**************************************************************************************************************************) + + constructor TLib3MFDecomposeVectorNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_SetSlicesMeshResolutionFunc(FHandle, convertSlicesMeshResolutionToConst(AMeshResolution))); + inherited Create(AWrapper, AHandle); end; - function TLib3MFObject.GetSlicesMeshResolution(): TLib3MFSlicesMeshResolution; - var - ResultMeshResolution: Integer; + destructor TLib3MFDecomposeVectorNode.Destroy; begin - ResultMeshResolution := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetSlicesMeshResolutionFunc(FHandle, ResultMeshResolution)); - Result := convertConstToSlicesMeshResolution(ResultMeshResolution); + inherited; end; - function TLib3MFObject.HasSlices(const ARecursive: Boolean): Boolean; + function TLib3MFDecomposeVectorNode.GetInputA(): TLib3MFImplicitPort; var - ResultHasSlices: Byte; + HA: TLib3MFHandle; begin - ResultHasSlices := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_HasSlicesFunc(FHandle, Ord(ARecursive), ResultHasSlices)); - Result := (ResultHasSlices <> 0); + Result := nil; + HA := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFDecomposeVectorNode_GetInputAFunc(FHandle, HA)); + if Assigned(HA) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HA); end; - procedure TLib3MFObject.ClearSliceStack(); + function TLib3MFDecomposeVectorNode.GetOutputX(): TLib3MFImplicitPort; + var + HX: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_ClearSliceStackFunc(FHandle)); + Result := nil; + HX := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFDecomposeVectorNode_GetOutputXFunc(FHandle, HX)); + if Assigned(HX) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HX); end; - function TLib3MFObject.GetSliceStack(): TLib3MFSliceStack; + function TLib3MFDecomposeVectorNode.GetOutputY(): TLib3MFImplicitPort; var - HSliceStackInstance: TLib3MFHandle; + HY: TLib3MFHandle; begin Result := nil; - HSliceStackInstance := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_GetSliceStackFunc(FHandle, HSliceStackInstance)); - if Assigned(HSliceStackInstance) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HSliceStackInstance); + HY := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFDecomposeVectorNode_GetOutputYFunc(FHandle, HY)); + if Assigned(HY) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HY); end; - procedure TLib3MFObject.AssignSliceStack(const ASliceStackInstance: TLib3MFSliceStack); + function TLib3MFDecomposeVectorNode.GetOutputZ(): TLib3MFImplicitPort; var - ASliceStackInstanceHandle: TLib3MFHandle; + HZ: TLib3MFHandle; begin - if Assigned(ASliceStackInstance) then - ASliceStackInstanceHandle := ASliceStackInstance.TheHandle - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ASliceStackInstance is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFObject_AssignSliceStackFunc(FHandle, ASliceStackInstanceHandle)); + Result := nil; + HZ := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFDecomposeVectorNode_GetOutputZFunc(FHandle, HZ)); + if Assigned(HZ) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HZ); end; (************************************************************************************************************************* - Class implementation for MeshObject + Class implementation for ComposeMatrixNode **************************************************************************************************************************) - constructor TLib3MFMeshObject.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFComposeMatrixNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFMeshObject.Destroy; + destructor TLib3MFComposeMatrixNode.Destroy; begin inherited; end; - function TLib3MFMeshObject.GetVertexCount(): Cardinal; - begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetVertexCountFunc(FHandle, Result)); - end; - - function TLib3MFMeshObject.GetTriangleCount(): Cardinal; - begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetTriangleCountFunc(FHandle, Result)); - end; - - function TLib3MFMeshObject.GetVertex(const AIndex: Cardinal): TLib3MFPosition; - begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetVertexFunc(FHandle, AIndex, @Result)); - end; - - procedure TLib3MFMeshObject.SetVertex(const AIndex: Cardinal; const ACoordinates: TLib3MFPosition); + function TLib3MFComposeMatrixNode.GetInputM00(): TLib3MFImplicitPort; + var + HM00: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_SetVertexFunc(FHandle, AIndex, @ACoordinates)); + Result := nil; + HM00 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM00Func(FHandle, HM00)); + if Assigned(HM00) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM00); end; - function TLib3MFMeshObject.AddVertex(const ACoordinates: TLib3MFPosition): Cardinal; + function TLib3MFComposeMatrixNode.GetInputM01(): TLib3MFImplicitPort; + var + HM01: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_AddVertexFunc(FHandle, @ACoordinates, Result)); + Result := nil; + HM01 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM01Func(FHandle, HM01)); + if Assigned(HM01) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM01); end; - procedure TLib3MFMeshObject.GetVertices(out AVertices: ArrayOfLib3MFPosition); + function TLib3MFComposeMatrixNode.GetInputM02(): TLib3MFImplicitPort; var - countNeededVertices: QWord; - countWrittenVertices: QWord; + HM02: TLib3MFHandle; begin - countNeededVertices:= 0; - countWrittenVertices:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetVerticesFunc(FHandle, 0, countNeededVertices, nil)); - SetLength(AVertices, countNeededVertices); - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetVerticesFunc(FHandle, countNeededVertices, countWrittenVertices, @AVertices[0])); + Result := nil; + HM02 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM02Func(FHandle, HM02)); + if Assigned(HM02) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM02); end; - function TLib3MFMeshObject.GetTriangle(const AIndex: Cardinal): TLib3MFTriangle; + function TLib3MFComposeMatrixNode.GetInputM03(): TLib3MFImplicitPort; + var + HM03: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetTriangleFunc(FHandle, AIndex, @Result)); + Result := nil; + HM03 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM03Func(FHandle, HM03)); + if Assigned(HM03) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM03); end; - procedure TLib3MFMeshObject.SetTriangle(const AIndex: Cardinal; const AIndices: TLib3MFTriangle); + function TLib3MFComposeMatrixNode.GetInputM10(): TLib3MFImplicitPort; + var + HM10: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_SetTriangleFunc(FHandle, AIndex, @AIndices)); + Result := nil; + HM10 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM10Func(FHandle, HM10)); + if Assigned(HM10) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM10); end; - function TLib3MFMeshObject.AddTriangle(const AIndices: TLib3MFTriangle): Cardinal; + function TLib3MFComposeMatrixNode.GetInputM11(): TLib3MFImplicitPort; + var + HM11: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_AddTriangleFunc(FHandle, @AIndices, Result)); + Result := nil; + HM11 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM11Func(FHandle, HM11)); + if Assigned(HM11) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM11); end; - procedure TLib3MFMeshObject.GetTriangleIndices(out AIndices: ArrayOfLib3MFTriangle); + function TLib3MFComposeMatrixNode.GetInputM12(): TLib3MFImplicitPort; var - countNeededIndices: QWord; - countWrittenIndices: QWord; + HM12: TLib3MFHandle; begin - countNeededIndices:= 0; - countWrittenIndices:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetTriangleIndicesFunc(FHandle, 0, countNeededIndices, nil)); - SetLength(AIndices, countNeededIndices); - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetTriangleIndicesFunc(FHandle, countNeededIndices, countWrittenIndices, @AIndices[0])); + Result := nil; + HM12 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM12Func(FHandle, HM12)); + if Assigned(HM12) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM12); end; - procedure TLib3MFMeshObject.SetObjectLevelProperty(const AUniqueResourceID: Cardinal; const APropertyID: Cardinal); + function TLib3MFComposeMatrixNode.GetInputM13(): TLib3MFImplicitPort; + var + HM13: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_SetObjectLevelPropertyFunc(FHandle, AUniqueResourceID, APropertyID)); + Result := nil; + HM13 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM13Func(FHandle, HM13)); + if Assigned(HM13) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM13); end; - function TLib3MFMeshObject.GetObjectLevelProperty(out AUniqueResourceID: Cardinal; out APropertyID: Cardinal): Boolean; + function TLib3MFComposeMatrixNode.GetInputM20(): TLib3MFImplicitPort; var - ResultHasObjectLevelProperty: Byte; + HM20: TLib3MFHandle; begin - ResultHasObjectLevelProperty := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetObjectLevelPropertyFunc(FHandle, AUniqueResourceID, APropertyID, ResultHasObjectLevelProperty)); - Result := (ResultHasObjectLevelProperty <> 0); + Result := nil; + HM20 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM20Func(FHandle, HM20)); + if Assigned(HM20) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM20); end; - procedure TLib3MFMeshObject.SetTriangleProperties(const AIndex: Cardinal; const AProperties: TLib3MFTriangleProperties); + function TLib3MFComposeMatrixNode.GetInputM21(): TLib3MFImplicitPort; + var + HM21: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_SetTrianglePropertiesFunc(FHandle, AIndex, @AProperties)); + Result := nil; + HM21 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM21Func(FHandle, HM21)); + if Assigned(HM21) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM21); end; - procedure TLib3MFMeshObject.GetTriangleProperties(const AIndex: Cardinal; out AProperty: TLib3MFTriangleProperties); + function TLib3MFComposeMatrixNode.GetInputM22(): TLib3MFImplicitPort; + var + HM22: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetTrianglePropertiesFunc(FHandle, AIndex, @AProperty)); + Result := nil; + HM22 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM22Func(FHandle, HM22)); + if Assigned(HM22) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM22); end; - procedure TLib3MFMeshObject.SetAllTriangleProperties(const APropertiesArray: ArrayOfLib3MFTriangleProperties); + function TLib3MFComposeMatrixNode.GetInputM23(): TLib3MFImplicitPort; var - PtrPropertiesArray: PLib3MFTriangleProperties; - LenPropertiesArray: QWord; + HM23: TLib3MFHandle; begin - LenPropertiesArray := Length(APropertiesArray); - if LenPropertiesArray > $FFFFFFFF then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); - if LenPropertiesArray > 0 then - PtrPropertiesArray := @APropertiesArray[0] - else - PtrPropertiesArray := nil; - - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_SetAllTrianglePropertiesFunc(FHandle, QWord(LenPropertiesArray), PtrPropertiesArray)); + Result := nil; + HM23 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM23Func(FHandle, HM23)); + if Assigned(HM23) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM23); end; - procedure TLib3MFMeshObject.GetAllTriangleProperties(out APropertiesArray: ArrayOfLib3MFTriangleProperties); + function TLib3MFComposeMatrixNode.GetInputM30(): TLib3MFImplicitPort; var - countNeededPropertiesArray: QWord; - countWrittenPropertiesArray: QWord; + HM30: TLib3MFHandle; begin - countNeededPropertiesArray:= 0; - countWrittenPropertiesArray:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetAllTrianglePropertiesFunc(FHandle, 0, countNeededPropertiesArray, nil)); - SetLength(APropertiesArray, countNeededPropertiesArray); - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_GetAllTrianglePropertiesFunc(FHandle, countNeededPropertiesArray, countWrittenPropertiesArray, @APropertiesArray[0])); + Result := nil; + HM30 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM30Func(FHandle, HM30)); + if Assigned(HM30) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM30); end; - procedure TLib3MFMeshObject.ClearAllProperties(); + function TLib3MFComposeMatrixNode.GetInputM31(): TLib3MFImplicitPort; + var + HM31: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_ClearAllPropertiesFunc(FHandle)); + Result := nil; + HM31 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM31Func(FHandle, HM31)); + if Assigned(HM31) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM31); end; - procedure TLib3MFMeshObject.SetGeometry(const AVertices: ArrayOfLib3MFPosition; const AIndices: ArrayOfLib3MFTriangle); + function TLib3MFComposeMatrixNode.GetInputM32(): TLib3MFImplicitPort; var - PtrVertices: PLib3MFPosition; - LenVertices: QWord; - PtrIndices: PLib3MFTriangle; - LenIndices: QWord; + HM32: TLib3MFHandle; begin - LenVertices := Length(AVertices); - if LenVertices > $FFFFFFFF then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); - if LenVertices > 0 then - PtrVertices := @AVertices[0] - else - PtrVertices := nil; - - LenIndices := Length(AIndices); - if LenIndices > $FFFFFFFF then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); - if LenIndices > 0 then - PtrIndices := @AIndices[0] - else - PtrIndices := nil; - - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_SetGeometryFunc(FHandle, QWord(LenVertices), PtrVertices, QWord(LenIndices), PtrIndices)); + Result := nil; + HM32 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM32Func(FHandle, HM32)); + if Assigned(HM32) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM32); end; - function TLib3MFMeshObject.IsManifoldAndOriented(): Boolean; + function TLib3MFComposeMatrixNode.GetInputM33(): TLib3MFImplicitPort; var - ResultIsManifoldAndOriented: Byte; + HM33: TLib3MFHandle; begin - ResultIsManifoldAndOriented := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_IsManifoldAndOrientedFunc(FHandle, ResultIsManifoldAndOriented)); - Result := (ResultIsManifoldAndOriented <> 0); + Result := nil; + HM33 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetInputM33Func(FHandle, HM33)); + if Assigned(HM33) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HM33); end; - function TLib3MFMeshObject.BeamLattice(): TLib3MFBeamLattice; + function TLib3MFComposeMatrixNode.GetOutputResult(): TLib3MFImplicitPort; var - HTheBeamLattice: TLib3MFHandle; + HResult: TLib3MFHandle; begin Result := nil; - HTheBeamLattice := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFMeshObject_BeamLatticeFunc(FHandle, HTheBeamLattice)); - if Assigned(HTheBeamLattice) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheBeamLattice); + HResult := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFComposeMatrixNode_GetOutputResultFunc(FHandle, HResult)); + if Assigned(HResult) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResult); end; (************************************************************************************************************************* - Class implementation for BeamLattice + Class implementation for MatrixFromRowsNode **************************************************************************************************************************) - constructor TLib3MFBeamLattice.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFMatrixFromRowsNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFBeamLattice.Destroy; + destructor TLib3MFMatrixFromRowsNode.Destroy; begin inherited; end; - function TLib3MFBeamLattice.GetMinLength(): Double; + function TLib3MFMatrixFromRowsNode.GetInputA(): TLib3MFImplicitPort; + var + HRow0: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetMinLengthFunc(FHandle, Result)); + Result := nil; + HRow0 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMatrixFromRowsNode_GetInputAFunc(FHandle, HRow0)); + if Assigned(HRow0) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HRow0); end; - procedure TLib3MFBeamLattice.SetMinLength(const AMinLength: Double); + function TLib3MFMatrixFromRowsNode.GetInputB(): TLib3MFImplicitPort; + var + HRow1: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetMinLengthFunc(FHandle, AMinLength)); + Result := nil; + HRow1 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMatrixFromRowsNode_GetInputBFunc(FHandle, HRow1)); + if Assigned(HRow1) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HRow1); end; - procedure TLib3MFBeamLattice.GetClipping(out AClipMode: TLib3MFBeamLatticeClipMode; out AUniqueResourceID: Cardinal); + function TLib3MFMatrixFromRowsNode.GetInputC(): TLib3MFImplicitPort; var - ResultClipMode: Integer; + HRow2: TLib3MFHandle; begin - ResultClipMode := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetClippingFunc(FHandle, ResultClipMode, AUniqueResourceID)); - AClipMode := convertConstToBeamLatticeClipMode(ResultClipMode); + Result := nil; + HRow2 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMatrixFromRowsNode_GetInputCFunc(FHandle, HRow2)); + if Assigned(HRow2) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HRow2); end; - procedure TLib3MFBeamLattice.SetClipping(const AClipMode: TLib3MFBeamLatticeClipMode; const AUniqueResourceID: Cardinal); + function TLib3MFMatrixFromRowsNode.GetInputD(): TLib3MFImplicitPort; + var + HRow3: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetClippingFunc(FHandle, convertBeamLatticeClipModeToConst(AClipMode), AUniqueResourceID)); + Result := nil; + HRow3 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMatrixFromRowsNode_GetInputDFunc(FHandle, HRow3)); + if Assigned(HRow3) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HRow3); end; - function TLib3MFBeamLattice.GetRepresentation(out AUniqueResourceID: Cardinal): Boolean; + function TLib3MFMatrixFromRowsNode.GetOutputResult(): TLib3MFImplicitPort; var - ResultHasRepresentation: Byte; + HResult: TLib3MFHandle; begin - ResultHasRepresentation := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetRepresentationFunc(FHandle, ResultHasRepresentation, AUniqueResourceID)); - Result := (ResultHasRepresentation <> 0); + Result := nil; + HResult := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMatrixFromRowsNode_GetOutputResultFunc(FHandle, HResult)); + if Assigned(HResult) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResult); end; - procedure TLib3MFBeamLattice.SetRepresentation(const AUniqueResourceID: Cardinal); - begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetRepresentationFunc(FHandle, AUniqueResourceID)); - end; +(************************************************************************************************************************* + Class implementation for MatrixFromColumnsNode +**************************************************************************************************************************) - procedure TLib3MFBeamLattice.GetBallOptions(out ABallMode: TLib3MFBeamLatticeBallMode; out ABallRadius: Double); - var - ResultBallMode: Integer; + constructor TLib3MFMatrixFromColumnsNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - ResultBallMode := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBallOptionsFunc(FHandle, ResultBallMode, ABallRadius)); - ABallMode := convertConstToBeamLatticeBallMode(ResultBallMode); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFBeamLattice.SetBallOptions(const ABallMode: TLib3MFBeamLatticeBallMode; const ABallRadius: Double); + destructor TLib3MFMatrixFromColumnsNode.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetBallOptionsFunc(FHandle, convertBeamLatticeBallModeToConst(ABallMode), ABallRadius)); + inherited; end; - function TLib3MFBeamLattice.GetBeamCount(): Cardinal; + function TLib3MFMatrixFromColumnsNode.GetInputA(): TLib3MFImplicitPort; + var + HColumn0: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBeamCountFunc(FHandle, Result)); + Result := nil; + HColumn0 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMatrixFromColumnsNode_GetInputAFunc(FHandle, HColumn0)); + if Assigned(HColumn0) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HColumn0); end; - function TLib3MFBeamLattice.GetBeam(const AIndex: Cardinal): TLib3MFBeam; + function TLib3MFMatrixFromColumnsNode.GetInputB(): TLib3MFImplicitPort; + var + HColumn1: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBeamFunc(FHandle, AIndex, @Result)); + Result := nil; + HColumn1 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMatrixFromColumnsNode_GetInputBFunc(FHandle, HColumn1)); + if Assigned(HColumn1) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HColumn1); end; - function TLib3MFBeamLattice.AddBeam(const ABeamInfo: TLib3MFBeam): Cardinal; + function TLib3MFMatrixFromColumnsNode.GetInputC(): TLib3MFImplicitPort; + var + HColumn2: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_AddBeamFunc(FHandle, @ABeamInfo, Result)); + Result := nil; + HColumn2 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMatrixFromColumnsNode_GetInputCFunc(FHandle, HColumn2)); + if Assigned(HColumn2) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HColumn2); end; - procedure TLib3MFBeamLattice.SetBeam(const AIndex: Cardinal; const ABeamInfo: TLib3MFBeam); + function TLib3MFMatrixFromColumnsNode.GetInputD(): TLib3MFImplicitPort; + var + HColumn3: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetBeamFunc(FHandle, AIndex, @ABeamInfo)); + Result := nil; + HColumn3 := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMatrixFromColumnsNode_GetInputDFunc(FHandle, HColumn3)); + if Assigned(HColumn3) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HColumn3); end; - procedure TLib3MFBeamLattice.SetBeams(const ABeamInfo: ArrayOfLib3MFBeam); + function TLib3MFMatrixFromColumnsNode.GetOutputResult(): TLib3MFImplicitPort; var - PtrBeamInfo: PLib3MFBeam; - LenBeamInfo: QWord; + HResult: TLib3MFHandle; begin - LenBeamInfo := Length(ABeamInfo); - if LenBeamInfo > $FFFFFFFF then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); - if LenBeamInfo > 0 then - PtrBeamInfo := @ABeamInfo[0] - else - PtrBeamInfo := nil; - - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetBeamsFunc(FHandle, QWord(LenBeamInfo), PtrBeamInfo)); + Result := nil; + HResult := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMatrixFromColumnsNode_GetOutputResultFunc(FHandle, HResult)); + if Assigned(HResult) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResult); end; - procedure TLib3MFBeamLattice.GetBeams(out ABeamInfo: ArrayOfLib3MFBeam); - var - countNeededBeamInfo: QWord; - countWrittenBeamInfo: QWord; +(************************************************************************************************************************* + Class implementation for ConstantNode +**************************************************************************************************************************) + + constructor TLib3MFConstantNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - countNeededBeamInfo:= 0; - countWrittenBeamInfo:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBeamsFunc(FHandle, 0, countNeededBeamInfo, nil)); - SetLength(ABeamInfo, countNeededBeamInfo); - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBeamsFunc(FHandle, countNeededBeamInfo, countWrittenBeamInfo, @ABeamInfo[0])); + inherited Create(AWrapper, AHandle); end; - function TLib3MFBeamLattice.GetBallCount(): Cardinal; + destructor TLib3MFConstantNode.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBallCountFunc(FHandle, Result)); + inherited; end; - function TLib3MFBeamLattice.GetBall(const AIndex: Cardinal): TLib3MFBall; + procedure TLib3MFConstantNode.SetConstant(const AValue: Double); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBallFunc(FHandle, AIndex, @Result)); + FWrapper.CheckError(Self, FWrapper.Lib3MFConstantNode_SetConstantFunc(FHandle, AValue)); end; - function TLib3MFBeamLattice.AddBall(const ABallInfo: TLib3MFBall): Cardinal; + function TLib3MFConstantNode.GetConstant(): Double; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_AddBallFunc(FHandle, @ABallInfo, Result)); + FWrapper.CheckError(Self, FWrapper.Lib3MFConstantNode_GetConstantFunc(FHandle, Result)); end; - procedure TLib3MFBeamLattice.SetBall(const AIndex: Cardinal; const ABallInfo: TLib3MFBall); + function TLib3MFConstantNode.GetOutputValue(): TLib3MFImplicitPort; + var + HValue: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetBallFunc(FHandle, AIndex, @ABallInfo)); + Result := nil; + HValue := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFConstantNode_GetOutputValueFunc(FHandle, HValue)); + if Assigned(HValue) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HValue); end; - procedure TLib3MFBeamLattice.SetBalls(const ABallInfo: ArrayOfLib3MFBall); - var - PtrBallInfo: PLib3MFBall; - LenBallInfo: QWord; +(************************************************************************************************************************* + Class implementation for ConstVecNode +**************************************************************************************************************************) + + constructor TLib3MFConstVecNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - LenBallInfo := Length(ABallInfo); - if LenBallInfo > $FFFFFFFF then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); - if LenBallInfo > 0 then - PtrBallInfo := @ABallInfo[0] - else - PtrBallInfo := nil; - - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_SetBallsFunc(FHandle, QWord(LenBallInfo), PtrBallInfo)); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFBeamLattice.GetBalls(out ABallInfo: ArrayOfLib3MFBall); - var - countNeededBallInfo: QWord; - countWrittenBallInfo: QWord; + destructor TLib3MFConstVecNode.Destroy; begin - countNeededBallInfo:= 0; - countWrittenBallInfo:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBallsFunc(FHandle, 0, countNeededBallInfo, nil)); - SetLength(ABallInfo, countNeededBallInfo); - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBallsFunc(FHandle, countNeededBallInfo, countWrittenBallInfo, @ABallInfo[0])); + inherited; end; - function TLib3MFBeamLattice.GetBeamSetCount(): Cardinal; + procedure TLib3MFConstVecNode.SetVector(const AValue: TLib3MFVector); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBeamSetCountFunc(FHandle, Result)); + FWrapper.CheckError(Self, FWrapper.Lib3MFConstVecNode_SetVectorFunc(FHandle, @AValue)); end; - function TLib3MFBeamLattice.AddBeamSet(): TLib3MFBeamSet; - var - HBeamSet: TLib3MFHandle; + function TLib3MFConstVecNode.GetVector(): TLib3MFVector; begin - Result := nil; - HBeamSet := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_AddBeamSetFunc(FHandle, HBeamSet)); - if Assigned(HBeamSet) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HBeamSet); + FWrapper.CheckError(Self, FWrapper.Lib3MFConstVecNode_GetVectorFunc(FHandle, @Result)); end; - function TLib3MFBeamLattice.GetBeamSet(const AIndex: Cardinal): TLib3MFBeamSet; + function TLib3MFConstVecNode.GetOutputVector(): TLib3MFImplicitPort; var - HBeamSet: TLib3MFHandle; + HVector: TLib3MFHandle; begin Result := nil; - HBeamSet := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamLattice_GetBeamSetFunc(FHandle, AIndex, HBeamSet)); - if Assigned(HBeamSet) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HBeamSet); + HVector := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFConstVecNode_GetOutputVectorFunc(FHandle, HVector)); + if Assigned(HVector) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HVector); end; (************************************************************************************************************************* - Class implementation for Component + Class implementation for ConstMatNode **************************************************************************************************************************) - constructor TLib3MFComponent.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFConstMatNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFComponent.Destroy; + destructor TLib3MFConstMatNode.Destroy; begin inherited; end; - function TLib3MFComponent.GetObjectResource(): TLib3MFObject; - var - HObjectResource: TLib3MFHandle; + procedure TLib3MFConstMatNode.SetMatrix(const AValue: TLib3MFMatrix4x4); begin - Result := nil; - HObjectResource := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_GetObjectResourceFunc(FHandle, HObjectResource)); - if Assigned(HObjectResource) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HObjectResource); + FWrapper.CheckError(Self, FWrapper.Lib3MFConstMatNode_SetMatrixFunc(FHandle, @AValue)); end; - function TLib3MFComponent.GetObjectResourceID(): Cardinal; + function TLib3MFConstMatNode.GetMatrix(): TLib3MFMatrix4x4; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_GetObjectResourceIDFunc(FHandle, Result)); + FWrapper.CheckError(Self, FWrapper.Lib3MFConstMatNode_GetMatrixFunc(FHandle, @Result)); end; - function TLib3MFComponent.GetUUID(out AHasUUID: Boolean): String; + function TLib3MFConstMatNode.GetOutputMatrix(): TLib3MFImplicitPort; var - ResultHasUUID: Byte; - bytesNeededUUID: Cardinal; - bytesWrittenUUID: Cardinal; - bufferUUID: array of Char; + HMatrix: TLib3MFHandle; + begin + Result := nil; + HMatrix := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFConstMatNode_GetOutputMatrixFunc(FHandle, HMatrix)); + if Assigned(HMatrix) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMatrix); + end; + +(************************************************************************************************************************* + Class implementation for MeshNode +**************************************************************************************************************************) + + constructor TLib3MFMeshNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - ResultHasUUID := 0; - bytesNeededUUID:= 0; - bytesWrittenUUID:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_GetUUIDFunc(FHandle, ResultHasUUID, 0, bytesNeededUUID, nil)); - SetLength(bufferUUID, bytesNeededUUID); - FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_GetUUIDFunc(FHandle, ResultHasUUID, bytesNeededUUID, bytesWrittenUUID, @bufferUUID[0])); - AHasUUID := ResultHasUUID <> 0; - Result := StrPas(@bufferUUID[0]); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFComponent.SetUUID(const AUUID: String); + destructor TLib3MFMeshNode.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_SetUUIDFunc(FHandle, PAnsiChar(AUUID))); + inherited; end; - function TLib3MFComponent.HasTransform(): Boolean; + function TLib3MFMeshNode.GetInputMesh(): TLib3MFImplicitPort; var - ResultHasTransform: Byte; + HMesh: TLib3MFHandle; begin - ResultHasTransform := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_HasTransformFunc(FHandle, ResultHasTransform)); - Result := (ResultHasTransform <> 0); + Result := nil; + HMesh := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshNode_GetInputMeshFunc(FHandle, HMesh)); + if Assigned(HMesh) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMesh); end; - function TLib3MFComponent.GetTransform(): TLib3MFTransform; + function TLib3MFMeshNode.GetInputPos(): TLib3MFImplicitPort; + var + HPos: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_GetTransformFunc(FHandle, @Result)); + Result := nil; + HPos := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshNode_GetInputPosFunc(FHandle, HPos)); + if Assigned(HPos) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HPos); end; - procedure TLib3MFComponent.SetTransform(const ATransform: TLib3MFTransform); + function TLib3MFMeshNode.GetOutputDistance(): TLib3MFImplicitPort; + var + HDistance: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFComponent_SetTransformFunc(FHandle, @ATransform)); + Result := nil; + HDistance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFMeshNode_GetOutputDistanceFunc(FHandle, HDistance)); + if Assigned(HDistance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HDistance); end; (************************************************************************************************************************* - Class implementation for ComponentsObject + Class implementation for UnsignedMeshNode **************************************************************************************************************************) - constructor TLib3MFComponentsObject.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFUnsignedMeshNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFComponentsObject.Destroy; + destructor TLib3MFUnsignedMeshNode.Destroy; begin inherited; end; - function TLib3MFComponentsObject.AddComponent(const AObjectResource: TLib3MFObject; const ATransform: TLib3MFTransform): TLib3MFComponent; + function TLib3MFUnsignedMeshNode.GetInputMesh(): TLib3MFImplicitPort; var - AObjectResourceHandle: TLib3MFHandle; - HComponentInstance: TLib3MFHandle; + HMesh: TLib3MFHandle; begin - if Assigned(AObjectResource) then - AObjectResourceHandle := AObjectResource.TheHandle - else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AObjectResource is a nil value.'); Result := nil; - HComponentInstance := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFComponentsObject_AddComponentFunc(FHandle, AObjectResourceHandle, @ATransform, HComponentInstance)); - if Assigned(HComponentInstance) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HComponentInstance); + HMesh := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFUnsignedMeshNode_GetInputMeshFunc(FHandle, HMesh)); + if Assigned(HMesh) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMesh); end; - function TLib3MFComponentsObject.GetComponent(const AIndex: Cardinal): TLib3MFComponent; + function TLib3MFUnsignedMeshNode.GetInputPos(): TLib3MFImplicitPort; var - HComponentInstance: TLib3MFHandle; + HPos: TLib3MFHandle; begin Result := nil; - HComponentInstance := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFComponentsObject_GetComponentFunc(FHandle, AIndex, HComponentInstance)); - if Assigned(HComponentInstance) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HComponentInstance); + HPos := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFUnsignedMeshNode_GetInputPosFunc(FHandle, HPos)); + if Assigned(HPos) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HPos); end; - function TLib3MFComponentsObject.GetComponentCount(): Cardinal; + function TLib3MFUnsignedMeshNode.GetOutputDistance(): TLib3MFImplicitPort; + var + HDistance: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFComponentsObject_GetComponentCountFunc(FHandle, Result)); + Result := nil; + HDistance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFUnsignedMeshNode_GetOutputDistanceFunc(FHandle, HDistance)); + if Assigned(HDistance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HDistance); end; (************************************************************************************************************************* - Class implementation for BeamSet + Class implementation for FunctionCallNode **************************************************************************************************************************) - constructor TLib3MFBeamSet.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFFunctionCallNode.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFBeamSet.Destroy; + destructor TLib3MFFunctionCallNode.Destroy; begin inherited; end; - procedure TLib3MFBeamSet.SetName(const AName: String); + function TLib3MFFunctionCallNode.GetInputFunctionID(): TLib3MFImplicitPort; + var + HFunction: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_SetNameFunc(FHandle, PAnsiChar(AName))); + Result := nil; + HFunction := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionCallNode_GetInputFunctionIDFunc(FHandle, HFunction)); + if Assigned(HFunction) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HFunction); end; - function TLib3MFBeamSet.GetName(): String; - var - bytesNeededName: Cardinal; - bytesWrittenName: Cardinal; - bufferName: array of Char; +(************************************************************************************************************************* + Class implementation for NodeIterator +**************************************************************************************************************************) + + constructor TLib3MFNodeIterator.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - bytesNeededName:= 0; - bytesWrittenName:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetNameFunc(FHandle, 0, bytesNeededName, nil)); - SetLength(bufferName, bytesNeededName); - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetNameFunc(FHandle, bytesNeededName, bytesWrittenName, @bufferName[0])); - Result := StrPas(@bufferName[0]); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFBeamSet.SetIdentifier(const AIdentifier: String); + destructor TLib3MFNodeIterator.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_SetIdentifierFunc(FHandle, PAnsiChar(AIdentifier))); + inherited; end; - function TLib3MFBeamSet.GetIdentifier(): String; + function TLib3MFNodeIterator.GetCurrent(): TLib3MFImplicitNode; var - bytesNeededIdentifier: Cardinal; - bytesWrittenIdentifier: Cardinal; - bufferIdentifier: array of Char; + HNode: TLib3MFHandle; begin - bytesNeededIdentifier:= 0; - bytesWrittenIdentifier:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetIdentifierFunc(FHandle, 0, bytesNeededIdentifier, nil)); - SetLength(bufferIdentifier, bytesNeededIdentifier); - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetIdentifierFunc(FHandle, bytesNeededIdentifier, bytesWrittenIdentifier, @bufferIdentifier[0])); - Result := StrPas(@bufferIdentifier[0]); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFNodeIterator_GetCurrentFunc(FHandle, HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFBeamSet.GetReferenceCount(): Cardinal; +(************************************************************************************************************************* + Class implementation for Function +**************************************************************************************************************************) + + constructor TLib3MFFunction.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetReferenceCountFunc(FHandle, Result)); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFBeamSet.SetReferences(const AReferences: TCardinalDynArray); + destructor TLib3MFFunction.Destroy; + begin + inherited; + end; + + function TLib3MFFunction.GetDisplayName(): String; var - PtrReferences: PCardinal; - LenReferences: QWord; + bytesNeededDisplayName: Cardinal; + bytesWrittenDisplayName: Cardinal; + bufferDisplayName: array of Char; begin - LenReferences := Length(AReferences); - if LenReferences > $FFFFFFFF then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); - if LenReferences > 0 then - PtrReferences := @AReferences[0] - else - PtrReferences := nil; - - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_SetReferencesFunc(FHandle, QWord(LenReferences), PtrReferences)); + bytesNeededDisplayName:= 0; + bytesWrittenDisplayName:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFFunction_GetDisplayNameFunc(FHandle, 0, bytesNeededDisplayName, nil)); + SetLength(bufferDisplayName, bytesNeededDisplayName); + FWrapper.CheckError(Self, FWrapper.Lib3MFFunction_GetDisplayNameFunc(FHandle, bytesNeededDisplayName, bytesWrittenDisplayName, @bufferDisplayName[0])); + Result := StrPas(@bufferDisplayName[0]); end; - procedure TLib3MFBeamSet.GetReferences(out AReferences: TCardinalDynArray); + procedure TLib3MFFunction.SetDisplayName(const ADisplayName: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFFunction_SetDisplayNameFunc(FHandle, PAnsiChar(ADisplayName))); + end; + + function TLib3MFFunction.AddInput(const AIdentifier: String; const ADisplayName: String; const AType: TLib3MFImplicitPortType): TLib3MFImplicitPort; var - countNeededReferences: QWord; - countWrittenReferences: QWord; + HPort: TLib3MFHandle; begin - countNeededReferences:= 0; - countWrittenReferences:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetReferencesFunc(FHandle, 0, countNeededReferences, nil)); - SetLength(AReferences, countNeededReferences); - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetReferencesFunc(FHandle, countNeededReferences, countWrittenReferences, @AReferences[0])); + Result := nil; + HPort := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFFunction_AddInputFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), convertImplicitPortTypeToConst(AType), HPort)); + if Assigned(HPort) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HPort); end; - function TLib3MFBeamSet.GetBallReferenceCount(): Cardinal; + function TLib3MFFunction.GetInputs(): TLib3MFImplicitPortIterator; + var + HIterator: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetBallReferenceCountFunc(FHandle, Result)); + Result := nil; + HIterator := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFFunction_GetInputsFunc(FHandle, HIterator)); + if Assigned(HIterator) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HIterator); end; - procedure TLib3MFBeamSet.SetBallReferences(const ABallReferences: TCardinalDynArray); + procedure TLib3MFFunction.RemoveInput(const AInput: TLib3MFImplicitPort); var - PtrBallReferences: PCardinal; - LenBallReferences: QWord; + AInputHandle: TLib3MFHandle; begin - LenBallReferences := Length(ABallReferences); - if LenBallReferences > $FFFFFFFF then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); - if LenBallReferences > 0 then - PtrBallReferences := @ABallReferences[0] + if Assigned(AInput) then + AInputHandle := AInput.TheHandle else - PtrBallReferences := nil; - - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_SetBallReferencesFunc(FHandle, QWord(LenBallReferences), PtrBallReferences)); + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AInput is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFFunction_RemoveInputFunc(FHandle, AInputHandle)); end; - procedure TLib3MFBeamSet.GetBallReferences(out ABallReferences: TCardinalDynArray); + function TLib3MFFunction.AddOutput(const AIdentifier: String; const ADisplayName: String; const AType: TLib3MFImplicitPortType): TLib3MFImplicitPort; var - countNeededBallReferences: QWord; - countWrittenBallReferences: QWord; + HPort: TLib3MFHandle; begin - countNeededBallReferences:= 0; - countWrittenBallReferences:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetBallReferencesFunc(FHandle, 0, countNeededBallReferences, nil)); - SetLength(ABallReferences, countNeededBallReferences); - FWrapper.CheckError(Self, FWrapper.Lib3MFBeamSet_GetBallReferencesFunc(FHandle, countNeededBallReferences, countWrittenBallReferences, @ABallReferences[0])); + Result := nil; + HPort := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFFunction_AddOutputFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), convertImplicitPortTypeToConst(AType), HPort)); + if Assigned(HPort) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HPort); end; -(************************************************************************************************************************* - Class implementation for BaseMaterialGroup -**************************************************************************************************************************) - - constructor TLib3MFBaseMaterialGroup.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + function TLib3MFFunction.GetOutputs(): TLib3MFImplicitPortIterator; + var + HIterator: TLib3MFHandle; begin - inherited Create(AWrapper, AHandle); + Result := nil; + HIterator := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFFunction_GetOutputsFunc(FHandle, HIterator)); + if Assigned(HIterator) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HIterator); end; - destructor TLib3MFBaseMaterialGroup.Destroy; + procedure TLib3MFFunction.RemoveOutput(const AOutput: TLib3MFImplicitPort); + var + AOutputHandle: TLib3MFHandle; begin - inherited; + if Assigned(AOutput) then + AOutputHandle := AOutput.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AOutput is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFFunction_RemoveOutputFunc(FHandle, AOutputHandle)); end; - function TLib3MFBaseMaterialGroup.GetCount(): Cardinal; + function TLib3MFFunction.FindInput(const AIdentifier: String): TLib3MFImplicitPort; + var + HInput: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_GetCountFunc(FHandle, Result)); + Result := nil; + HInput := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFFunction_FindInputFunc(FHandle, PAnsiChar(AIdentifier), HInput)); + if Assigned(HInput) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HInput); end; - procedure TLib3MFBaseMaterialGroup.GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + function TLib3MFFunction.FindOutput(const AIdentifier: String): TLib3MFImplicitPort; var - countNeededPropertyIDs: QWord; - countWrittenPropertyIDs: QWord; + HOutput: TLib3MFHandle; begin - countNeededPropertyIDs:= 0; - countWrittenPropertyIDs:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_GetAllPropertyIDsFunc(FHandle, 0, countNeededPropertyIDs, nil)); - SetLength(APropertyIDs, countNeededPropertyIDs); - FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_GetAllPropertyIDsFunc(FHandle, countNeededPropertyIDs, countWrittenPropertyIDs, @APropertyIDs[0])); + Result := nil; + HOutput := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFFunction_FindOutputFunc(FHandle, PAnsiChar(AIdentifier), HOutput)); + if Assigned(HOutput) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HOutput); end; - function TLib3MFBaseMaterialGroup.AddMaterial(const AName: String; const ADisplayColor: TLib3MFColor): Cardinal; +(************************************************************************************************************************* + Class implementation for ImplicitFunction +**************************************************************************************************************************) + + constructor TLib3MFImplicitFunction.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_AddMaterialFunc(FHandle, PAnsiChar(AName), @ADisplayColor, Result)); + inherited Create(AWrapper, AHandle); end; - procedure TLib3MFBaseMaterialGroup.RemoveMaterial(const APropertyID: Cardinal); + destructor TLib3MFImplicitFunction.Destroy; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_RemoveMaterialFunc(FHandle, APropertyID)); + inherited; end; - function TLib3MFBaseMaterialGroup.GetName(const APropertyID: Cardinal): String; + function TLib3MFImplicitFunction.GetIdentifier(): String; var - bytesNeededName: Cardinal; - bytesWrittenName: Cardinal; - bufferName: array of Char; + bytesNeededIdentifier: Cardinal; + bytesWrittenIdentifier: Cardinal; + bufferIdentifier: array of Char; begin - bytesNeededName:= 0; - bytesWrittenName:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_GetNameFunc(FHandle, APropertyID, 0, bytesNeededName, nil)); - SetLength(bufferName, bytesNeededName); - FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_GetNameFunc(FHandle, APropertyID, bytesNeededName, bytesWrittenName, @bufferName[0])); - Result := StrPas(@bufferName[0]); + bytesNeededIdentifier:= 0; + bytesWrittenIdentifier:= 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_GetIdentifierFunc(FHandle, 0, bytesNeededIdentifier, nil)); + SetLength(bufferIdentifier, bytesNeededIdentifier); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_GetIdentifierFunc(FHandle, bytesNeededIdentifier, bytesWrittenIdentifier, @bufferIdentifier[0])); + Result := StrPas(@bufferIdentifier[0]); end; - procedure TLib3MFBaseMaterialGroup.SetName(const APropertyID: Cardinal; const AName: String); + procedure TLib3MFImplicitFunction.SetIdentifier(const AIdentifier: String); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_SetNameFunc(FHandle, APropertyID, PAnsiChar(AName))); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_SetIdentifierFunc(FHandle, PAnsiChar(AIdentifier))); end; - procedure TLib3MFBaseMaterialGroup.SetDisplayColor(const APropertyID: Cardinal; const ATheColor: TLib3MFColor); + function TLib3MFImplicitFunction.AddNode(const ANodeType: TLib3MFImplicitNodeType; const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFImplicitNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_SetDisplayColorFunc(FHandle, APropertyID, @ATheColor)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddNodeFunc(FHandle, convertImplicitNodeTypeToConst(ANodeType), PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFBaseMaterialGroup.GetDisplayColor(const APropertyID: Cardinal): TLib3MFColor; + function TLib3MFImplicitFunction.AddSinNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFSinNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFBaseMaterialGroup_GetDisplayColorFunc(FHandle, APropertyID, @Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddSinNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; -(************************************************************************************************************************* - Class implementation for ColorGroup -**************************************************************************************************************************) + function TLib3MFImplicitFunction.AddCosNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFCosNode; + var + HNode: TLib3MFHandle; + begin + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddCosNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); + end; - constructor TLib3MFColorGroup.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + function TLib3MFImplicitFunction.AddTanNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFTanNode; + var + HNode: TLib3MFHandle; begin - inherited Create(AWrapper, AHandle); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddTanNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - destructor TLib3MFColorGroup.Destroy; + function TLib3MFImplicitFunction.AddArcSinNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFArcSinNode; + var + HNode: TLib3MFHandle; begin - inherited; + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddArcSinNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFColorGroup.GetCount(): Cardinal; + function TLib3MFImplicitFunction.AddArcCosNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFArcCosNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_GetCountFunc(FHandle, Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddArcCosNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFColorGroup.GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + function TLib3MFImplicitFunction.AddArcTan2Node(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFArcTan2Node; var - countNeededPropertyIDs: QWord; - countWrittenPropertyIDs: QWord; + HNode: TLib3MFHandle; begin - countNeededPropertyIDs:= 0; - countWrittenPropertyIDs:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_GetAllPropertyIDsFunc(FHandle, 0, countNeededPropertyIDs, nil)); - SetLength(APropertyIDs, countNeededPropertyIDs); - FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_GetAllPropertyIDsFunc(FHandle, countNeededPropertyIDs, countWrittenPropertyIDs, @APropertyIDs[0])); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddArcTan2NodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFColorGroup.AddColor(const ATheColor: TLib3MFColor): Cardinal; + function TLib3MFImplicitFunction.AddSinhNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFSinhNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_AddColorFunc(FHandle, @ATheColor, Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddSinhNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFColorGroup.RemoveColor(const APropertyID: Cardinal); + function TLib3MFImplicitFunction.AddCoshNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFCoshNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_RemoveColorFunc(FHandle, APropertyID)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddCoshNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFColorGroup.SetColor(const APropertyID: Cardinal; const ATheColor: TLib3MFColor); + function TLib3MFImplicitFunction.AddTanhNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFTanhNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_SetColorFunc(FHandle, APropertyID, @ATheColor)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddTanhNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFColorGroup.GetColor(const APropertyID: Cardinal): TLib3MFColor; + function TLib3MFImplicitFunction.AddRoundNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFRoundNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFColorGroup_GetColorFunc(FHandle, APropertyID, @Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddRoundNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; -(************************************************************************************************************************* - Class implementation for Texture2DGroup -**************************************************************************************************************************) + function TLib3MFImplicitFunction.AddCeilNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFCeilNode; + var + HNode: TLib3MFHandle; + begin + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddCeilNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); + end; - constructor TLib3MFTexture2DGroup.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + function TLib3MFImplicitFunction.AddFloorNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFFloorNode; + var + HNode: TLib3MFHandle; begin - inherited Create(AWrapper, AHandle); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddFloorNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - destructor TLib3MFTexture2DGroup.Destroy; + function TLib3MFImplicitFunction.AddSignNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFSignNode; + var + HNode: TLib3MFHandle; begin - inherited; + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddSignNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFTexture2DGroup.GetCount(): Cardinal; + function TLib3MFImplicitFunction.AddFractNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFFractNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_GetCountFunc(FHandle, Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddFractNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFTexture2DGroup.GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + function TLib3MFImplicitFunction.AddAbsNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFAbsNode; var - countNeededPropertyIDs: QWord; - countWrittenPropertyIDs: QWord; + HNode: TLib3MFHandle; begin - countNeededPropertyIDs:= 0; - countWrittenPropertyIDs:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_GetAllPropertyIDsFunc(FHandle, 0, countNeededPropertyIDs, nil)); - SetLength(APropertyIDs, countNeededPropertyIDs); - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_GetAllPropertyIDsFunc(FHandle, countNeededPropertyIDs, countWrittenPropertyIDs, @APropertyIDs[0])); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddAbsNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFTexture2DGroup.AddTex2Coord(const AUVCoordinate: TLib3MFTex2Coord): Cardinal; + function TLib3MFImplicitFunction.AddExpNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFExpNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_AddTex2CoordFunc(FHandle, @AUVCoordinate, Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddExpNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFTexture2DGroup.GetTex2Coord(const APropertyID: Cardinal): TLib3MFTex2Coord; + function TLib3MFImplicitFunction.AddLogNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFLogNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_GetTex2CoordFunc(FHandle, APropertyID, @Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddLogNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFTexture2DGroup.RemoveTex2Coord(const APropertyID: Cardinal); + function TLib3MFImplicitFunction.AddLog2Node(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFLog2Node; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_RemoveTex2CoordFunc(FHandle, APropertyID)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddLog2NodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFTexture2DGroup.GetTexture2D(): TLib3MFTexture2D; + function TLib3MFImplicitFunction.AddLog10Node(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFLog10Node; var - HTexture2DInstance: TLib3MFHandle; + HNode: TLib3MFHandle; begin Result := nil; - HTexture2DInstance := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2DGroup_GetTexture2DFunc(FHandle, HTexture2DInstance)); - if Assigned(HTexture2DInstance) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTexture2DInstance); + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddLog10NodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; -(************************************************************************************************************************* - Class implementation for CompositeMaterials -**************************************************************************************************************************) - - constructor TLib3MFCompositeMaterials.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + function TLib3MFImplicitFunction.AddLengthNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFLengthNode; + var + HNode: TLib3MFHandle; begin - inherited Create(AWrapper, AHandle); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddLengthNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - destructor TLib3MFCompositeMaterials.Destroy; + function TLib3MFImplicitFunction.AddTransposeNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFTransposeNode; + var + HNode: TLib3MFHandle; begin - inherited; + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddTransposeNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFCompositeMaterials.GetCount(): Cardinal; + function TLib3MFImplicitFunction.InverseNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFInverseNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_GetCountFunc(FHandle, Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_InverseNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFCompositeMaterials.GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + function TLib3MFImplicitFunction.AddSqrtNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFSqrtNode; var - countNeededPropertyIDs: QWord; - countWrittenPropertyIDs: QWord; + HNode: TLib3MFHandle; begin - countNeededPropertyIDs:= 0; - countWrittenPropertyIDs:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_GetAllPropertyIDsFunc(FHandle, 0, countNeededPropertyIDs, nil)); - SetLength(APropertyIDs, countNeededPropertyIDs); - FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_GetAllPropertyIDsFunc(FHandle, countNeededPropertyIDs, countWrittenPropertyIDs, @APropertyIDs[0])); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddSqrtNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFCompositeMaterials.GetBaseMaterialGroup(): TLib3MFBaseMaterialGroup; + function TLib3MFImplicitFunction.AddResourceIdNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFResourceIdNode; var - HBaseMaterialGroupInstance: TLib3MFHandle; + HNode: TLib3MFHandle; begin Result := nil; - HBaseMaterialGroupInstance := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_GetBaseMaterialGroupFunc(FHandle, HBaseMaterialGroupInstance)); - if Assigned(HBaseMaterialGroupInstance) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HBaseMaterialGroupInstance); + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddResourceIdNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFCompositeMaterials.AddComposite(const AComposite: ArrayOfLib3MFCompositeConstituent): Cardinal; + function TLib3MFImplicitFunction.AddAdditionNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFAdditionNode; var - PtrComposite: PLib3MFCompositeConstituent; - LenComposite: QWord; + HNode: TLib3MFHandle; begin - LenComposite := Length(AComposite); - if LenComposite > $FFFFFFFF then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); - if LenComposite > 0 then - PtrComposite := @AComposite[0] - else - PtrComposite := nil; - - FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_AddCompositeFunc(FHandle, QWord(LenComposite), PtrComposite, Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddAdditionNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFCompositeMaterials.RemoveComposite(const APropertyID: Cardinal); + function TLib3MFImplicitFunction.AddSubtractionNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFSubtractionNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_RemoveCompositeFunc(FHandle, APropertyID)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddSubtractionNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFCompositeMaterials.GetComposite(const APropertyID: Cardinal; out AComposite: ArrayOfLib3MFCompositeConstituent); + function TLib3MFImplicitFunction.AddMultiplicationNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFMultiplicationNode; var - countNeededComposite: QWord; - countWrittenComposite: QWord; + HNode: TLib3MFHandle; begin - countNeededComposite:= 0; - countWrittenComposite:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_GetCompositeFunc(FHandle, APropertyID, 0, countNeededComposite, nil)); - SetLength(AComposite, countNeededComposite); - FWrapper.CheckError(Self, FWrapper.Lib3MFCompositeMaterials_GetCompositeFunc(FHandle, APropertyID, countNeededComposite, countWrittenComposite, @AComposite[0])); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddMultiplicationNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; -(************************************************************************************************************************* - Class implementation for MultiPropertyGroup -**************************************************************************************************************************) - - constructor TLib3MFMultiPropertyGroup.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + function TLib3MFImplicitFunction.AddDivisionNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFDivisionNode; + var + HNode: TLib3MFHandle; begin - inherited Create(AWrapper, AHandle); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddDivisionNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - destructor TLib3MFMultiPropertyGroup.Destroy; + function TLib3MFImplicitFunction.AddDotNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFDotNode; + var + HNode: TLib3MFHandle; begin - inherited; + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddDotNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFMultiPropertyGroup.GetCount(): Cardinal; + function TLib3MFImplicitFunction.AddCrossNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFCrossNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetCountFunc(FHandle, Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddCrossNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFMultiPropertyGroup.GetAllPropertyIDs(out APropertyIDs: TCardinalDynArray); + function TLib3MFImplicitFunction.AddMatVecMultiplicationNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFMatVecMultiplicationNode; var - countNeededPropertyIDs: QWord; - countWrittenPropertyIDs: QWord; + HNode: TLib3MFHandle; begin - countNeededPropertyIDs:= 0; - countWrittenPropertyIDs:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetAllPropertyIDsFunc(FHandle, 0, countNeededPropertyIDs, nil)); - SetLength(APropertyIDs, countNeededPropertyIDs); - FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetAllPropertyIDsFunc(FHandle, countNeededPropertyIDs, countWrittenPropertyIDs, @APropertyIDs[0])); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddMatVecMultiplicationNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFMultiPropertyGroup.AddMultiProperty(const APropertyIDs: TCardinalDynArray): Cardinal; + function TLib3MFImplicitFunction.AddMinNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFMinNode; var - PtrPropertyIDs: PCardinal; - LenPropertyIDs: QWord; + HNode: TLib3MFHandle; begin - LenPropertyIDs := Length(APropertyIDs); - if LenPropertyIDs > $FFFFFFFF then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); - if LenPropertyIDs > 0 then - PtrPropertyIDs := @APropertyIDs[0] - else - PtrPropertyIDs := nil; - - FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_AddMultiPropertyFunc(FHandle, QWord(LenPropertyIDs), PtrPropertyIDs, Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddMinNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFMultiPropertyGroup.SetMultiProperty(const APropertyID: Cardinal; const APropertyIDs: TCardinalDynArray); + function TLib3MFImplicitFunction.AddMaxNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFMaxNode; var - PtrPropertyIDs: PCardinal; - LenPropertyIDs: QWord; + HNode: TLib3MFHandle; begin - LenPropertyIDs := Length(APropertyIDs); - if LenPropertyIDs > $FFFFFFFF then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); - if LenPropertyIDs > 0 then - PtrPropertyIDs := @APropertyIDs[0] - else - PtrPropertyIDs := nil; - - FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_SetMultiPropertyFunc(FHandle, APropertyID, QWord(LenPropertyIDs), PtrPropertyIDs)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddMaxNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFMultiPropertyGroup.GetMultiProperty(const APropertyID: Cardinal; out APropertyIDs: TCardinalDynArray); + function TLib3MFImplicitFunction.AddFmodNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFFmodNode; var - countNeededPropertyIDs: QWord; - countWrittenPropertyIDs: QWord; + HNode: TLib3MFHandle; begin - countNeededPropertyIDs:= 0; - countWrittenPropertyIDs:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetMultiPropertyFunc(FHandle, APropertyID, 0, countNeededPropertyIDs, nil)); - SetLength(APropertyIDs, countNeededPropertyIDs); - FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetMultiPropertyFunc(FHandle, APropertyID, countNeededPropertyIDs, countWrittenPropertyIDs, @APropertyIDs[0])); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddFmodNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFMultiPropertyGroup.RemoveMultiProperty(const APropertyID: Cardinal); + function TLib3MFImplicitFunction.AddPowNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFPowNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_RemoveMultiPropertyFunc(FHandle, APropertyID)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddPowNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFMultiPropertyGroup.GetLayerCount(): Cardinal; + function TLib3MFImplicitFunction.AddSelectNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFSelectNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetLayerCountFunc(FHandle, Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddSelectNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFMultiPropertyGroup.AddLayer(const ATheLayer: TLib3MFMultiPropertyLayer): Cardinal; + function TLib3MFImplicitFunction.AddClampNode(const AIdentifier: String; const AConfiguration: TLib3MFImplicitNodeConfiguration; const ADisplayName: String; const ATag: String): TLib3MFClampNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_AddLayerFunc(FHandle, @ATheLayer, Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddClampNodeFunc(FHandle, PAnsiChar(AIdentifier), convertImplicitNodeConfigurationToConst(AConfiguration), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFMultiPropertyGroup.GetLayer(const ALayerIndex: Cardinal): TLib3MFMultiPropertyLayer; + function TLib3MFImplicitFunction.AddComposeVectorNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFComposeVectorNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_GetLayerFunc(FHandle, ALayerIndex, @Result)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddComposeVectorNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFMultiPropertyGroup.RemoveLayer(const ALayerIndex: Cardinal); + function TLib3MFImplicitFunction.AddVectorFromScalarNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFVectorFromScalarNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFMultiPropertyGroup_RemoveLayerFunc(FHandle, ALayerIndex)); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddVectorFromScalarNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; -(************************************************************************************************************************* - Class implementation for Attachment -**************************************************************************************************************************) + function TLib3MFImplicitFunction.AddDecomposeVectorNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFDecomposeVectorNode; + var + HNode: TLib3MFHandle; + begin + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddDecomposeVectorNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); + end; - constructor TLib3MFAttachment.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + function TLib3MFImplicitFunction.AddComposeMatrixNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFComposeMatrixNode; + var + HNode: TLib3MFHandle; begin - inherited Create(AWrapper, AHandle); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddComposeMatrixNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - destructor TLib3MFAttachment.Destroy; + function TLib3MFImplicitFunction.AddMatrixFromRowsNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFMatrixFromRowsNode; + var + HNode: TLib3MFHandle; begin - inherited; + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddMatrixFromRowsNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFAttachment.GetPath(): String; + function TLib3MFImplicitFunction.AddMatrixFromColumnsNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFMatrixFromColumnsNode; var - bytesNeededPath: Cardinal; - bytesWrittenPath: Cardinal; - bufferPath: array of Char; + HNode: TLib3MFHandle; begin - bytesNeededPath:= 0; - bytesWrittenPath:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_GetPathFunc(FHandle, 0, bytesNeededPath, nil)); - SetLength(bufferPath, bytesNeededPath); - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_GetPathFunc(FHandle, bytesNeededPath, bytesWrittenPath, @bufferPath[0])); - Result := StrPas(@bufferPath[0]); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddMatrixFromColumnsNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFAttachment.SetPath(const APath: String); + function TLib3MFImplicitFunction.AddConstantNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFConstantNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_SetPathFunc(FHandle, PAnsiChar(APath))); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddConstantNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFAttachment.PackagePart(): TLib3MFPackagePart; + function TLib3MFImplicitFunction.AddConstVecNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFConstVecNode; var - HPackagePart: TLib3MFHandle; + HNode: TLib3MFHandle; begin Result := nil; - HPackagePart := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_PackagePartFunc(FHandle, HPackagePart)); - if Assigned(HPackagePart) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HPackagePart); + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddConstVecNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - function TLib3MFAttachment.GetRelationShipType(): String; + function TLib3MFImplicitFunction.AddConstMatNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFConstMatNode; var - bytesNeededPath: Cardinal; - bytesWrittenPath: Cardinal; - bufferPath: array of Char; + HNode: TLib3MFHandle; begin - bytesNeededPath:= 0; - bytesWrittenPath:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_GetRelationShipTypeFunc(FHandle, 0, bytesNeededPath, nil)); - SetLength(bufferPath, bytesNeededPath); - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_GetRelationShipTypeFunc(FHandle, bytesNeededPath, bytesWrittenPath, @bufferPath[0])); - Result := StrPas(@bufferPath[0]); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddConstMatNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFAttachment.SetRelationShipType(const APath: String); + function TLib3MFImplicitFunction.AddMeshNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFMeshNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_SetRelationShipTypeFunc(FHandle, PAnsiChar(APath))); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddMeshNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFAttachment.WriteToFile(const AFileName: String); + function TLib3MFImplicitFunction.AddUnsignedMeshNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFUnsignedMeshNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_WriteToFileFunc(FHandle, PAnsiChar(AFileName))); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddUnsignedMeshNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFAttachment.ReadFromFile(const AFileName: String); + function TLib3MFImplicitFunction.AddFunctionCallNode(const AIdentifier: String; const ADisplayName: String; const ATag: String): TLib3MFFunctionCallNode; + var + HNode: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_ReadFromFileFunc(FHandle, PAnsiChar(AFileName))); + Result := nil; + HNode := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddFunctionCallNodeFunc(FHandle, PAnsiChar(AIdentifier), PAnsiChar(ADisplayName), PAnsiChar(ATag), HNode)); + if Assigned(HNode) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HNode); end; - procedure TLib3MFAttachment.ReadFromCallback(const ATheReadCallback: PLib3MF_ReadCallback; const AStreamSize: QWord; const ATheSeekCallback: PLib3MF_SeekCallback; const AUserData: Pointer); + function TLib3MFImplicitFunction.GetNodes(): TLib3MFNodeIterator; + var + HIterator: TLib3MFHandle; begin - if not Assigned(ATheReadCallback) then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheReadCallback is a nil value.'); - if not Assigned(ATheSeekCallback) then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATheSeekCallback is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_ReadFromCallbackFunc(FHandle, ATheReadCallback, AStreamSize, ATheSeekCallback, AUserData)); + Result := nil; + HIterator := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_GetNodesFunc(FHandle, HIterator)); + if Assigned(HIterator) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HIterator); end; - function TLib3MFAttachment.GetStreamSize(): QWord; + procedure TLib3MFImplicitFunction.RemoveNode(const ANode: TLib3MFImplicitNode); + var + ANodeHandle: TLib3MFHandle; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_GetStreamSizeFunc(FHandle, Result)); + if Assigned(ANode) then + ANodeHandle := ANode.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ANode is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_RemoveNodeFunc(FHandle, ANodeHandle)); end; - procedure TLib3MFAttachment.WriteToBuffer(out ABuffer: TByteDynArray); + procedure TLib3MFImplicitFunction.AddLink(const ASource: TLib3MFImplicitPort; const ATarget: TLib3MFImplicitPort); var - countNeededBuffer: QWord; - countWrittenBuffer: QWord; + ASourceHandle: TLib3MFHandle; + ATargetHandle: TLib3MFHandle; + begin + if Assigned(ASource) then + ASourceHandle := ASource.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ASource is a nil value.'); + if Assigned(ATarget) then + ATargetHandle := ATarget.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'ATarget is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddLinkFunc(FHandle, ASourceHandle, ATargetHandle)); + end; + + procedure TLib3MFImplicitFunction.AddLinkByNames(const ASource: String; const ATarget: String); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_AddLinkByNamesFunc(FHandle, PAnsiChar(ASource), PAnsiChar(ATarget))); + end; + + procedure TLib3MFImplicitFunction.Clear(); begin - countNeededBuffer:= 0; - countWrittenBuffer:= 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_WriteToBufferFunc(FHandle, 0, countNeededBuffer, nil)); - SetLength(ABuffer, countNeededBuffer); - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_WriteToBufferFunc(FHandle, countNeededBuffer, countWrittenBuffer, @ABuffer[0])); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_ClearFunc(FHandle)); end; - procedure TLib3MFAttachment.ReadFromBuffer(const ABuffer: TByteDynArray); - var - PtrBuffer: PByte; - LenBuffer: QWord; + procedure TLib3MFImplicitFunction.SortNodesTopologically(); begin - LenBuffer := Length(ABuffer); - if LenBuffer > $FFFFFFFF then - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'array has too many entries.'); - if LenBuffer > 0 then - PtrBuffer := @ABuffer[0] - else - PtrBuffer := nil; - - FWrapper.CheckError(Self, FWrapper.Lib3MFAttachment_ReadFromBufferFunc(FHandle, QWord(LenBuffer), PtrBuffer)); + FWrapper.CheckError(Self, FWrapper.Lib3MFImplicitFunction_SortNodesTopologicallyFunc(FHandle)); end; (************************************************************************************************************************* - Class implementation for Texture2D + Class implementation for FunctionFromImage3D **************************************************************************************************************************) - constructor TLib3MFTexture2D.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); + constructor TLib3MFFunctionFromImage3D.Create(AWrapper: TLib3MFWrapper; AHandle: TLib3MFHandle); begin inherited Create(AWrapper, AHandle); end; - destructor TLib3MFTexture2D.Destroy; + destructor TLib3MFFunctionFromImage3D.Destroy; begin inherited; end; - function TLib3MFTexture2D.GetAttachment(): TLib3MFAttachment; + function TLib3MFFunctionFromImage3D.GetImage3D(): TLib3MFImage3D; var - HAttachment: TLib3MFHandle; + HImage3D: TLib3MFHandle; begin Result := nil; - HAttachment := nil; - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_GetAttachmentFunc(FHandle, HAttachment)); - if Assigned(HAttachment) then - Result := TLib3MFPolymorphicFactory.Make(FWrapper, HAttachment); + HImage3D := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionFromImage3D_GetImage3DFunc(FHandle, HImage3D)); + if Assigned(HImage3D) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HImage3D); end; - procedure TLib3MFTexture2D.SetAttachment(const AAttachment: TLib3MFAttachment); + procedure TLib3MFFunctionFromImage3D.SetImage3D(const AImage3D: TLib3MFImage3D); var - AAttachmentHandle: TLib3MFHandle; + AImage3DHandle: TLib3MFHandle; begin - if Assigned(AAttachment) then - AAttachmentHandle := AAttachment.TheHandle + if Assigned(AImage3D) then + AImage3DHandle := AImage3D.TheHandle else - raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AAttachment is a nil value.'); - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_SetAttachmentFunc(FHandle, AAttachmentHandle)); + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AImage3D is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionFromImage3D_SetImage3DFunc(FHandle, AImage3DHandle)); end; - function TLib3MFTexture2D.GetContentType(): TLib3MFTextureType; + procedure TLib3MFFunctionFromImage3D.SetFilter(const AFilter: TLib3MFTextureFilter); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionFromImage3D_SetFilterFunc(FHandle, convertTextureFilterToConst(AFilter))); + end; + + function TLib3MFFunctionFromImage3D.GetFilter(): TLib3MFTextureFilter; var - ResultContentType: Integer; + ResultFilter: Integer; begin - ResultContentType := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_GetContentTypeFunc(FHandle, ResultContentType)); - Result := convertConstToTextureType(ResultContentType); + ResultFilter := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionFromImage3D_GetFilterFunc(FHandle, ResultFilter)); + Result := convertConstToTextureFilter(ResultFilter); end; - procedure TLib3MFTexture2D.SetContentType(const AContentType: TLib3MFTextureType); + procedure TLib3MFFunctionFromImage3D.SetTileStyles(const ATileStyleU: TLib3MFTextureTileStyle; const ATileStyleV: TLib3MFTextureTileStyle; const ATileStyleW: TLib3MFTextureTileStyle); begin - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_SetContentTypeFunc(FHandle, convertTextureTypeToConst(AContentType))); + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionFromImage3D_SetTileStylesFunc(FHandle, convertTextureTileStyleToConst(ATileStyleU), convertTextureTileStyleToConst(ATileStyleV), convertTextureTileStyleToConst(ATileStyleW))); end; - procedure TLib3MFTexture2D.GetTileStyleUV(out ATileStyleU: TLib3MFTextureTileStyle; out ATileStyleV: TLib3MFTextureTileStyle); + procedure TLib3MFFunctionFromImage3D.GetTileStyles(out ATileStyleU: TLib3MFTextureTileStyle; out ATileStyleV: TLib3MFTextureTileStyle; out ATileStyleW: TLib3MFTextureTileStyle); var ResultTileStyleU: Integer; ResultTileStyleV: Integer; + ResultTileStyleW: Integer; begin ResultTileStyleU := 0; ResultTileStyleV := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_GetTileStyleUVFunc(FHandle, ResultTileStyleU, ResultTileStyleV)); + ResultTileStyleW := 0; + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionFromImage3D_GetTileStylesFunc(FHandle, ResultTileStyleU, ResultTileStyleV, ResultTileStyleW)); ATileStyleU := convertConstToTextureTileStyle(ResultTileStyleU); ATileStyleV := convertConstToTextureTileStyle(ResultTileStyleV); + ATileStyleW := convertConstToTextureTileStyle(ResultTileStyleW); end; - procedure TLib3MFTexture2D.SetTileStyleUV(const ATileStyleU: TLib3MFTextureTileStyle; const ATileStyleV: TLib3MFTextureTileStyle); + function TLib3MFFunctionFromImage3D.GetOffset(): Double; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_SetTileStyleUVFunc(FHandle, convertTextureTileStyleToConst(ATileStyleU), convertTextureTileStyleToConst(ATileStyleV))); + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionFromImage3D_GetOffsetFunc(FHandle, Result)); end; - function TLib3MFTexture2D.GetFilter(): TLib3MFTextureFilter; - var - ResultFilter: Integer; + procedure TLib3MFFunctionFromImage3D.SetOffset(const AOffset: Double); begin - ResultFilter := 0; - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_GetFilterFunc(FHandle, ResultFilter)); - Result := convertConstToTextureFilter(ResultFilter); + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionFromImage3D_SetOffsetFunc(FHandle, AOffset)); end; - procedure TLib3MFTexture2D.SetFilter(const AFilter: TLib3MFTextureFilter); + function TLib3MFFunctionFromImage3D.GetScale(): Double; begin - FWrapper.CheckError(Self, FWrapper.Lib3MFTexture2D_SetFilterFunc(FHandle, convertTextureFilterToConst(AFilter))); + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionFromImage3D_GetScaleFunc(FHandle, Result)); + end; + + procedure TLib3MFFunctionFromImage3D.SetScale(const AScale: Double); + begin + FWrapper.CheckError(Self, FWrapper.Lib3MFFunctionFromImage3D_SetScaleFunc(FHandle, AScale)); end; (************************************************************************************************************************* @@ -9862,6 +18345,17 @@ implementation Result := TLib3MFPolymorphicFactory.Make(FWrapper, HSliceStacInstance); end; + function TLib3MFModel.GetLevelSetByID(const AUniqueResourceID: Cardinal): TLib3MFLevelSet; + var + HLevelSetObjectInstance: TLib3MFHandle; + begin + Result := nil; + HLevelSetObjectInstance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFModel_GetLevelSetByIDFunc(FHandle, AUniqueResourceID, HLevelSetObjectInstance)); + if Assigned(HLevelSetObjectInstance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HLevelSetObjectInstance); + end; + function TLib3MFModel.GetBuildUUID(out AHasUUID: Boolean): String; var ResultHasUUID: Byte; @@ -10021,6 +18515,17 @@ implementation Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResourceIterator); end; + function TLib3MFModel.GetImage3Ds(): TLib3MFImage3DIterator; + var + HResourceIterator: TLib3MFHandle; + begin + Result := nil; + HResourceIterator := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFModel_GetImage3DsFunc(FHandle, HResourceIterator)); + if Assigned(HResourceIterator) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResourceIterator); + end; + function TLib3MFModel.MergeToModel(): TLib3MFModel; var HMergedModelInstance: TLib3MFHandle; @@ -10032,6 +18537,17 @@ implementation Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMergedModelInstance); end; + procedure TLib3MFModel.MergeFromModel(const AModelInstance: TLib3MFModel); + var + AModelInstanceHandle: TLib3MFHandle; + begin + if Assigned(AModelInstance) then + AModelInstanceHandle := AModelInstance.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AModelInstance is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFModel_MergeFromModelFunc(FHandle, AModelInstanceHandle)); + end; + function TLib3MFModel.AddMeshObject(): TLib3MFMeshObject; var HMeshObjectInstance: TLib3MFHandle; @@ -10146,6 +18662,28 @@ implementation Result := TLib3MFPolymorphicFactory.Make(FWrapper, HMultiPropertyGroupInstance); end; + function TLib3MFModel.AddImageStack(const AColumnCount: Cardinal; const ARowCount: Cardinal; const ASheetCount: Cardinal): TLib3MFImageStack; + var + HInstance: TLib3MFHandle; + begin + Result := nil; + HInstance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFModel_AddImageStackFunc(FHandle, AColumnCount, ARowCount, ASheetCount, HInstance)); + if Assigned(HInstance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HInstance); + end; + + function TLib3MFModel.GetImageStackByID(const AUniqueResourceID: Cardinal): TLib3MFImageStack; + var + HImageStackInstance: TLib3MFHandle; + begin + Result := nil; + HImageStackInstance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFModel_GetImageStackByIDFunc(FHandle, AUniqueResourceID, HImageStackInstance)); + if Assigned(HImageStackInstance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HImageStackInstance); + end; + function TLib3MFModel.AddBuildItem(const AObject: TLib3MFObject; const ATransform: TLib3MFTransform): TLib3MFBuildItem; var AObjectHandle: TLib3MFHandle; @@ -10297,6 +18835,88 @@ implementation Result := TLib3MFPolymorphicFactory.Make(FWrapper, HKeyStore); end; + function TLib3MFModel.GetFunctions(): TLib3MFFunctionIterator; + var + HTheResourceIterator: TLib3MFHandle; + begin + Result := nil; + HTheResourceIterator := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFModel_GetFunctionsFunc(FHandle, HTheResourceIterator)); + if Assigned(HTheResourceIterator) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HTheResourceIterator); + end; + + function TLib3MFModel.AddImplicitFunction(): TLib3MFImplicitFunction; + var + HFunctionInstance: TLib3MFHandle; + begin + Result := nil; + HFunctionInstance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFModel_AddImplicitFunctionFunc(FHandle, HFunctionInstance)); + if Assigned(HFunctionInstance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HFunctionInstance); + end; + + function TLib3MFModel.AddFunctionFromImage3D(const AImage3DInstance: TLib3MFImage3D): TLib3MFFunctionFromImage3D; + var + AImage3DInstanceHandle: TLib3MFHandle; + HFunctionInstance: TLib3MFHandle; + begin + if Assigned(AImage3DInstance) then + AImage3DInstanceHandle := AImage3DInstance.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AImage3DInstance is a nil value.'); + Result := nil; + HFunctionInstance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFModel_AddFunctionFromImage3DFunc(FHandle, AImage3DInstanceHandle, HFunctionInstance)); + if Assigned(HFunctionInstance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HFunctionInstance); + end; + + function TLib3MFModel.AddVolumeData(): TLib3MFVolumeData; + var + HVolumeDataInstance: TLib3MFHandle; + begin + Result := nil; + HVolumeDataInstance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFModel_AddVolumeDataFunc(FHandle, HVolumeDataInstance)); + if Assigned(HVolumeDataInstance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HVolumeDataInstance); + end; + + function TLib3MFModel.AddLevelSet(): TLib3MFLevelSet; + var + HLevelSetInstance: TLib3MFHandle; + begin + Result := nil; + HLevelSetInstance := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFModel_AddLevelSetFunc(FHandle, HLevelSetInstance)); + if Assigned(HLevelSetInstance) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HLevelSetInstance); + end; + + function TLib3MFModel.GetLevelSets(): TLib3MFLevelSetIterator; + var + HResourceIterator: TLib3MFHandle; + begin + Result := nil; + HResourceIterator := nil; + FWrapper.CheckError(Self, FWrapper.Lib3MFModel_GetLevelSetsFunc(FHandle, HResourceIterator)); + if Assigned(HResourceIterator) then + Result := TLib3MFPolymorphicFactory.Make(FWrapper, HResourceIterator); + end; + + procedure TLib3MFModel.RemoveResource(const AResource: TLib3MFResource); + var + AResourceHandle: TLib3MFHandle; + begin + if Assigned(AResource) then + AResourceHandle := AResource.TheHandle + else + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_INVALIDPARAM, 'AResource is a nil value.'); + FWrapper.CheckError(Self, FWrapper.Lib3MFModel_RemoveResourceFunc(FHandle, AResourceHandle)); + end; + (************************************************************************************************************************* Wrapper class implementation **************************************************************************************************************************) @@ -10367,6 +18987,9 @@ implementation FLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupFunc := LoadFunction('lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup'); FLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsFunc := LoadFunction('lib3mf_compositematerialsiterator_getcurrentcompositematerials'); FLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupFunc := LoadFunction('lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup'); + FLib3MFImage3DIterator_GetCurrentImage3DFunc := LoadFunction('lib3mf_image3diterator_getcurrentimage3d'); + FLib3MFFunctionIterator_GetCurrentFunctionFunc := LoadFunction('lib3mf_functioniterator_getcurrentfunction'); + FLib3MFLevelSetIterator_GetCurrentLevelSetFunc := LoadFunction('lib3mf_levelsetiterator_getcurrentlevelset'); FLib3MFMetaData_GetNameSpaceFunc := LoadFunction('lib3mf_metadata_getnamespace'); FLib3MFMetaData_SetNameSpaceFunc := LoadFunction('lib3mf_metadata_setnamespace'); FLib3MFMetaData_GetNameFunc := LoadFunction('lib3mf_metadata_getname'); @@ -10392,6 +19015,7 @@ implementation FLib3MFObject_SetPartNumberFunc := LoadFunction('lib3mf_object_setpartnumber'); FLib3MFObject_IsMeshObjectFunc := LoadFunction('lib3mf_object_ismeshobject'); FLib3MFObject_IsComponentsObjectFunc := LoadFunction('lib3mf_object_iscomponentsobject'); + FLib3MFObject_IsLevelSetObjectFunc := LoadFunction('lib3mf_object_islevelsetobject'); FLib3MFObject_IsValidFunc := LoadFunction('lib3mf_object_isvalid'); FLib3MFObject_SetAttachmentAsThumbnailFunc := LoadFunction('lib3mf_object_setattachmentasthumbnail'); FLib3MFObject_GetThumbnailAttachmentFunc := LoadFunction('lib3mf_object_getthumbnailattachment'); @@ -10426,6 +19050,24 @@ implementation FLib3MFMeshObject_SetGeometryFunc := LoadFunction('lib3mf_meshobject_setgeometry'); FLib3MFMeshObject_IsManifoldAndOrientedFunc := LoadFunction('lib3mf_meshobject_ismanifoldandoriented'); FLib3MFMeshObject_BeamLatticeFunc := LoadFunction('lib3mf_meshobject_beamlattice'); + FLib3MFMeshObject_GetVolumeDataFunc := LoadFunction('lib3mf_meshobject_getvolumedata'); + FLib3MFMeshObject_SetVolumeDataFunc := LoadFunction('lib3mf_meshobject_setvolumedata'); + FLib3MFLevelSet_GetFunctionFunc := LoadFunction('lib3mf_levelset_getfunction'); + FLib3MFLevelSet_SetFunctionFunc := LoadFunction('lib3mf_levelset_setfunction'); + FLib3MFLevelSet_GetTransformFunc := LoadFunction('lib3mf_levelset_gettransform'); + FLib3MFLevelSet_SetTransformFunc := LoadFunction('lib3mf_levelset_settransform'); + FLib3MFLevelSet_GetChannelNameFunc := LoadFunction('lib3mf_levelset_getchannelname'); + FLib3MFLevelSet_SetChannelNameFunc := LoadFunction('lib3mf_levelset_setchannelname'); + FLib3MFLevelSet_SetMinFeatureSizeFunc := LoadFunction('lib3mf_levelset_setminfeaturesize'); + FLib3MFLevelSet_GetMinFeatureSizeFunc := LoadFunction('lib3mf_levelset_getminfeaturesize'); + FLib3MFLevelSet_SetFallBackValueFunc := LoadFunction('lib3mf_levelset_setfallbackvalue'); + FLib3MFLevelSet_GetFallBackValueFunc := LoadFunction('lib3mf_levelset_getfallbackvalue'); + FLib3MFLevelSet_SetMeshBBoxOnlyFunc := LoadFunction('lib3mf_levelset_setmeshbboxonly'); + FLib3MFLevelSet_GetMeshBBoxOnlyFunc := LoadFunction('lib3mf_levelset_getmeshbboxonly'); + FLib3MFLevelSet_SetMeshFunc := LoadFunction('lib3mf_levelset_setmesh'); + FLib3MFLevelSet_GetMeshFunc := LoadFunction('lib3mf_levelset_getmesh'); + FLib3MFLevelSet_GetVolumeDataFunc := LoadFunction('lib3mf_levelset_getvolumedata'); + FLib3MFLevelSet_SetVolumeDataFunc := LoadFunction('lib3mf_levelset_setvolumedata'); FLib3MFBeamLattice_GetMinLengthFunc := LoadFunction('lib3mf_beamlattice_getminlength'); FLib3MFBeamLattice_SetMinLengthFunc := LoadFunction('lib3mf_beamlattice_setminlength'); FLib3MFBeamLattice_GetClippingFunc := LoadFunction('lib3mf_beamlattice_getclipping'); @@ -10449,6 +19091,35 @@ implementation FLib3MFBeamLattice_GetBeamSetCountFunc := LoadFunction('lib3mf_beamlattice_getbeamsetcount'); FLib3MFBeamLattice_AddBeamSetFunc := LoadFunction('lib3mf_beamlattice_addbeamset'); FLib3MFBeamLattice_GetBeamSetFunc := LoadFunction('lib3mf_beamlattice_getbeamset'); + FLib3MFFunctionReference_GetFunctionResourceIDFunc := LoadFunction('lib3mf_functionreference_getfunctionresourceid'); + FLib3MFFunctionReference_SetFunctionResourceIDFunc := LoadFunction('lib3mf_functionreference_setfunctionresourceid'); + FLib3MFFunctionReference_GetTransformFunc := LoadFunction('lib3mf_functionreference_gettransform'); + FLib3MFFunctionReference_SetTransformFunc := LoadFunction('lib3mf_functionreference_settransform'); + FLib3MFFunctionReference_GetChannelNameFunc := LoadFunction('lib3mf_functionreference_getchannelname'); + FLib3MFFunctionReference_SetChannelNameFunc := LoadFunction('lib3mf_functionreference_setchannelname'); + FLib3MFFunctionReference_SetMinFeatureSizeFunc := LoadFunction('lib3mf_functionreference_setminfeaturesize'); + FLib3MFFunctionReference_GetMinFeatureSizeFunc := LoadFunction('lib3mf_functionreference_getminfeaturesize'); + FLib3MFFunctionReference_SetFallBackValueFunc := LoadFunction('lib3mf_functionreference_setfallbackvalue'); + FLib3MFFunctionReference_GetFallBackValueFunc := LoadFunction('lib3mf_functionreference_getfallbackvalue'); + FLib3MFVolumeDataComposite_GetBaseMaterialGroupFunc := LoadFunction('lib3mf_volumedatacomposite_getbasematerialgroup'); + FLib3MFVolumeDataComposite_SetBaseMaterialGroupFunc := LoadFunction('lib3mf_volumedatacomposite_setbasematerialgroup'); + FLib3MFVolumeDataComposite_GetMaterialMappingCountFunc := LoadFunction('lib3mf_volumedatacomposite_getmaterialmappingcount'); + FLib3MFVolumeDataComposite_GetMaterialMappingFunc := LoadFunction('lib3mf_volumedatacomposite_getmaterialmapping'); + FLib3MFVolumeDataComposite_AddMaterialMappingFunc := LoadFunction('lib3mf_volumedatacomposite_addmaterialmapping'); + FLib3MFVolumeDataComposite_RemoveMaterialMappingFunc := LoadFunction('lib3mf_volumedatacomposite_removematerialmapping'); + FLib3MFVolumeDataProperty_GetNameFunc := LoadFunction('lib3mf_volumedataproperty_getname'); + FLib3MFVolumeDataProperty_SetIsRequiredFunc := LoadFunction('lib3mf_volumedataproperty_setisrequired'); + FLib3MFVolumeDataProperty_IsRequiredFunc := LoadFunction('lib3mf_volumedataproperty_isrequired'); + FLib3MFVolumeData_GetCompositeFunc := LoadFunction('lib3mf_volumedata_getcomposite'); + FLib3MFVolumeData_CreateNewCompositeFunc := LoadFunction('lib3mf_volumedata_createnewcomposite'); + FLib3MFVolumeData_RemoveCompositeFunc := LoadFunction('lib3mf_volumedata_removecomposite'); + FLib3MFVolumeData_GetColorFunc := LoadFunction('lib3mf_volumedata_getcolor'); + FLib3MFVolumeData_CreateNewColorFunc := LoadFunction('lib3mf_volumedata_createnewcolor'); + FLib3MFVolumeData_RemoveColorFunc := LoadFunction('lib3mf_volumedata_removecolor'); + FLib3MFVolumeData_GetPropertyCountFunc := LoadFunction('lib3mf_volumedata_getpropertycount'); + FLib3MFVolumeData_GetPropertyFunc := LoadFunction('lib3mf_volumedata_getproperty'); + FLib3MFVolumeData_AddPropertyFromFunctionFunc := LoadFunction('lib3mf_volumedata_addpropertyfromfunction'); + FLib3MFVolumeData_RemovePropertyFunc := LoadFunction('lib3mf_volumedata_removeproperty'); FLib3MFComponent_GetObjectResourceFunc := LoadFunction('lib3mf_component_getobjectresource'); FLib3MFComponent_GetObjectResourceIDFunc := LoadFunction('lib3mf_component_getobjectresourceid'); FLib3MFComponent_GetUUIDFunc := LoadFunction('lib3mf_component_getuuid'); @@ -10505,6 +19176,19 @@ implementation FLib3MFMultiPropertyGroup_AddLayerFunc := LoadFunction('lib3mf_multipropertygroup_addlayer'); FLib3MFMultiPropertyGroup_GetLayerFunc := LoadFunction('lib3mf_multipropertygroup_getlayer'); FLib3MFMultiPropertyGroup_RemoveLayerFunc := LoadFunction('lib3mf_multipropertygroup_removelayer'); + FLib3MFImage3D_GetNameFunc := LoadFunction('lib3mf_image3d_getname'); + FLib3MFImage3D_SetNameFunc := LoadFunction('lib3mf_image3d_setname'); + FLib3MFImage3D_IsImageStackFunc := LoadFunction('lib3mf_image3d_isimagestack'); + FLib3MFImageStack_GetRowCountFunc := LoadFunction('lib3mf_imagestack_getrowcount'); + FLib3MFImageStack_SetRowCountFunc := LoadFunction('lib3mf_imagestack_setrowcount'); + FLib3MFImageStack_GetColumnCountFunc := LoadFunction('lib3mf_imagestack_getcolumncount'); + FLib3MFImageStack_SetColumnCountFunc := LoadFunction('lib3mf_imagestack_setcolumncount'); + FLib3MFImageStack_GetSheetCountFunc := LoadFunction('lib3mf_imagestack_getsheetcount'); + FLib3MFImageStack_GetSheetFunc := LoadFunction('lib3mf_imagestack_getsheet'); + FLib3MFImageStack_SetSheetFunc := LoadFunction('lib3mf_imagestack_setsheet'); + FLib3MFImageStack_CreateEmptySheetFunc := LoadFunction('lib3mf_imagestack_createemptysheet'); + FLib3MFImageStack_CreateSheetFromBufferFunc := LoadFunction('lib3mf_imagestack_createsheetfrombuffer'); + FLib3MFImageStack_CreateSheetFromFileFunc := LoadFunction('lib3mf_imagestack_createsheetfromfile'); FLib3MFAttachment_GetPathFunc := LoadFunction('lib3mf_attachment_getpath'); FLib3MFAttachment_SetPathFunc := LoadFunction('lib3mf_attachment_setpath'); FLib3MFAttachment_PackagePartFunc := LoadFunction('lib3mf_attachment_packagepart'); @@ -10524,6 +19208,173 @@ implementation FLib3MFTexture2D_SetTileStyleUVFunc := LoadFunction('lib3mf_texture2d_settilestyleuv'); FLib3MFTexture2D_GetFilterFunc := LoadFunction('lib3mf_texture2d_getfilter'); FLib3MFTexture2D_SetFilterFunc := LoadFunction('lib3mf_texture2d_setfilter'); + FLib3MFImplicitPort_GetIdentifierFunc := LoadFunction('lib3mf_implicitport_getidentifier'); + FLib3MFImplicitPort_SetIdentifierFunc := LoadFunction('lib3mf_implicitport_setidentifier'); + FLib3MFImplicitPort_GetDisplayNameFunc := LoadFunction('lib3mf_implicitport_getdisplayname'); + FLib3MFImplicitPort_SetDisplayNameFunc := LoadFunction('lib3mf_implicitport_setdisplayname'); + FLib3MFImplicitPort_SetTypeFunc := LoadFunction('lib3mf_implicitport_settype'); + FLib3MFImplicitPort_GetTypeFunc := LoadFunction('lib3mf_implicitport_gettype'); + FLib3MFImplicitPort_GetReferenceFunc := LoadFunction('lib3mf_implicitport_getreference'); + FLib3MFImplicitPort_SetReferenceFunc := LoadFunction('lib3mf_implicitport_setreference'); + FLib3MFIterator_MoveNextFunc := LoadFunction('lib3mf_iterator_movenext'); + FLib3MFIterator_MovePreviousFunc := LoadFunction('lib3mf_iterator_moveprevious'); + FLib3MFIterator_CountFunc := LoadFunction('lib3mf_iterator_count'); + FLib3MFImplicitPortIterator_GetCurrentFunc := LoadFunction('lib3mf_implicitportiterator_getcurrent'); + FLib3MFImplicitNode_GetIdentifierFunc := LoadFunction('lib3mf_implicitnode_getidentifier'); + FLib3MFImplicitNode_SetIdentifierFunc := LoadFunction('lib3mf_implicitnode_setidentifier'); + FLib3MFImplicitNode_GetDisplayNameFunc := LoadFunction('lib3mf_implicitnode_getdisplayname'); + FLib3MFImplicitNode_SetDisplayNameFunc := LoadFunction('lib3mf_implicitnode_setdisplayname'); + FLib3MFImplicitNode_GetTagFunc := LoadFunction('lib3mf_implicitnode_gettag'); + FLib3MFImplicitNode_SetTagFunc := LoadFunction('lib3mf_implicitnode_settag'); + FLib3MFImplicitNode_GetNodeTypeFunc := LoadFunction('lib3mf_implicitnode_getnodetype'); + FLib3MFImplicitNode_AddInputFunc := LoadFunction('lib3mf_implicitnode_addinput'); + FLib3MFImplicitNode_GetInputsFunc := LoadFunction('lib3mf_implicitnode_getinputs'); + FLib3MFImplicitNode_AddOutputFunc := LoadFunction('lib3mf_implicitnode_addoutput'); + FLib3MFImplicitNode_GetOutputsFunc := LoadFunction('lib3mf_implicitnode_getoutputs'); + FLib3MFImplicitNode_FindInputFunc := LoadFunction('lib3mf_implicitnode_findinput'); + FLib3MFImplicitNode_FindOutputFunc := LoadFunction('lib3mf_implicitnode_findoutput'); + FLib3MFImplicitNode_AreTypesValidFunc := LoadFunction('lib3mf_implicitnode_aretypesvalid'); + FLib3MFOneInputNode_GetInputAFunc := LoadFunction('lib3mf_oneinputnode_getinputa'); + FLib3MFOneInputNode_GetOutputResultFunc := LoadFunction('lib3mf_oneinputnode_getoutputresult'); + FLib3MFResourceIdNode_SetResourceFunc := LoadFunction('lib3mf_resourceidnode_setresource'); + FLib3MFResourceIdNode_GetResourceFunc := LoadFunction('lib3mf_resourceidnode_getresource'); + FLib3MFResourceIdNode_GetOutputValueFunc := LoadFunction('lib3mf_resourceidnode_getoutputvalue'); + FLib3MFTwoInputNode_GetInputBFunc := LoadFunction('lib3mf_twoinputnode_getinputb'); + FLib3MFSelectNode_GetInputBFunc := LoadFunction('lib3mf_selectnode_getinputb'); + FLib3MFSelectNode_GetInputCFunc := LoadFunction('lib3mf_selectnode_getinputc'); + FLib3MFSelectNode_GetInputDFunc := LoadFunction('lib3mf_selectnode_getinputd'); + FLib3MFClampNode_GetInputMinFunc := LoadFunction('lib3mf_clampnode_getinputmin'); + FLib3MFClampNode_GetInputMaxFunc := LoadFunction('lib3mf_clampnode_getinputmax'); + FLib3MFComposeVectorNode_GetInputXFunc := LoadFunction('lib3mf_composevectornode_getinputx'); + FLib3MFComposeVectorNode_GetInputYFunc := LoadFunction('lib3mf_composevectornode_getinputy'); + FLib3MFComposeVectorNode_GetInputZFunc := LoadFunction('lib3mf_composevectornode_getinputz'); + FLib3MFComposeVectorNode_GetOutputResultFunc := LoadFunction('lib3mf_composevectornode_getoutputresult'); + FLib3MFDecomposeVectorNode_GetInputAFunc := LoadFunction('lib3mf_decomposevectornode_getinputa'); + FLib3MFDecomposeVectorNode_GetOutputXFunc := LoadFunction('lib3mf_decomposevectornode_getoutputx'); + FLib3MFDecomposeVectorNode_GetOutputYFunc := LoadFunction('lib3mf_decomposevectornode_getoutputy'); + FLib3MFDecomposeVectorNode_GetOutputZFunc := LoadFunction('lib3mf_decomposevectornode_getoutputz'); + FLib3MFComposeMatrixNode_GetInputM00Func := LoadFunction('lib3mf_composematrixnode_getinputm00'); + FLib3MFComposeMatrixNode_GetInputM01Func := LoadFunction('lib3mf_composematrixnode_getinputm01'); + FLib3MFComposeMatrixNode_GetInputM02Func := LoadFunction('lib3mf_composematrixnode_getinputm02'); + FLib3MFComposeMatrixNode_GetInputM03Func := LoadFunction('lib3mf_composematrixnode_getinputm03'); + FLib3MFComposeMatrixNode_GetInputM10Func := LoadFunction('lib3mf_composematrixnode_getinputm10'); + FLib3MFComposeMatrixNode_GetInputM11Func := LoadFunction('lib3mf_composematrixnode_getinputm11'); + FLib3MFComposeMatrixNode_GetInputM12Func := LoadFunction('lib3mf_composematrixnode_getinputm12'); + FLib3MFComposeMatrixNode_GetInputM13Func := LoadFunction('lib3mf_composematrixnode_getinputm13'); + FLib3MFComposeMatrixNode_GetInputM20Func := LoadFunction('lib3mf_composematrixnode_getinputm20'); + FLib3MFComposeMatrixNode_GetInputM21Func := LoadFunction('lib3mf_composematrixnode_getinputm21'); + FLib3MFComposeMatrixNode_GetInputM22Func := LoadFunction('lib3mf_composematrixnode_getinputm22'); + FLib3MFComposeMatrixNode_GetInputM23Func := LoadFunction('lib3mf_composematrixnode_getinputm23'); + FLib3MFComposeMatrixNode_GetInputM30Func := LoadFunction('lib3mf_composematrixnode_getinputm30'); + FLib3MFComposeMatrixNode_GetInputM31Func := LoadFunction('lib3mf_composematrixnode_getinputm31'); + FLib3MFComposeMatrixNode_GetInputM32Func := LoadFunction('lib3mf_composematrixnode_getinputm32'); + FLib3MFComposeMatrixNode_GetInputM33Func := LoadFunction('lib3mf_composematrixnode_getinputm33'); + FLib3MFComposeMatrixNode_GetOutputResultFunc := LoadFunction('lib3mf_composematrixnode_getoutputresult'); + FLib3MFMatrixFromRowsNode_GetInputAFunc := LoadFunction('lib3mf_matrixfromrowsnode_getinputa'); + FLib3MFMatrixFromRowsNode_GetInputBFunc := LoadFunction('lib3mf_matrixfromrowsnode_getinputb'); + FLib3MFMatrixFromRowsNode_GetInputCFunc := LoadFunction('lib3mf_matrixfromrowsnode_getinputc'); + FLib3MFMatrixFromRowsNode_GetInputDFunc := LoadFunction('lib3mf_matrixfromrowsnode_getinputd'); + FLib3MFMatrixFromRowsNode_GetOutputResultFunc := LoadFunction('lib3mf_matrixfromrowsnode_getoutputresult'); + FLib3MFMatrixFromColumnsNode_GetInputAFunc := LoadFunction('lib3mf_matrixfromcolumnsnode_getinputa'); + FLib3MFMatrixFromColumnsNode_GetInputBFunc := LoadFunction('lib3mf_matrixfromcolumnsnode_getinputb'); + FLib3MFMatrixFromColumnsNode_GetInputCFunc := LoadFunction('lib3mf_matrixfromcolumnsnode_getinputc'); + FLib3MFMatrixFromColumnsNode_GetInputDFunc := LoadFunction('lib3mf_matrixfromcolumnsnode_getinputd'); + FLib3MFMatrixFromColumnsNode_GetOutputResultFunc := LoadFunction('lib3mf_matrixfromcolumnsnode_getoutputresult'); + FLib3MFConstantNode_SetConstantFunc := LoadFunction('lib3mf_constantnode_setconstant'); + FLib3MFConstantNode_GetConstantFunc := LoadFunction('lib3mf_constantnode_getconstant'); + FLib3MFConstantNode_GetOutputValueFunc := LoadFunction('lib3mf_constantnode_getoutputvalue'); + FLib3MFConstVecNode_SetVectorFunc := LoadFunction('lib3mf_constvecnode_setvector'); + FLib3MFConstVecNode_GetVectorFunc := LoadFunction('lib3mf_constvecnode_getvector'); + FLib3MFConstVecNode_GetOutputVectorFunc := LoadFunction('lib3mf_constvecnode_getoutputvector'); + FLib3MFConstMatNode_SetMatrixFunc := LoadFunction('lib3mf_constmatnode_setmatrix'); + FLib3MFConstMatNode_GetMatrixFunc := LoadFunction('lib3mf_constmatnode_getmatrix'); + FLib3MFConstMatNode_GetOutputMatrixFunc := LoadFunction('lib3mf_constmatnode_getoutputmatrix'); + FLib3MFMeshNode_GetInputMeshFunc := LoadFunction('lib3mf_meshnode_getinputmesh'); + FLib3MFMeshNode_GetInputPosFunc := LoadFunction('lib3mf_meshnode_getinputpos'); + FLib3MFMeshNode_GetOutputDistanceFunc := LoadFunction('lib3mf_meshnode_getoutputdistance'); + FLib3MFUnsignedMeshNode_GetInputMeshFunc := LoadFunction('lib3mf_unsignedmeshnode_getinputmesh'); + FLib3MFUnsignedMeshNode_GetInputPosFunc := LoadFunction('lib3mf_unsignedmeshnode_getinputpos'); + FLib3MFUnsignedMeshNode_GetOutputDistanceFunc := LoadFunction('lib3mf_unsignedmeshnode_getoutputdistance'); + FLib3MFFunctionCallNode_GetInputFunctionIDFunc := LoadFunction('lib3mf_functioncallnode_getinputfunctionid'); + FLib3MFNodeIterator_GetCurrentFunc := LoadFunction('lib3mf_nodeiterator_getcurrent'); + FLib3MFFunction_GetDisplayNameFunc := LoadFunction('lib3mf_function_getdisplayname'); + FLib3MFFunction_SetDisplayNameFunc := LoadFunction('lib3mf_function_setdisplayname'); + FLib3MFFunction_AddInputFunc := LoadFunction('lib3mf_function_addinput'); + FLib3MFFunction_GetInputsFunc := LoadFunction('lib3mf_function_getinputs'); + FLib3MFFunction_RemoveInputFunc := LoadFunction('lib3mf_function_removeinput'); + FLib3MFFunction_AddOutputFunc := LoadFunction('lib3mf_function_addoutput'); + FLib3MFFunction_GetOutputsFunc := LoadFunction('lib3mf_function_getoutputs'); + FLib3MFFunction_RemoveOutputFunc := LoadFunction('lib3mf_function_removeoutput'); + FLib3MFFunction_FindInputFunc := LoadFunction('lib3mf_function_findinput'); + FLib3MFFunction_FindOutputFunc := LoadFunction('lib3mf_function_findoutput'); + FLib3MFImplicitFunction_GetIdentifierFunc := LoadFunction('lib3mf_implicitfunction_getidentifier'); + FLib3MFImplicitFunction_SetIdentifierFunc := LoadFunction('lib3mf_implicitfunction_setidentifier'); + FLib3MFImplicitFunction_AddNodeFunc := LoadFunction('lib3mf_implicitfunction_addnode'); + FLib3MFImplicitFunction_AddSinNodeFunc := LoadFunction('lib3mf_implicitfunction_addsinnode'); + FLib3MFImplicitFunction_AddCosNodeFunc := LoadFunction('lib3mf_implicitfunction_addcosnode'); + FLib3MFImplicitFunction_AddTanNodeFunc := LoadFunction('lib3mf_implicitfunction_addtannode'); + FLib3MFImplicitFunction_AddArcSinNodeFunc := LoadFunction('lib3mf_implicitfunction_addarcsinnode'); + FLib3MFImplicitFunction_AddArcCosNodeFunc := LoadFunction('lib3mf_implicitfunction_addarccosnode'); + FLib3MFImplicitFunction_AddArcTan2NodeFunc := LoadFunction('lib3mf_implicitfunction_addarctan2node'); + FLib3MFImplicitFunction_AddSinhNodeFunc := LoadFunction('lib3mf_implicitfunction_addsinhnode'); + FLib3MFImplicitFunction_AddCoshNodeFunc := LoadFunction('lib3mf_implicitfunction_addcoshnode'); + FLib3MFImplicitFunction_AddTanhNodeFunc := LoadFunction('lib3mf_implicitfunction_addtanhnode'); + FLib3MFImplicitFunction_AddRoundNodeFunc := LoadFunction('lib3mf_implicitfunction_addroundnode'); + FLib3MFImplicitFunction_AddCeilNodeFunc := LoadFunction('lib3mf_implicitfunction_addceilnode'); + FLib3MFImplicitFunction_AddFloorNodeFunc := LoadFunction('lib3mf_implicitfunction_addfloornode'); + FLib3MFImplicitFunction_AddSignNodeFunc := LoadFunction('lib3mf_implicitfunction_addsignnode'); + FLib3MFImplicitFunction_AddFractNodeFunc := LoadFunction('lib3mf_implicitfunction_addfractnode'); + FLib3MFImplicitFunction_AddAbsNodeFunc := LoadFunction('lib3mf_implicitfunction_addabsnode'); + FLib3MFImplicitFunction_AddExpNodeFunc := LoadFunction('lib3mf_implicitfunction_addexpnode'); + FLib3MFImplicitFunction_AddLogNodeFunc := LoadFunction('lib3mf_implicitfunction_addlognode'); + FLib3MFImplicitFunction_AddLog2NodeFunc := LoadFunction('lib3mf_implicitfunction_addlog2node'); + FLib3MFImplicitFunction_AddLog10NodeFunc := LoadFunction('lib3mf_implicitfunction_addlog10node'); + FLib3MFImplicitFunction_AddLengthNodeFunc := LoadFunction('lib3mf_implicitfunction_addlengthnode'); + FLib3MFImplicitFunction_AddTransposeNodeFunc := LoadFunction('lib3mf_implicitfunction_addtransposenode'); + FLib3MFImplicitFunction_InverseNodeFunc := LoadFunction('lib3mf_implicitfunction_inversenode'); + FLib3MFImplicitFunction_AddSqrtNodeFunc := LoadFunction('lib3mf_implicitfunction_addsqrtnode'); + FLib3MFImplicitFunction_AddResourceIdNodeFunc := LoadFunction('lib3mf_implicitfunction_addresourceidnode'); + FLib3MFImplicitFunction_AddAdditionNodeFunc := LoadFunction('lib3mf_implicitfunction_addadditionnode'); + FLib3MFImplicitFunction_AddSubtractionNodeFunc := LoadFunction('lib3mf_implicitfunction_addsubtractionnode'); + FLib3MFImplicitFunction_AddMultiplicationNodeFunc := LoadFunction('lib3mf_implicitfunction_addmultiplicationnode'); + FLib3MFImplicitFunction_AddDivisionNodeFunc := LoadFunction('lib3mf_implicitfunction_adddivisionnode'); + FLib3MFImplicitFunction_AddDotNodeFunc := LoadFunction('lib3mf_implicitfunction_adddotnode'); + FLib3MFImplicitFunction_AddCrossNodeFunc := LoadFunction('lib3mf_implicitfunction_addcrossnode'); + FLib3MFImplicitFunction_AddMatVecMultiplicationNodeFunc := LoadFunction('lib3mf_implicitfunction_addmatvecmultiplicationnode'); + FLib3MFImplicitFunction_AddMinNodeFunc := LoadFunction('lib3mf_implicitfunction_addminnode'); + FLib3MFImplicitFunction_AddMaxNodeFunc := LoadFunction('lib3mf_implicitfunction_addmaxnode'); + FLib3MFImplicitFunction_AddFmodNodeFunc := LoadFunction('lib3mf_implicitfunction_addfmodnode'); + FLib3MFImplicitFunction_AddPowNodeFunc := LoadFunction('lib3mf_implicitfunction_addpownode'); + FLib3MFImplicitFunction_AddSelectNodeFunc := LoadFunction('lib3mf_implicitfunction_addselectnode'); + FLib3MFImplicitFunction_AddClampNodeFunc := LoadFunction('lib3mf_implicitfunction_addclampnode'); + FLib3MFImplicitFunction_AddComposeVectorNodeFunc := LoadFunction('lib3mf_implicitfunction_addcomposevectornode'); + FLib3MFImplicitFunction_AddVectorFromScalarNodeFunc := LoadFunction('lib3mf_implicitfunction_addvectorfromscalarnode'); + FLib3MFImplicitFunction_AddDecomposeVectorNodeFunc := LoadFunction('lib3mf_implicitfunction_adddecomposevectornode'); + FLib3MFImplicitFunction_AddComposeMatrixNodeFunc := LoadFunction('lib3mf_implicitfunction_addcomposematrixnode'); + FLib3MFImplicitFunction_AddMatrixFromRowsNodeFunc := LoadFunction('lib3mf_implicitfunction_addmatrixfromrowsnode'); + FLib3MFImplicitFunction_AddMatrixFromColumnsNodeFunc := LoadFunction('lib3mf_implicitfunction_addmatrixfromcolumnsnode'); + FLib3MFImplicitFunction_AddConstantNodeFunc := LoadFunction('lib3mf_implicitfunction_addconstantnode'); + FLib3MFImplicitFunction_AddConstVecNodeFunc := LoadFunction('lib3mf_implicitfunction_addconstvecnode'); + FLib3MFImplicitFunction_AddConstMatNodeFunc := LoadFunction('lib3mf_implicitfunction_addconstmatnode'); + FLib3MFImplicitFunction_AddMeshNodeFunc := LoadFunction('lib3mf_implicitfunction_addmeshnode'); + FLib3MFImplicitFunction_AddUnsignedMeshNodeFunc := LoadFunction('lib3mf_implicitfunction_addunsignedmeshnode'); + FLib3MFImplicitFunction_AddFunctionCallNodeFunc := LoadFunction('lib3mf_implicitfunction_addfunctioncallnode'); + FLib3MFImplicitFunction_GetNodesFunc := LoadFunction('lib3mf_implicitfunction_getnodes'); + FLib3MFImplicitFunction_RemoveNodeFunc := LoadFunction('lib3mf_implicitfunction_removenode'); + FLib3MFImplicitFunction_AddLinkFunc := LoadFunction('lib3mf_implicitfunction_addlink'); + FLib3MFImplicitFunction_AddLinkByNamesFunc := LoadFunction('lib3mf_implicitfunction_addlinkbynames'); + FLib3MFImplicitFunction_ClearFunc := LoadFunction('lib3mf_implicitfunction_clear'); + FLib3MFImplicitFunction_SortNodesTopologicallyFunc := LoadFunction('lib3mf_implicitfunction_sortnodestopologically'); + FLib3MFFunctionFromImage3D_GetImage3DFunc := LoadFunction('lib3mf_functionfromimage3d_getimage3d'); + FLib3MFFunctionFromImage3D_SetImage3DFunc := LoadFunction('lib3mf_functionfromimage3d_setimage3d'); + FLib3MFFunctionFromImage3D_SetFilterFunc := LoadFunction('lib3mf_functionfromimage3d_setfilter'); + FLib3MFFunctionFromImage3D_GetFilterFunc := LoadFunction('lib3mf_functionfromimage3d_getfilter'); + FLib3MFFunctionFromImage3D_SetTileStylesFunc := LoadFunction('lib3mf_functionfromimage3d_settilestyles'); + FLib3MFFunctionFromImage3D_GetTileStylesFunc := LoadFunction('lib3mf_functionfromimage3d_gettilestyles'); + FLib3MFFunctionFromImage3D_GetOffsetFunc := LoadFunction('lib3mf_functionfromimage3d_getoffset'); + FLib3MFFunctionFromImage3D_SetOffsetFunc := LoadFunction('lib3mf_functionfromimage3d_setoffset'); + FLib3MFFunctionFromImage3D_GetScaleFunc := LoadFunction('lib3mf_functionfromimage3d_getscale'); + FLib3MFFunctionFromImage3D_SetScaleFunc := LoadFunction('lib3mf_functionfromimage3d_setscale'); FLib3MFBuildItem_GetObjectResourceFunc := LoadFunction('lib3mf_builditem_getobjectresource'); FLib3MFBuildItem_GetUUIDFunc := LoadFunction('lib3mf_builditem_getuuid'); FLib3MFBuildItem_SetUUIDFunc := LoadFunction('lib3mf_builditem_setuuid'); @@ -10618,6 +19469,7 @@ implementation FLib3MFModel_GetComponentsObjectByIDFunc := LoadFunction('lib3mf_model_getcomponentsobjectbyid'); FLib3MFModel_GetColorGroupByIDFunc := LoadFunction('lib3mf_model_getcolorgroupbyid'); FLib3MFModel_GetSliceStackByIDFunc := LoadFunction('lib3mf_model_getslicestackbyid'); + FLib3MFModel_GetLevelSetByIDFunc := LoadFunction('lib3mf_model_getlevelsetbyid'); FLib3MFModel_GetBuildUUIDFunc := LoadFunction('lib3mf_model_getbuilduuid'); FLib3MFModel_SetBuildUUIDFunc := LoadFunction('lib3mf_model_setbuilduuid'); FLib3MFModel_GetBuildItemsFunc := LoadFunction('lib3mf_model_getbuilditems'); @@ -10633,7 +19485,9 @@ implementation FLib3MFModel_GetCompositeMaterialsFunc := LoadFunction('lib3mf_model_getcompositematerials'); FLib3MFModel_GetMultiPropertyGroupsFunc := LoadFunction('lib3mf_model_getmultipropertygroups'); FLib3MFModel_GetSliceStacksFunc := LoadFunction('lib3mf_model_getslicestacks'); + FLib3MFModel_GetImage3DsFunc := LoadFunction('lib3mf_model_getimage3ds'); FLib3MFModel_MergeToModelFunc := LoadFunction('lib3mf_model_mergetomodel'); + FLib3MFModel_MergeFromModelFunc := LoadFunction('lib3mf_model_mergefrommodel'); FLib3MFModel_AddMeshObjectFunc := LoadFunction('lib3mf_model_addmeshobject'); FLib3MFModel_AddComponentsObjectFunc := LoadFunction('lib3mf_model_addcomponentsobject'); FLib3MFModel_AddSliceStackFunc := LoadFunction('lib3mf_model_addslicestack'); @@ -10643,6 +19497,8 @@ implementation FLib3MFModel_AddTexture2DGroupFunc := LoadFunction('lib3mf_model_addtexture2dgroup'); FLib3MFModel_AddCompositeMaterialsFunc := LoadFunction('lib3mf_model_addcompositematerials'); FLib3MFModel_AddMultiPropertyGroupFunc := LoadFunction('lib3mf_model_addmultipropertygroup'); + FLib3MFModel_AddImageStackFunc := LoadFunction('lib3mf_model_addimagestack'); + FLib3MFModel_GetImageStackByIDFunc := LoadFunction('lib3mf_model_getimagestackbyid'); FLib3MFModel_AddBuildItemFunc := LoadFunction('lib3mf_model_addbuilditem'); FLib3MFModel_RemoveBuildItemFunc := LoadFunction('lib3mf_model_removebuilditem'); FLib3MFModel_GetMetaDataGroupFunc := LoadFunction('lib3mf_model_getmetadatagroup'); @@ -10659,6 +19515,13 @@ implementation FLib3MFModel_RemoveCustomContentTypeFunc := LoadFunction('lib3mf_model_removecustomcontenttype'); FLib3MFModel_SetRandomNumberCallbackFunc := LoadFunction('lib3mf_model_setrandomnumbercallback'); FLib3MFModel_GetKeyStoreFunc := LoadFunction('lib3mf_model_getkeystore'); + FLib3MFModel_GetFunctionsFunc := LoadFunction('lib3mf_model_getfunctions'); + FLib3MFModel_AddImplicitFunctionFunc := LoadFunction('lib3mf_model_addimplicitfunction'); + FLib3MFModel_AddFunctionFromImage3DFunc := LoadFunction('lib3mf_model_addfunctionfromimage3d'); + FLib3MFModel_AddVolumeDataFunc := LoadFunction('lib3mf_model_addvolumedata'); + FLib3MFModel_AddLevelSetFunc := LoadFunction('lib3mf_model_addlevelset'); + FLib3MFModel_GetLevelSetsFunc := LoadFunction('lib3mf_model_getlevelsets'); + FLib3MFModel_RemoveResourceFunc := LoadFunction('lib3mf_model_removeresource'); FLib3MFGetLibraryVersionFunc := LoadFunction('lib3mf_getlibraryversion'); FLib3MFGetPrereleaseInformationFunc := LoadFunction('lib3mf_getprereleaseinformation'); FLib3MFGetBuildInformationFunc := LoadFunction('lib3mf_getbuildinformation'); @@ -10692,616 +19555,1309 @@ implementation AResult := ALookupMethod(PAnsiChar('lib3mf_base_classtypeid'), @FLib3MFBase_ClassTypeIdFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_writer_writetofile'), @FLib3MFWriter_WriteToFileFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_writer_writetofile'), @FLib3MFWriter_WriteToFileFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_writer_getstreamsize'), @FLib3MFWriter_GetStreamSizeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_writer_writetobuffer'), @FLib3MFWriter_WriteToBufferFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_writer_writetocallback'), @FLib3MFWriter_WriteToCallbackFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_writer_setprogresscallback'), @FLib3MFWriter_SetProgressCallbackFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_writer_getdecimalprecision'), @FLib3MFWriter_GetDecimalPrecisionFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_writer_setdecimalprecision'), @FLib3MFWriter_SetDecimalPrecisionFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_writer_setstrictmodeactive'), @FLib3MFWriter_SetStrictModeActiveFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_writer_getstrictmodeactive'), @FLib3MFWriter_GetStrictModeActiveFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_writer_getwarning'), @FLib3MFWriter_GetWarningFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_writer_getwarningcount'), @FLib3MFWriter_GetWarningCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_writer_addkeywrappingcallback'), @FLib3MFWriter_AddKeyWrappingCallbackFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_writer_setcontentencryptioncallback'), @FLib3MFWriter_SetContentEncryptionCallbackFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_reader_readfromfile'), @FLib3MFReader_ReadFromFileFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_reader_readfrombuffer'), @FLib3MFReader_ReadFromBufferFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_reader_readfromcallback'), @FLib3MFReader_ReadFromCallbackFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_reader_setprogresscallback'), @FLib3MFReader_SetProgressCallbackFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_reader_addrelationtoread'), @FLib3MFReader_AddRelationToReadFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_reader_removerelationtoread'), @FLib3MFReader_RemoveRelationToReadFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_reader_setstrictmodeactive'), @FLib3MFReader_SetStrictModeActiveFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_reader_getstrictmodeactive'), @FLib3MFReader_GetStrictModeActiveFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_reader_getwarning'), @FLib3MFReader_GetWarningFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_reader_getwarningcount'), @FLib3MFReader_GetWarningCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_reader_addkeywrappingcallback'), @FLib3MFReader_AddKeyWrappingCallbackFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_reader_setcontentencryptioncallback'), @FLib3MFReader_SetContentEncryptionCallbackFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_packagepart_getpath'), @FLib3MFPackagePart_GetPathFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_packagepart_setpath'), @FLib3MFPackagePart_SetPathFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_resource_getresourceid'), @FLib3MFResource_GetResourceIDFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_resource_getuniqueresourceid'), @FLib3MFResource_GetUniqueResourceIDFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_resource_packagepart'), @FLib3MFResource_PackagePartFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_resource_setpackagepart'), @FLib3MFResource_SetPackagePartFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_resource_getmodelresourceid'), @FLib3MFResource_GetModelResourceIDFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_resourceiterator_movenext'), @FLib3MFResourceIterator_MoveNextFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_resourceiterator_moveprevious'), @FLib3MFResourceIterator_MovePreviousFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_resourceiterator_getcurrent'), @FLib3MFResourceIterator_GetCurrentFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_resourceiterator_clone'), @FLib3MFResourceIterator_CloneFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_resourceiterator_count'), @FLib3MFResourceIterator_CountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_slicestackiterator_getcurrentslicestack'), @FLib3MFSliceStackIterator_GetCurrentSliceStackFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_objectiterator_getcurrentobject'), @FLib3MFObjectIterator_GetCurrentObjectFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobjectiterator_getcurrentmeshobject'), @FLib3MFMeshObjectIterator_GetCurrentMeshObjectFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_componentsobjectiterator_getcurrentcomponentsobject'), @FLib3MFComponentsObjectIterator_GetCurrentComponentsObjectFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2diterator_getcurrenttexture2d'), @FLib3MFTexture2DIterator_GetCurrentTexture2DFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup'), @FLib3MFBaseMaterialGroupIterator_GetCurrentBaseMaterialGroupFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroupiterator_getcurrentcolorgroup'), @FLib3MFColorGroupIterator_GetCurrentColorGroupFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup'), @FLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerialsiterator_getcurrentcompositematerials'), @FLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup'), @FLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_image3diterator_getcurrentimage3d'), @FLib3MFImage3DIterator_GetCurrentImage3DFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_functioniterator_getcurrentfunction'), @FLib3MFFunctionIterator_GetCurrentFunctionFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelsetiterator_getcurrentlevelset'), @FLib3MFLevelSetIterator_GetCurrentLevelSetFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_getnamespace'), @FLib3MFMetaData_GetNameSpaceFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_setnamespace'), @FLib3MFMetaData_SetNameSpaceFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_getname'), @FLib3MFMetaData_GetNameFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_setname'), @FLib3MFMetaData_SetNameFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_getkey'), @FLib3MFMetaData_GetKeyFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_getmustpreserve'), @FLib3MFMetaData_GetMustPreserveFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_setmustpreserve'), @FLib3MFMetaData_SetMustPreserveFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_gettype'), @FLib3MFMetaData_GetTypeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_settype'), @FLib3MFMetaData_SetTypeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_getvalue'), @FLib3MFMetaData_GetValueFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_setvalue'), @FLib3MFMetaData_SetValueFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadatagroup_getmetadatacount'), @FLib3MFMetaDataGroup_GetMetaDataCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadatagroup_getmetadata'), @FLib3MFMetaDataGroup_GetMetaDataFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadatagroup_getmetadatabykey'), @FLib3MFMetaDataGroup_GetMetaDataByKeyFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadatagroup_removemetadatabyindex'), @FLib3MFMetaDataGroup_RemoveMetaDataByIndexFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadatagroup_removemetadata'), @FLib3MFMetaDataGroup_RemoveMetaDataFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_metadatagroup_addmetadata'), @FLib3MFMetaDataGroup_AddMetaDataFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_gettype'), @FLib3MFObject_GetTypeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_settype'), @FLib3MFObject_SetTypeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_getname'), @FLib3MFObject_GetNameFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_setname'), @FLib3MFObject_SetNameFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_getpartnumber'), @FLib3MFObject_GetPartNumberFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_setpartnumber'), @FLib3MFObject_SetPartNumberFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_ismeshobject'), @FLib3MFObject_IsMeshObjectFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_iscomponentsobject'), @FLib3MFObject_IsComponentsObjectFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_islevelsetobject'), @FLib3MFObject_IsLevelSetObjectFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_isvalid'), @FLib3MFObject_IsValidFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_setattachmentasthumbnail'), @FLib3MFObject_SetAttachmentAsThumbnailFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_getthumbnailattachment'), @FLib3MFObject_GetThumbnailAttachmentFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_clearthumbnailattachment'), @FLib3MFObject_ClearThumbnailAttachmentFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_getoutbox'), @FLib3MFObject_GetOutboxFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_getuuid'), @FLib3MFObject_GetUUIDFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_setuuid'), @FLib3MFObject_SetUUIDFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_getmetadatagroup'), @FLib3MFObject_GetMetaDataGroupFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_setslicesmeshresolution'), @FLib3MFObject_SetSlicesMeshResolutionFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_getslicesmeshresolution'), @FLib3MFObject_GetSlicesMeshResolutionFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_hasslices'), @FLib3MFObject_HasSlicesFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_clearslicestack'), @FLib3MFObject_ClearSliceStackFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_getslicestack'), @FLib3MFObject_GetSliceStackFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_object_assignslicestack'), @FLib3MFObject_AssignSliceStackFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_getvertexcount'), @FLib3MFMeshObject_GetVertexCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_gettrianglecount'), @FLib3MFMeshObject_GetTriangleCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_getvertex'), @FLib3MFMeshObject_GetVertexFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_setvertex'), @FLib3MFMeshObject_SetVertexFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_addvertex'), @FLib3MFMeshObject_AddVertexFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_getvertices'), @FLib3MFMeshObject_GetVerticesFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_gettriangle'), @FLib3MFMeshObject_GetTriangleFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_settriangle'), @FLib3MFMeshObject_SetTriangleFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_addtriangle'), @FLib3MFMeshObject_AddTriangleFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_gettriangleindices'), @FLib3MFMeshObject_GetTriangleIndicesFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_setobjectlevelproperty'), @FLib3MFMeshObject_SetObjectLevelPropertyFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_getobjectlevelproperty'), @FLib3MFMeshObject_GetObjectLevelPropertyFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_settriangleproperties'), @FLib3MFMeshObject_SetTrianglePropertiesFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_gettriangleproperties'), @FLib3MFMeshObject_GetTrianglePropertiesFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_setalltriangleproperties'), @FLib3MFMeshObject_SetAllTrianglePropertiesFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_getalltriangleproperties'), @FLib3MFMeshObject_GetAllTrianglePropertiesFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_clearallproperties'), @FLib3MFMeshObject_ClearAllPropertiesFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_setgeometry'), @FLib3MFMeshObject_SetGeometryFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_ismanifoldandoriented'), @FLib3MFMeshObject_IsManifoldAndOrientedFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_beamlattice'), @FLib3MFMeshObject_BeamLatticeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_getvolumedata'), @FLib3MFMeshObject_GetVolumeDataFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_setvolumedata'), @FLib3MFMeshObject_SetVolumeDataFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_getfunction'), @FLib3MFLevelSet_GetFunctionFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_setfunction'), @FLib3MFLevelSet_SetFunctionFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_gettransform'), @FLib3MFLevelSet_GetTransformFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_settransform'), @FLib3MFLevelSet_SetTransformFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_getchannelname'), @FLib3MFLevelSet_GetChannelNameFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_setchannelname'), @FLib3MFLevelSet_SetChannelNameFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_setminfeaturesize'), @FLib3MFLevelSet_SetMinFeatureSizeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_getminfeaturesize'), @FLib3MFLevelSet_GetMinFeatureSizeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_setfallbackvalue'), @FLib3MFLevelSet_SetFallBackValueFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_getfallbackvalue'), @FLib3MFLevelSet_GetFallBackValueFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_setmeshbboxonly'), @FLib3MFLevelSet_SetMeshBBoxOnlyFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_getmeshbboxonly'), @FLib3MFLevelSet_GetMeshBBoxOnlyFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_setmesh'), @FLib3MFLevelSet_SetMeshFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_getmesh'), @FLib3MFLevelSet_GetMeshFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_getvolumedata'), @FLib3MFLevelSet_GetVolumeDataFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_levelset_setvolumedata'), @FLib3MFLevelSet_SetVolumeDataFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getminlength'), @FLib3MFBeamLattice_GetMinLengthFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setminlength'), @FLib3MFBeamLattice_SetMinLengthFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getclipping'), @FLib3MFBeamLattice_GetClippingFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setclipping'), @FLib3MFBeamLattice_SetClippingFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getrepresentation'), @FLib3MFBeamLattice_GetRepresentationFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setrepresentation'), @FLib3MFBeamLattice_SetRepresentationFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getballoptions'), @FLib3MFBeamLattice_GetBallOptionsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setballoptions'), @FLib3MFBeamLattice_SetBallOptionsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getbeamcount'), @FLib3MFBeamLattice_GetBeamCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getbeam'), @FLib3MFBeamLattice_GetBeamFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_addbeam'), @FLib3MFBeamLattice_AddBeamFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setbeam'), @FLib3MFBeamLattice_SetBeamFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setbeams'), @FLib3MFBeamLattice_SetBeamsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getbeams'), @FLib3MFBeamLattice_GetBeamsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getballcount'), @FLib3MFBeamLattice_GetBallCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getball'), @FLib3MFBeamLattice_GetBallFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_addball'), @FLib3MFBeamLattice_AddBallFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setball'), @FLib3MFBeamLattice_SetBallFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setballs'), @FLib3MFBeamLattice_SetBallsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getballs'), @FLib3MFBeamLattice_GetBallsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getbeamsetcount'), @FLib3MFBeamLattice_GetBeamSetCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_addbeamset'), @FLib3MFBeamLattice_AddBeamSetFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getbeamset'), @FLib3MFBeamLattice_GetBeamSetFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionreference_getfunctionresourceid'), @FLib3MFFunctionReference_GetFunctionResourceIDFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionreference_setfunctionresourceid'), @FLib3MFFunctionReference_SetFunctionResourceIDFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionreference_gettransform'), @FLib3MFFunctionReference_GetTransformFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionreference_settransform'), @FLib3MFFunctionReference_SetTransformFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionreference_getchannelname'), @FLib3MFFunctionReference_GetChannelNameFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionreference_setchannelname'), @FLib3MFFunctionReference_SetChannelNameFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionreference_setminfeaturesize'), @FLib3MFFunctionReference_SetMinFeatureSizeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionreference_getminfeaturesize'), @FLib3MFFunctionReference_GetMinFeatureSizeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionreference_setfallbackvalue'), @FLib3MFFunctionReference_SetFallBackValueFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionreference_getfallbackvalue'), @FLib3MFFunctionReference_GetFallBackValueFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedatacomposite_getbasematerialgroup'), @FLib3MFVolumeDataComposite_GetBaseMaterialGroupFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedatacomposite_setbasematerialgroup'), @FLib3MFVolumeDataComposite_SetBaseMaterialGroupFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedatacomposite_getmaterialmappingcount'), @FLib3MFVolumeDataComposite_GetMaterialMappingCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedatacomposite_getmaterialmapping'), @FLib3MFVolumeDataComposite_GetMaterialMappingFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedatacomposite_addmaterialmapping'), @FLib3MFVolumeDataComposite_AddMaterialMappingFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedatacomposite_removematerialmapping'), @FLib3MFVolumeDataComposite_RemoveMaterialMappingFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedataproperty_getname'), @FLib3MFVolumeDataProperty_GetNameFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedataproperty_setisrequired'), @FLib3MFVolumeDataProperty_SetIsRequiredFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedataproperty_isrequired'), @FLib3MFVolumeDataProperty_IsRequiredFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedata_getcomposite'), @FLib3MFVolumeData_GetCompositeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedata_createnewcomposite'), @FLib3MFVolumeData_CreateNewCompositeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedata_removecomposite'), @FLib3MFVolumeData_RemoveCompositeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedata_getcolor'), @FLib3MFVolumeData_GetColorFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedata_createnewcolor'), @FLib3MFVolumeData_CreateNewColorFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedata_removecolor'), @FLib3MFVolumeData_RemoveColorFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedata_getpropertycount'), @FLib3MFVolumeData_GetPropertyCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedata_getproperty'), @FLib3MFVolumeData_GetPropertyFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedata_addpropertyfromfunction'), @FLib3MFVolumeData_AddPropertyFromFunctionFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_volumedata_removeproperty'), @FLib3MFVolumeData_RemovePropertyFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_component_getobjectresource'), @FLib3MFComponent_GetObjectResourceFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_component_getobjectresourceid'), @FLib3MFComponent_GetObjectResourceIDFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_component_getuuid'), @FLib3MFComponent_GetUUIDFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_component_setuuid'), @FLib3MFComponent_SetUUIDFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_component_hastransform'), @FLib3MFComponent_HasTransformFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_component_gettransform'), @FLib3MFComponent_GetTransformFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_component_settransform'), @FLib3MFComponent_SetTransformFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_componentsobject_addcomponent'), @FLib3MFComponentsObject_AddComponentFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_componentsobject_getcomponent'), @FLib3MFComponentsObject_GetComponentFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_componentsobject_getcomponentcount'), @FLib3MFComponentsObject_GetComponentCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_setname'), @FLib3MFBeamSet_SetNameFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_getname'), @FLib3MFBeamSet_GetNameFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_setidentifier'), @FLib3MFBeamSet_SetIdentifierFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_getidentifier'), @FLib3MFBeamSet_GetIdentifierFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_getreferencecount'), @FLib3MFBeamSet_GetReferenceCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_setreferences'), @FLib3MFBeamSet_SetReferencesFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_getreferences'), @FLib3MFBeamSet_GetReferencesFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_getballreferencecount'), @FLib3MFBeamSet_GetBallReferenceCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_setballreferences'), @FLib3MFBeamSet_SetBallReferencesFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_getballreferences'), @FLib3MFBeamSet_GetBallReferencesFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_getcount'), @FLib3MFBaseMaterialGroup_GetCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_getallpropertyids'), @FLib3MFBaseMaterialGroup_GetAllPropertyIDsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_addmaterial'), @FLib3MFBaseMaterialGroup_AddMaterialFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_removematerial'), @FLib3MFBaseMaterialGroup_RemoveMaterialFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_getname'), @FLib3MFBaseMaterialGroup_GetNameFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_setname'), @FLib3MFBaseMaterialGroup_SetNameFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_setdisplaycolor'), @FLib3MFBaseMaterialGroup_SetDisplayColorFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_getdisplaycolor'), @FLib3MFBaseMaterialGroup_GetDisplayColorFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroup_getcount'), @FLib3MFColorGroup_GetCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroup_getallpropertyids'), @FLib3MFColorGroup_GetAllPropertyIDsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroup_addcolor'), @FLib3MFColorGroup_AddColorFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroup_removecolor'), @FLib3MFColorGroup_RemoveColorFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroup_setcolor'), @FLib3MFColorGroup_SetColorFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroup_getcolor'), @FLib3MFColorGroup_GetColorFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroup_getcount'), @FLib3MFTexture2DGroup_GetCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroup_getallpropertyids'), @FLib3MFTexture2DGroup_GetAllPropertyIDsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroup_addtex2coord'), @FLib3MFTexture2DGroup_AddTex2CoordFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroup_gettex2coord'), @FLib3MFTexture2DGroup_GetTex2CoordFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroup_removetex2coord'), @FLib3MFTexture2DGroup_RemoveTex2CoordFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroup_gettexture2d'), @FLib3MFTexture2DGroup_GetTexture2DFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerials_getcount'), @FLib3MFCompositeMaterials_GetCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerials_getallpropertyids'), @FLib3MFCompositeMaterials_GetAllPropertyIDsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerials_getbasematerialgroup'), @FLib3MFCompositeMaterials_GetBaseMaterialGroupFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerials_addcomposite'), @FLib3MFCompositeMaterials_AddCompositeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerials_removecomposite'), @FLib3MFCompositeMaterials_RemoveCompositeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerials_getcomposite'), @FLib3MFCompositeMaterials_GetCompositeFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_getcount'), @FLib3MFMultiPropertyGroup_GetCountFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_getallpropertyids'), @FLib3MFMultiPropertyGroup_GetAllPropertyIDsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_addmultiproperty'), @FLib3MFMultiPropertyGroup_AddMultiPropertyFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_setmultiproperty'), @FLib3MFMultiPropertyGroup_SetMultiPropertyFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_getmultiproperty'), @FLib3MFMultiPropertyGroup_GetMultiPropertyFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_writer_getstreamsize'), @FLib3MFWriter_GetStreamSizeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_removemultiproperty'), @FLib3MFMultiPropertyGroup_RemoveMultiPropertyFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_writer_writetobuffer'), @FLib3MFWriter_WriteToBufferFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_getlayercount'), @FLib3MFMultiPropertyGroup_GetLayerCountFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_writer_writetocallback'), @FLib3MFWriter_WriteToCallbackFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_addlayer'), @FLib3MFMultiPropertyGroup_AddLayerFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_writer_setprogresscallback'), @FLib3MFWriter_SetProgressCallbackFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_getlayer'), @FLib3MFMultiPropertyGroup_GetLayerFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_writer_getdecimalprecision'), @FLib3MFWriter_GetDecimalPrecisionFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_removelayer'), @FLib3MFMultiPropertyGroup_RemoveLayerFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_writer_setdecimalprecision'), @FLib3MFWriter_SetDecimalPrecisionFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_image3d_getname'), @FLib3MFImage3D_GetNameFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_writer_setstrictmodeactive'), @FLib3MFWriter_SetStrictModeActiveFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_image3d_setname'), @FLib3MFImage3D_SetNameFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_writer_getstrictmodeactive'), @FLib3MFWriter_GetStrictModeActiveFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_image3d_isimagestack'), @FLib3MFImage3D_IsImageStackFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_writer_getwarning'), @FLib3MFWriter_GetWarningFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_imagestack_getrowcount'), @FLib3MFImageStack_GetRowCountFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_writer_getwarningcount'), @FLib3MFWriter_GetWarningCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_imagestack_setrowcount'), @FLib3MFImageStack_SetRowCountFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_writer_addkeywrappingcallback'), @FLib3MFWriter_AddKeyWrappingCallbackFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_imagestack_getcolumncount'), @FLib3MFImageStack_GetColumnCountFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_writer_setcontentencryptioncallback'), @FLib3MFWriter_SetContentEncryptionCallbackFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_imagestack_setcolumncount'), @FLib3MFImageStack_SetColumnCountFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_reader_readfromfile'), @FLib3MFReader_ReadFromFileFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_imagestack_getsheetcount'), @FLib3MFImageStack_GetSheetCountFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_reader_readfrombuffer'), @FLib3MFReader_ReadFromBufferFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_imagestack_getsheet'), @FLib3MFImageStack_GetSheetFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_reader_readfromcallback'), @FLib3MFReader_ReadFromCallbackFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_imagestack_setsheet'), @FLib3MFImageStack_SetSheetFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_reader_setprogresscallback'), @FLib3MFReader_SetProgressCallbackFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_imagestack_createemptysheet'), @FLib3MFImageStack_CreateEmptySheetFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_reader_addrelationtoread'), @FLib3MFReader_AddRelationToReadFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_imagestack_createsheetfrombuffer'), @FLib3MFImageStack_CreateSheetFromBufferFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_reader_removerelationtoread'), @FLib3MFReader_RemoveRelationToReadFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_imagestack_createsheetfromfile'), @FLib3MFImageStack_CreateSheetFromFileFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_reader_setstrictmodeactive'), @FLib3MFReader_SetStrictModeActiveFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_getpath'), @FLib3MFAttachment_GetPathFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_reader_getstrictmodeactive'), @FLib3MFReader_GetStrictModeActiveFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_setpath'), @FLib3MFAttachment_SetPathFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_reader_getwarning'), @FLib3MFReader_GetWarningFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_packagepart'), @FLib3MFAttachment_PackagePartFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_reader_getwarningcount'), @FLib3MFReader_GetWarningCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_getrelationshiptype'), @FLib3MFAttachment_GetRelationShipTypeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_reader_addkeywrappingcallback'), @FLib3MFReader_AddKeyWrappingCallbackFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_setrelationshiptype'), @FLib3MFAttachment_SetRelationShipTypeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_reader_setcontentencryptioncallback'), @FLib3MFReader_SetContentEncryptionCallbackFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_writetofile'), @FLib3MFAttachment_WriteToFileFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_packagepart_getpath'), @FLib3MFPackagePart_GetPathFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_readfromfile'), @FLib3MFAttachment_ReadFromFileFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_packagepart_setpath'), @FLib3MFPackagePart_SetPathFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_readfromcallback'), @FLib3MFAttachment_ReadFromCallbackFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_resource_getresourceid'), @FLib3MFResource_GetResourceIDFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_getstreamsize'), @FLib3MFAttachment_GetStreamSizeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_resource_getuniqueresourceid'), @FLib3MFResource_GetUniqueResourceIDFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_writetobuffer'), @FLib3MFAttachment_WriteToBufferFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_resource_packagepart'), @FLib3MFResource_PackagePartFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_readfrombuffer'), @FLib3MFAttachment_ReadFromBufferFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_resource_setpackagepart'), @FLib3MFResource_SetPackagePartFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_getattachment'), @FLib3MFTexture2D_GetAttachmentFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_resource_getmodelresourceid'), @FLib3MFResource_GetModelResourceIDFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_setattachment'), @FLib3MFTexture2D_SetAttachmentFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_resourceiterator_movenext'), @FLib3MFResourceIterator_MoveNextFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_getcontenttype'), @FLib3MFTexture2D_GetContentTypeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_resourceiterator_moveprevious'), @FLib3MFResourceIterator_MovePreviousFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_setcontenttype'), @FLib3MFTexture2D_SetContentTypeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_resourceiterator_getcurrent'), @FLib3MFResourceIterator_GetCurrentFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_gettilestyleuv'), @FLib3MFTexture2D_GetTileStyleUVFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_resourceiterator_clone'), @FLib3MFResourceIterator_CloneFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_settilestyleuv'), @FLib3MFTexture2D_SetTileStyleUVFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_resourceiterator_count'), @FLib3MFResourceIterator_CountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_getfilter'), @FLib3MFTexture2D_GetFilterFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_slicestackiterator_getcurrentslicestack'), @FLib3MFSliceStackIterator_GetCurrentSliceStackFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_setfilter'), @FLib3MFTexture2D_SetFilterFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_objectiterator_getcurrentobject'), @FLib3MFObjectIterator_GetCurrentObjectFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitport_getidentifier'), @FLib3MFImplicitPort_GetIdentifierFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobjectiterator_getcurrentmeshobject'), @FLib3MFMeshObjectIterator_GetCurrentMeshObjectFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitport_setidentifier'), @FLib3MFImplicitPort_SetIdentifierFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_componentsobjectiterator_getcurrentcomponentsobject'), @FLib3MFComponentsObjectIterator_GetCurrentComponentsObjectFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitport_getdisplayname'), @FLib3MFImplicitPort_GetDisplayNameFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2diterator_getcurrenttexture2d'), @FLib3MFTexture2DIterator_GetCurrentTexture2DFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitport_setdisplayname'), @FLib3MFImplicitPort_SetDisplayNameFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup'), @FLib3MFBaseMaterialGroupIterator_GetCurrentBaseMaterialGroupFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitport_settype'), @FLib3MFImplicitPort_SetTypeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroupiterator_getcurrentcolorgroup'), @FLib3MFColorGroupIterator_GetCurrentColorGroupFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitport_gettype'), @FLib3MFImplicitPort_GetTypeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup'), @FLib3MFTexture2DGroupIterator_GetCurrentTexture2DGroupFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitport_getreference'), @FLib3MFImplicitPort_GetReferenceFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerialsiterator_getcurrentcompositematerials'), @FLib3MFCompositeMaterialsIterator_GetCurrentCompositeMaterialsFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitport_setreference'), @FLib3MFImplicitPort_SetReferenceFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup'), @FLib3MFMultiPropertyGroupIterator_GetCurrentMultiPropertyGroupFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_iterator_movenext'), @FLib3MFIterator_MoveNextFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_getnamespace'), @FLib3MFMetaData_GetNameSpaceFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_iterator_moveprevious'), @FLib3MFIterator_MovePreviousFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_setnamespace'), @FLib3MFMetaData_SetNameSpaceFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_iterator_count'), @FLib3MFIterator_CountFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_getname'), @FLib3MFMetaData_GetNameFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitportiterator_getcurrent'), @FLib3MFImplicitPortIterator_GetCurrentFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_setname'), @FLib3MFMetaData_SetNameFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_getidentifier'), @FLib3MFImplicitNode_GetIdentifierFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_getkey'), @FLib3MFMetaData_GetKeyFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_setidentifier'), @FLib3MFImplicitNode_SetIdentifierFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_getmustpreserve'), @FLib3MFMetaData_GetMustPreserveFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_getdisplayname'), @FLib3MFImplicitNode_GetDisplayNameFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_setmustpreserve'), @FLib3MFMetaData_SetMustPreserveFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_setdisplayname'), @FLib3MFImplicitNode_SetDisplayNameFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_gettype'), @FLib3MFMetaData_GetTypeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_gettag'), @FLib3MFImplicitNode_GetTagFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_settype'), @FLib3MFMetaData_SetTypeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_settag'), @FLib3MFImplicitNode_SetTagFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_getvalue'), @FLib3MFMetaData_GetValueFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_getnodetype'), @FLib3MFImplicitNode_GetNodeTypeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadata_setvalue'), @FLib3MFMetaData_SetValueFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_addinput'), @FLib3MFImplicitNode_AddInputFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadatagroup_getmetadatacount'), @FLib3MFMetaDataGroup_GetMetaDataCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_getinputs'), @FLib3MFImplicitNode_GetInputsFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadatagroup_getmetadata'), @FLib3MFMetaDataGroup_GetMetaDataFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_addoutput'), @FLib3MFImplicitNode_AddOutputFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadatagroup_getmetadatabykey'), @FLib3MFMetaDataGroup_GetMetaDataByKeyFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_getoutputs'), @FLib3MFImplicitNode_GetOutputsFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadatagroup_removemetadatabyindex'), @FLib3MFMetaDataGroup_RemoveMetaDataByIndexFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_findinput'), @FLib3MFImplicitNode_FindInputFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadatagroup_removemetadata'), @FLib3MFMetaDataGroup_RemoveMetaDataFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_findoutput'), @FLib3MFImplicitNode_FindOutputFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_metadatagroup_addmetadata'), @FLib3MFMetaDataGroup_AddMetaDataFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitnode_aretypesvalid'), @FLib3MFImplicitNode_AreTypesValidFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_gettype'), @FLib3MFObject_GetTypeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_oneinputnode_getinputa'), @FLib3MFOneInputNode_GetInputAFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_settype'), @FLib3MFObject_SetTypeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_oneinputnode_getoutputresult'), @FLib3MFOneInputNode_GetOutputResultFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_getname'), @FLib3MFObject_GetNameFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_resourceidnode_setresource'), @FLib3MFResourceIdNode_SetResourceFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_setname'), @FLib3MFObject_SetNameFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_resourceidnode_getresource'), @FLib3MFResourceIdNode_GetResourceFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_getpartnumber'), @FLib3MFObject_GetPartNumberFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_resourceidnode_getoutputvalue'), @FLib3MFResourceIdNode_GetOutputValueFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_setpartnumber'), @FLib3MFObject_SetPartNumberFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_twoinputnode_getinputb'), @FLib3MFTwoInputNode_GetInputBFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_ismeshobject'), @FLib3MFObject_IsMeshObjectFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_selectnode_getinputb'), @FLib3MFSelectNode_GetInputBFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_iscomponentsobject'), @FLib3MFObject_IsComponentsObjectFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_selectnode_getinputc'), @FLib3MFSelectNode_GetInputCFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_isvalid'), @FLib3MFObject_IsValidFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_selectnode_getinputd'), @FLib3MFSelectNode_GetInputDFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_setattachmentasthumbnail'), @FLib3MFObject_SetAttachmentAsThumbnailFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_clampnode_getinputmin'), @FLib3MFClampNode_GetInputMinFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_getthumbnailattachment'), @FLib3MFObject_GetThumbnailAttachmentFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_clampnode_getinputmax'), @FLib3MFClampNode_GetInputMaxFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_clearthumbnailattachment'), @FLib3MFObject_ClearThumbnailAttachmentFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composevectornode_getinputx'), @FLib3MFComposeVectorNode_GetInputXFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_getoutbox'), @FLib3MFObject_GetOutboxFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composevectornode_getinputy'), @FLib3MFComposeVectorNode_GetInputYFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_getuuid'), @FLib3MFObject_GetUUIDFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composevectornode_getinputz'), @FLib3MFComposeVectorNode_GetInputZFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_setuuid'), @FLib3MFObject_SetUUIDFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composevectornode_getoutputresult'), @FLib3MFComposeVectorNode_GetOutputResultFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_getmetadatagroup'), @FLib3MFObject_GetMetaDataGroupFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_decomposevectornode_getinputa'), @FLib3MFDecomposeVectorNode_GetInputAFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_setslicesmeshresolution'), @FLib3MFObject_SetSlicesMeshResolutionFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_decomposevectornode_getoutputx'), @FLib3MFDecomposeVectorNode_GetOutputXFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_getslicesmeshresolution'), @FLib3MFObject_GetSlicesMeshResolutionFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_decomposevectornode_getoutputy'), @FLib3MFDecomposeVectorNode_GetOutputYFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_hasslices'), @FLib3MFObject_HasSlicesFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_decomposevectornode_getoutputz'), @FLib3MFDecomposeVectorNode_GetOutputZFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_clearslicestack'), @FLib3MFObject_ClearSliceStackFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm00'), @FLib3MFComposeMatrixNode_GetInputM00Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_getslicestack'), @FLib3MFObject_GetSliceStackFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm01'), @FLib3MFComposeMatrixNode_GetInputM01Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_object_assignslicestack'), @FLib3MFObject_AssignSliceStackFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm02'), @FLib3MFComposeMatrixNode_GetInputM02Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_getvertexcount'), @FLib3MFMeshObject_GetVertexCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm03'), @FLib3MFComposeMatrixNode_GetInputM03Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_gettrianglecount'), @FLib3MFMeshObject_GetTriangleCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm10'), @FLib3MFComposeMatrixNode_GetInputM10Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_getvertex'), @FLib3MFMeshObject_GetVertexFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm11'), @FLib3MFComposeMatrixNode_GetInputM11Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_setvertex'), @FLib3MFMeshObject_SetVertexFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm12'), @FLib3MFComposeMatrixNode_GetInputM12Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_addvertex'), @FLib3MFMeshObject_AddVertexFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm13'), @FLib3MFComposeMatrixNode_GetInputM13Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_getvertices'), @FLib3MFMeshObject_GetVerticesFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm20'), @FLib3MFComposeMatrixNode_GetInputM20Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_gettriangle'), @FLib3MFMeshObject_GetTriangleFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm21'), @FLib3MFComposeMatrixNode_GetInputM21Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_settriangle'), @FLib3MFMeshObject_SetTriangleFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm22'), @FLib3MFComposeMatrixNode_GetInputM22Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_addtriangle'), @FLib3MFMeshObject_AddTriangleFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm23'), @FLib3MFComposeMatrixNode_GetInputM23Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_gettriangleindices'), @FLib3MFMeshObject_GetTriangleIndicesFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm30'), @FLib3MFComposeMatrixNode_GetInputM30Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_setobjectlevelproperty'), @FLib3MFMeshObject_SetObjectLevelPropertyFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm31'), @FLib3MFComposeMatrixNode_GetInputM31Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_getobjectlevelproperty'), @FLib3MFMeshObject_GetObjectLevelPropertyFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm32'), @FLib3MFComposeMatrixNode_GetInputM32Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_settriangleproperties'), @FLib3MFMeshObject_SetTrianglePropertiesFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getinputm33'), @FLib3MFComposeMatrixNode_GetInputM33Func); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_gettriangleproperties'), @FLib3MFMeshObject_GetTrianglePropertiesFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_composematrixnode_getoutputresult'), @FLib3MFComposeMatrixNode_GetOutputResultFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_setalltriangleproperties'), @FLib3MFMeshObject_SetAllTrianglePropertiesFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_matrixfromrowsnode_getinputa'), @FLib3MFMatrixFromRowsNode_GetInputAFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_getalltriangleproperties'), @FLib3MFMeshObject_GetAllTrianglePropertiesFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_matrixfromrowsnode_getinputb'), @FLib3MFMatrixFromRowsNode_GetInputBFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_clearallproperties'), @FLib3MFMeshObject_ClearAllPropertiesFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_matrixfromrowsnode_getinputc'), @FLib3MFMatrixFromRowsNode_GetInputCFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_setgeometry'), @FLib3MFMeshObject_SetGeometryFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_matrixfromrowsnode_getinputd'), @FLib3MFMatrixFromRowsNode_GetInputDFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_ismanifoldandoriented'), @FLib3MFMeshObject_IsManifoldAndOrientedFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_matrixfromrowsnode_getoutputresult'), @FLib3MFMatrixFromRowsNode_GetOutputResultFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_meshobject_beamlattice'), @FLib3MFMeshObject_BeamLatticeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_matrixfromcolumnsnode_getinputa'), @FLib3MFMatrixFromColumnsNode_GetInputAFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getminlength'), @FLib3MFBeamLattice_GetMinLengthFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_matrixfromcolumnsnode_getinputb'), @FLib3MFMatrixFromColumnsNode_GetInputBFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setminlength'), @FLib3MFBeamLattice_SetMinLengthFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_matrixfromcolumnsnode_getinputc'), @FLib3MFMatrixFromColumnsNode_GetInputCFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getclipping'), @FLib3MFBeamLattice_GetClippingFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_matrixfromcolumnsnode_getinputd'), @FLib3MFMatrixFromColumnsNode_GetInputDFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setclipping'), @FLib3MFBeamLattice_SetClippingFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_matrixfromcolumnsnode_getoutputresult'), @FLib3MFMatrixFromColumnsNode_GetOutputResultFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getrepresentation'), @FLib3MFBeamLattice_GetRepresentationFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_constantnode_setconstant'), @FLib3MFConstantNode_SetConstantFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setrepresentation'), @FLib3MFBeamLattice_SetRepresentationFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_constantnode_getconstant'), @FLib3MFConstantNode_GetConstantFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getballoptions'), @FLib3MFBeamLattice_GetBallOptionsFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_constantnode_getoutputvalue'), @FLib3MFConstantNode_GetOutputValueFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setballoptions'), @FLib3MFBeamLattice_SetBallOptionsFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_constvecnode_setvector'), @FLib3MFConstVecNode_SetVectorFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getbeamcount'), @FLib3MFBeamLattice_GetBeamCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_constvecnode_getvector'), @FLib3MFConstVecNode_GetVectorFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getbeam'), @FLib3MFBeamLattice_GetBeamFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_constvecnode_getoutputvector'), @FLib3MFConstVecNode_GetOutputVectorFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_addbeam'), @FLib3MFBeamLattice_AddBeamFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_constmatnode_setmatrix'), @FLib3MFConstMatNode_SetMatrixFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setbeam'), @FLib3MFBeamLattice_SetBeamFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_constmatnode_getmatrix'), @FLib3MFConstMatNode_GetMatrixFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setbeams'), @FLib3MFBeamLattice_SetBeamsFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_constmatnode_getoutputmatrix'), @FLib3MFConstMatNode_GetOutputMatrixFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getbeams'), @FLib3MFBeamLattice_GetBeamsFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshnode_getinputmesh'), @FLib3MFMeshNode_GetInputMeshFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getballcount'), @FLib3MFBeamLattice_GetBallCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshnode_getinputpos'), @FLib3MFMeshNode_GetInputPosFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getball'), @FLib3MFBeamLattice_GetBallFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_meshnode_getoutputdistance'), @FLib3MFMeshNode_GetOutputDistanceFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_addball'), @FLib3MFBeamLattice_AddBallFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_unsignedmeshnode_getinputmesh'), @FLib3MFUnsignedMeshNode_GetInputMeshFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setball'), @FLib3MFBeamLattice_SetBallFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_unsignedmeshnode_getinputpos'), @FLib3MFUnsignedMeshNode_GetInputPosFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_setballs'), @FLib3MFBeamLattice_SetBallsFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_unsignedmeshnode_getoutputdistance'), @FLib3MFUnsignedMeshNode_GetOutputDistanceFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getballs'), @FLib3MFBeamLattice_GetBallsFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_functioncallnode_getinputfunctionid'), @FLib3MFFunctionCallNode_GetInputFunctionIDFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getbeamsetcount'), @FLib3MFBeamLattice_GetBeamSetCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_nodeiterator_getcurrent'), @FLib3MFNodeIterator_GetCurrentFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_addbeamset'), @FLib3MFBeamLattice_AddBeamSetFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_function_getdisplayname'), @FLib3MFFunction_GetDisplayNameFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamlattice_getbeamset'), @FLib3MFBeamLattice_GetBeamSetFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_function_setdisplayname'), @FLib3MFFunction_SetDisplayNameFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_component_getobjectresource'), @FLib3MFComponent_GetObjectResourceFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_function_addinput'), @FLib3MFFunction_AddInputFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_component_getobjectresourceid'), @FLib3MFComponent_GetObjectResourceIDFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_function_getinputs'), @FLib3MFFunction_GetInputsFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_component_getuuid'), @FLib3MFComponent_GetUUIDFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_function_removeinput'), @FLib3MFFunction_RemoveInputFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_component_setuuid'), @FLib3MFComponent_SetUUIDFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_function_addoutput'), @FLib3MFFunction_AddOutputFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_component_hastransform'), @FLib3MFComponent_HasTransformFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_function_getoutputs'), @FLib3MFFunction_GetOutputsFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_component_gettransform'), @FLib3MFComponent_GetTransformFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_function_removeoutput'), @FLib3MFFunction_RemoveOutputFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_component_settransform'), @FLib3MFComponent_SetTransformFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_function_findinput'), @FLib3MFFunction_FindInputFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_componentsobject_addcomponent'), @FLib3MFComponentsObject_AddComponentFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_function_findoutput'), @FLib3MFFunction_FindOutputFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_componentsobject_getcomponent'), @FLib3MFComponentsObject_GetComponentFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_getidentifier'), @FLib3MFImplicitFunction_GetIdentifierFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_componentsobject_getcomponentcount'), @FLib3MFComponentsObject_GetComponentCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_setidentifier'), @FLib3MFImplicitFunction_SetIdentifierFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_setname'), @FLib3MFBeamSet_SetNameFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addnode'), @FLib3MFImplicitFunction_AddNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_getname'), @FLib3MFBeamSet_GetNameFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addsinnode'), @FLib3MFImplicitFunction_AddSinNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_setidentifier'), @FLib3MFBeamSet_SetIdentifierFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addcosnode'), @FLib3MFImplicitFunction_AddCosNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_getidentifier'), @FLib3MFBeamSet_GetIdentifierFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addtannode'), @FLib3MFImplicitFunction_AddTanNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_getreferencecount'), @FLib3MFBeamSet_GetReferenceCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addarcsinnode'), @FLib3MFImplicitFunction_AddArcSinNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_setreferences'), @FLib3MFBeamSet_SetReferencesFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addarccosnode'), @FLib3MFImplicitFunction_AddArcCosNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_getreferences'), @FLib3MFBeamSet_GetReferencesFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addarctan2node'), @FLib3MFImplicitFunction_AddArcTan2NodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_getballreferencecount'), @FLib3MFBeamSet_GetBallReferenceCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addsinhnode'), @FLib3MFImplicitFunction_AddSinhNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_setballreferences'), @FLib3MFBeamSet_SetBallReferencesFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addcoshnode'), @FLib3MFImplicitFunction_AddCoshNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_beamset_getballreferences'), @FLib3MFBeamSet_GetBallReferencesFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addtanhnode'), @FLib3MFImplicitFunction_AddTanhNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_getcount'), @FLib3MFBaseMaterialGroup_GetCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addroundnode'), @FLib3MFImplicitFunction_AddRoundNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_getallpropertyids'), @FLib3MFBaseMaterialGroup_GetAllPropertyIDsFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addceilnode'), @FLib3MFImplicitFunction_AddCeilNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_addmaterial'), @FLib3MFBaseMaterialGroup_AddMaterialFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addfloornode'), @FLib3MFImplicitFunction_AddFloorNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_removematerial'), @FLib3MFBaseMaterialGroup_RemoveMaterialFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addsignnode'), @FLib3MFImplicitFunction_AddSignNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_getname'), @FLib3MFBaseMaterialGroup_GetNameFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addfractnode'), @FLib3MFImplicitFunction_AddFractNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_setname'), @FLib3MFBaseMaterialGroup_SetNameFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addabsnode'), @FLib3MFImplicitFunction_AddAbsNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_setdisplaycolor'), @FLib3MFBaseMaterialGroup_SetDisplayColorFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addexpnode'), @FLib3MFImplicitFunction_AddExpNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_basematerialgroup_getdisplaycolor'), @FLib3MFBaseMaterialGroup_GetDisplayColorFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addlognode'), @FLib3MFImplicitFunction_AddLogNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroup_getcount'), @FLib3MFColorGroup_GetCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addlog2node'), @FLib3MFImplicitFunction_AddLog2NodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroup_getallpropertyids'), @FLib3MFColorGroup_GetAllPropertyIDsFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addlog10node'), @FLib3MFImplicitFunction_AddLog10NodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroup_addcolor'), @FLib3MFColorGroup_AddColorFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addlengthnode'), @FLib3MFImplicitFunction_AddLengthNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroup_removecolor'), @FLib3MFColorGroup_RemoveColorFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addtransposenode'), @FLib3MFImplicitFunction_AddTransposeNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroup_setcolor'), @FLib3MFColorGroup_SetColorFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_inversenode'), @FLib3MFImplicitFunction_InverseNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_colorgroup_getcolor'), @FLib3MFColorGroup_GetColorFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addsqrtnode'), @FLib3MFImplicitFunction_AddSqrtNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroup_getcount'), @FLib3MFTexture2DGroup_GetCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addresourceidnode'), @FLib3MFImplicitFunction_AddResourceIdNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroup_getallpropertyids'), @FLib3MFTexture2DGroup_GetAllPropertyIDsFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addadditionnode'), @FLib3MFImplicitFunction_AddAdditionNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroup_addtex2coord'), @FLib3MFTexture2DGroup_AddTex2CoordFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addsubtractionnode'), @FLib3MFImplicitFunction_AddSubtractionNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroup_gettex2coord'), @FLib3MFTexture2DGroup_GetTex2CoordFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addmultiplicationnode'), @FLib3MFImplicitFunction_AddMultiplicationNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroup_removetex2coord'), @FLib3MFTexture2DGroup_RemoveTex2CoordFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_adddivisionnode'), @FLib3MFImplicitFunction_AddDivisionNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2dgroup_gettexture2d'), @FLib3MFTexture2DGroup_GetTexture2DFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_adddotnode'), @FLib3MFImplicitFunction_AddDotNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerials_getcount'), @FLib3MFCompositeMaterials_GetCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addcrossnode'), @FLib3MFImplicitFunction_AddCrossNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerials_getallpropertyids'), @FLib3MFCompositeMaterials_GetAllPropertyIDsFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addmatvecmultiplicationnode'), @FLib3MFImplicitFunction_AddMatVecMultiplicationNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerials_getbasematerialgroup'), @FLib3MFCompositeMaterials_GetBaseMaterialGroupFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addminnode'), @FLib3MFImplicitFunction_AddMinNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerials_addcomposite'), @FLib3MFCompositeMaterials_AddCompositeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addmaxnode'), @FLib3MFImplicitFunction_AddMaxNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerials_removecomposite'), @FLib3MFCompositeMaterials_RemoveCompositeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addfmodnode'), @FLib3MFImplicitFunction_AddFmodNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_compositematerials_getcomposite'), @FLib3MFCompositeMaterials_GetCompositeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addpownode'), @FLib3MFImplicitFunction_AddPowNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_getcount'), @FLib3MFMultiPropertyGroup_GetCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addselectnode'), @FLib3MFImplicitFunction_AddSelectNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_getallpropertyids'), @FLib3MFMultiPropertyGroup_GetAllPropertyIDsFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addclampnode'), @FLib3MFImplicitFunction_AddClampNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_addmultiproperty'), @FLib3MFMultiPropertyGroup_AddMultiPropertyFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addcomposevectornode'), @FLib3MFImplicitFunction_AddComposeVectorNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_setmultiproperty'), @FLib3MFMultiPropertyGroup_SetMultiPropertyFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addvectorfromscalarnode'), @FLib3MFImplicitFunction_AddVectorFromScalarNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_getmultiproperty'), @FLib3MFMultiPropertyGroup_GetMultiPropertyFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_adddecomposevectornode'), @FLib3MFImplicitFunction_AddDecomposeVectorNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_removemultiproperty'), @FLib3MFMultiPropertyGroup_RemoveMultiPropertyFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addcomposematrixnode'), @FLib3MFImplicitFunction_AddComposeMatrixNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_getlayercount'), @FLib3MFMultiPropertyGroup_GetLayerCountFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addmatrixfromrowsnode'), @FLib3MFImplicitFunction_AddMatrixFromRowsNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_addlayer'), @FLib3MFMultiPropertyGroup_AddLayerFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addmatrixfromcolumnsnode'), @FLib3MFImplicitFunction_AddMatrixFromColumnsNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_getlayer'), @FLib3MFMultiPropertyGroup_GetLayerFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addconstantnode'), @FLib3MFImplicitFunction_AddConstantNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_multipropertygroup_removelayer'), @FLib3MFMultiPropertyGroup_RemoveLayerFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addconstvecnode'), @FLib3MFImplicitFunction_AddConstVecNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_getpath'), @FLib3MFAttachment_GetPathFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addconstmatnode'), @FLib3MFImplicitFunction_AddConstMatNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_setpath'), @FLib3MFAttachment_SetPathFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addmeshnode'), @FLib3MFImplicitFunction_AddMeshNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_packagepart'), @FLib3MFAttachment_PackagePartFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addunsignedmeshnode'), @FLib3MFImplicitFunction_AddUnsignedMeshNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_getrelationshiptype'), @FLib3MFAttachment_GetRelationShipTypeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addfunctioncallnode'), @FLib3MFImplicitFunction_AddFunctionCallNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_setrelationshiptype'), @FLib3MFAttachment_SetRelationShipTypeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_getnodes'), @FLib3MFImplicitFunction_GetNodesFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_writetofile'), @FLib3MFAttachment_WriteToFileFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_removenode'), @FLib3MFImplicitFunction_RemoveNodeFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_readfromfile'), @FLib3MFAttachment_ReadFromFileFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addlink'), @FLib3MFImplicitFunction_AddLinkFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_readfromcallback'), @FLib3MFAttachment_ReadFromCallbackFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_addlinkbynames'), @FLib3MFImplicitFunction_AddLinkByNamesFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_getstreamsize'), @FLib3MFAttachment_GetStreamSizeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_clear'), @FLib3MFImplicitFunction_ClearFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_writetobuffer'), @FLib3MFAttachment_WriteToBufferFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_implicitfunction_sortnodestopologically'), @FLib3MFImplicitFunction_SortNodesTopologicallyFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_attachment_readfrombuffer'), @FLib3MFAttachment_ReadFromBufferFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionfromimage3d_getimage3d'), @FLib3MFFunctionFromImage3D_GetImage3DFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_getattachment'), @FLib3MFTexture2D_GetAttachmentFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionfromimage3d_setimage3d'), @FLib3MFFunctionFromImage3D_SetImage3DFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_setattachment'), @FLib3MFTexture2D_SetAttachmentFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionfromimage3d_setfilter'), @FLib3MFFunctionFromImage3D_SetFilterFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_getcontenttype'), @FLib3MFTexture2D_GetContentTypeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionfromimage3d_getfilter'), @FLib3MFFunctionFromImage3D_GetFilterFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_setcontenttype'), @FLib3MFTexture2D_SetContentTypeFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionfromimage3d_settilestyles'), @FLib3MFFunctionFromImage3D_SetTileStylesFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_gettilestyleuv'), @FLib3MFTexture2D_GetTileStyleUVFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionfromimage3d_gettilestyles'), @FLib3MFFunctionFromImage3D_GetTileStylesFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_settilestyleuv'), @FLib3MFTexture2D_SetTileStyleUVFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionfromimage3d_getoffset'), @FLib3MFFunctionFromImage3D_GetOffsetFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_getfilter'), @FLib3MFTexture2D_GetFilterFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionfromimage3d_setoffset'), @FLib3MFFunctionFromImage3D_SetOffsetFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); - AResult := ALookupMethod(PAnsiChar('lib3mf_texture2d_setfilter'), @FLib3MFTexture2D_SetFilterFunc); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionfromimage3d_getscale'), @FLib3MFFunctionFromImage3D_GetScaleFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_functionfromimage3d_setscale'), @FLib3MFFunctionFromImage3D_SetScaleFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); AResult := ALookupMethod(PAnsiChar('lib3mf_builditem_getobjectresource'), @FLib3MFBuildItem_GetObjectResourceFunc); @@ -11584,6 +21140,9 @@ implementation if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); AResult := ALookupMethod(PAnsiChar('lib3mf_model_getslicestackbyid'), @FLib3MFModel_GetSliceStackByIDFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_model_getlevelsetbyid'), @FLib3MFModel_GetLevelSetByIDFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); AResult := ALookupMethod(PAnsiChar('lib3mf_model_getbuilduuid'), @FLib3MFModel_GetBuildUUIDFunc); @@ -11629,9 +21188,15 @@ implementation if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); AResult := ALookupMethod(PAnsiChar('lib3mf_model_getslicestacks'), @FLib3MFModel_GetSliceStacksFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_model_getimage3ds'), @FLib3MFModel_GetImage3DsFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); AResult := ALookupMethod(PAnsiChar('lib3mf_model_mergetomodel'), @FLib3MFModel_MergeToModelFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_model_mergefrommodel'), @FLib3MFModel_MergeFromModelFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); AResult := ALookupMethod(PAnsiChar('lib3mf_model_addmeshobject'), @FLib3MFModel_AddMeshObjectFunc); @@ -11659,6 +21224,12 @@ implementation if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); AResult := ALookupMethod(PAnsiChar('lib3mf_model_addmultipropertygroup'), @FLib3MFModel_AddMultiPropertyGroupFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_model_addimagestack'), @FLib3MFModel_AddImageStackFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_model_getimagestackbyid'), @FLib3MFModel_GetImageStackByIDFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); AResult := ALookupMethod(PAnsiChar('lib3mf_model_addbuilditem'), @FLib3MFModel_AddBuildItemFunc); @@ -11707,6 +21278,27 @@ implementation if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); AResult := ALookupMethod(PAnsiChar('lib3mf_model_getkeystore'), @FLib3MFModel_GetKeyStoreFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_model_getfunctions'), @FLib3MFModel_GetFunctionsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_model_addimplicitfunction'), @FLib3MFModel_AddImplicitFunctionFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_model_addfunctionfromimage3d'), @FLib3MFModel_AddFunctionFromImage3DFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_model_addvolumedata'), @FLib3MFModel_AddVolumeDataFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_model_addlevelset'), @FLib3MFModel_AddLevelSetFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_model_getlevelsets'), @FLib3MFModel_GetLevelSetsFunc); + if AResult <> LIB3MF_SUCCESS then + raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); + AResult := ALookupMethod(PAnsiChar('lib3mf_model_removeresource'), @FLib3MFModel_RemoveResourceFunc); if AResult <> LIB3MF_SUCCESS then raise ELib3MFException.CreateCustomMessage(LIB3MF_ERROR_COULDNOTLOADLIBRARY, ''); AResult := ALookupMethod(PAnsiChar('lib3mf_getlibraryversion'), @FLib3MFGetLibraryVersionFunc); diff --git a/Autogenerated/Bindings/Python/Lib3MF.py b/Autogenerated/Bindings/Python/Lib3MF.py index 1b5e6d2fd..e3d29b734 100644 --- a/Autogenerated/Bindings/Python/Lib3MF.py +++ b/Autogenerated/Bindings/Python/Lib3MF.py @@ -1,6 +1,6 @@ '''++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ Abstract: This is an autogenerated Python file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 ''' @@ -57,8 +57,8 @@ def __str__(self): ''' class BindingVersion(enum.IntEnum): MAJOR = 2 - MINOR = 3 - MICRO = 2 + MINOR = 4 + MICRO = 0 '''Definition Error Codes ''' @@ -100,6 +100,7 @@ class ErrorCodes(enum.IntEnum): UNKOWNPROGRESSIDENTIFIER = 140 ELEMENTCOUNTEXCEEDSLIMIT = 141 INVALIDRESOURCE = 142 + INVALIDLEVELSET = 143 BEAMLATTICE_INVALID_OBJECTTYPE = 2000 INVALIDKEYSTORE = 3000 INVALIDKEYSTORECONSUMER = 3001 @@ -107,6 +108,10 @@ class ErrorCodes(enum.IntEnum): KEYSTORERESOURCEDATANOTFOUND = 3003 SECURECONTEXTNOTREGISTERED = 3004 INVALIDKEYSIZE = 3005 + INCOMPATIBLEPORTTYPES = 4000 + GRAPHISCYCLIC = 4001 + INPUTNOTSET = 4002 + INVALIDNODECONFIGURATION = 4003 '''Definition of Function Table ''' @@ -178,6 +183,9 @@ class FunctionTable: lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup = None lib3mf_compositematerialsiterator_getcurrentcompositematerials = None lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup = None + lib3mf_image3diterator_getcurrentimage3d = None + lib3mf_functioniterator_getcurrentfunction = None + lib3mf_levelsetiterator_getcurrentlevelset = None lib3mf_metadata_getnamespace = None lib3mf_metadata_setnamespace = None lib3mf_metadata_getname = None @@ -203,6 +211,7 @@ class FunctionTable: lib3mf_object_setpartnumber = None lib3mf_object_ismeshobject = None lib3mf_object_iscomponentsobject = None + lib3mf_object_islevelsetobject = None lib3mf_object_isvalid = None lib3mf_object_setattachmentasthumbnail = None lib3mf_object_getthumbnailattachment = None @@ -237,6 +246,24 @@ class FunctionTable: lib3mf_meshobject_setgeometry = None lib3mf_meshobject_ismanifoldandoriented = None lib3mf_meshobject_beamlattice = None + lib3mf_meshobject_getvolumedata = None + lib3mf_meshobject_setvolumedata = None + lib3mf_levelset_getfunction = None + lib3mf_levelset_setfunction = None + lib3mf_levelset_gettransform = None + lib3mf_levelset_settransform = None + lib3mf_levelset_getchannelname = None + lib3mf_levelset_setchannelname = None + lib3mf_levelset_setminfeaturesize = None + lib3mf_levelset_getminfeaturesize = None + lib3mf_levelset_setfallbackvalue = None + lib3mf_levelset_getfallbackvalue = None + lib3mf_levelset_setmeshbboxonly = None + lib3mf_levelset_getmeshbboxonly = None + lib3mf_levelset_setmesh = None + lib3mf_levelset_getmesh = None + lib3mf_levelset_getvolumedata = None + lib3mf_levelset_setvolumedata = None lib3mf_beamlattice_getminlength = None lib3mf_beamlattice_setminlength = None lib3mf_beamlattice_getclipping = None @@ -260,6 +287,35 @@ class FunctionTable: lib3mf_beamlattice_getbeamsetcount = None lib3mf_beamlattice_addbeamset = None lib3mf_beamlattice_getbeamset = None + lib3mf_functionreference_getfunctionresourceid = None + lib3mf_functionreference_setfunctionresourceid = None + lib3mf_functionreference_gettransform = None + lib3mf_functionreference_settransform = None + lib3mf_functionreference_getchannelname = None + lib3mf_functionreference_setchannelname = None + lib3mf_functionreference_setminfeaturesize = None + lib3mf_functionreference_getminfeaturesize = None + lib3mf_functionreference_setfallbackvalue = None + lib3mf_functionreference_getfallbackvalue = None + lib3mf_volumedatacomposite_getbasematerialgroup = None + lib3mf_volumedatacomposite_setbasematerialgroup = None + lib3mf_volumedatacomposite_getmaterialmappingcount = None + lib3mf_volumedatacomposite_getmaterialmapping = None + lib3mf_volumedatacomposite_addmaterialmapping = None + lib3mf_volumedatacomposite_removematerialmapping = None + lib3mf_volumedataproperty_getname = None + lib3mf_volumedataproperty_setisrequired = None + lib3mf_volumedataproperty_isrequired = None + lib3mf_volumedata_getcomposite = None + lib3mf_volumedata_createnewcomposite = None + lib3mf_volumedata_removecomposite = None + lib3mf_volumedata_getcolor = None + lib3mf_volumedata_createnewcolor = None + lib3mf_volumedata_removecolor = None + lib3mf_volumedata_getpropertycount = None + lib3mf_volumedata_getproperty = None + lib3mf_volumedata_addpropertyfromfunction = None + lib3mf_volumedata_removeproperty = None lib3mf_component_getobjectresource = None lib3mf_component_getobjectresourceid = None lib3mf_component_getuuid = None @@ -316,6 +372,19 @@ class FunctionTable: lib3mf_multipropertygroup_addlayer = None lib3mf_multipropertygroup_getlayer = None lib3mf_multipropertygroup_removelayer = None + lib3mf_image3d_getname = None + lib3mf_image3d_setname = None + lib3mf_image3d_isimagestack = None + lib3mf_imagestack_getrowcount = None + lib3mf_imagestack_setrowcount = None + lib3mf_imagestack_getcolumncount = None + lib3mf_imagestack_setcolumncount = None + lib3mf_imagestack_getsheetcount = None + lib3mf_imagestack_getsheet = None + lib3mf_imagestack_setsheet = None + lib3mf_imagestack_createemptysheet = None + lib3mf_imagestack_createsheetfrombuffer = None + lib3mf_imagestack_createsheetfromfile = None lib3mf_attachment_getpath = None lib3mf_attachment_setpath = None lib3mf_attachment_packagepart = None @@ -335,6 +404,173 @@ class FunctionTable: lib3mf_texture2d_settilestyleuv = None lib3mf_texture2d_getfilter = None lib3mf_texture2d_setfilter = None + lib3mf_implicitport_getidentifier = None + lib3mf_implicitport_setidentifier = None + lib3mf_implicitport_getdisplayname = None + lib3mf_implicitport_setdisplayname = None + lib3mf_implicitport_settype = None + lib3mf_implicitport_gettype = None + lib3mf_implicitport_getreference = None + lib3mf_implicitport_setreference = None + lib3mf_iterator_movenext = None + lib3mf_iterator_moveprevious = None + lib3mf_iterator_count = None + lib3mf_implicitportiterator_getcurrent = None + lib3mf_implicitnode_getidentifier = None + lib3mf_implicitnode_setidentifier = None + lib3mf_implicitnode_getdisplayname = None + lib3mf_implicitnode_setdisplayname = None + lib3mf_implicitnode_gettag = None + lib3mf_implicitnode_settag = None + lib3mf_implicitnode_getnodetype = None + lib3mf_implicitnode_addinput = None + lib3mf_implicitnode_getinputs = None + lib3mf_implicitnode_addoutput = None + lib3mf_implicitnode_getoutputs = None + lib3mf_implicitnode_findinput = None + lib3mf_implicitnode_findoutput = None + lib3mf_implicitnode_aretypesvalid = None + lib3mf_oneinputnode_getinputa = None + lib3mf_oneinputnode_getoutputresult = None + lib3mf_resourceidnode_setresource = None + lib3mf_resourceidnode_getresource = None + lib3mf_resourceidnode_getoutputvalue = None + lib3mf_twoinputnode_getinputb = None + lib3mf_selectnode_getinputb = None + lib3mf_selectnode_getinputc = None + lib3mf_selectnode_getinputd = None + lib3mf_clampnode_getinputmin = None + lib3mf_clampnode_getinputmax = None + lib3mf_composevectornode_getinputx = None + lib3mf_composevectornode_getinputy = None + lib3mf_composevectornode_getinputz = None + lib3mf_composevectornode_getoutputresult = None + lib3mf_decomposevectornode_getinputa = None + lib3mf_decomposevectornode_getoutputx = None + lib3mf_decomposevectornode_getoutputy = None + lib3mf_decomposevectornode_getoutputz = None + lib3mf_composematrixnode_getinputm00 = None + lib3mf_composematrixnode_getinputm01 = None + lib3mf_composematrixnode_getinputm02 = None + lib3mf_composematrixnode_getinputm03 = None + lib3mf_composematrixnode_getinputm10 = None + lib3mf_composematrixnode_getinputm11 = None + lib3mf_composematrixnode_getinputm12 = None + lib3mf_composematrixnode_getinputm13 = None + lib3mf_composematrixnode_getinputm20 = None + lib3mf_composematrixnode_getinputm21 = None + lib3mf_composematrixnode_getinputm22 = None + lib3mf_composematrixnode_getinputm23 = None + lib3mf_composematrixnode_getinputm30 = None + lib3mf_composematrixnode_getinputm31 = None + lib3mf_composematrixnode_getinputm32 = None + lib3mf_composematrixnode_getinputm33 = None + lib3mf_composematrixnode_getoutputresult = None + lib3mf_matrixfromrowsnode_getinputa = None + lib3mf_matrixfromrowsnode_getinputb = None + lib3mf_matrixfromrowsnode_getinputc = None + lib3mf_matrixfromrowsnode_getinputd = None + lib3mf_matrixfromrowsnode_getoutputresult = None + lib3mf_matrixfromcolumnsnode_getinputa = None + lib3mf_matrixfromcolumnsnode_getinputb = None + lib3mf_matrixfromcolumnsnode_getinputc = None + lib3mf_matrixfromcolumnsnode_getinputd = None + lib3mf_matrixfromcolumnsnode_getoutputresult = None + lib3mf_constantnode_setconstant = None + lib3mf_constantnode_getconstant = None + lib3mf_constantnode_getoutputvalue = None + lib3mf_constvecnode_setvector = None + lib3mf_constvecnode_getvector = None + lib3mf_constvecnode_getoutputvector = None + lib3mf_constmatnode_setmatrix = None + lib3mf_constmatnode_getmatrix = None + lib3mf_constmatnode_getoutputmatrix = None + lib3mf_meshnode_getinputmesh = None + lib3mf_meshnode_getinputpos = None + lib3mf_meshnode_getoutputdistance = None + lib3mf_unsignedmeshnode_getinputmesh = None + lib3mf_unsignedmeshnode_getinputpos = None + lib3mf_unsignedmeshnode_getoutputdistance = None + lib3mf_functioncallnode_getinputfunctionid = None + lib3mf_nodeiterator_getcurrent = None + lib3mf_function_getdisplayname = None + lib3mf_function_setdisplayname = None + lib3mf_function_addinput = None + lib3mf_function_getinputs = None + lib3mf_function_removeinput = None + lib3mf_function_addoutput = None + lib3mf_function_getoutputs = None + lib3mf_function_removeoutput = None + lib3mf_function_findinput = None + lib3mf_function_findoutput = None + lib3mf_implicitfunction_getidentifier = None + lib3mf_implicitfunction_setidentifier = None + lib3mf_implicitfunction_addnode = None + lib3mf_implicitfunction_addsinnode = None + lib3mf_implicitfunction_addcosnode = None + lib3mf_implicitfunction_addtannode = None + lib3mf_implicitfunction_addarcsinnode = None + lib3mf_implicitfunction_addarccosnode = None + lib3mf_implicitfunction_addarctan2node = None + lib3mf_implicitfunction_addsinhnode = None + lib3mf_implicitfunction_addcoshnode = None + lib3mf_implicitfunction_addtanhnode = None + lib3mf_implicitfunction_addroundnode = None + lib3mf_implicitfunction_addceilnode = None + lib3mf_implicitfunction_addfloornode = None + lib3mf_implicitfunction_addsignnode = None + lib3mf_implicitfunction_addfractnode = None + lib3mf_implicitfunction_addabsnode = None + lib3mf_implicitfunction_addexpnode = None + lib3mf_implicitfunction_addlognode = None + lib3mf_implicitfunction_addlog2node = None + lib3mf_implicitfunction_addlog10node = None + lib3mf_implicitfunction_addlengthnode = None + lib3mf_implicitfunction_addtransposenode = None + lib3mf_implicitfunction_inversenode = None + lib3mf_implicitfunction_addsqrtnode = None + lib3mf_implicitfunction_addresourceidnode = None + lib3mf_implicitfunction_addadditionnode = None + lib3mf_implicitfunction_addsubtractionnode = None + lib3mf_implicitfunction_addmultiplicationnode = None + lib3mf_implicitfunction_adddivisionnode = None + lib3mf_implicitfunction_adddotnode = None + lib3mf_implicitfunction_addcrossnode = None + lib3mf_implicitfunction_addmatvecmultiplicationnode = None + lib3mf_implicitfunction_addminnode = None + lib3mf_implicitfunction_addmaxnode = None + lib3mf_implicitfunction_addfmodnode = None + lib3mf_implicitfunction_addpownode = None + lib3mf_implicitfunction_addselectnode = None + lib3mf_implicitfunction_addclampnode = None + lib3mf_implicitfunction_addcomposevectornode = None + lib3mf_implicitfunction_addvectorfromscalarnode = None + lib3mf_implicitfunction_adddecomposevectornode = None + lib3mf_implicitfunction_addcomposematrixnode = None + lib3mf_implicitfunction_addmatrixfromrowsnode = None + lib3mf_implicitfunction_addmatrixfromcolumnsnode = None + lib3mf_implicitfunction_addconstantnode = None + lib3mf_implicitfunction_addconstvecnode = None + lib3mf_implicitfunction_addconstmatnode = None + lib3mf_implicitfunction_addmeshnode = None + lib3mf_implicitfunction_addunsignedmeshnode = None + lib3mf_implicitfunction_addfunctioncallnode = None + lib3mf_implicitfunction_getnodes = None + lib3mf_implicitfunction_removenode = None + lib3mf_implicitfunction_addlink = None + lib3mf_implicitfunction_addlinkbynames = None + lib3mf_implicitfunction_clear = None + lib3mf_implicitfunction_sortnodestopologically = None + lib3mf_functionfromimage3d_getimage3d = None + lib3mf_functionfromimage3d_setimage3d = None + lib3mf_functionfromimage3d_setfilter = None + lib3mf_functionfromimage3d_getfilter = None + lib3mf_functionfromimage3d_settilestyles = None + lib3mf_functionfromimage3d_gettilestyles = None + lib3mf_functionfromimage3d_getoffset = None + lib3mf_functionfromimage3d_setoffset = None + lib3mf_functionfromimage3d_getscale = None + lib3mf_functionfromimage3d_setscale = None lib3mf_builditem_getobjectresource = None lib3mf_builditem_getuuid = None lib3mf_builditem_setuuid = None @@ -429,6 +665,7 @@ class FunctionTable: lib3mf_model_getcomponentsobjectbyid = None lib3mf_model_getcolorgroupbyid = None lib3mf_model_getslicestackbyid = None + lib3mf_model_getlevelsetbyid = None lib3mf_model_getbuilduuid = None lib3mf_model_setbuilduuid = None lib3mf_model_getbuilditems = None @@ -444,7 +681,9 @@ class FunctionTable: lib3mf_model_getcompositematerials = None lib3mf_model_getmultipropertygroups = None lib3mf_model_getslicestacks = None + lib3mf_model_getimage3ds = None lib3mf_model_mergetomodel = None + lib3mf_model_mergefrommodel = None lib3mf_model_addmeshobject = None lib3mf_model_addcomponentsobject = None lib3mf_model_addslicestack = None @@ -454,6 +693,8 @@ class FunctionTable: lib3mf_model_addtexture2dgroup = None lib3mf_model_addcompositematerials = None lib3mf_model_addmultipropertygroup = None + lib3mf_model_addimagestack = None + lib3mf_model_getimagestackbyid = None lib3mf_model_addbuilditem = None lib3mf_model_removebuilditem = None lib3mf_model_getmetadatagroup = None @@ -470,6 +711,13 @@ class FunctionTable: lib3mf_model_removecustomcontenttype = None lib3mf_model_setrandomnumbercallback = None lib3mf_model_getkeystore = None + lib3mf_model_getfunctions = None + lib3mf_model_addimplicitfunction = None + lib3mf_model_addfunctionfromimage3d = None + lib3mf_model_addvolumedata = None + lib3mf_model_addlevelset = None + lib3mf_model_getlevelsets = None + lib3mf_model_removeresource = None '''Definition of Enumerations ''' @@ -580,6 +828,94 @@ class BlendMethod(CTypesEnum): NoBlendMethod = 0 Mix = 1 Multiply = 2 +'''Definition of ChannelName +''' +class ChannelName(CTypesEnum): + Red = 0 + Green = 1 + Blue = 2 + Alpha = 3 +'''Definition of CompositionMethod +''' +class CompositionMethod(CTypesEnum): + WeightedSum = 0 + Multiply = 1 + Min = 2 + Max = 3 + Mask = 4 +'''Definition of CompositionSpace +''' +class CompositionSpace(CTypesEnum): + Raw = 0 + LinearColor = 1 +'''Definition of ImplicitNodeType +''' +class ImplicitNodeType(CTypesEnum): + Addition = 1 + Subtraction = 2 + Multiplication = 3 + Division = 4 + Constant = 5 + ConstVec = 6 + ConstMat = 7 + ComposeVector = 8 + DecomposeVector = 9 + ComposeMatrix = 10 + MatrixFromColumns = 11 + MatrixFromRows = 12 + Dot = 13 + Cross = 14 + MatVecMultiplication = 15 + Transpose = 16 + Inverse = 17 + Sinus = 18 + Cosinus = 19 + Tan = 20 + ArcSin = 21 + ArcCos = 22 + ArcTan = 23 + ArcTan2 = 24 + Min = 25 + Max = 26 + Abs = 27 + Fmod = 28 + Pow = 29 + Sqrt = 30 + Exp = 31 + Log = 32 + Log2 = 33 + Log10 = 34 + Select = 35 + Clamp = 36 + Sinh = 37 + Cosh = 38 + Tanh = 39 + Round = 40 + Ceil = 41 + Floor = 42 + Sign = 43 + Fract = 44 + FunctionCall = 45 + Mesh = 46 + Length = 47 + ConstResourceID = 48 + VectorFromScalar = 49 + UnsignedMesh = 50 + Mod = 51 +'''Definition of ImplicitPortType +''' +class ImplicitPortType(CTypesEnum): + Scalar = 1 + Vector = 2 + Matrix = 3 + ResourceID = 4 +'''Definition of ImplicitNodeConfiguration +''' +class ImplicitNodeConfiguration(CTypesEnum): + Default = 1 + ScalarToScalar = 2 + VectorToVector = 3 + MatrixToMatrix = 4 '''Definition of EncryptionAlgorithm ''' class EncryptionAlgorithm(CTypesEnum): @@ -704,6 +1040,20 @@ class Ball(ctypes.Structure): ("Index", ctypes.c_uint32), ("Radius", ctypes.c_double) ] +'''Definition of Vector +''' +class Vector(ctypes.Structure): + _pack_ = 1 + _fields_ = [ + ("Coordinates", ctypes.c_double * 3) + ] +'''Definition of Matrix4x4 +''' +class Matrix4x4(ctypes.Structure): + _pack_ = 1 + _fields_ = [ + ("Field", (ctypes.c_double * 4) * 4) + ] '''Definition of Function Types ''' @@ -1180,6 +1530,24 @@ def _loadFunctionTableFromMethod(self, symbolLookupMethodAddress): methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) self.lib.lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup = methodType(int(methodAddress.value)) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_image3diterator_getcurrentimage3d")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_image3diterator_getcurrentimage3d = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functioniterator_getcurrentfunction")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_functioniterator_getcurrentfunction = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelsetiterator_getcurrentlevelset")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_levelsetiterator_getcurrentlevelset = methodType(int(methodAddress.value)) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_metadata_getnamespace")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) @@ -1330,6 +1698,12 @@ def _loadFunctionTableFromMethod(self, symbolLookupMethodAddress): methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) self.lib.lib3mf_object_iscomponentsobject = methodType(int(methodAddress.value)) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_object_islevelsetobject")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) + self.lib.lib3mf_object_islevelsetobject = methodType(int(methodAddress.value)) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_object_isvalid")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) @@ -1534,6 +1908,114 @@ def _loadFunctionTableFromMethod(self, symbolLookupMethodAddress): methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) self.lib.lib3mf_meshobject_beamlattice = methodType(int(methodAddress.value)) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_meshobject_getvolumedata")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_meshobject_getvolumedata = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_meshobject_setvolumedata")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_meshobject_setvolumedata = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_getfunction")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_levelset_getfunction = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_setfunction")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_levelset_setfunction = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_gettransform")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Transform)) + self.lib.lib3mf_levelset_gettransform = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_settransform")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Transform)) + self.lib.lib3mf_levelset_settransform = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_getchannelname")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_levelset_getchannelname = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_setchannelname")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_levelset_setchannelname = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_setminfeaturesize")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_double) + self.lib.lib3mf_levelset_setminfeaturesize = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_getminfeaturesize")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)) + self.lib.lib3mf_levelset_getminfeaturesize = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_setfallbackvalue")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_double) + self.lib.lib3mf_levelset_setfallbackvalue = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_getfallbackvalue")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)) + self.lib.lib3mf_levelset_getfallbackvalue = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_setmeshbboxonly")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_bool) + self.lib.lib3mf_levelset_setmeshbboxonly = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_getmeshbboxonly")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) + self.lib.lib3mf_levelset_getmeshbboxonly = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_setmesh")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_levelset_setmesh = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_getmesh")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_levelset_getmesh = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_getvolumedata")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_levelset_getvolumedata = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_levelset_setvolumedata")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_levelset_setvolumedata = methodType(int(methodAddress.value)) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_beamlattice_getminlength")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) @@ -1672,6 +2154,180 @@ def _loadFunctionTableFromMethod(self, symbolLookupMethodAddress): methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) self.lib.lib3mf_beamlattice_getbeamset = methodType(int(methodAddress.value)) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionreference_getfunctionresourceid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)) + self.lib.lib3mf_functionreference_getfunctionresourceid = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionreference_setfunctionresourceid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32) + self.lib.lib3mf_functionreference_setfunctionresourceid = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionreference_gettransform")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Transform)) + self.lib.lib3mf_functionreference_gettransform = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionreference_settransform")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Transform)) + self.lib.lib3mf_functionreference_settransform = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionreference_getchannelname")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_functionreference_getchannelname = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionreference_setchannelname")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_functionreference_setchannelname = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionreference_setminfeaturesize")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_double) + self.lib.lib3mf_functionreference_setminfeaturesize = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionreference_getminfeaturesize")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)) + self.lib.lib3mf_functionreference_getminfeaturesize = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionreference_setfallbackvalue")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_double) + self.lib.lib3mf_functionreference_setfallbackvalue = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionreference_getfallbackvalue")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)) + self.lib.lib3mf_functionreference_getfallbackvalue = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedatacomposite_getbasematerialgroup")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_volumedatacomposite_getbasematerialgroup = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedatacomposite_setbasematerialgroup")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_volumedatacomposite_setbasematerialgroup = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedatacomposite_getmaterialmappingcount")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)) + self.lib.lib3mf_volumedatacomposite_getmaterialmappingcount = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedatacomposite_getmaterialmapping")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_volumedatacomposite_getmaterialmapping = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedatacomposite_addmaterialmapping")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Transform), ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_volumedatacomposite_addmaterialmapping = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedatacomposite_removematerialmapping")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32) + self.lib.lib3mf_volumedatacomposite_removematerialmapping = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedataproperty_getname")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_volumedataproperty_getname = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedataproperty_setisrequired")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_bool) + self.lib.lib3mf_volumedataproperty_setisrequired = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedataproperty_isrequired")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) + self.lib.lib3mf_volumedataproperty_isrequired = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedata_getcomposite")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_volumedata_getcomposite = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedata_createnewcomposite")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_volumedata_createnewcomposite = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedata_removecomposite")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p) + self.lib.lib3mf_volumedata_removecomposite = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedata_getcolor")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_volumedata_getcolor = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedata_createnewcolor")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_volumedata_createnewcolor = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedata_removecolor")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p) + self.lib.lib3mf_volumedata_removecolor = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedata_getpropertycount")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)) + self.lib.lib3mf_volumedata_getpropertycount = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedata_getproperty")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_volumedata_getproperty = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedata_addpropertyfromfunction")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_volumedata_addpropertyfromfunction = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_volumedata_removeproperty")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32) + self.lib.lib3mf_volumedata_removeproperty = methodType(int(methodAddress.value)) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_component_getobjectresource")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) @@ -2008,76 +2664,154 @@ def _loadFunctionTableFromMethod(self, symbolLookupMethodAddress): methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32) self.lib.lib3mf_multipropertygroup_removelayer = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_getpath")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_image3d_getname")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) - self.lib.lib3mf_attachment_getpath = methodType(int(methodAddress.value)) + self.lib.lib3mf_image3d_getname = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_setpath")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_image3d_setname")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) - self.lib.lib3mf_attachment_setpath = methodType(int(methodAddress.value)) + self.lib.lib3mf_image3d_setname = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_packagepart")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_image3d_isimagestack")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_attachment_packagepart = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) + self.lib.lib3mf_image3d_isimagestack = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_getrelationshiptype")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_imagestack_getrowcount")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) - self.lib.lib3mf_attachment_getrelationshiptype = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)) + self.lib.lib3mf_imagestack_getrowcount = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_setrelationshiptype")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_imagestack_setrowcount")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) - self.lib.lib3mf_attachment_setrelationshiptype = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32) + self.lib.lib3mf_imagestack_setrowcount = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_writetofile")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_imagestack_getcolumncount")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) - self.lib.lib3mf_attachment_writetofile = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)) + self.lib.lib3mf_imagestack_getcolumncount = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_readfromfile")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_imagestack_setcolumncount")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) - self.lib.lib3mf_attachment_readfromfile = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32) + self.lib.lib3mf_imagestack_setcolumncount = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_readfromcallback")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_imagestack_getsheetcount")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ReadCallback, ctypes.c_uint64, SeekCallback, ctypes.c_void_p) - self.lib.lib3mf_attachment_readfromcallback = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)) + self.lib.lib3mf_imagestack_getsheetcount = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_getstreamsize")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_imagestack_getsheet")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) - self.lib.lib3mf_attachment_getstreamsize = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_imagestack_getsheet = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_writetobuffer")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_imagestack_setsheet")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)) - self.lib.lib3mf_attachment_writetobuffer = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.c_void_p) + self.lib.lib3mf_imagestack_setsheet = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_readfrombuffer")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_imagestack_createemptysheet")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8)) - self.lib.lib3mf_attachment_readfrombuffer = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_imagestack_createemptysheet = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_texture2d_getattachment")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_imagestack_createsheetfrombuffer")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.c_char_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8), ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_imagestack_createsheetfrombuffer = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_imagestack_createsheetfromfile")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_imagestack_createsheetfromfile = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_getpath")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_attachment_getpath = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_setpath")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_attachment_setpath = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_packagepart")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_attachment_packagepart = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_getrelationshiptype")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_attachment_getrelationshiptype = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_setrelationshiptype")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_attachment_setrelationshiptype = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_writetofile")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_attachment_writetofile = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_readfromfile")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_attachment_readfromfile = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_readfromcallback")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ReadCallback, ctypes.c_uint64, SeekCallback, ctypes.c_void_p) + self.lib.lib3mf_attachment_readfromcallback = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_getstreamsize")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) + self.lib.lib3mf_attachment_getstreamsize = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_writetobuffer")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)) + self.lib.lib3mf_attachment_writetobuffer = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_attachment_readfrombuffer")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8)) + self.lib.lib3mf_attachment_readfrombuffer = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_texture2d_getattachment")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) self.lib.lib3mf_texture2d_getattachment = methodType(int(methodAddress.value)) err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_texture2d_setattachment")), methodAddress) @@ -2122,3927 +2856,8579 @@ def _loadFunctionTableFromMethod(self, symbolLookupMethodAddress): methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, TextureFilter) self.lib.lib3mf_texture2d_setfilter = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getobjectresource")), methodAddress) - if err != 0: - raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_builditem_getobjectresource = methodType(int(methodAddress.value)) - - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getuuid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitport_getidentifier")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) - self.lib.lib3mf_builditem_getuuid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_implicitport_getidentifier = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_setuuid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitport_setidentifier")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) - self.lib.lib3mf_builditem_setuuid = methodType(int(methodAddress.value)) + self.lib.lib3mf_implicitport_setidentifier = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getobjectresourceid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitport_getdisplayname")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)) - self.lib.lib3mf_builditem_getobjectresourceid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_implicitport_getdisplayname = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_hasobjecttransform")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitport_setdisplayname")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) - self.lib.lib3mf_builditem_hasobjecttransform = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_implicitport_setdisplayname = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getobjecttransform")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitport_settype")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Transform)) - self.lib.lib3mf_builditem_getobjecttransform = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ImplicitPortType) + self.lib.lib3mf_implicitport_settype = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_setobjecttransform")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitport_gettype")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Transform)) - self.lib.lib3mf_builditem_setobjecttransform = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) + self.lib.lib3mf_implicitport_gettype = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getpartnumber")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitport_getreference")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) - self.lib.lib3mf_builditem_getpartnumber = methodType(int(methodAddress.value)) + self.lib.lib3mf_implicitport_getreference = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_setpartnumber")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitport_setreference")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) - self.lib.lib3mf_builditem_setpartnumber = methodType(int(methodAddress.value)) - - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getmetadatagroup")), methodAddress) - if err != 0: - raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_builditem_getmetadatagroup = methodType(int(methodAddress.value)) + self.lib.lib3mf_implicitport_setreference = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getoutbox")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_iterator_movenext")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Box)) - self.lib.lib3mf_builditem_getoutbox = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) + self.lib.lib3mf_iterator_movenext = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditemiterator_movenext")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_iterator_moveprevious")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) - self.lib.lib3mf_builditemiterator_movenext = methodType(int(methodAddress.value)) + self.lib.lib3mf_iterator_moveprevious = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditemiterator_moveprevious")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_iterator_count")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) - self.lib.lib3mf_builditemiterator_moveprevious = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) + self.lib.lib3mf_iterator_count = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditemiterator_getcurrent")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitportiterator_getcurrent")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_builditemiterator_getcurrent = methodType(int(methodAddress.value)) + self.lib.lib3mf_implicitportiterator_getcurrent = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditemiterator_clone")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_getidentifier")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_builditemiterator_clone = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_implicitnode_getidentifier = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditemiterator_count")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_setidentifier")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) - self.lib.lib3mf_builditemiterator_count = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_implicitnode_setidentifier = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_setvertices")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_getdisplayname")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(Position2D)) - self.lib.lib3mf_slice_setvertices = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_implicitnode_getdisplayname = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_getvertices")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_setdisplayname")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(Position2D)) - self.lib.lib3mf_slice_getvertices = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_implicitnode_setdisplayname = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_getvertexcount")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_gettag")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) - self.lib.lib3mf_slice_getvertexcount = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_implicitnode_gettag = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_addpolygon")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_settag")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint64)) - self.lib.lib3mf_slice_addpolygon = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_implicitnode_settag = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_getpolygoncount")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_getnodetype")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) - self.lib.lib3mf_slice_getpolygoncount = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) + self.lib.lib3mf_implicitnode_getnodetype = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_setpolygonindices")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_addinput")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32)) - self.lib.lib3mf_slice_setpolygonindices = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitnode_addinput = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_getpolygonindices")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_getinputs")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)) - self.lib.lib3mf_slice_getpolygonindices = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitnode_getinputs = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_getpolygonindexcount")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_addoutput")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64)) - self.lib.lib3mf_slice_getpolygonindexcount = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitnode_addoutput = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_getztop")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_getoutputs")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)) - self.lib.lib3mf_slice_getztop = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitnode_getoutputs = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_getbottomz")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_findinput")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)) - self.lib.lib3mf_slicestack_getbottomz = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitnode_findinput = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_getslicecount")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_findoutput")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) - self.lib.lib3mf_slicestack_getslicecount = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitnode_findoutput = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_getslice")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitnode_aretypesvalid")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_slicestack_getslice = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) + self.lib.lib3mf_implicitnode_aretypesvalid = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_addslice")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_oneinputnode_getinputa")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_double, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_slicestack_addslice = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_oneinputnode_getinputa = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_getslicerefcount")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_oneinputnode_getoutputresult")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) - self.lib.lib3mf_slicestack_getslicerefcount = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_oneinputnode_getoutputresult = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_addslicestackreference")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourceidnode_setresource")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) - self.lib.lib3mf_slicestack_addslicestackreference = methodType(int(methodAddress.value)) + self.lib.lib3mf_resourceidnode_setresource = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_getslicestackreference")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourceidnode_getresource")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_slicestack_getslicestackreference = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_resourceidnode_getresource = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_collapseslicereferences")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourceidnode_getoutputvalue")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p) - self.lib.lib3mf_slicestack_collapseslicereferences = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_resourceidnode_getoutputvalue = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_setownpath")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_twoinputnode_getinputb")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) - self.lib.lib3mf_slicestack_setownpath = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_twoinputnode_getinputb = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_getownpath")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_selectnode_getinputb")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) - self.lib.lib3mf_slicestack_getownpath = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_selectnode_getinputb = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_consumer_getconsumerid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_selectnode_getinputc")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) - self.lib.lib3mf_consumer_getconsumerid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_selectnode_getinputc = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_consumer_getkeyid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_selectnode_getinputd")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) - self.lib.lib3mf_consumer_getkeyid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_selectnode_getinputd = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_consumer_getkeyvalue")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_clampnode_getinputmin")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) - self.lib.lib3mf_consumer_getkeyvalue = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_clampnode_getinputmin = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_accessright_getconsumer")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_clampnode_getinputmax")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_accessright_getconsumer = methodType(int(methodAddress.value)) + self.lib.lib3mf_clampnode_getinputmax = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_accessright_getwrappingalgorithm")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composevectornode_getinputx")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) - self.lib.lib3mf_accessright_getwrappingalgorithm = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composevectornode_getinputx = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_accessright_getmgfalgorithm")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composevectornode_getinputy")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) - self.lib.lib3mf_accessright_getmgfalgorithm = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composevectornode_getinputy = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_accessright_getdigestmethod")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composevectornode_getinputz")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) - self.lib.lib3mf_accessright_getdigestmethod = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composevectornode_getinputz = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getencryptionalgorithm")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composevectornode_getoutputresult")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) - self.lib.lib3mf_contentencryptionparams_getencryptionalgorithm = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composevectornode_getoutputresult = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getkey")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_decomposevectornode_getinputa")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)) - self.lib.lib3mf_contentencryptionparams_getkey = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_decomposevectornode_getinputa = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getinitializationvector")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_decomposevectornode_getoutputx")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)) - self.lib.lib3mf_contentencryptionparams_getinitializationvector = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_decomposevectornode_getoutputx = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getauthenticationtag")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_decomposevectornode_getoutputy")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)) - self.lib.lib3mf_contentencryptionparams_getauthenticationtag = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_decomposevectornode_getoutputy = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_setauthenticationtag")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_decomposevectornode_getoutputz")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8)) - self.lib.lib3mf_contentencryptionparams_setauthenticationtag = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_decomposevectornode_getoutputz = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getadditionalauthenticationdata")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm00")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)) - self.lib.lib3mf_contentencryptionparams_getadditionalauthenticationdata = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm00 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getdescriptor")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm01")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) - self.lib.lib3mf_contentencryptionparams_getdescriptor = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm01 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getkeyuuid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm02")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) - self.lib.lib3mf_contentencryptionparams_getkeyuuid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm02 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedata_getpath")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm03")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_resourcedata_getpath = methodType(int(methodAddress.value)) + self.lib.lib3mf_composematrixnode_getinputm03 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedata_getencryptionalgorithm")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm10")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) - self.lib.lib3mf_resourcedata_getencryptionalgorithm = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm10 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedata_getcompression")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm11")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) - self.lib.lib3mf_resourcedata_getcompression = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm11 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedata_getadditionalauthenticationdata")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm12")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)) - self.lib.lib3mf_resourcedata_getadditionalauthenticationdata = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm12 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedatagroup_getkeyuuid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm13")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) - self.lib.lib3mf_resourcedatagroup_getkeyuuid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm13 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedatagroup_addaccessright")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm20")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, WrappingAlgorithm, MgfAlgorithm, DigestMethod, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_resourcedatagroup_addaccessright = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm20 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedatagroup_findaccessrightbyconsumer")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm21")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_resourcedatagroup_findaccessrightbyconsumer = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm21 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedatagroup_removeaccessright")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm22")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) - self.lib.lib3mf_resourcedatagroup_removeaccessright = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm22 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_addconsumer")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm23")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_keystore_addconsumer = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm23 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getconsumercount")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm30")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) - self.lib.lib3mf_keystore_getconsumercount = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm30 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getconsumer")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm31")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_keystore_getconsumer = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm31 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_removeconsumer")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm32")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) - self.lib.lib3mf_keystore_removeconsumer = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm32 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_findconsumer")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getinputm33")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_keystore_findconsumer = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getinputm33 = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getresourcedatagroupcount")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_composematrixnode_getoutputresult")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) - self.lib.lib3mf_keystore_getresourcedatagroupcount = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_composematrixnode_getoutputresult = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_addresourcedatagroup")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_matrixfromrowsnode_getinputa")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_keystore_addresourcedatagroup = methodType(int(methodAddress.value)) + self.lib.lib3mf_matrixfromrowsnode_getinputa = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getresourcedatagroup")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_matrixfromrowsnode_getinputb")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_keystore_getresourcedatagroup = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_matrixfromrowsnode_getinputb = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_removeresourcedatagroup")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_matrixfromrowsnode_getinputc")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) - self.lib.lib3mf_keystore_removeresourcedatagroup = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_matrixfromrowsnode_getinputc = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_findresourcedatagroup")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_matrixfromrowsnode_getinputd")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_keystore_findresourcedatagroup = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_matrixfromrowsnode_getinputd = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_addresourcedata")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_matrixfromrowsnode_getoutputresult")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, EncryptionAlgorithm, Compression, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8), ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_keystore_addresourcedata = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_matrixfromrowsnode_getoutputresult = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_removeresourcedata")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_matrixfromcolumnsnode_getinputa")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) - self.lib.lib3mf_keystore_removeresourcedata = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_matrixfromcolumnsnode_getinputa = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_findresourcedata")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_matrixfromcolumnsnode_getinputb")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_keystore_findresourcedata = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_matrixfromcolumnsnode_getinputb = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getresourcedatacount")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_matrixfromcolumnsnode_getinputc")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) - self.lib.lib3mf_keystore_getresourcedatacount = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_matrixfromcolumnsnode_getinputc = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getresourcedata")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_matrixfromcolumnsnode_getinputd")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_keystore_getresourcedata = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_matrixfromcolumnsnode_getinputd = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getuuid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_matrixfromcolumnsnode_getoutputresult")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) - self.lib.lib3mf_keystore_getuuid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_matrixfromcolumnsnode_getoutputresult = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_setuuid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_constantnode_setconstant")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) - self.lib.lib3mf_keystore_setuuid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_double) + self.lib.lib3mf_constantnode_setconstant = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_rootmodelpart")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_constantnode_getconstant")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)) + self.lib.lib3mf_constantnode_getconstant = methodType(int(methodAddress.value)) + + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_constantnode_getoutputvalue")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_rootmodelpart = methodType(int(methodAddress.value)) + self.lib.lib3mf_constantnode_getoutputvalue = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_findorcreatepackagepart")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_constvecnode_setvector")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_findorcreatepackagepart = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Vector)) + self.lib.lib3mf_constvecnode_setvector = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_setunit")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_constvecnode_getvector")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ModelUnit) - self.lib.lib3mf_model_setunit = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Vector)) + self.lib.lib3mf_constvecnode_getvector = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getunit")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_constvecnode_getoutputvector")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) - self.lib.lib3mf_model_getunit = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_constvecnode_getoutputvector = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getlanguage")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_constmatnode_setmatrix")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) - self.lib.lib3mf_model_getlanguage = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Matrix4x4)) + self.lib.lib3mf_constmatnode_setmatrix = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_setlanguage")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_constmatnode_getmatrix")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) - self.lib.lib3mf_model_setlanguage = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Matrix4x4)) + self.lib.lib3mf_constmatnode_getmatrix = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_querywriter")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_constmatnode_getoutputmatrix")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_querywriter = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_constmatnode_getoutputmatrix = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_queryreader")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_meshnode_getinputmesh")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_queryreader = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_meshnode_getinputmesh = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getresourcebyid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_meshnode_getinputpos")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getresourcebyid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_meshnode_getinputpos = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_gettexture2dbyid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_meshnode_getoutputdistance")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_gettexture2dbyid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_meshnode_getoutputdistance = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getpropertytypebyid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_unsignedmeshnode_getinputmesh")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_int32)) - self.lib.lib3mf_model_getpropertytypebyid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_unsignedmeshnode_getinputmesh = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getbasematerialgroupbyid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_unsignedmeshnode_getinputpos")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getbasematerialgroupbyid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_unsignedmeshnode_getinputpos = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_gettexture2dgroupbyid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_unsignedmeshnode_getoutputdistance")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_gettexture2dgroupbyid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_unsignedmeshnode_getoutputdistance = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getcompositematerialsbyid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functioncallnode_getinputfunctionid")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getcompositematerialsbyid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_functioncallnode_getinputfunctionid = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getmultipropertygroupbyid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_nodeiterator_getcurrent")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getmultipropertygroupbyid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_nodeiterator_getcurrent = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getmeshobjectbyid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_function_getdisplayname")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getmeshobjectbyid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_function_getdisplayname = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getcomponentsobjectbyid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_function_setdisplayname")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getcomponentsobjectbyid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_function_setdisplayname = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getcolorgroupbyid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_function_addinput")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getcolorgroupbyid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ImplicitPortType, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_function_addinput = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getslicestackbyid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_function_getinputs")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getslicestackbyid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_function_getinputs = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getbuilduuid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_function_removeinput")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) - self.lib.lib3mf_model_getbuilduuid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_function_removeinput = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_setbuilduuid")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_function_addoutput")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) - self.lib.lib3mf_model_setbuilduuid = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ImplicitPortType, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_function_addoutput = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getbuilditems")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_function_getoutputs")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getbuilditems = methodType(int(methodAddress.value)) + self.lib.lib3mf_function_getoutputs = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getoutbox")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_function_removeoutput")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Box)) - self.lib.lib3mf_model_getoutbox = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_function_removeoutput = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getresources")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_function_findinput")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getresources = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_function_findinput = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getobjects")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_function_findoutput")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getobjects = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_function_findoutput = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getmeshobjects")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_getidentifier")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getmeshobjects = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_implicitfunction_getidentifier = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getcomponentsobjects")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_setidentifier")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getcomponentsobjects = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_implicitfunction_setidentifier = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_gettexture2ds")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_gettexture2ds = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ImplicitNodeType, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getbasematerialgroups")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addsinnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getbasematerialgroups = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addsinnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getcolorgroups")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addcosnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getcolorgroups = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addcosnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_gettexture2dgroups")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addtannode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_gettexture2dgroups = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addtannode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getcompositematerials")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addarcsinnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getcompositematerials = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addarcsinnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getmultipropertygroups")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addarccosnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getmultipropertygroups = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addarccosnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getslicestacks")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addarctan2node")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getslicestacks = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addarctan2node = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_mergetomodel")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addsinhnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_mergetomodel = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addsinhnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addmeshobject")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addcoshnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_addmeshobject = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addcoshnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addcomponentsobject")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addtanhnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_addcomponentsobject = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addtanhnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addslicestack")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addroundnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_double, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_addslicestack = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addroundnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addtexture2dfromattachment")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addceilnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_addtexture2dfromattachment = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addceilnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addbasematerialgroup")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addfloornode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_addbasematerialgroup = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addfloornode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addcolorgroup")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addsignnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_addcolorgroup = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addsignnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addtexture2dgroup")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addfractnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_addtexture2dgroup = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addfractnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addcompositematerials")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addabsnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_addcompositematerials = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addabsnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addmultipropertygroup")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addexpnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_addmultipropertygroup = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addexpnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addbuilditem")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addlognode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(Transform), ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_addbuilditem = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addlognode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_removebuilditem")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addlog2node")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) - self.lib.lib3mf_model_removebuilditem = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addlog2node = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getmetadatagroup")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addlog10node")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getmetadatagroup = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addlog10node = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addattachment")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addlengthnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_addattachment = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addlengthnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_removeattachment")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addtransposenode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) - self.lib.lib3mf_model_removeattachment = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addtransposenode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getattachment")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_inversenode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getattachment = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_inversenode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_findattachment")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addsqrtnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_findattachment = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addsqrtnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getattachmentcount")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addresourceidnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)) - self.lib.lib3mf_model_getattachmentcount = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addresourceidnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_haspackagethumbnailattachment")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addadditionnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) - self.lib.lib3mf_model_haspackagethumbnailattachment = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addadditionnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_createpackagethumbnailattachment")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addsubtractionnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_createpackagethumbnailattachment = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addsubtractionnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getpackagethumbnailattachment")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addmultiplicationnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getpackagethumbnailattachment = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addmultiplicationnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_removepackagethumbnailattachment")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_adddivisionnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p) - self.lib.lib3mf_model_removepackagethumbnailattachment = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_adddivisionnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addcustomcontenttype")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_adddotnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p) - self.lib.lib3mf_model_addcustomcontenttype = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_adddotnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_removecustomcontenttype")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addcrossnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) - self.lib.lib3mf_model_removecustomcontenttype = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addcrossnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_setrandomnumbercallback")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addmatvecmultiplicationnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, RandomNumberCallback, ctypes.c_void_p) - self.lib.lib3mf_model_setrandomnumbercallback = methodType(int(methodAddress.value)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addmatvecmultiplicationnode = methodType(int(methodAddress.value)) - err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getkeystore")), methodAddress) + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addminnode")), methodAddress) if err != 0: raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) - methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) - self.lib.lib3mf_model_getkeystore = methodType(int(methodAddress.value)) - - except AttributeError as ae: - raise ELib3MFException(ErrorCodes.COULDNOTFINDLIBRARYEXPORT, ae.args[0]) - - def _loadFunctionTable(self): - try: - self.lib.lib3mf_getlibraryversion.restype = ctypes.c_int32 - self.lib.lib3mf_getlibraryversion.argtypes = [ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addminnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_getprereleaseinformation.restype = ctypes.c_int32 - self.lib.lib3mf_getprereleaseinformation.argtypes = [ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addmaxnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addmaxnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_getbuildinformation.restype = ctypes.c_int32 - self.lib.lib3mf_getbuildinformation.argtypes = [ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addfmodnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addfmodnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_getspecificationversion.restype = ctypes.c_int32 - self.lib.lib3mf_getspecificationversion.argtypes = [ctypes.c_char_p, ctypes.POINTER(ctypes.c_bool), ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addpownode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addpownode = methodType(int(methodAddress.value)) - self.lib.lib3mf_createmodel.restype = ctypes.c_int32 - self.lib.lib3mf_createmodel.argtypes = [ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addselectnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addselectnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_release.restype = ctypes.c_int32 - self.lib.lib3mf_release.argtypes = [ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addclampnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addclampnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_acquire.restype = ctypes.c_int32 - self.lib.lib3mf_acquire.argtypes = [ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addcomposevectornode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addcomposevectornode = methodType(int(methodAddress.value)) - self.lib.lib3mf_setjournal.restype = ctypes.c_int32 - self.lib.lib3mf_setjournal.argtypes = [ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addvectorfromscalarnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addvectorfromscalarnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_getlasterror.restype = ctypes.c_int32 - self.lib.lib3mf_getlasterror.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p, ctypes.POINTER(ctypes.c_bool)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_adddecomposevectornode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_adddecomposevectornode = methodType(int(methodAddress.value)) - self.lib.lib3mf_getsymbollookupmethod.restype = ctypes.c_int32 - self.lib.lib3mf_getsymbollookupmethod.argtypes = [ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addcomposematrixnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addcomposematrixnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_retrieveprogressmessage.restype = ctypes.c_int32 - self.lib.lib3mf_retrieveprogressmessage.argtypes = [ProgressIdentifier, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addmatrixfromrowsnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addmatrixfromrowsnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_rgbatocolor.restype = ctypes.c_int32 - self.lib.lib3mf_rgbatocolor.argtypes = [ctypes.c_uint8, ctypes.c_uint8, ctypes.c_uint8, ctypes.c_uint8, ctypes.POINTER(Color)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addmatrixfromcolumnsnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addmatrixfromcolumnsnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_floatrgbatocolor.restype = ctypes.c_int32 - self.lib.lib3mf_floatrgbatocolor.argtypes = [ctypes.c_float, ctypes.c_float, ctypes.c_float, ctypes.c_float, ctypes.POINTER(Color)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addconstantnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addconstantnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_colortorgba.restype = ctypes.c_int32 - self.lib.lib3mf_colortorgba.argtypes = [ctypes.POINTER(Color), ctypes.POINTER(ctypes.c_uint8), ctypes.POINTER(ctypes.c_uint8), ctypes.POINTER(ctypes.c_uint8), ctypes.POINTER(ctypes.c_uint8)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addconstvecnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addconstvecnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_colortofloatrgba.restype = ctypes.c_int32 - self.lib.lib3mf_colortofloatrgba.argtypes = [ctypes.POINTER(Color), ctypes.POINTER(ctypes.c_float), ctypes.POINTER(ctypes.c_float), ctypes.POINTER(ctypes.c_float), ctypes.POINTER(ctypes.c_float)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addconstmatnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addconstmatnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_getidentitytransform.restype = ctypes.c_int32 - self.lib.lib3mf_getidentitytransform.argtypes = [ctypes.POINTER(Transform)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addmeshnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addmeshnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_getuniformscaletransform.restype = ctypes.c_int32 - self.lib.lib3mf_getuniformscaletransform.argtypes = [ctypes.c_float, ctypes.POINTER(Transform)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addunsignedmeshnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addunsignedmeshnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_getscaletransform.restype = ctypes.c_int32 - self.lib.lib3mf_getscaletransform.argtypes = [ctypes.c_float, ctypes.c_float, ctypes.c_float, ctypes.POINTER(Transform)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addfunctioncallnode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_addfunctioncallnode = methodType(int(methodAddress.value)) - self.lib.lib3mf_gettranslationtransform.restype = ctypes.c_int32 - self.lib.lib3mf_gettranslationtransform.argtypes = [ctypes.c_float, ctypes.c_float, ctypes.c_float, ctypes.POINTER(Transform)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_getnodes")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_implicitfunction_getnodes = methodType(int(methodAddress.value)) - self.lib.lib3mf_base_classtypeid.restype = ctypes.c_int32 - self.lib.lib3mf_base_classtypeid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_removenode")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_implicitfunction_removenode = methodType(int(methodAddress.value)) - self.lib.lib3mf_writer_writetofile.restype = ctypes.c_int32 - self.lib.lib3mf_writer_writetofile.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addlink")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_implicitfunction_addlink = methodType(int(methodAddress.value)) - self.lib.lib3mf_writer_getstreamsize.restype = ctypes.c_int32 - self.lib.lib3mf_writer_getstreamsize.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_addlinkbynames")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p) + self.lib.lib3mf_implicitfunction_addlinkbynames = methodType(int(methodAddress.value)) - self.lib.lib3mf_writer_writetobuffer.restype = ctypes.c_int32 - self.lib.lib3mf_writer_writetobuffer.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_clear")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p) + self.lib.lib3mf_implicitfunction_clear = methodType(int(methodAddress.value)) - self.lib.lib3mf_writer_writetocallback.restype = ctypes.c_int32 - self.lib.lib3mf_writer_writetocallback.argtypes = [ctypes.c_void_p, WriteCallback, SeekCallback, ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_implicitfunction_sortnodestopologically")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p) + self.lib.lib3mf_implicitfunction_sortnodestopologically = methodType(int(methodAddress.value)) - self.lib.lib3mf_writer_setprogresscallback.restype = ctypes.c_int32 - self.lib.lib3mf_writer_setprogresscallback.argtypes = [ctypes.c_void_p, ProgressCallback, ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionfromimage3d_getimage3d")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_functionfromimage3d_getimage3d = methodType(int(methodAddress.value)) - self.lib.lib3mf_writer_getdecimalprecision.restype = ctypes.c_int32 - self.lib.lib3mf_writer_getdecimalprecision.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionfromimage3d_setimage3d")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_functionfromimage3d_setimage3d = methodType(int(methodAddress.value)) - self.lib.lib3mf_writer_setdecimalprecision.restype = ctypes.c_int32 - self.lib.lib3mf_writer_setdecimalprecision.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionfromimage3d_setfilter")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, TextureFilter) + self.lib.lib3mf_functionfromimage3d_setfilter = methodType(int(methodAddress.value)) - self.lib.lib3mf_writer_setstrictmodeactive.restype = ctypes.c_int32 - self.lib.lib3mf_writer_setstrictmodeactive.argtypes = [ctypes.c_void_p, ctypes.c_bool] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionfromimage3d_getfilter")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) + self.lib.lib3mf_functionfromimage3d_getfilter = methodType(int(methodAddress.value)) - self.lib.lib3mf_writer_getstrictmodeactive.restype = ctypes.c_int32 - self.lib.lib3mf_writer_getstrictmodeactive.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionfromimage3d_settilestyles")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, TextureTileStyle, TextureTileStyle, TextureTileStyle) + self.lib.lib3mf_functionfromimage3d_settilestyles = methodType(int(methodAddress.value)) - self.lib.lib3mf_writer_getwarning.restype = ctypes.c_int32 - self.lib.lib3mf_writer_getwarning.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_uint32), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionfromimage3d_gettilestyles")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_int32)) + self.lib.lib3mf_functionfromimage3d_gettilestyles = methodType(int(methodAddress.value)) - self.lib.lib3mf_writer_getwarningcount.restype = ctypes.c_int32 - self.lib.lib3mf_writer_getwarningcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionfromimage3d_getoffset")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)) + self.lib.lib3mf_functionfromimage3d_getoffset = methodType(int(methodAddress.value)) - self.lib.lib3mf_writer_addkeywrappingcallback.restype = ctypes.c_int32 - self.lib.lib3mf_writer_addkeywrappingcallback.argtypes = [ctypes.c_void_p, ctypes.c_char_p, KeyWrappingCallback, ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionfromimage3d_setoffset")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_double) + self.lib.lib3mf_functionfromimage3d_setoffset = methodType(int(methodAddress.value)) - self.lib.lib3mf_writer_setcontentencryptioncallback.restype = ctypes.c_int32 - self.lib.lib3mf_writer_setcontentencryptioncallback.argtypes = [ctypes.c_void_p, ContentEncryptionCallback, ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionfromimage3d_getscale")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)) + self.lib.lib3mf_functionfromimage3d_getscale = methodType(int(methodAddress.value)) - self.lib.lib3mf_reader_readfromfile.restype = ctypes.c_int32 - self.lib.lib3mf_reader_readfromfile.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_functionfromimage3d_setscale")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_double) + self.lib.lib3mf_functionfromimage3d_setscale = methodType(int(methodAddress.value)) - self.lib.lib3mf_reader_readfrombuffer.restype = ctypes.c_int32 - self.lib.lib3mf_reader_readfrombuffer.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getobjectresource")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_builditem_getobjectresource = methodType(int(methodAddress.value)) - self.lib.lib3mf_reader_readfromcallback.restype = ctypes.c_int32 - self.lib.lib3mf_reader_readfromcallback.argtypes = [ctypes.c_void_p, ReadCallback, ctypes.c_uint64, SeekCallback, ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getuuid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_builditem_getuuid = methodType(int(methodAddress.value)) - self.lib.lib3mf_reader_setprogresscallback.restype = ctypes.c_int32 - self.lib.lib3mf_reader_setprogresscallback.argtypes = [ctypes.c_void_p, ProgressCallback, ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_setuuid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_builditem_setuuid = methodType(int(methodAddress.value)) - self.lib.lib3mf_reader_addrelationtoread.restype = ctypes.c_int32 - self.lib.lib3mf_reader_addrelationtoread.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getobjectresourceid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)) + self.lib.lib3mf_builditem_getobjectresourceid = methodType(int(methodAddress.value)) - self.lib.lib3mf_reader_removerelationtoread.restype = ctypes.c_int32 - self.lib.lib3mf_reader_removerelationtoread.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_hasobjecttransform")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) + self.lib.lib3mf_builditem_hasobjecttransform = methodType(int(methodAddress.value)) - self.lib.lib3mf_reader_setstrictmodeactive.restype = ctypes.c_int32 - self.lib.lib3mf_reader_setstrictmodeactive.argtypes = [ctypes.c_void_p, ctypes.c_bool] - - self.lib.lib3mf_reader_getstrictmodeactive.restype = ctypes.c_int32 - self.lib.lib3mf_reader_getstrictmodeactive.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] - - self.lib.lib3mf_reader_getwarning.restype = ctypes.c_int32 - self.lib.lib3mf_reader_getwarning.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_uint32), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getobjecttransform")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Transform)) + self.lib.lib3mf_builditem_getobjecttransform = methodType(int(methodAddress.value)) - self.lib.lib3mf_reader_getwarningcount.restype = ctypes.c_int32 - self.lib.lib3mf_reader_getwarningcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_setobjecttransform")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Transform)) + self.lib.lib3mf_builditem_setobjecttransform = methodType(int(methodAddress.value)) - self.lib.lib3mf_reader_addkeywrappingcallback.restype = ctypes.c_int32 - self.lib.lib3mf_reader_addkeywrappingcallback.argtypes = [ctypes.c_void_p, ctypes.c_char_p, KeyWrappingCallback, ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getpartnumber")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_builditem_getpartnumber = methodType(int(methodAddress.value)) - self.lib.lib3mf_reader_setcontentencryptioncallback.restype = ctypes.c_int32 - self.lib.lib3mf_reader_setcontentencryptioncallback.argtypes = [ctypes.c_void_p, ContentEncryptionCallback, ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_setpartnumber")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_builditem_setpartnumber = methodType(int(methodAddress.value)) - self.lib.lib3mf_packagepart_getpath.restype = ctypes.c_int32 - self.lib.lib3mf_packagepart_getpath.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getmetadatagroup")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_builditem_getmetadatagroup = methodType(int(methodAddress.value)) - self.lib.lib3mf_packagepart_setpath.restype = ctypes.c_int32 - self.lib.lib3mf_packagepart_setpath.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditem_getoutbox")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Box)) + self.lib.lib3mf_builditem_getoutbox = methodType(int(methodAddress.value)) - self.lib.lib3mf_resource_getresourceid.restype = ctypes.c_int32 - self.lib.lib3mf_resource_getresourceid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditemiterator_movenext")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) + self.lib.lib3mf_builditemiterator_movenext = methodType(int(methodAddress.value)) - self.lib.lib3mf_resource_getuniqueresourceid.restype = ctypes.c_int32 - self.lib.lib3mf_resource_getuniqueresourceid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditemiterator_moveprevious")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) + self.lib.lib3mf_builditemiterator_moveprevious = methodType(int(methodAddress.value)) - self.lib.lib3mf_resource_packagepart.restype = ctypes.c_int32 - self.lib.lib3mf_resource_packagepart.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditemiterator_getcurrent")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_builditemiterator_getcurrent = methodType(int(methodAddress.value)) - self.lib.lib3mf_resource_setpackagepart.restype = ctypes.c_int32 - self.lib.lib3mf_resource_setpackagepart.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditemiterator_clone")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_builditemiterator_clone = methodType(int(methodAddress.value)) - self.lib.lib3mf_resource_getmodelresourceid.restype = ctypes.c_int32 - self.lib.lib3mf_resource_getmodelresourceid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_builditemiterator_count")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) + self.lib.lib3mf_builditemiterator_count = methodType(int(methodAddress.value)) - self.lib.lib3mf_resourceiterator_movenext.restype = ctypes.c_int32 - self.lib.lib3mf_resourceiterator_movenext.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_setvertices")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(Position2D)) + self.lib.lib3mf_slice_setvertices = methodType(int(methodAddress.value)) - self.lib.lib3mf_resourceiterator_moveprevious.restype = ctypes.c_int32 - self.lib.lib3mf_resourceiterator_moveprevious.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_getvertices")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(Position2D)) + self.lib.lib3mf_slice_getvertices = methodType(int(methodAddress.value)) - self.lib.lib3mf_resourceiterator_getcurrent.restype = ctypes.c_int32 - self.lib.lib3mf_resourceiterator_getcurrent.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_getvertexcount")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) + self.lib.lib3mf_slice_getvertexcount = methodType(int(methodAddress.value)) - self.lib.lib3mf_resourceiterator_clone.restype = ctypes.c_int32 - self.lib.lib3mf_resourceiterator_clone.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_addpolygon")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint64)) + self.lib.lib3mf_slice_addpolygon = methodType(int(methodAddress.value)) - self.lib.lib3mf_resourceiterator_count.restype = ctypes.c_int32 - self.lib.lib3mf_resourceiterator_count.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_getpolygoncount")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) + self.lib.lib3mf_slice_getpolygoncount = methodType(int(methodAddress.value)) - self.lib.lib3mf_slicestackiterator_getcurrentslicestack.restype = ctypes.c_int32 - self.lib.lib3mf_slicestackiterator_getcurrentslicestack.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_setpolygonindices")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32)) + self.lib.lib3mf_slice_setpolygonindices = methodType(int(methodAddress.value)) - self.lib.lib3mf_objectiterator_getcurrentobject.restype = ctypes.c_int32 - self.lib.lib3mf_objectiterator_getcurrentobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_getpolygonindices")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)) + self.lib.lib3mf_slice_getpolygonindices = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobjectiterator_getcurrentmeshobject.restype = ctypes.c_int32 - self.lib.lib3mf_meshobjectiterator_getcurrentmeshobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_getpolygonindexcount")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64)) + self.lib.lib3mf_slice_getpolygonindexcount = methodType(int(methodAddress.value)) - self.lib.lib3mf_componentsobjectiterator_getcurrentcomponentsobject.restype = ctypes.c_int32 - self.lib.lib3mf_componentsobjectiterator_getcurrentcomponentsobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slice_getztop")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)) + self.lib.lib3mf_slice_getztop = methodType(int(methodAddress.value)) - self.lib.lib3mf_texture2diterator_getcurrenttexture2d.restype = ctypes.c_int32 - self.lib.lib3mf_texture2diterator_getcurrenttexture2d.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_getbottomz")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)) + self.lib.lib3mf_slicestack_getbottomz = methodType(int(methodAddress.value)) - self.lib.lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup.restype = ctypes.c_int32 - self.lib.lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_getslicecount")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) + self.lib.lib3mf_slicestack_getslicecount = methodType(int(methodAddress.value)) - self.lib.lib3mf_colorgroupiterator_getcurrentcolorgroup.restype = ctypes.c_int32 - self.lib.lib3mf_colorgroupiterator_getcurrentcolorgroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_getslice")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_slicestack_getslice = methodType(int(methodAddress.value)) - self.lib.lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup.restype = ctypes.c_int32 - self.lib.lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_addslice")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_double, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_slicestack_addslice = methodType(int(methodAddress.value)) - self.lib.lib3mf_compositematerialsiterator_getcurrentcompositematerials.restype = ctypes.c_int32 - self.lib.lib3mf_compositematerialsiterator_getcurrentcompositematerials.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_getslicerefcount")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) + self.lib.lib3mf_slicestack_getslicerefcount = methodType(int(methodAddress.value)) - self.lib.lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup.restype = ctypes.c_int32 - self.lib.lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_addslicestackreference")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_slicestack_addslicestackreference = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadata_getnamespace.restype = ctypes.c_int32 - self.lib.lib3mf_metadata_getnamespace.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_getslicestackreference")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_slicestack_getslicestackreference = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadata_setnamespace.restype = ctypes.c_int32 - self.lib.lib3mf_metadata_setnamespace.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_collapseslicereferences")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p) + self.lib.lib3mf_slicestack_collapseslicereferences = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadata_getname.restype = ctypes.c_int32 - self.lib.lib3mf_metadata_getname.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_setownpath")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_slicestack_setownpath = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadata_setname.restype = ctypes.c_int32 - self.lib.lib3mf_metadata_setname.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_slicestack_getownpath")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_slicestack_getownpath = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadata_getkey.restype = ctypes.c_int32 - self.lib.lib3mf_metadata_getkey.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_consumer_getconsumerid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_consumer_getconsumerid = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadata_getmustpreserve.restype = ctypes.c_int32 - self.lib.lib3mf_metadata_getmustpreserve.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_consumer_getkeyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_consumer_getkeyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadata_setmustpreserve.restype = ctypes.c_int32 - self.lib.lib3mf_metadata_setmustpreserve.argtypes = [ctypes.c_void_p, ctypes.c_bool] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_consumer_getkeyvalue")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_consumer_getkeyvalue = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadata_gettype.restype = ctypes.c_int32 - self.lib.lib3mf_metadata_gettype.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_accessright_getconsumer")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_accessright_getconsumer = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadata_settype.restype = ctypes.c_int32 - self.lib.lib3mf_metadata_settype.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_accessright_getwrappingalgorithm")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) + self.lib.lib3mf_accessright_getwrappingalgorithm = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadata_getvalue.restype = ctypes.c_int32 - self.lib.lib3mf_metadata_getvalue.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_accessright_getmgfalgorithm")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) + self.lib.lib3mf_accessright_getmgfalgorithm = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadata_setvalue.restype = ctypes.c_int32 - self.lib.lib3mf_metadata_setvalue.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - - self.lib.lib3mf_metadatagroup_getmetadatacount.restype = ctypes.c_int32 - self.lib.lib3mf_metadatagroup_getmetadatacount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_accessright_getdigestmethod")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) + self.lib.lib3mf_accessright_getdigestmethod = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadatagroup_getmetadata.restype = ctypes.c_int32 - self.lib.lib3mf_metadatagroup_getmetadata.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getencryptionalgorithm")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) + self.lib.lib3mf_contentencryptionparams_getencryptionalgorithm = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadatagroup_getmetadatabykey.restype = ctypes.c_int32 - self.lib.lib3mf_metadatagroup_getmetadatabykey.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getkey")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)) + self.lib.lib3mf_contentencryptionparams_getkey = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadatagroup_removemetadatabyindex.restype = ctypes.c_int32 - self.lib.lib3mf_metadatagroup_removemetadatabyindex.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getinitializationvector")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)) + self.lib.lib3mf_contentencryptionparams_getinitializationvector = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadatagroup_removemetadata.restype = ctypes.c_int32 - self.lib.lib3mf_metadatagroup_removemetadata.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getauthenticationtag")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)) + self.lib.lib3mf_contentencryptionparams_getauthenticationtag = methodType(int(methodAddress.value)) - self.lib.lib3mf_metadatagroup_addmetadata.restype = ctypes.c_int32 - self.lib.lib3mf_metadatagroup_addmetadata.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_bool, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_setauthenticationtag")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8)) + self.lib.lib3mf_contentencryptionparams_setauthenticationtag = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_gettype.restype = ctypes.c_int32 - self.lib.lib3mf_object_gettype.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getadditionalauthenticationdata")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)) + self.lib.lib3mf_contentencryptionparams_getadditionalauthenticationdata = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_settype.restype = ctypes.c_int32 - self.lib.lib3mf_object_settype.argtypes = [ctypes.c_void_p, ObjectType] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getdescriptor")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) + self.lib.lib3mf_contentencryptionparams_getdescriptor = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_getname.restype = ctypes.c_int32 - self.lib.lib3mf_object_getname.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_contentencryptionparams_getkeyuuid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_contentencryptionparams_getkeyuuid = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_setname.restype = ctypes.c_int32 - self.lib.lib3mf_object_setname.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedata_getpath")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_resourcedata_getpath = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_getpartnumber.restype = ctypes.c_int32 - self.lib.lib3mf_object_getpartnumber.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedata_getencryptionalgorithm")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) + self.lib.lib3mf_resourcedata_getencryptionalgorithm = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_setpartnumber.restype = ctypes.c_int32 - self.lib.lib3mf_object_setpartnumber.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedata_getcompression")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) + self.lib.lib3mf_resourcedata_getcompression = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_ismeshobject.restype = ctypes.c_int32 - self.lib.lib3mf_object_ismeshobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedata_getadditionalauthenticationdata")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)) + self.lib.lib3mf_resourcedata_getadditionalauthenticationdata = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_iscomponentsobject.restype = ctypes.c_int32 - self.lib.lib3mf_object_iscomponentsobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedatagroup_getkeyuuid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_resourcedatagroup_getkeyuuid = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_isvalid.restype = ctypes.c_int32 - self.lib.lib3mf_object_isvalid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedatagroup_addaccessright")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, WrappingAlgorithm, MgfAlgorithm, DigestMethod, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_resourcedatagroup_addaccessright = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_setattachmentasthumbnail.restype = ctypes.c_int32 - self.lib.lib3mf_object_setattachmentasthumbnail.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedatagroup_findaccessrightbyconsumer")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_resourcedatagroup_findaccessrightbyconsumer = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_getthumbnailattachment.restype = ctypes.c_int32 - self.lib.lib3mf_object_getthumbnailattachment.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_resourcedatagroup_removeaccessright")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_resourcedatagroup_removeaccessright = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_clearthumbnailattachment.restype = ctypes.c_int32 - self.lib.lib3mf_object_clearthumbnailattachment.argtypes = [ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_addconsumer")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_keystore_addconsumer = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_getoutbox.restype = ctypes.c_int32 - self.lib.lib3mf_object_getoutbox.argtypes = [ctypes.c_void_p, ctypes.POINTER(Box)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getconsumercount")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) + self.lib.lib3mf_keystore_getconsumercount = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_getuuid.restype = ctypes.c_int32 - self.lib.lib3mf_object_getuuid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getconsumer")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_keystore_getconsumer = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_setuuid.restype = ctypes.c_int32 - self.lib.lib3mf_object_setuuid.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_removeconsumer")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_keystore_removeconsumer = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_getmetadatagroup.restype = ctypes.c_int32 - self.lib.lib3mf_object_getmetadatagroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_findconsumer")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_keystore_findconsumer = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_setslicesmeshresolution.restype = ctypes.c_int32 - self.lib.lib3mf_object_setslicesmeshresolution.argtypes = [ctypes.c_void_p, SlicesMeshResolution] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getresourcedatagroupcount")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) + self.lib.lib3mf_keystore_getresourcedatagroupcount = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_getslicesmeshresolution.restype = ctypes.c_int32 - self.lib.lib3mf_object_getslicesmeshresolution.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_addresourcedatagroup")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_keystore_addresourcedatagroup = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_hasslices.restype = ctypes.c_int32 - self.lib.lib3mf_object_hasslices.argtypes = [ctypes.c_void_p, ctypes.c_bool, ctypes.POINTER(ctypes.c_bool)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getresourcedatagroup")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_keystore_getresourcedatagroup = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_clearslicestack.restype = ctypes.c_int32 - self.lib.lib3mf_object_clearslicestack.argtypes = [ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_removeresourcedatagroup")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_keystore_removeresourcedatagroup = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_getslicestack.restype = ctypes.c_int32 - self.lib.lib3mf_object_getslicestack.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_findresourcedatagroup")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_keystore_findresourcedatagroup = methodType(int(methodAddress.value)) - self.lib.lib3mf_object_assignslicestack.restype = ctypes.c_int32 - self.lib.lib3mf_object_assignslicestack.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_addresourcedata")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, EncryptionAlgorithm, Compression, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8), ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_keystore_addresourcedata = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_getvertexcount.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_getvertexcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_removeresourcedata")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_keystore_removeresourcedata = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_gettrianglecount.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_gettrianglecount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_findresourcedata")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_keystore_findresourcedata = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_getvertex.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_getvertex.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Position)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getresourcedatacount")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)) + self.lib.lib3mf_keystore_getresourcedatacount = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_setvertex.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_setvertex.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Position)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getresourcedata")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_keystore_getresourcedata = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_addvertex.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_addvertex.argtypes = [ctypes.c_void_p, ctypes.POINTER(Position), ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_getuuid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_keystore_getuuid = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_getvertices.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_getvertices.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(Position)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_keystore_setuuid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_keystore_setuuid = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_gettriangle.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_gettriangle.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Triangle)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_rootmodelpart")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_rootmodelpart = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_settriangle.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_settriangle.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Triangle)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_findorcreatepackagepart")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_findorcreatepackagepart = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_addtriangle.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_addtriangle.argtypes = [ctypes.c_void_p, ctypes.POINTER(Triangle), ctypes.POINTER(ctypes.c_uint32)] - - self.lib.lib3mf_meshobject_gettriangleindices.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_gettriangleindices.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(Triangle)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_setunit")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ModelUnit) + self.lib.lib3mf_model_setunit = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_setobjectlevelproperty.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_setobjectlevelproperty.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint32] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getunit")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)) + self.lib.lib3mf_model_getunit = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_getobjectlevelproperty.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_getobjectlevelproperty.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_bool)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getlanguage")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_model_getlanguage = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_settriangleproperties.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_settriangleproperties.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(TriangleProperties)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_setlanguage")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_model_setlanguage = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_gettriangleproperties.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_gettriangleproperties.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(TriangleProperties)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_querywriter")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_querywriter = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_setalltriangleproperties.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_setalltriangleproperties.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(TriangleProperties)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_queryreader")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_queryreader = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_getalltriangleproperties.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_getalltriangleproperties.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(TriangleProperties)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getresourcebyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getresourcebyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_clearallproperties.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_clearallproperties.argtypes = [ctypes.c_void_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_gettexture2dbyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_gettexture2dbyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_setgeometry.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_setgeometry.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(Position), ctypes.c_uint64, ctypes.POINTER(Triangle)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getpropertytypebyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_int32)) + self.lib.lib3mf_model_getpropertytypebyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_ismanifoldandoriented.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_ismanifoldandoriented.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getbasematerialgroupbyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getbasematerialgroupbyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_meshobject_beamlattice.restype = ctypes.c_int32 - self.lib.lib3mf_meshobject_beamlattice.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_gettexture2dgroupbyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_gettexture2dgroupbyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_getminlength.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_getminlength.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getcompositematerialsbyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getcompositematerialsbyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_setminlength.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_setminlength.argtypes = [ctypes.c_void_p, ctypes.c_double] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getmultipropertygroupbyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getmultipropertygroupbyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_getclipping.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_getclipping.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getmeshobjectbyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getmeshobjectbyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_setclipping.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_setclipping.argtypes = [ctypes.c_void_p, BeamLatticeClipMode, ctypes.c_uint32] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getcomponentsobjectbyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getcomponentsobjectbyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_getrepresentation.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_getrepresentation.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getcolorgroupbyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getcolorgroupbyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_setrepresentation.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_setrepresentation.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getslicestackbyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getslicestackbyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_getballoptions.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_getballoptions.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_double)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getlevelsetbyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getlevelsetbyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_setballoptions.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_setballoptions.argtypes = [ctypes.c_void_p, BeamLatticeBallMode, ctypes.c_double] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getbuilduuid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p) + self.lib.lib3mf_model_getbuilduuid = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_getbeamcount.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_getbeamcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_setbuilduuid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_model_setbuilduuid = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_getbeam.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_getbeam.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Beam)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getbuilditems")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getbuilditems = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_addbeam.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_addbeam.argtypes = [ctypes.c_void_p, ctypes.POINTER(Beam), ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getoutbox")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(Box)) + self.lib.lib3mf_model_getoutbox = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_setbeam.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_setbeam.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Beam)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getresources")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getresources = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_setbeams.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_setbeams.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(Beam)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getobjects")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getobjects = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_getbeams.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_getbeams.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(Beam)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getmeshobjects")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getmeshobjects = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_getballcount.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_getballcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getcomponentsobjects")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getcomponentsobjects = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_getball.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_getball.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Ball)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_gettexture2ds")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_gettexture2ds = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_addball.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_addball.argtypes = [ctypes.c_void_p, ctypes.POINTER(Ball), ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getbasematerialgroups")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getbasematerialgroups = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_setball.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_setball.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Ball)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getcolorgroups")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getcolorgroups = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_setballs.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_setballs.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(Ball)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_gettexture2dgroups")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_gettexture2dgroups = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_getballs.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_getballs.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(Ball)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getcompositematerials")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getcompositematerials = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_getbeamsetcount.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_getbeamsetcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getmultipropertygroups")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getmultipropertygroups = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_addbeamset.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_addbeamset.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getslicestacks")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getslicestacks = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamlattice_getbeamset.restype = ctypes.c_int32 - self.lib.lib3mf_beamlattice_getbeamset.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getimage3ds")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getimage3ds = methodType(int(methodAddress.value)) - self.lib.lib3mf_component_getobjectresource.restype = ctypes.c_int32 - self.lib.lib3mf_component_getobjectresource.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_mergetomodel")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_mergetomodel = methodType(int(methodAddress.value)) - self.lib.lib3mf_component_getobjectresourceid.restype = ctypes.c_int32 - self.lib.lib3mf_component_getobjectresourceid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_mergefrommodel")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_model_mergefrommodel = methodType(int(methodAddress.value)) - self.lib.lib3mf_component_getuuid.restype = ctypes.c_int32 - self.lib.lib3mf_component_getuuid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addmeshobject")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addmeshobject = methodType(int(methodAddress.value)) - self.lib.lib3mf_component_setuuid.restype = ctypes.c_int32 - self.lib.lib3mf_component_setuuid.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addcomponentsobject")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addcomponentsobject = methodType(int(methodAddress.value)) - self.lib.lib3mf_component_hastransform.restype = ctypes.c_int32 - self.lib.lib3mf_component_hastransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addslicestack")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_double, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addslicestack = methodType(int(methodAddress.value)) - self.lib.lib3mf_component_gettransform.restype = ctypes.c_int32 - self.lib.lib3mf_component_gettransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(Transform)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addtexture2dfromattachment")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addtexture2dfromattachment = methodType(int(methodAddress.value)) - self.lib.lib3mf_component_settransform.restype = ctypes.c_int32 - self.lib.lib3mf_component_settransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(Transform)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addbasematerialgroup")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addbasematerialgroup = methodType(int(methodAddress.value)) - self.lib.lib3mf_componentsobject_addcomponent.restype = ctypes.c_int32 - self.lib.lib3mf_componentsobject_addcomponent.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(Transform), ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addcolorgroup")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addcolorgroup = methodType(int(methodAddress.value)) - self.lib.lib3mf_componentsobject_getcomponent.restype = ctypes.c_int32 - self.lib.lib3mf_componentsobject_getcomponent.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addtexture2dgroup")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addtexture2dgroup = methodType(int(methodAddress.value)) - self.lib.lib3mf_componentsobject_getcomponentcount.restype = ctypes.c_int32 - self.lib.lib3mf_componentsobject_getcomponentcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addcompositematerials")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addcompositematerials = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamset_setname.restype = ctypes.c_int32 - self.lib.lib3mf_beamset_setname.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addmultipropertygroup")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addmultipropertygroup = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamset_getname.restype = ctypes.c_int32 - self.lib.lib3mf_beamset_getname.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addimagestack")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint32, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addimagestack = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamset_setidentifier.restype = ctypes.c_int32 - self.lib.lib3mf_beamset_setidentifier.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getimagestackbyid")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getimagestackbyid = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamset_getidentifier.restype = ctypes.c_int32 - self.lib.lib3mf_beamset_getidentifier.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addbuilditem")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(Transform), ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addbuilditem = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamset_getreferencecount.restype = ctypes.c_int32 - self.lib.lib3mf_beamset_getreferencecount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_removebuilditem")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_model_removebuilditem = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamset_setreferences.restype = ctypes.c_int32 - self.lib.lib3mf_beamset_setreferences.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getmetadatagroup")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getmetadatagroup = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamset_getreferences.restype = ctypes.c_int32 - self.lib.lib3mf_beamset_getreferences.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addattachment")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addattachment = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamset_getballreferencecount.restype = ctypes.c_int32 - self.lib.lib3mf_beamset_getballreferencecount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_removeattachment")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_model_removeattachment = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamset_setballreferences.restype = ctypes.c_int32 - self.lib.lib3mf_beamset_setballreferences.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getattachment")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getattachment = methodType(int(methodAddress.value)) - self.lib.lib3mf_beamset_getballreferences.restype = ctypes.c_int32 - self.lib.lib3mf_beamset_getballreferences.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_findattachment")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_findattachment = methodType(int(methodAddress.value)) - self.lib.lib3mf_basematerialgroup_getcount.restype = ctypes.c_int32 - self.lib.lib3mf_basematerialgroup_getcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getattachmentcount")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)) + self.lib.lib3mf_model_getattachmentcount = methodType(int(methodAddress.value)) - self.lib.lib3mf_basematerialgroup_getallpropertyids.restype = ctypes.c_int32 - self.lib.lib3mf_basematerialgroup_getallpropertyids.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_haspackagethumbnailattachment")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)) + self.lib.lib3mf_model_haspackagethumbnailattachment = methodType(int(methodAddress.value)) - self.lib.lib3mf_basematerialgroup_addmaterial.restype = ctypes.c_int32 - self.lib.lib3mf_basematerialgroup_addmaterial.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(Color), ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_createpackagethumbnailattachment")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_createpackagethumbnailattachment = methodType(int(methodAddress.value)) - self.lib.lib3mf_basematerialgroup_removematerial.restype = ctypes.c_int32 - self.lib.lib3mf_basematerialgroup_removematerial.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getpackagethumbnailattachment")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getpackagethumbnailattachment = methodType(int(methodAddress.value)) - self.lib.lib3mf_basematerialgroup_getname.restype = ctypes.c_int32 - self.lib.lib3mf_basematerialgroup_getname.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_removepackagethumbnailattachment")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p) + self.lib.lib3mf_model_removepackagethumbnailattachment = methodType(int(methodAddress.value)) - self.lib.lib3mf_basematerialgroup_setname.restype = ctypes.c_int32 - self.lib.lib3mf_basematerialgroup_setname.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_char_p] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addcustomcontenttype")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p) + self.lib.lib3mf_model_addcustomcontenttype = methodType(int(methodAddress.value)) - self.lib.lib3mf_basematerialgroup_setdisplaycolor.restype = ctypes.c_int32 - self.lib.lib3mf_basematerialgroup_setdisplaycolor.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Color)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_removecustomcontenttype")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_char_p) + self.lib.lib3mf_model_removecustomcontenttype = methodType(int(methodAddress.value)) - self.lib.lib3mf_basematerialgroup_getdisplaycolor.restype = ctypes.c_int32 - self.lib.lib3mf_basematerialgroup_getdisplaycolor.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Color)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_setrandomnumbercallback")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, RandomNumberCallback, ctypes.c_void_p) + self.lib.lib3mf_model_setrandomnumbercallback = methodType(int(methodAddress.value)) - self.lib.lib3mf_colorgroup_getcount.restype = ctypes.c_int32 - self.lib.lib3mf_colorgroup_getcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getkeystore")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getkeystore = methodType(int(methodAddress.value)) - self.lib.lib3mf_colorgroup_getallpropertyids.restype = ctypes.c_int32 - self.lib.lib3mf_colorgroup_getallpropertyids.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getfunctions")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getfunctions = methodType(int(methodAddress.value)) - self.lib.lib3mf_colorgroup_addcolor.restype = ctypes.c_int32 - self.lib.lib3mf_colorgroup_addcolor.argtypes = [ctypes.c_void_p, ctypes.POINTER(Color), ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addimplicitfunction")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addimplicitfunction = methodType(int(methodAddress.value)) - self.lib.lib3mf_colorgroup_removecolor.restype = ctypes.c_int32 - self.lib.lib3mf_colorgroup_removecolor.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addfunctionfromimage3d")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addfunctionfromimage3d = methodType(int(methodAddress.value)) - self.lib.lib3mf_colorgroup_setcolor.restype = ctypes.c_int32 - self.lib.lib3mf_colorgroup_setcolor.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Color)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addvolumedata")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addvolumedata = methodType(int(methodAddress.value)) - self.lib.lib3mf_colorgroup_getcolor.restype = ctypes.c_int32 - self.lib.lib3mf_colorgroup_getcolor.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Color)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_addlevelset")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_addlevelset = methodType(int(methodAddress.value)) - self.lib.lib3mf_texture2dgroup_getcount.restype = ctypes.c_int32 - self.lib.lib3mf_texture2dgroup_getcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_getlevelsets")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)) + self.lib.lib3mf_model_getlevelsets = methodType(int(methodAddress.value)) - self.lib.lib3mf_texture2dgroup_getallpropertyids.restype = ctypes.c_int32 - self.lib.lib3mf_texture2dgroup_getallpropertyids.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + err = symbolLookupMethod(ctypes.c_char_p(str.encode("lib3mf_model_removeresource")), methodAddress) + if err != 0: + raise ELib3MFException(ErrorCodes.COULDNOTLOADLIBRARY, str(err)) + methodType = ctypes.CFUNCTYPE(ctypes.c_int32, ctypes.c_void_p, ctypes.c_void_p) + self.lib.lib3mf_model_removeresource = methodType(int(methodAddress.value)) - self.lib.lib3mf_texture2dgroup_addtex2coord.restype = ctypes.c_int32 - self.lib.lib3mf_texture2dgroup_addtex2coord.argtypes = [ctypes.c_void_p, ctypes.POINTER(Tex2Coord), ctypes.POINTER(ctypes.c_uint32)] + except AttributeError as ae: + raise ELib3MFException(ErrorCodes.COULDNOTFINDLIBRARYEXPORT, ae.args[0]) + + def _loadFunctionTable(self): + try: + self.lib.lib3mf_getlibraryversion.restype = ctypes.c_int32 + self.lib.lib3mf_getlibraryversion.argtypes = [ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_texture2dgroup_gettex2coord.restype = ctypes.c_int32 - self.lib.lib3mf_texture2dgroup_gettex2coord.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Tex2Coord)] + self.lib.lib3mf_getprereleaseinformation.restype = ctypes.c_int32 + self.lib.lib3mf_getprereleaseinformation.argtypes = [ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_texture2dgroup_removetex2coord.restype = ctypes.c_int32 - self.lib.lib3mf_texture2dgroup_removetex2coord.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + self.lib.lib3mf_getbuildinformation.restype = ctypes.c_int32 + self.lib.lib3mf_getbuildinformation.argtypes = [ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_texture2dgroup_gettexture2d.restype = ctypes.c_int32 - self.lib.lib3mf_texture2dgroup_gettexture2d.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_getspecificationversion.restype = ctypes.c_int32 + self.lib.lib3mf_getspecificationversion.argtypes = [ctypes.c_char_p, ctypes.POINTER(ctypes.c_bool), ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_compositematerials_getcount.restype = ctypes.c_int32 - self.lib.lib3mf_compositematerials_getcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_createmodel.restype = ctypes.c_int32 + self.lib.lib3mf_createmodel.argtypes = [ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_compositematerials_getallpropertyids.restype = ctypes.c_int32 - self.lib.lib3mf_compositematerials_getallpropertyids.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_release.restype = ctypes.c_int32 + self.lib.lib3mf_release.argtypes = [ctypes.c_void_p] - self.lib.lib3mf_compositematerials_getbasematerialgroup.restype = ctypes.c_int32 - self.lib.lib3mf_compositematerials_getbasematerialgroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_acquire.restype = ctypes.c_int32 + self.lib.lib3mf_acquire.argtypes = [ctypes.c_void_p] - self.lib.lib3mf_compositematerials_addcomposite.restype = ctypes.c_int32 - self.lib.lib3mf_compositematerials_addcomposite.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(CompositeConstituent), ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_setjournal.restype = ctypes.c_int32 + self.lib.lib3mf_setjournal.argtypes = [ctypes.c_char_p] - self.lib.lib3mf_compositematerials_removecomposite.restype = ctypes.c_int32 - self.lib.lib3mf_compositematerials_removecomposite.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + self.lib.lib3mf_getlasterror.restype = ctypes.c_int32 + self.lib.lib3mf_getlasterror.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p, ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_compositematerials_getcomposite.restype = ctypes.c_int32 - self.lib.lib3mf_compositematerials_getcomposite.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(CompositeConstituent)] + self.lib.lib3mf_getsymbollookupmethod.restype = ctypes.c_int32 + self.lib.lib3mf_getsymbollookupmethod.argtypes = [ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_multipropertygroup_getcount.restype = ctypes.c_int32 - self.lib.lib3mf_multipropertygroup_getcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_retrieveprogressmessage.restype = ctypes.c_int32 + self.lib.lib3mf_retrieveprogressmessage.argtypes = [ProgressIdentifier, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_multipropertygroup_getallpropertyids.restype = ctypes.c_int32 - self.lib.lib3mf_multipropertygroup_getallpropertyids.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_rgbatocolor.restype = ctypes.c_int32 + self.lib.lib3mf_rgbatocolor.argtypes = [ctypes.c_uint8, ctypes.c_uint8, ctypes.c_uint8, ctypes.c_uint8, ctypes.POINTER(Color)] - self.lib.lib3mf_multipropertygroup_addmultiproperty.restype = ctypes.c_int32 - self.lib.lib3mf_multipropertygroup_addmultiproperty.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_floatrgbatocolor.restype = ctypes.c_int32 + self.lib.lib3mf_floatrgbatocolor.argtypes = [ctypes.c_float, ctypes.c_float, ctypes.c_float, ctypes.c_float, ctypes.POINTER(Color)] - self.lib.lib3mf_multipropertygroup_setmultiproperty.restype = ctypes.c_int32 - self.lib.lib3mf_multipropertygroup_setmultiproperty.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_colortorgba.restype = ctypes.c_int32 + self.lib.lib3mf_colortorgba.argtypes = [ctypes.POINTER(Color), ctypes.POINTER(ctypes.c_uint8), ctypes.POINTER(ctypes.c_uint8), ctypes.POINTER(ctypes.c_uint8), ctypes.POINTER(ctypes.c_uint8)] - self.lib.lib3mf_multipropertygroup_getmultiproperty.restype = ctypes.c_int32 - self.lib.lib3mf_multipropertygroup_getmultiproperty.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_colortofloatrgba.restype = ctypes.c_int32 + self.lib.lib3mf_colortofloatrgba.argtypes = [ctypes.POINTER(Color), ctypes.POINTER(ctypes.c_float), ctypes.POINTER(ctypes.c_float), ctypes.POINTER(ctypes.c_float), ctypes.POINTER(ctypes.c_float)] - self.lib.lib3mf_multipropertygroup_removemultiproperty.restype = ctypes.c_int32 - self.lib.lib3mf_multipropertygroup_removemultiproperty.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + self.lib.lib3mf_getidentitytransform.restype = ctypes.c_int32 + self.lib.lib3mf_getidentitytransform.argtypes = [ctypes.POINTER(Transform)] - self.lib.lib3mf_multipropertygroup_getlayercount.restype = ctypes.c_int32 - self.lib.lib3mf_multipropertygroup_getlayercount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_getuniformscaletransform.restype = ctypes.c_int32 + self.lib.lib3mf_getuniformscaletransform.argtypes = [ctypes.c_float, ctypes.POINTER(Transform)] - self.lib.lib3mf_multipropertygroup_addlayer.restype = ctypes.c_int32 - self.lib.lib3mf_multipropertygroup_addlayer.argtypes = [ctypes.c_void_p, ctypes.POINTER(MultiPropertyLayer), ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_getscaletransform.restype = ctypes.c_int32 + self.lib.lib3mf_getscaletransform.argtypes = [ctypes.c_float, ctypes.c_float, ctypes.c_float, ctypes.POINTER(Transform)] - self.lib.lib3mf_multipropertygroup_getlayer.restype = ctypes.c_int32 - self.lib.lib3mf_multipropertygroup_getlayer.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(MultiPropertyLayer)] + self.lib.lib3mf_gettranslationtransform.restype = ctypes.c_int32 + self.lib.lib3mf_gettranslationtransform.argtypes = [ctypes.c_float, ctypes.c_float, ctypes.c_float, ctypes.POINTER(Transform)] - self.lib.lib3mf_multipropertygroup_removelayer.restype = ctypes.c_int32 - self.lib.lib3mf_multipropertygroup_removelayer.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + self.lib.lib3mf_base_classtypeid.restype = ctypes.c_int32 + self.lib.lib3mf_base_classtypeid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] - self.lib.lib3mf_attachment_getpath.restype = ctypes.c_int32 - self.lib.lib3mf_attachment_getpath.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + self.lib.lib3mf_writer_writetofile.restype = ctypes.c_int32 + self.lib.lib3mf_writer_writetofile.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - self.lib.lib3mf_attachment_setpath.restype = ctypes.c_int32 - self.lib.lib3mf_attachment_setpath.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + self.lib.lib3mf_writer_getstreamsize.restype = ctypes.c_int32 + self.lib.lib3mf_writer_getstreamsize.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] - self.lib.lib3mf_attachment_packagepart.restype = ctypes.c_int32 - self.lib.lib3mf_attachment_packagepart.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_writer_writetobuffer.restype = ctypes.c_int32 + self.lib.lib3mf_writer_writetobuffer.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] - self.lib.lib3mf_attachment_getrelationshiptype.restype = ctypes.c_int32 - self.lib.lib3mf_attachment_getrelationshiptype.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + self.lib.lib3mf_writer_writetocallback.restype = ctypes.c_int32 + self.lib.lib3mf_writer_writetocallback.argtypes = [ctypes.c_void_p, WriteCallback, SeekCallback, ctypes.c_void_p] - self.lib.lib3mf_attachment_setrelationshiptype.restype = ctypes.c_int32 - self.lib.lib3mf_attachment_setrelationshiptype.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + self.lib.lib3mf_writer_setprogresscallback.restype = ctypes.c_int32 + self.lib.lib3mf_writer_setprogresscallback.argtypes = [ctypes.c_void_p, ProgressCallback, ctypes.c_void_p] - self.lib.lib3mf_attachment_writetofile.restype = ctypes.c_int32 - self.lib.lib3mf_attachment_writetofile.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + self.lib.lib3mf_writer_getdecimalprecision.restype = ctypes.c_int32 + self.lib.lib3mf_writer_getdecimalprecision.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_attachment_readfromfile.restype = ctypes.c_int32 - self.lib.lib3mf_attachment_readfromfile.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + self.lib.lib3mf_writer_setdecimalprecision.restype = ctypes.c_int32 + self.lib.lib3mf_writer_setdecimalprecision.argtypes = [ctypes.c_void_p, ctypes.c_uint32] - self.lib.lib3mf_attachment_readfromcallback.restype = ctypes.c_int32 - self.lib.lib3mf_attachment_readfromcallback.argtypes = [ctypes.c_void_p, ReadCallback, ctypes.c_uint64, SeekCallback, ctypes.c_void_p] + self.lib.lib3mf_writer_setstrictmodeactive.restype = ctypes.c_int32 + self.lib.lib3mf_writer_setstrictmodeactive.argtypes = [ctypes.c_void_p, ctypes.c_bool] - self.lib.lib3mf_attachment_getstreamsize.restype = ctypes.c_int32 - self.lib.lib3mf_attachment_getstreamsize.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + self.lib.lib3mf_writer_getstrictmodeactive.restype = ctypes.c_int32 + self.lib.lib3mf_writer_getstrictmodeactive.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_attachment_writetobuffer.restype = ctypes.c_int32 - self.lib.lib3mf_attachment_writetobuffer.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] + self.lib.lib3mf_writer_getwarning.restype = ctypes.c_int32 + self.lib.lib3mf_writer_getwarning.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_uint32), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_attachment_readfrombuffer.restype = ctypes.c_int32 - self.lib.lib3mf_attachment_readfrombuffer.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8)] + self.lib.lib3mf_writer_getwarningcount.restype = ctypes.c_int32 + self.lib.lib3mf_writer_getwarningcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_texture2d_getattachment.restype = ctypes.c_int32 - self.lib.lib3mf_texture2d_getattachment.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_writer_addkeywrappingcallback.restype = ctypes.c_int32 + self.lib.lib3mf_writer_addkeywrappingcallback.argtypes = [ctypes.c_void_p, ctypes.c_char_p, KeyWrappingCallback, ctypes.c_void_p] - self.lib.lib3mf_texture2d_setattachment.restype = ctypes.c_int32 - self.lib.lib3mf_texture2d_setattachment.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + self.lib.lib3mf_writer_setcontentencryptioncallback.restype = ctypes.c_int32 + self.lib.lib3mf_writer_setcontentencryptioncallback.argtypes = [ctypes.c_void_p, ContentEncryptionCallback, ctypes.c_void_p] - self.lib.lib3mf_texture2d_getcontenttype.restype = ctypes.c_int32 - self.lib.lib3mf_texture2d_getcontenttype.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + self.lib.lib3mf_reader_readfromfile.restype = ctypes.c_int32 + self.lib.lib3mf_reader_readfromfile.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - self.lib.lib3mf_texture2d_setcontenttype.restype = ctypes.c_int32 - self.lib.lib3mf_texture2d_setcontenttype.argtypes = [ctypes.c_void_p, TextureType] + self.lib.lib3mf_reader_readfrombuffer.restype = ctypes.c_int32 + self.lib.lib3mf_reader_readfrombuffer.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8)] - self.lib.lib3mf_texture2d_gettilestyleuv.restype = ctypes.c_int32 - self.lib.lib3mf_texture2d_gettilestyleuv.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_int32)] + self.lib.lib3mf_reader_readfromcallback.restype = ctypes.c_int32 + self.lib.lib3mf_reader_readfromcallback.argtypes = [ctypes.c_void_p, ReadCallback, ctypes.c_uint64, SeekCallback, ctypes.c_void_p] - self.lib.lib3mf_texture2d_settilestyleuv.restype = ctypes.c_int32 - self.lib.lib3mf_texture2d_settilestyleuv.argtypes = [ctypes.c_void_p, TextureTileStyle, TextureTileStyle] + self.lib.lib3mf_reader_setprogresscallback.restype = ctypes.c_int32 + self.lib.lib3mf_reader_setprogresscallback.argtypes = [ctypes.c_void_p, ProgressCallback, ctypes.c_void_p] - self.lib.lib3mf_texture2d_getfilter.restype = ctypes.c_int32 - self.lib.lib3mf_texture2d_getfilter.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + self.lib.lib3mf_reader_addrelationtoread.restype = ctypes.c_int32 + self.lib.lib3mf_reader_addrelationtoread.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - self.lib.lib3mf_texture2d_setfilter.restype = ctypes.c_int32 - self.lib.lib3mf_texture2d_setfilter.argtypes = [ctypes.c_void_p, TextureFilter] + self.lib.lib3mf_reader_removerelationtoread.restype = ctypes.c_int32 + self.lib.lib3mf_reader_removerelationtoread.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - self.lib.lib3mf_builditem_getobjectresource.restype = ctypes.c_int32 - self.lib.lib3mf_builditem_getobjectresource.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_reader_setstrictmodeactive.restype = ctypes.c_int32 + self.lib.lib3mf_reader_setstrictmodeactive.argtypes = [ctypes.c_void_p, ctypes.c_bool] - self.lib.lib3mf_builditem_getuuid.restype = ctypes.c_int32 - self.lib.lib3mf_builditem_getuuid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + self.lib.lib3mf_reader_getstrictmodeactive.restype = ctypes.c_int32 + self.lib.lib3mf_reader_getstrictmodeactive.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_builditem_setuuid.restype = ctypes.c_int32 - self.lib.lib3mf_builditem_setuuid.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + self.lib.lib3mf_reader_getwarning.restype = ctypes.c_int32 + self.lib.lib3mf_reader_getwarning.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_uint32), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_builditem_getobjectresourceid.restype = ctypes.c_int32 - self.lib.lib3mf_builditem_getobjectresourceid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_reader_getwarningcount.restype = ctypes.c_int32 + self.lib.lib3mf_reader_getwarningcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_builditem_hasobjecttransform.restype = ctypes.c_int32 - self.lib.lib3mf_builditem_hasobjecttransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + self.lib.lib3mf_reader_addkeywrappingcallback.restype = ctypes.c_int32 + self.lib.lib3mf_reader_addkeywrappingcallback.argtypes = [ctypes.c_void_p, ctypes.c_char_p, KeyWrappingCallback, ctypes.c_void_p] - self.lib.lib3mf_builditem_getobjecttransform.restype = ctypes.c_int32 - self.lib.lib3mf_builditem_getobjecttransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(Transform)] + self.lib.lib3mf_reader_setcontentencryptioncallback.restype = ctypes.c_int32 + self.lib.lib3mf_reader_setcontentencryptioncallback.argtypes = [ctypes.c_void_p, ContentEncryptionCallback, ctypes.c_void_p] - self.lib.lib3mf_builditem_setobjecttransform.restype = ctypes.c_int32 - self.lib.lib3mf_builditem_setobjecttransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(Transform)] + self.lib.lib3mf_packagepart_getpath.restype = ctypes.c_int32 + self.lib.lib3mf_packagepart_getpath.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_builditem_getpartnumber.restype = ctypes.c_int32 - self.lib.lib3mf_builditem_getpartnumber.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + self.lib.lib3mf_packagepart_setpath.restype = ctypes.c_int32 + self.lib.lib3mf_packagepart_setpath.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - self.lib.lib3mf_builditem_setpartnumber.restype = ctypes.c_int32 - self.lib.lib3mf_builditem_setpartnumber.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + self.lib.lib3mf_resource_getresourceid.restype = ctypes.c_int32 + self.lib.lib3mf_resource_getresourceid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_builditem_getmetadatagroup.restype = ctypes.c_int32 - self.lib.lib3mf_builditem_getmetadatagroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_resource_getuniqueresourceid.restype = ctypes.c_int32 + self.lib.lib3mf_resource_getuniqueresourceid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_builditem_getoutbox.restype = ctypes.c_int32 - self.lib.lib3mf_builditem_getoutbox.argtypes = [ctypes.c_void_p, ctypes.POINTER(Box)] + self.lib.lib3mf_resource_packagepart.restype = ctypes.c_int32 + self.lib.lib3mf_resource_packagepart.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_builditemiterator_movenext.restype = ctypes.c_int32 - self.lib.lib3mf_builditemiterator_movenext.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + self.lib.lib3mf_resource_setpackagepart.restype = ctypes.c_int32 + self.lib.lib3mf_resource_setpackagepart.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - self.lib.lib3mf_builditemiterator_moveprevious.restype = ctypes.c_int32 - self.lib.lib3mf_builditemiterator_moveprevious.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + self.lib.lib3mf_resource_getmodelresourceid.restype = ctypes.c_int32 + self.lib.lib3mf_resource_getmodelresourceid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_builditemiterator_getcurrent.restype = ctypes.c_int32 - self.lib.lib3mf_builditemiterator_getcurrent.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_resourceiterator_movenext.restype = ctypes.c_int32 + self.lib.lib3mf_resourceiterator_movenext.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_builditemiterator_clone.restype = ctypes.c_int32 - self.lib.lib3mf_builditemiterator_clone.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_resourceiterator_moveprevious.restype = ctypes.c_int32 + self.lib.lib3mf_resourceiterator_moveprevious.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_builditemiterator_count.restype = ctypes.c_int32 - self.lib.lib3mf_builditemiterator_count.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + self.lib.lib3mf_resourceiterator_getcurrent.restype = ctypes.c_int32 + self.lib.lib3mf_resourceiterator_getcurrent.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slice_setvertices.restype = ctypes.c_int32 - self.lib.lib3mf_slice_setvertices.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(Position2D)] + self.lib.lib3mf_resourceiterator_clone.restype = ctypes.c_int32 + self.lib.lib3mf_resourceiterator_clone.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slice_getvertices.restype = ctypes.c_int32 - self.lib.lib3mf_slice_getvertices.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(Position2D)] + self.lib.lib3mf_resourceiterator_count.restype = ctypes.c_int32 + self.lib.lib3mf_resourceiterator_count.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] - self.lib.lib3mf_slice_getvertexcount.restype = ctypes.c_int32 - self.lib.lib3mf_slice_getvertexcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + self.lib.lib3mf_slicestackiterator_getcurrentslicestack.restype = ctypes.c_int32 + self.lib.lib3mf_slicestackiterator_getcurrentslicestack.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slice_addpolygon.restype = ctypes.c_int32 - self.lib.lib3mf_slice_addpolygon.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint64)] + self.lib.lib3mf_objectiterator_getcurrentobject.restype = ctypes.c_int32 + self.lib.lib3mf_objectiterator_getcurrentobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slice_getpolygoncount.restype = ctypes.c_int32 - self.lib.lib3mf_slice_getpolygoncount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + self.lib.lib3mf_meshobjectiterator_getcurrentmeshobject.restype = ctypes.c_int32 + self.lib.lib3mf_meshobjectiterator_getcurrentmeshobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slice_setpolygonindices.restype = ctypes.c_int32 - self.lib.lib3mf_slice_setpolygonindices.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_componentsobjectiterator_getcurrentcomponentsobject.restype = ctypes.c_int32 + self.lib.lib3mf_componentsobjectiterator_getcurrentcomponentsobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slice_getpolygonindices.restype = ctypes.c_int32 - self.lib.lib3mf_slice_getpolygonindices.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_texture2diterator_getcurrenttexture2d.restype = ctypes.c_int32 + self.lib.lib3mf_texture2diterator_getcurrenttexture2d.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slice_getpolygonindexcount.restype = ctypes.c_int32 - self.lib.lib3mf_slice_getpolygonindexcount.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64)] + self.lib.lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup.restype = ctypes.c_int32 + self.lib.lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slice_getztop.restype = ctypes.c_int32 - self.lib.lib3mf_slice_getztop.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)] + self.lib.lib3mf_colorgroupiterator_getcurrentcolorgroup.restype = ctypes.c_int32 + self.lib.lib3mf_colorgroupiterator_getcurrentcolorgroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slicestack_getbottomz.restype = ctypes.c_int32 - self.lib.lib3mf_slicestack_getbottomz.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)] + self.lib.lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup.restype = ctypes.c_int32 + self.lib.lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slicestack_getslicecount.restype = ctypes.c_int32 - self.lib.lib3mf_slicestack_getslicecount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + self.lib.lib3mf_compositematerialsiterator_getcurrentcompositematerials.restype = ctypes.c_int32 + self.lib.lib3mf_compositematerialsiterator_getcurrentcompositematerials.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slicestack_getslice.restype = ctypes.c_int32 - self.lib.lib3mf_slicestack_getslice.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup.restype = ctypes.c_int32 + self.lib.lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slicestack_addslice.restype = ctypes.c_int32 - self.lib.lib3mf_slicestack_addslice.argtypes = [ctypes.c_void_p, ctypes.c_double, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_image3diterator_getcurrentimage3d.restype = ctypes.c_int32 + self.lib.lib3mf_image3diterator_getcurrentimage3d.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slicestack_getslicerefcount.restype = ctypes.c_int32 - self.lib.lib3mf_slicestack_getslicerefcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + self.lib.lib3mf_functioniterator_getcurrentfunction.restype = ctypes.c_int32 + self.lib.lib3mf_functioniterator_getcurrentfunction.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slicestack_addslicestackreference.restype = ctypes.c_int32 - self.lib.lib3mf_slicestack_addslicestackreference.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + self.lib.lib3mf_levelsetiterator_getcurrentlevelset.restype = ctypes.c_int32 + self.lib.lib3mf_levelsetiterator_getcurrentlevelset.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_slicestack_getslicestackreference.restype = ctypes.c_int32 - self.lib.lib3mf_slicestack_getslicestackreference.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_metadata_getnamespace.restype = ctypes.c_int32 + self.lib.lib3mf_metadata_getnamespace.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_slicestack_collapseslicereferences.restype = ctypes.c_int32 - self.lib.lib3mf_slicestack_collapseslicereferences.argtypes = [ctypes.c_void_p] + self.lib.lib3mf_metadata_setnamespace.restype = ctypes.c_int32 + self.lib.lib3mf_metadata_setnamespace.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - self.lib.lib3mf_slicestack_setownpath.restype = ctypes.c_int32 - self.lib.lib3mf_slicestack_setownpath.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + self.lib.lib3mf_metadata_getname.restype = ctypes.c_int32 + self.lib.lib3mf_metadata_getname.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_slicestack_getownpath.restype = ctypes.c_int32 - self.lib.lib3mf_slicestack_getownpath.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + self.lib.lib3mf_metadata_setname.restype = ctypes.c_int32 + self.lib.lib3mf_metadata_setname.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - self.lib.lib3mf_consumer_getconsumerid.restype = ctypes.c_int32 - self.lib.lib3mf_consumer_getconsumerid.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + self.lib.lib3mf_metadata_getkey.restype = ctypes.c_int32 + self.lib.lib3mf_metadata_getkey.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_consumer_getkeyid.restype = ctypes.c_int32 - self.lib.lib3mf_consumer_getkeyid.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + self.lib.lib3mf_metadata_getmustpreserve.restype = ctypes.c_int32 + self.lib.lib3mf_metadata_getmustpreserve.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_consumer_getkeyvalue.restype = ctypes.c_int32 - self.lib.lib3mf_consumer_getkeyvalue.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + self.lib.lib3mf_metadata_setmustpreserve.restype = ctypes.c_int32 + self.lib.lib3mf_metadata_setmustpreserve.argtypes = [ctypes.c_void_p, ctypes.c_bool] - self.lib.lib3mf_accessright_getconsumer.restype = ctypes.c_int32 - self.lib.lib3mf_accessright_getconsumer.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_metadata_gettype.restype = ctypes.c_int32 + self.lib.lib3mf_metadata_gettype.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_accessright_getwrappingalgorithm.restype = ctypes.c_int32 - self.lib.lib3mf_accessright_getwrappingalgorithm.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + self.lib.lib3mf_metadata_settype.restype = ctypes.c_int32 + self.lib.lib3mf_metadata_settype.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - self.lib.lib3mf_accessright_getmgfalgorithm.restype = ctypes.c_int32 - self.lib.lib3mf_accessright_getmgfalgorithm.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + self.lib.lib3mf_metadata_getvalue.restype = ctypes.c_int32 + self.lib.lib3mf_metadata_getvalue.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_accessright_getdigestmethod.restype = ctypes.c_int32 - self.lib.lib3mf_accessright_getdigestmethod.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + self.lib.lib3mf_metadata_setvalue.restype = ctypes.c_int32 + self.lib.lib3mf_metadata_setvalue.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - self.lib.lib3mf_contentencryptionparams_getencryptionalgorithm.restype = ctypes.c_int32 - self.lib.lib3mf_contentencryptionparams_getencryptionalgorithm.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + self.lib.lib3mf_metadatagroup_getmetadatacount.restype = ctypes.c_int32 + self.lib.lib3mf_metadatagroup_getmetadatacount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_contentencryptionparams_getkey.restype = ctypes.c_int32 - self.lib.lib3mf_contentencryptionparams_getkey.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] + self.lib.lib3mf_metadatagroup_getmetadata.restype = ctypes.c_int32 + self.lib.lib3mf_metadatagroup_getmetadata.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_contentencryptionparams_getinitializationvector.restype = ctypes.c_int32 - self.lib.lib3mf_contentencryptionparams_getinitializationvector.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] + self.lib.lib3mf_metadatagroup_getmetadatabykey.restype = ctypes.c_int32 + self.lib.lib3mf_metadatagroup_getmetadatabykey.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_contentencryptionparams_getauthenticationtag.restype = ctypes.c_int32 - self.lib.lib3mf_contentencryptionparams_getauthenticationtag.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] + self.lib.lib3mf_metadatagroup_removemetadatabyindex.restype = ctypes.c_int32 + self.lib.lib3mf_metadatagroup_removemetadatabyindex.argtypes = [ctypes.c_void_p, ctypes.c_uint32] - self.lib.lib3mf_contentencryptionparams_setauthenticationtag.restype = ctypes.c_int32 - self.lib.lib3mf_contentencryptionparams_setauthenticationtag.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8)] + self.lib.lib3mf_metadatagroup_removemetadata.restype = ctypes.c_int32 + self.lib.lib3mf_metadatagroup_removemetadata.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - self.lib.lib3mf_contentencryptionparams_getadditionalauthenticationdata.restype = ctypes.c_int32 - self.lib.lib3mf_contentencryptionparams_getadditionalauthenticationdata.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] + self.lib.lib3mf_metadatagroup_addmetadata.restype = ctypes.c_int32 + self.lib.lib3mf_metadatagroup_addmetadata.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_bool, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_contentencryptionparams_getdescriptor.restype = ctypes.c_int32 - self.lib.lib3mf_contentencryptionparams_getdescriptor.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + self.lib.lib3mf_object_gettype.restype = ctypes.c_int32 + self.lib.lib3mf_object_gettype.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] - self.lib.lib3mf_contentencryptionparams_getkeyuuid.restype = ctypes.c_int32 - self.lib.lib3mf_contentencryptionparams_getkeyuuid.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + self.lib.lib3mf_object_settype.restype = ctypes.c_int32 + self.lib.lib3mf_object_settype.argtypes = [ctypes.c_void_p, ObjectType] - self.lib.lib3mf_resourcedata_getpath.restype = ctypes.c_int32 - self.lib.lib3mf_resourcedata_getpath.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_object_getname.restype = ctypes.c_int32 + self.lib.lib3mf_object_getname.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_resourcedata_getencryptionalgorithm.restype = ctypes.c_int32 - self.lib.lib3mf_resourcedata_getencryptionalgorithm.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + self.lib.lib3mf_object_setname.restype = ctypes.c_int32 + self.lib.lib3mf_object_setname.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - self.lib.lib3mf_resourcedata_getcompression.restype = ctypes.c_int32 - self.lib.lib3mf_resourcedata_getcompression.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + self.lib.lib3mf_object_getpartnumber.restype = ctypes.c_int32 + self.lib.lib3mf_object_getpartnumber.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_resourcedata_getadditionalauthenticationdata.restype = ctypes.c_int32 - self.lib.lib3mf_resourcedata_getadditionalauthenticationdata.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] + self.lib.lib3mf_object_setpartnumber.restype = ctypes.c_int32 + self.lib.lib3mf_object_setpartnumber.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - self.lib.lib3mf_resourcedatagroup_getkeyuuid.restype = ctypes.c_int32 - self.lib.lib3mf_resourcedatagroup_getkeyuuid.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + self.lib.lib3mf_object_ismeshobject.restype = ctypes.c_int32 + self.lib.lib3mf_object_ismeshobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_resourcedatagroup_addaccessright.restype = ctypes.c_int32 - self.lib.lib3mf_resourcedatagroup_addaccessright.argtypes = [ctypes.c_void_p, ctypes.c_void_p, WrappingAlgorithm, MgfAlgorithm, DigestMethod, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_object_iscomponentsobject.restype = ctypes.c_int32 + self.lib.lib3mf_object_iscomponentsobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_resourcedatagroup_findaccessrightbyconsumer.restype = ctypes.c_int32 - self.lib.lib3mf_resourcedatagroup_findaccessrightbyconsumer.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_object_islevelsetobject.restype = ctypes.c_int32 + self.lib.lib3mf_object_islevelsetobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_resourcedatagroup_removeaccessright.restype = ctypes.c_int32 - self.lib.lib3mf_resourcedatagroup_removeaccessright.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + self.lib.lib3mf_object_isvalid.restype = ctypes.c_int32 + self.lib.lib3mf_object_isvalid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_keystore_addconsumer.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_addconsumer.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_object_setattachmentasthumbnail.restype = ctypes.c_int32 + self.lib.lib3mf_object_setattachmentasthumbnail.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - self.lib.lib3mf_keystore_getconsumercount.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_getconsumercount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + self.lib.lib3mf_object_getthumbnailattachment.restype = ctypes.c_int32 + self.lib.lib3mf_object_getthumbnailattachment.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_keystore_getconsumer.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_getconsumer.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_object_clearthumbnailattachment.restype = ctypes.c_int32 + self.lib.lib3mf_object_clearthumbnailattachment.argtypes = [ctypes.c_void_p] - self.lib.lib3mf_keystore_removeconsumer.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_removeconsumer.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + self.lib.lib3mf_object_getoutbox.restype = ctypes.c_int32 + self.lib.lib3mf_object_getoutbox.argtypes = [ctypes.c_void_p, ctypes.POINTER(Box)] - self.lib.lib3mf_keystore_findconsumer.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_findconsumer.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_object_getuuid.restype = ctypes.c_int32 + self.lib.lib3mf_object_getuuid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_keystore_getresourcedatagroupcount.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_getresourcedatagroupcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + self.lib.lib3mf_object_setuuid.restype = ctypes.c_int32 + self.lib.lib3mf_object_setuuid.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - self.lib.lib3mf_keystore_addresourcedatagroup.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_addresourcedatagroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_object_getmetadatagroup.restype = ctypes.c_int32 + self.lib.lib3mf_object_getmetadatagroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_keystore_getresourcedatagroup.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_getresourcedatagroup.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_object_setslicesmeshresolution.restype = ctypes.c_int32 + self.lib.lib3mf_object_setslicesmeshresolution.argtypes = [ctypes.c_void_p, SlicesMeshResolution] - self.lib.lib3mf_keystore_removeresourcedatagroup.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_removeresourcedatagroup.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + self.lib.lib3mf_object_getslicesmeshresolution.restype = ctypes.c_int32 + self.lib.lib3mf_object_getslicesmeshresolution.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] - self.lib.lib3mf_keystore_findresourcedatagroup.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_findresourcedatagroup.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_object_hasslices.restype = ctypes.c_int32 + self.lib.lib3mf_object_hasslices.argtypes = [ctypes.c_void_p, ctypes.c_bool, ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_keystore_addresourcedata.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_addresourcedata.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, EncryptionAlgorithm, Compression, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8), ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_object_clearslicestack.restype = ctypes.c_int32 + self.lib.lib3mf_object_clearslicestack.argtypes = [ctypes.c_void_p] - self.lib.lib3mf_keystore_removeresourcedata.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_removeresourcedata.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + self.lib.lib3mf_object_getslicestack.restype = ctypes.c_int32 + self.lib.lib3mf_object_getslicestack.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_keystore_findresourcedata.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_findresourcedata.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_object_assignslicestack.restype = ctypes.c_int32 + self.lib.lib3mf_object_assignslicestack.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - self.lib.lib3mf_keystore_getresourcedatacount.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_getresourcedatacount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + self.lib.lib3mf_meshobject_getvertexcount.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_getvertexcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_keystore_getresourcedata.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_getresourcedata.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_gettrianglecount.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_gettrianglecount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_keystore_getuuid.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_getuuid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + self.lib.lib3mf_meshobject_getvertex.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_getvertex.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Position)] - self.lib.lib3mf_keystore_setuuid.restype = ctypes.c_int32 - self.lib.lib3mf_keystore_setuuid.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + self.lib.lib3mf_meshobject_setvertex.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_setvertex.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Position)] - self.lib.lib3mf_model_rootmodelpart.restype = ctypes.c_int32 - self.lib.lib3mf_model_rootmodelpart.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_addvertex.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_addvertex.argtypes = [ctypes.c_void_p, ctypes.POINTER(Position), ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_model_findorcreatepackagepart.restype = ctypes.c_int32 - self.lib.lib3mf_model_findorcreatepackagepart.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_getvertices.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_getvertices.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(Position)] - self.lib.lib3mf_model_setunit.restype = ctypes.c_int32 - self.lib.lib3mf_model_setunit.argtypes = [ctypes.c_void_p, ModelUnit] + self.lib.lib3mf_meshobject_gettriangle.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_gettriangle.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Triangle)] - self.lib.lib3mf_model_getunit.restype = ctypes.c_int32 - self.lib.lib3mf_model_getunit.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + self.lib.lib3mf_meshobject_settriangle.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_settriangle.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Triangle)] - self.lib.lib3mf_model_getlanguage.restype = ctypes.c_int32 - self.lib.lib3mf_model_getlanguage.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + self.lib.lib3mf_meshobject_addtriangle.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_addtriangle.argtypes = [ctypes.c_void_p, ctypes.POINTER(Triangle), ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_model_setlanguage.restype = ctypes.c_int32 - self.lib.lib3mf_model_setlanguage.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + self.lib.lib3mf_meshobject_gettriangleindices.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_gettriangleindices.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(Triangle)] - self.lib.lib3mf_model_querywriter.restype = ctypes.c_int32 - self.lib.lib3mf_model_querywriter.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_setobjectlevelproperty.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_setobjectlevelproperty.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint32] - self.lib.lib3mf_model_queryreader.restype = ctypes.c_int32 - self.lib.lib3mf_model_queryreader.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_getobjectlevelproperty.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_getobjectlevelproperty.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_model_getresourcebyid.restype = ctypes.c_int32 - self.lib.lib3mf_model_getresourcebyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_settriangleproperties.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_settriangleproperties.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(TriangleProperties)] - self.lib.lib3mf_model_gettexture2dbyid.restype = ctypes.c_int32 - self.lib.lib3mf_model_gettexture2dbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_gettriangleproperties.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_gettriangleproperties.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(TriangleProperties)] - self.lib.lib3mf_model_getpropertytypebyid.restype = ctypes.c_int32 - self.lib.lib3mf_model_getpropertytypebyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_int32)] + self.lib.lib3mf_meshobject_setalltriangleproperties.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_setalltriangleproperties.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(TriangleProperties)] - self.lib.lib3mf_model_getbasematerialgroupbyid.restype = ctypes.c_int32 - self.lib.lib3mf_model_getbasematerialgroupbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_getalltriangleproperties.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_getalltriangleproperties.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(TriangleProperties)] - self.lib.lib3mf_model_gettexture2dgroupbyid.restype = ctypes.c_int32 - self.lib.lib3mf_model_gettexture2dgroupbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_clearallproperties.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_clearallproperties.argtypes = [ctypes.c_void_p] - self.lib.lib3mf_model_getcompositematerialsbyid.restype = ctypes.c_int32 - self.lib.lib3mf_model_getcompositematerialsbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_setgeometry.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_setgeometry.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(Position), ctypes.c_uint64, ctypes.POINTER(Triangle)] - self.lib.lib3mf_model_getmultipropertygroupbyid.restype = ctypes.c_int32 - self.lib.lib3mf_model_getmultipropertygroupbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_ismanifoldandoriented.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_ismanifoldandoriented.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_model_getmeshobjectbyid.restype = ctypes.c_int32 - self.lib.lib3mf_model_getmeshobjectbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_beamlattice.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_beamlattice.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_model_getcomponentsobjectbyid.restype = ctypes.c_int32 - self.lib.lib3mf_model_getcomponentsobjectbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_getvolumedata.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_getvolumedata.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_model_getcolorgroupbyid.restype = ctypes.c_int32 - self.lib.lib3mf_model_getcolorgroupbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_meshobject_setvolumedata.restype = ctypes.c_int32 + self.lib.lib3mf_meshobject_setvolumedata.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - self.lib.lib3mf_model_getslicestackbyid.restype = ctypes.c_int32 - self.lib.lib3mf_model_getslicestackbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_levelset_getfunction.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_getfunction.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_model_getbuilduuid.restype = ctypes.c_int32 - self.lib.lib3mf_model_getbuilduuid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + self.lib.lib3mf_levelset_setfunction.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_setfunction.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - self.lib.lib3mf_model_setbuilduuid.restype = ctypes.c_int32 - self.lib.lib3mf_model_setbuilduuid.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + self.lib.lib3mf_levelset_gettransform.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_gettransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(Transform)] - self.lib.lib3mf_model_getbuilditems.restype = ctypes.c_int32 - self.lib.lib3mf_model_getbuilditems.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_levelset_settransform.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_settransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(Transform)] - self.lib.lib3mf_model_getoutbox.restype = ctypes.c_int32 - self.lib.lib3mf_model_getoutbox.argtypes = [ctypes.c_void_p, ctypes.POINTER(Box)] + self.lib.lib3mf_levelset_getchannelname.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_getchannelname.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] - self.lib.lib3mf_model_getresources.restype = ctypes.c_int32 - self.lib.lib3mf_model_getresources.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_levelset_setchannelname.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_setchannelname.argtypes = [ctypes.c_void_p, ctypes.c_char_p] - self.lib.lib3mf_model_getobjects.restype = ctypes.c_int32 - self.lib.lib3mf_model_getobjects.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_levelset_setminfeaturesize.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_setminfeaturesize.argtypes = [ctypes.c_void_p, ctypes.c_double] - self.lib.lib3mf_model_getmeshobjects.restype = ctypes.c_int32 - self.lib.lib3mf_model_getmeshobjects.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_levelset_getminfeaturesize.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_getminfeaturesize.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)] - self.lib.lib3mf_model_getcomponentsobjects.restype = ctypes.c_int32 - self.lib.lib3mf_model_getcomponentsobjects.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_levelset_setfallbackvalue.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_setfallbackvalue.argtypes = [ctypes.c_void_p, ctypes.c_double] - self.lib.lib3mf_model_gettexture2ds.restype = ctypes.c_int32 - self.lib.lib3mf_model_gettexture2ds.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_levelset_getfallbackvalue.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_getfallbackvalue.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)] - self.lib.lib3mf_model_getbasematerialgroups.restype = ctypes.c_int32 - self.lib.lib3mf_model_getbasematerialgroups.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_levelset_setmeshbboxonly.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_setmeshbboxonly.argtypes = [ctypes.c_void_p, ctypes.c_bool] - self.lib.lib3mf_model_getcolorgroups.restype = ctypes.c_int32 - self.lib.lib3mf_model_getcolorgroups.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_levelset_getmeshbboxonly.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_getmeshbboxonly.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] - self.lib.lib3mf_model_gettexture2dgroups.restype = ctypes.c_int32 - self.lib.lib3mf_model_gettexture2dgroups.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_levelset_setmesh.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_setmesh.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - self.lib.lib3mf_model_getcompositematerials.restype = ctypes.c_int32 - self.lib.lib3mf_model_getcompositematerials.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_levelset_getmesh.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_getmesh.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_model_getmultipropertygroups.restype = ctypes.c_int32 - self.lib.lib3mf_model_getmultipropertygroups.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_levelset_getvolumedata.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_getvolumedata.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_model_getslicestacks.restype = ctypes.c_int32 - self.lib.lib3mf_model_getslicestacks.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_levelset_setvolumedata.restype = ctypes.c_int32 + self.lib.lib3mf_levelset_setvolumedata.argtypes = [ctypes.c_void_p, ctypes.c_void_p] - self.lib.lib3mf_model_mergetomodel.restype = ctypes.c_int32 - self.lib.lib3mf_model_mergetomodel.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_getminlength.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_getminlength.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)] - self.lib.lib3mf_model_addmeshobject.restype = ctypes.c_int32 - self.lib.lib3mf_model_addmeshobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_setminlength.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_setminlength.argtypes = [ctypes.c_void_p, ctypes.c_double] - self.lib.lib3mf_model_addcomponentsobject.restype = ctypes.c_int32 - self.lib.lib3mf_model_addcomponentsobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_getclipping.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_getclipping.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_model_addslicestack.restype = ctypes.c_int32 - self.lib.lib3mf_model_addslicestack.argtypes = [ctypes.c_void_p, ctypes.c_double, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_setclipping.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_setclipping.argtypes = [ctypes.c_void_p, BeamLatticeClipMode, ctypes.c_uint32] - self.lib.lib3mf_model_addtexture2dfromattachment.restype = ctypes.c_int32 - self.lib.lib3mf_model_addtexture2dfromattachment.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_getrepresentation.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_getrepresentation.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_model_addbasematerialgroup.restype = ctypes.c_int32 - self.lib.lib3mf_model_addbasematerialgroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_setrepresentation.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_setrepresentation.argtypes = [ctypes.c_void_p, ctypes.c_uint32] - self.lib.lib3mf_model_addcolorgroup.restype = ctypes.c_int32 - self.lib.lib3mf_model_addcolorgroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_getballoptions.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_getballoptions.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_double)] - self.lib.lib3mf_model_addtexture2dgroup.restype = ctypes.c_int32 - self.lib.lib3mf_model_addtexture2dgroup.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_setballoptions.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_setballoptions.argtypes = [ctypes.c_void_p, BeamLatticeBallMode, ctypes.c_double] - self.lib.lib3mf_model_addcompositematerials.restype = ctypes.c_int32 - self.lib.lib3mf_model_addcompositematerials.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_getbeamcount.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_getbeamcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_model_addmultipropertygroup.restype = ctypes.c_int32 - self.lib.lib3mf_model_addmultipropertygroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_getbeam.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_getbeam.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Beam)] - self.lib.lib3mf_model_addbuilditem.restype = ctypes.c_int32 - self.lib.lib3mf_model_addbuilditem.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(Transform), ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_addbeam.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_addbeam.argtypes = [ctypes.c_void_p, ctypes.POINTER(Beam), ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_model_removebuilditem.restype = ctypes.c_int32 - self.lib.lib3mf_model_removebuilditem.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + self.lib.lib3mf_beamlattice_setbeam.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_setbeam.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Beam)] - self.lib.lib3mf_model_getmetadatagroup.restype = ctypes.c_int32 - self.lib.lib3mf_model_getmetadatagroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_setbeams.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_setbeams.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(Beam)] - self.lib.lib3mf_model_addattachment.restype = ctypes.c_int32 - self.lib.lib3mf_model_addattachment.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_getbeams.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_getbeams.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(Beam)] - self.lib.lib3mf_model_removeattachment.restype = ctypes.c_int32 - self.lib.lib3mf_model_removeattachment.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + self.lib.lib3mf_beamlattice_getballcount.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_getballcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_model_getattachment.restype = ctypes.c_int32 - self.lib.lib3mf_model_getattachment.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_getball.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_getball.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Ball)] - self.lib.lib3mf_model_findattachment.restype = ctypes.c_int32 - self.lib.lib3mf_model_findattachment.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_addball.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_addball.argtypes = [ctypes.c_void_p, ctypes.POINTER(Ball), ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_model_getattachmentcount.restype = ctypes.c_int32 - self.lib.lib3mf_model_getattachmentcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + self.lib.lib3mf_beamlattice_setball.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_setball.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Ball)] - self.lib.lib3mf_model_haspackagethumbnailattachment.restype = ctypes.c_int32 - self.lib.lib3mf_model_haspackagethumbnailattachment.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + self.lib.lib3mf_beamlattice_setballs.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_setballs.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(Ball)] - self.lib.lib3mf_model_createpackagethumbnailattachment.restype = ctypes.c_int32 - self.lib.lib3mf_model_createpackagethumbnailattachment.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_getballs.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_getballs.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(Ball)] - self.lib.lib3mf_model_getpackagethumbnailattachment.restype = ctypes.c_int32 - self.lib.lib3mf_model_getpackagethumbnailattachment.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_beamlattice_getbeamsetcount.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_getbeamsetcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_model_removepackagethumbnailattachment.restype = ctypes.c_int32 - self.lib.lib3mf_model_removepackagethumbnailattachment.argtypes = [ctypes.c_void_p] + self.lib.lib3mf_beamlattice_addbeamset.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_addbeamset.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_model_addcustomcontenttype.restype = ctypes.c_int32 - self.lib.lib3mf_model_addcustomcontenttype.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p] + self.lib.lib3mf_beamlattice_getbeamset.restype = ctypes.c_int32 + self.lib.lib3mf_beamlattice_getbeamset.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] - self.lib.lib3mf_model_removecustomcontenttype.restype = ctypes.c_int32 - self.lib.lib3mf_model_removecustomcontenttype.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + self.lib.lib3mf_functionreference_getfunctionresourceid.restype = ctypes.c_int32 + self.lib.lib3mf_functionreference_getfunctionresourceid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] - self.lib.lib3mf_model_setrandomnumbercallback.restype = ctypes.c_int32 - self.lib.lib3mf_model_setrandomnumbercallback.argtypes = [ctypes.c_void_p, RandomNumberCallback, ctypes.c_void_p] + self.lib.lib3mf_functionreference_setfunctionresourceid.restype = ctypes.c_int32 + self.lib.lib3mf_functionreference_setfunctionresourceid.argtypes = [ctypes.c_void_p, ctypes.c_uint32] - self.lib.lib3mf_model_getkeystore.restype = ctypes.c_int32 - self.lib.lib3mf_model_getkeystore.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + self.lib.lib3mf_functionreference_gettransform.restype = ctypes.c_int32 + self.lib.lib3mf_functionreference_gettransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(Transform)] - except AttributeError as ae: - raise ELib3MFException(ErrorCodes.COULDNOTFINDLIBRARYEXPORT, ae.args[0]) + self.lib.lib3mf_functionreference_settransform.restype = ctypes.c_int32 + self.lib.lib3mf_functionreference_settransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(Transform)] + + self.lib.lib3mf_functionreference_getchannelname.restype = ctypes.c_int32 + self.lib.lib3mf_functionreference_getchannelname.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_functionreference_setchannelname.restype = ctypes.c_int32 + self.lib.lib3mf_functionreference_setchannelname.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_functionreference_setminfeaturesize.restype = ctypes.c_int32 + self.lib.lib3mf_functionreference_setminfeaturesize.argtypes = [ctypes.c_void_p, ctypes.c_double] + + self.lib.lib3mf_functionreference_getminfeaturesize.restype = ctypes.c_int32 + self.lib.lib3mf_functionreference_getminfeaturesize.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)] + + self.lib.lib3mf_functionreference_setfallbackvalue.restype = ctypes.c_int32 + self.lib.lib3mf_functionreference_setfallbackvalue.argtypes = [ctypes.c_void_p, ctypes.c_double] + + self.lib.lib3mf_functionreference_getfallbackvalue.restype = ctypes.c_int32 + self.lib.lib3mf_functionreference_getfallbackvalue.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)] + + self.lib.lib3mf_volumedatacomposite_getbasematerialgroup.restype = ctypes.c_int32 + self.lib.lib3mf_volumedatacomposite_getbasematerialgroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_volumedatacomposite_setbasematerialgroup.restype = ctypes.c_int32 + self.lib.lib3mf_volumedatacomposite_setbasematerialgroup.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_volumedatacomposite_getmaterialmappingcount.restype = ctypes.c_int32 + self.lib.lib3mf_volumedatacomposite_getmaterialmappingcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_volumedatacomposite_getmaterialmapping.restype = ctypes.c_int32 + self.lib.lib3mf_volumedatacomposite_getmaterialmapping.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_volumedatacomposite_addmaterialmapping.restype = ctypes.c_int32 + self.lib.lib3mf_volumedatacomposite_addmaterialmapping.argtypes = [ctypes.c_void_p, ctypes.POINTER(Transform), ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_volumedatacomposite_removematerialmapping.restype = ctypes.c_int32 + self.lib.lib3mf_volumedatacomposite_removematerialmapping.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + + self.lib.lib3mf_volumedataproperty_getname.restype = ctypes.c_int32 + self.lib.lib3mf_volumedataproperty_getname.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_volumedataproperty_setisrequired.restype = ctypes.c_int32 + self.lib.lib3mf_volumedataproperty_setisrequired.argtypes = [ctypes.c_void_p, ctypes.c_bool] + + self.lib.lib3mf_volumedataproperty_isrequired.restype = ctypes.c_int32 + self.lib.lib3mf_volumedataproperty_isrequired.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + + self.lib.lib3mf_volumedata_getcomposite.restype = ctypes.c_int32 + self.lib.lib3mf_volumedata_getcomposite.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_volumedata_createnewcomposite.restype = ctypes.c_int32 + self.lib.lib3mf_volumedata_createnewcomposite.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_volumedata_removecomposite.restype = ctypes.c_int32 + self.lib.lib3mf_volumedata_removecomposite.argtypes = [ctypes.c_void_p] + + self.lib.lib3mf_volumedata_getcolor.restype = ctypes.c_int32 + self.lib.lib3mf_volumedata_getcolor.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_volumedata_createnewcolor.restype = ctypes.c_int32 + self.lib.lib3mf_volumedata_createnewcolor.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_volumedata_removecolor.restype = ctypes.c_int32 + self.lib.lib3mf_volumedata_removecolor.argtypes = [ctypes.c_void_p] + + self.lib.lib3mf_volumedata_getpropertycount.restype = ctypes.c_int32 + self.lib.lib3mf_volumedata_getpropertycount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_volumedata_getproperty.restype = ctypes.c_int32 + self.lib.lib3mf_volumedata_getproperty.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_volumedata_addpropertyfromfunction.restype = ctypes.c_int32 + self.lib.lib3mf_volumedata_addpropertyfromfunction.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_volumedata_removeproperty.restype = ctypes.c_int32 + self.lib.lib3mf_volumedata_removeproperty.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + + self.lib.lib3mf_component_getobjectresource.restype = ctypes.c_int32 + self.lib.lib3mf_component_getobjectresource.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_component_getobjectresourceid.restype = ctypes.c_int32 + self.lib.lib3mf_component_getobjectresourceid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_component_getuuid.restype = ctypes.c_int32 + self.lib.lib3mf_component_getuuid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_component_setuuid.restype = ctypes.c_int32 + self.lib.lib3mf_component_setuuid.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_component_hastransform.restype = ctypes.c_int32 + self.lib.lib3mf_component_hastransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + + self.lib.lib3mf_component_gettransform.restype = ctypes.c_int32 + self.lib.lib3mf_component_gettransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(Transform)] + + self.lib.lib3mf_component_settransform.restype = ctypes.c_int32 + self.lib.lib3mf_component_settransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(Transform)] + + self.lib.lib3mf_componentsobject_addcomponent.restype = ctypes.c_int32 + self.lib.lib3mf_componentsobject_addcomponent.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(Transform), ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_componentsobject_getcomponent.restype = ctypes.c_int32 + self.lib.lib3mf_componentsobject_getcomponent.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_componentsobject_getcomponentcount.restype = ctypes.c_int32 + self.lib.lib3mf_componentsobject_getcomponentcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_beamset_setname.restype = ctypes.c_int32 + self.lib.lib3mf_beamset_setname.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_beamset_getname.restype = ctypes.c_int32 + self.lib.lib3mf_beamset_getname.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_beamset_setidentifier.restype = ctypes.c_int32 + self.lib.lib3mf_beamset_setidentifier.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_beamset_getidentifier.restype = ctypes.c_int32 + self.lib.lib3mf_beamset_getidentifier.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_beamset_getreferencecount.restype = ctypes.c_int32 + self.lib.lib3mf_beamset_getreferencecount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_beamset_setreferences.restype = ctypes.c_int32 + self.lib.lib3mf_beamset_setreferences.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_beamset_getreferences.restype = ctypes.c_int32 + self.lib.lib3mf_beamset_getreferences.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_beamset_getballreferencecount.restype = ctypes.c_int32 + self.lib.lib3mf_beamset_getballreferencecount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_beamset_setballreferences.restype = ctypes.c_int32 + self.lib.lib3mf_beamset_setballreferences.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_beamset_getballreferences.restype = ctypes.c_int32 + self.lib.lib3mf_beamset_getballreferences.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_basematerialgroup_getcount.restype = ctypes.c_int32 + self.lib.lib3mf_basematerialgroup_getcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_basematerialgroup_getallpropertyids.restype = ctypes.c_int32 + self.lib.lib3mf_basematerialgroup_getallpropertyids.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_basematerialgroup_addmaterial.restype = ctypes.c_int32 + self.lib.lib3mf_basematerialgroup_addmaterial.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(Color), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_basematerialgroup_removematerial.restype = ctypes.c_int32 + self.lib.lib3mf_basematerialgroup_removematerial.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + + self.lib.lib3mf_basematerialgroup_getname.restype = ctypes.c_int32 + self.lib.lib3mf_basematerialgroup_getname.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_basematerialgroup_setname.restype = ctypes.c_int32 + self.lib.lib3mf_basematerialgroup_setname.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_char_p] + + self.lib.lib3mf_basematerialgroup_setdisplaycolor.restype = ctypes.c_int32 + self.lib.lib3mf_basematerialgroup_setdisplaycolor.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Color)] + + self.lib.lib3mf_basematerialgroup_getdisplaycolor.restype = ctypes.c_int32 + self.lib.lib3mf_basematerialgroup_getdisplaycolor.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Color)] + + self.lib.lib3mf_colorgroup_getcount.restype = ctypes.c_int32 + self.lib.lib3mf_colorgroup_getcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_colorgroup_getallpropertyids.restype = ctypes.c_int32 + self.lib.lib3mf_colorgroup_getallpropertyids.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_colorgroup_addcolor.restype = ctypes.c_int32 + self.lib.lib3mf_colorgroup_addcolor.argtypes = [ctypes.c_void_p, ctypes.POINTER(Color), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_colorgroup_removecolor.restype = ctypes.c_int32 + self.lib.lib3mf_colorgroup_removecolor.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + + self.lib.lib3mf_colorgroup_setcolor.restype = ctypes.c_int32 + self.lib.lib3mf_colorgroup_setcolor.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Color)] + + self.lib.lib3mf_colorgroup_getcolor.restype = ctypes.c_int32 + self.lib.lib3mf_colorgroup_getcolor.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Color)] + + self.lib.lib3mf_texture2dgroup_getcount.restype = ctypes.c_int32 + self.lib.lib3mf_texture2dgroup_getcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_texture2dgroup_getallpropertyids.restype = ctypes.c_int32 + self.lib.lib3mf_texture2dgroup_getallpropertyids.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_texture2dgroup_addtex2coord.restype = ctypes.c_int32 + self.lib.lib3mf_texture2dgroup_addtex2coord.argtypes = [ctypes.c_void_p, ctypes.POINTER(Tex2Coord), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_texture2dgroup_gettex2coord.restype = ctypes.c_int32 + self.lib.lib3mf_texture2dgroup_gettex2coord.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(Tex2Coord)] + + self.lib.lib3mf_texture2dgroup_removetex2coord.restype = ctypes.c_int32 + self.lib.lib3mf_texture2dgroup_removetex2coord.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + + self.lib.lib3mf_texture2dgroup_gettexture2d.restype = ctypes.c_int32 + self.lib.lib3mf_texture2dgroup_gettexture2d.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_compositematerials_getcount.restype = ctypes.c_int32 + self.lib.lib3mf_compositematerials_getcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_compositematerials_getallpropertyids.restype = ctypes.c_int32 + self.lib.lib3mf_compositematerials_getallpropertyids.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_compositematerials_getbasematerialgroup.restype = ctypes.c_int32 + self.lib.lib3mf_compositematerials_getbasematerialgroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_compositematerials_addcomposite.restype = ctypes.c_int32 + self.lib.lib3mf_compositematerials_addcomposite.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(CompositeConstituent), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_compositematerials_removecomposite.restype = ctypes.c_int32 + self.lib.lib3mf_compositematerials_removecomposite.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + + self.lib.lib3mf_compositematerials_getcomposite.restype = ctypes.c_int32 + self.lib.lib3mf_compositematerials_getcomposite.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(CompositeConstituent)] + + self.lib.lib3mf_multipropertygroup_getcount.restype = ctypes.c_int32 + self.lib.lib3mf_multipropertygroup_getcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_multipropertygroup_getallpropertyids.restype = ctypes.c_int32 + self.lib.lib3mf_multipropertygroup_getallpropertyids.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_multipropertygroup_addmultiproperty.restype = ctypes.c_int32 + self.lib.lib3mf_multipropertygroup_addmultiproperty.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_multipropertygroup_setmultiproperty.restype = ctypes.c_int32 + self.lib.lib3mf_multipropertygroup_setmultiproperty.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_multipropertygroup_getmultiproperty.restype = ctypes.c_int32 + self.lib.lib3mf_multipropertygroup_getmultiproperty.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_multipropertygroup_removemultiproperty.restype = ctypes.c_int32 + self.lib.lib3mf_multipropertygroup_removemultiproperty.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + + self.lib.lib3mf_multipropertygroup_getlayercount.restype = ctypes.c_int32 + self.lib.lib3mf_multipropertygroup_getlayercount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_multipropertygroup_addlayer.restype = ctypes.c_int32 + self.lib.lib3mf_multipropertygroup_addlayer.argtypes = [ctypes.c_void_p, ctypes.POINTER(MultiPropertyLayer), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_multipropertygroup_getlayer.restype = ctypes.c_int32 + self.lib.lib3mf_multipropertygroup_getlayer.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(MultiPropertyLayer)] + + self.lib.lib3mf_multipropertygroup_removelayer.restype = ctypes.c_int32 + self.lib.lib3mf_multipropertygroup_removelayer.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + + self.lib.lib3mf_image3d_getname.restype = ctypes.c_int32 + self.lib.lib3mf_image3d_getname.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_image3d_setname.restype = ctypes.c_int32 + self.lib.lib3mf_image3d_setname.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_image3d_isimagestack.restype = ctypes.c_int32 + self.lib.lib3mf_image3d_isimagestack.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + + self.lib.lib3mf_imagestack_getrowcount.restype = ctypes.c_int32 + self.lib.lib3mf_imagestack_getrowcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_imagestack_setrowcount.restype = ctypes.c_int32 + self.lib.lib3mf_imagestack_setrowcount.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + + self.lib.lib3mf_imagestack_getcolumncount.restype = ctypes.c_int32 + self.lib.lib3mf_imagestack_getcolumncount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_imagestack_setcolumncount.restype = ctypes.c_int32 + self.lib.lib3mf_imagestack_setcolumncount.argtypes = [ctypes.c_void_p, ctypes.c_uint32] + + self.lib.lib3mf_imagestack_getsheetcount.restype = ctypes.c_int32 + self.lib.lib3mf_imagestack_getsheetcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_imagestack_getsheet.restype = ctypes.c_int32 + self.lib.lib3mf_imagestack_getsheet.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_imagestack_setsheet.restype = ctypes.c_int32 + self.lib.lib3mf_imagestack_setsheet.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_void_p] + + self.lib.lib3mf_imagestack_createemptysheet.restype = ctypes.c_int32 + self.lib.lib3mf_imagestack_createemptysheet.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_imagestack_createsheetfrombuffer.restype = ctypes.c_int32 + self.lib.lib3mf_imagestack_createsheetfrombuffer.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_char_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8), ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_imagestack_createsheetfromfile.restype = ctypes.c_int32 + self.lib.lib3mf_imagestack_createsheetfromfile.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_attachment_getpath.restype = ctypes.c_int32 + self.lib.lib3mf_attachment_getpath.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_attachment_setpath.restype = ctypes.c_int32 + self.lib.lib3mf_attachment_setpath.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_attachment_packagepart.restype = ctypes.c_int32 + self.lib.lib3mf_attachment_packagepart.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_attachment_getrelationshiptype.restype = ctypes.c_int32 + self.lib.lib3mf_attachment_getrelationshiptype.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_attachment_setrelationshiptype.restype = ctypes.c_int32 + self.lib.lib3mf_attachment_setrelationshiptype.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_attachment_writetofile.restype = ctypes.c_int32 + self.lib.lib3mf_attachment_writetofile.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_attachment_readfromfile.restype = ctypes.c_int32 + self.lib.lib3mf_attachment_readfromfile.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_attachment_readfromcallback.restype = ctypes.c_int32 + self.lib.lib3mf_attachment_readfromcallback.argtypes = [ctypes.c_void_p, ReadCallback, ctypes.c_uint64, SeekCallback, ctypes.c_void_p] + + self.lib.lib3mf_attachment_getstreamsize.restype = ctypes.c_int32 + self.lib.lib3mf_attachment_getstreamsize.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + + self.lib.lib3mf_attachment_writetobuffer.restype = ctypes.c_int32 + self.lib.lib3mf_attachment_writetobuffer.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] + + self.lib.lib3mf_attachment_readfrombuffer.restype = ctypes.c_int32 + self.lib.lib3mf_attachment_readfrombuffer.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8)] + + self.lib.lib3mf_texture2d_getattachment.restype = ctypes.c_int32 + self.lib.lib3mf_texture2d_getattachment.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_texture2d_setattachment.restype = ctypes.c_int32 + self.lib.lib3mf_texture2d_setattachment.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_texture2d_getcontenttype.restype = ctypes.c_int32 + self.lib.lib3mf_texture2d_getcontenttype.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_texture2d_setcontenttype.restype = ctypes.c_int32 + self.lib.lib3mf_texture2d_setcontenttype.argtypes = [ctypes.c_void_p, TextureType] + + self.lib.lib3mf_texture2d_gettilestyleuv.restype = ctypes.c_int32 + self.lib.lib3mf_texture2d_gettilestyleuv.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_texture2d_settilestyleuv.restype = ctypes.c_int32 + self.lib.lib3mf_texture2d_settilestyleuv.argtypes = [ctypes.c_void_p, TextureTileStyle, TextureTileStyle] + + self.lib.lib3mf_texture2d_getfilter.restype = ctypes.c_int32 + self.lib.lib3mf_texture2d_getfilter.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_texture2d_setfilter.restype = ctypes.c_int32 + self.lib.lib3mf_texture2d_setfilter.argtypes = [ctypes.c_void_p, TextureFilter] + + self.lib.lib3mf_implicitport_getidentifier.restype = ctypes.c_int32 + self.lib.lib3mf_implicitport_getidentifier.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_implicitport_setidentifier.restype = ctypes.c_int32 + self.lib.lib3mf_implicitport_setidentifier.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_implicitport_getdisplayname.restype = ctypes.c_int32 + self.lib.lib3mf_implicitport_getdisplayname.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_implicitport_setdisplayname.restype = ctypes.c_int32 + self.lib.lib3mf_implicitport_setdisplayname.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_implicitport_settype.restype = ctypes.c_int32 + self.lib.lib3mf_implicitport_settype.argtypes = [ctypes.c_void_p, ImplicitPortType] + + self.lib.lib3mf_implicitport_gettype.restype = ctypes.c_int32 + self.lib.lib3mf_implicitport_gettype.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_implicitport_getreference.restype = ctypes.c_int32 + self.lib.lib3mf_implicitport_getreference.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_implicitport_setreference.restype = ctypes.c_int32 + self.lib.lib3mf_implicitport_setreference.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_iterator_movenext.restype = ctypes.c_int32 + self.lib.lib3mf_iterator_movenext.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + + self.lib.lib3mf_iterator_moveprevious.restype = ctypes.c_int32 + self.lib.lib3mf_iterator_moveprevious.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + + self.lib.lib3mf_iterator_count.restype = ctypes.c_int32 + self.lib.lib3mf_iterator_count.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + + self.lib.lib3mf_implicitportiterator_getcurrent.restype = ctypes.c_int32 + self.lib.lib3mf_implicitportiterator_getcurrent.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitnode_getidentifier.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_getidentifier.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_implicitnode_setidentifier.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_setidentifier.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_implicitnode_getdisplayname.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_getdisplayname.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_implicitnode_setdisplayname.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_setdisplayname.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_implicitnode_gettag.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_gettag.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_implicitnode_settag.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_settag.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_implicitnode_getnodetype.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_getnodetype.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_implicitnode_addinput.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_addinput.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitnode_getinputs.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_getinputs.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitnode_addoutput.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_addoutput.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitnode_getoutputs.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_getoutputs.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitnode_findinput.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_findinput.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitnode_findoutput.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_findoutput.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitnode_aretypesvalid.restype = ctypes.c_int32 + self.lib.lib3mf_implicitnode_aretypesvalid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + + self.lib.lib3mf_oneinputnode_getinputa.restype = ctypes.c_int32 + self.lib.lib3mf_oneinputnode_getinputa.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_oneinputnode_getoutputresult.restype = ctypes.c_int32 + self.lib.lib3mf_oneinputnode_getoutputresult.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_resourceidnode_setresource.restype = ctypes.c_int32 + self.lib.lib3mf_resourceidnode_setresource.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_resourceidnode_getresource.restype = ctypes.c_int32 + self.lib.lib3mf_resourceidnode_getresource.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_resourceidnode_getoutputvalue.restype = ctypes.c_int32 + self.lib.lib3mf_resourceidnode_getoutputvalue.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_twoinputnode_getinputb.restype = ctypes.c_int32 + self.lib.lib3mf_twoinputnode_getinputb.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_selectnode_getinputb.restype = ctypes.c_int32 + self.lib.lib3mf_selectnode_getinputb.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_selectnode_getinputc.restype = ctypes.c_int32 + self.lib.lib3mf_selectnode_getinputc.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_selectnode_getinputd.restype = ctypes.c_int32 + self.lib.lib3mf_selectnode_getinputd.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_clampnode_getinputmin.restype = ctypes.c_int32 + self.lib.lib3mf_clampnode_getinputmin.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_clampnode_getinputmax.restype = ctypes.c_int32 + self.lib.lib3mf_clampnode_getinputmax.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composevectornode_getinputx.restype = ctypes.c_int32 + self.lib.lib3mf_composevectornode_getinputx.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composevectornode_getinputy.restype = ctypes.c_int32 + self.lib.lib3mf_composevectornode_getinputy.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composevectornode_getinputz.restype = ctypes.c_int32 + self.lib.lib3mf_composevectornode_getinputz.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composevectornode_getoutputresult.restype = ctypes.c_int32 + self.lib.lib3mf_composevectornode_getoutputresult.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_decomposevectornode_getinputa.restype = ctypes.c_int32 + self.lib.lib3mf_decomposevectornode_getinputa.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_decomposevectornode_getoutputx.restype = ctypes.c_int32 + self.lib.lib3mf_decomposevectornode_getoutputx.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_decomposevectornode_getoutputy.restype = ctypes.c_int32 + self.lib.lib3mf_decomposevectornode_getoutputy.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_decomposevectornode_getoutputz.restype = ctypes.c_int32 + self.lib.lib3mf_decomposevectornode_getoutputz.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm00.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm00.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm01.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm01.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm02.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm02.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm03.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm03.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm10.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm10.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm11.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm11.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm12.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm12.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm13.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm13.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm20.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm20.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm21.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm21.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm22.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm22.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm23.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm23.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm30.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm30.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm31.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm31.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm32.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm32.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getinputm33.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getinputm33.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_composematrixnode_getoutputresult.restype = ctypes.c_int32 + self.lib.lib3mf_composematrixnode_getoutputresult.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_matrixfromrowsnode_getinputa.restype = ctypes.c_int32 + self.lib.lib3mf_matrixfromrowsnode_getinputa.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_matrixfromrowsnode_getinputb.restype = ctypes.c_int32 + self.lib.lib3mf_matrixfromrowsnode_getinputb.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_matrixfromrowsnode_getinputc.restype = ctypes.c_int32 + self.lib.lib3mf_matrixfromrowsnode_getinputc.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_matrixfromrowsnode_getinputd.restype = ctypes.c_int32 + self.lib.lib3mf_matrixfromrowsnode_getinputd.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_matrixfromrowsnode_getoutputresult.restype = ctypes.c_int32 + self.lib.lib3mf_matrixfromrowsnode_getoutputresult.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_matrixfromcolumnsnode_getinputa.restype = ctypes.c_int32 + self.lib.lib3mf_matrixfromcolumnsnode_getinputa.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_matrixfromcolumnsnode_getinputb.restype = ctypes.c_int32 + self.lib.lib3mf_matrixfromcolumnsnode_getinputb.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_matrixfromcolumnsnode_getinputc.restype = ctypes.c_int32 + self.lib.lib3mf_matrixfromcolumnsnode_getinputc.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_matrixfromcolumnsnode_getinputd.restype = ctypes.c_int32 + self.lib.lib3mf_matrixfromcolumnsnode_getinputd.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_matrixfromcolumnsnode_getoutputresult.restype = ctypes.c_int32 + self.lib.lib3mf_matrixfromcolumnsnode_getoutputresult.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_constantnode_setconstant.restype = ctypes.c_int32 + self.lib.lib3mf_constantnode_setconstant.argtypes = [ctypes.c_void_p, ctypes.c_double] + + self.lib.lib3mf_constantnode_getconstant.restype = ctypes.c_int32 + self.lib.lib3mf_constantnode_getconstant.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)] + + self.lib.lib3mf_constantnode_getoutputvalue.restype = ctypes.c_int32 + self.lib.lib3mf_constantnode_getoutputvalue.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_constvecnode_setvector.restype = ctypes.c_int32 + self.lib.lib3mf_constvecnode_setvector.argtypes = [ctypes.c_void_p, ctypes.POINTER(Vector)] + + self.lib.lib3mf_constvecnode_getvector.restype = ctypes.c_int32 + self.lib.lib3mf_constvecnode_getvector.argtypes = [ctypes.c_void_p, ctypes.POINTER(Vector)] + + self.lib.lib3mf_constvecnode_getoutputvector.restype = ctypes.c_int32 + self.lib.lib3mf_constvecnode_getoutputvector.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_constmatnode_setmatrix.restype = ctypes.c_int32 + self.lib.lib3mf_constmatnode_setmatrix.argtypes = [ctypes.c_void_p, ctypes.POINTER(Matrix4x4)] + + self.lib.lib3mf_constmatnode_getmatrix.restype = ctypes.c_int32 + self.lib.lib3mf_constmatnode_getmatrix.argtypes = [ctypes.c_void_p, ctypes.POINTER(Matrix4x4)] + + self.lib.lib3mf_constmatnode_getoutputmatrix.restype = ctypes.c_int32 + self.lib.lib3mf_constmatnode_getoutputmatrix.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_meshnode_getinputmesh.restype = ctypes.c_int32 + self.lib.lib3mf_meshnode_getinputmesh.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_meshnode_getinputpos.restype = ctypes.c_int32 + self.lib.lib3mf_meshnode_getinputpos.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_meshnode_getoutputdistance.restype = ctypes.c_int32 + self.lib.lib3mf_meshnode_getoutputdistance.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_unsignedmeshnode_getinputmesh.restype = ctypes.c_int32 + self.lib.lib3mf_unsignedmeshnode_getinputmesh.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_unsignedmeshnode_getinputpos.restype = ctypes.c_int32 + self.lib.lib3mf_unsignedmeshnode_getinputpos.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_unsignedmeshnode_getoutputdistance.restype = ctypes.c_int32 + self.lib.lib3mf_unsignedmeshnode_getoutputdistance.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_functioncallnode_getinputfunctionid.restype = ctypes.c_int32 + self.lib.lib3mf_functioncallnode_getinputfunctionid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_nodeiterator_getcurrent.restype = ctypes.c_int32 + self.lib.lib3mf_nodeiterator_getcurrent.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_function_getdisplayname.restype = ctypes.c_int32 + self.lib.lib3mf_function_getdisplayname.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_function_setdisplayname.restype = ctypes.c_int32 + self.lib.lib3mf_function_setdisplayname.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_function_addinput.restype = ctypes.c_int32 + self.lib.lib3mf_function_addinput.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ImplicitPortType, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_function_getinputs.restype = ctypes.c_int32 + self.lib.lib3mf_function_getinputs.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_function_removeinput.restype = ctypes.c_int32 + self.lib.lib3mf_function_removeinput.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_function_addoutput.restype = ctypes.c_int32 + self.lib.lib3mf_function_addoutput.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ImplicitPortType, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_function_getoutputs.restype = ctypes.c_int32 + self.lib.lib3mf_function_getoutputs.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_function_removeoutput.restype = ctypes.c_int32 + self.lib.lib3mf_function_removeoutput.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_function_findinput.restype = ctypes.c_int32 + self.lib.lib3mf_function_findinput.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_function_findoutput.restype = ctypes.c_int32 + self.lib.lib3mf_function_findoutput.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_getidentifier.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_getidentifier.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_implicitfunction_setidentifier.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_setidentifier.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_implicitfunction_addnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addnode.argtypes = [ctypes.c_void_p, ImplicitNodeType, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addsinnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addsinnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addcosnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addcosnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addtannode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addtannode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addarcsinnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addarcsinnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addarccosnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addarccosnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addarctan2node.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addarctan2node.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addsinhnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addsinhnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addcoshnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addcoshnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addtanhnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addtanhnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addroundnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addroundnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addceilnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addceilnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addfloornode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addfloornode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addsignnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addsignnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addfractnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addfractnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addabsnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addabsnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addexpnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addexpnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addlognode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addlognode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addlog2node.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addlog2node.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addlog10node.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addlog10node.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addlengthnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addlengthnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addtransposenode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addtransposenode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_inversenode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_inversenode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addsqrtnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addsqrtnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addresourceidnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addresourceidnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addadditionnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addadditionnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addsubtractionnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addsubtractionnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addmultiplicationnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addmultiplicationnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_adddivisionnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_adddivisionnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_adddotnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_adddotnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addcrossnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addcrossnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addmatvecmultiplicationnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addmatvecmultiplicationnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addminnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addminnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addmaxnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addmaxnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addfmodnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addfmodnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addpownode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addpownode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addselectnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addselectnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addclampnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addclampnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ImplicitNodeConfiguration, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addcomposevectornode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addcomposevectornode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addvectorfromscalarnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addvectorfromscalarnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_adddecomposevectornode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_adddecomposevectornode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addcomposematrixnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addcomposematrixnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addmatrixfromrowsnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addmatrixfromrowsnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addmatrixfromcolumnsnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addmatrixfromcolumnsnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addconstantnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addconstantnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addconstvecnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addconstvecnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addconstmatnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addconstmatnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addmeshnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addmeshnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addunsignedmeshnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addunsignedmeshnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_addfunctioncallnode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addfunctioncallnode.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_getnodes.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_getnodes.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_implicitfunction_removenode.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_removenode.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_implicitfunction_addlink.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addlink.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_implicitfunction_addlinkbynames.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_addlinkbynames.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p] + + self.lib.lib3mf_implicitfunction_clear.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_clear.argtypes = [ctypes.c_void_p] + + self.lib.lib3mf_implicitfunction_sortnodestopologically.restype = ctypes.c_int32 + self.lib.lib3mf_implicitfunction_sortnodestopologically.argtypes = [ctypes.c_void_p] + + self.lib.lib3mf_functionfromimage3d_getimage3d.restype = ctypes.c_int32 + self.lib.lib3mf_functionfromimage3d_getimage3d.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_functionfromimage3d_setimage3d.restype = ctypes.c_int32 + self.lib.lib3mf_functionfromimage3d_setimage3d.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_functionfromimage3d_setfilter.restype = ctypes.c_int32 + self.lib.lib3mf_functionfromimage3d_setfilter.argtypes = [ctypes.c_void_p, TextureFilter] + + self.lib.lib3mf_functionfromimage3d_getfilter.restype = ctypes.c_int32 + self.lib.lib3mf_functionfromimage3d_getfilter.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_functionfromimage3d_settilestyles.restype = ctypes.c_int32 + self.lib.lib3mf_functionfromimage3d_settilestyles.argtypes = [ctypes.c_void_p, TextureTileStyle, TextureTileStyle, TextureTileStyle] + + self.lib.lib3mf_functionfromimage3d_gettilestyles.restype = ctypes.c_int32 + self.lib.lib3mf_functionfromimage3d_gettilestyles.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_functionfromimage3d_getoffset.restype = ctypes.c_int32 + self.lib.lib3mf_functionfromimage3d_getoffset.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)] + + self.lib.lib3mf_functionfromimage3d_setoffset.restype = ctypes.c_int32 + self.lib.lib3mf_functionfromimage3d_setoffset.argtypes = [ctypes.c_void_p, ctypes.c_double] + + self.lib.lib3mf_functionfromimage3d_getscale.restype = ctypes.c_int32 + self.lib.lib3mf_functionfromimage3d_getscale.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)] + + self.lib.lib3mf_functionfromimage3d_setscale.restype = ctypes.c_int32 + self.lib.lib3mf_functionfromimage3d_setscale.argtypes = [ctypes.c_void_p, ctypes.c_double] + + self.lib.lib3mf_builditem_getobjectresource.restype = ctypes.c_int32 + self.lib.lib3mf_builditem_getobjectresource.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_builditem_getuuid.restype = ctypes.c_int32 + self.lib.lib3mf_builditem_getuuid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_builditem_setuuid.restype = ctypes.c_int32 + self.lib.lib3mf_builditem_setuuid.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_builditem_getobjectresourceid.restype = ctypes.c_int32 + self.lib.lib3mf_builditem_getobjectresourceid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_builditem_hasobjecttransform.restype = ctypes.c_int32 + self.lib.lib3mf_builditem_hasobjecttransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + + self.lib.lib3mf_builditem_getobjecttransform.restype = ctypes.c_int32 + self.lib.lib3mf_builditem_getobjecttransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(Transform)] + + self.lib.lib3mf_builditem_setobjecttransform.restype = ctypes.c_int32 + self.lib.lib3mf_builditem_setobjecttransform.argtypes = [ctypes.c_void_p, ctypes.POINTER(Transform)] + + self.lib.lib3mf_builditem_getpartnumber.restype = ctypes.c_int32 + self.lib.lib3mf_builditem_getpartnumber.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_builditem_setpartnumber.restype = ctypes.c_int32 + self.lib.lib3mf_builditem_setpartnumber.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_builditem_getmetadatagroup.restype = ctypes.c_int32 + self.lib.lib3mf_builditem_getmetadatagroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_builditem_getoutbox.restype = ctypes.c_int32 + self.lib.lib3mf_builditem_getoutbox.argtypes = [ctypes.c_void_p, ctypes.POINTER(Box)] + + self.lib.lib3mf_builditemiterator_movenext.restype = ctypes.c_int32 + self.lib.lib3mf_builditemiterator_movenext.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + + self.lib.lib3mf_builditemiterator_moveprevious.restype = ctypes.c_int32 + self.lib.lib3mf_builditemiterator_moveprevious.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + + self.lib.lib3mf_builditemiterator_getcurrent.restype = ctypes.c_int32 + self.lib.lib3mf_builditemiterator_getcurrent.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_builditemiterator_clone.restype = ctypes.c_int32 + self.lib.lib3mf_builditemiterator_clone.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_builditemiterator_count.restype = ctypes.c_int32 + self.lib.lib3mf_builditemiterator_count.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + + self.lib.lib3mf_slice_setvertices.restype = ctypes.c_int32 + self.lib.lib3mf_slice_setvertices.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(Position2D)] + + self.lib.lib3mf_slice_getvertices.restype = ctypes.c_int32 + self.lib.lib3mf_slice_getvertices.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(Position2D)] + + self.lib.lib3mf_slice_getvertexcount.restype = ctypes.c_int32 + self.lib.lib3mf_slice_getvertexcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + + self.lib.lib3mf_slice_addpolygon.restype = ctypes.c_int32 + self.lib.lib3mf_slice_addpolygon.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint64)] + + self.lib.lib3mf_slice_getpolygoncount.restype = ctypes.c_int32 + self.lib.lib3mf_slice_getpolygoncount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + + self.lib.lib3mf_slice_setpolygonindices.restype = ctypes.c_int32 + self.lib.lib3mf_slice_setpolygonindices.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_slice_getpolygonindices.restype = ctypes.c_int32 + self.lib.lib3mf_slice_getpolygonindices.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_slice_getpolygonindexcount.restype = ctypes.c_int32 + self.lib.lib3mf_slice_getpolygonindexcount.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64)] + + self.lib.lib3mf_slice_getztop.restype = ctypes.c_int32 + self.lib.lib3mf_slice_getztop.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)] + + self.lib.lib3mf_slicestack_getbottomz.restype = ctypes.c_int32 + self.lib.lib3mf_slicestack_getbottomz.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_double)] + + self.lib.lib3mf_slicestack_getslicecount.restype = ctypes.c_int32 + self.lib.lib3mf_slicestack_getslicecount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + + self.lib.lib3mf_slicestack_getslice.restype = ctypes.c_int32 + self.lib.lib3mf_slicestack_getslice.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_slicestack_addslice.restype = ctypes.c_int32 + self.lib.lib3mf_slicestack_addslice.argtypes = [ctypes.c_void_p, ctypes.c_double, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_slicestack_getslicerefcount.restype = ctypes.c_int32 + self.lib.lib3mf_slicestack_getslicerefcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + + self.lib.lib3mf_slicestack_addslicestackreference.restype = ctypes.c_int32 + self.lib.lib3mf_slicestack_addslicestackreference.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_slicestack_getslicestackreference.restype = ctypes.c_int32 + self.lib.lib3mf_slicestack_getslicestackreference.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_slicestack_collapseslicereferences.restype = ctypes.c_int32 + self.lib.lib3mf_slicestack_collapseslicereferences.argtypes = [ctypes.c_void_p] + + self.lib.lib3mf_slicestack_setownpath.restype = ctypes.c_int32 + self.lib.lib3mf_slicestack_setownpath.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_slicestack_getownpath.restype = ctypes.c_int32 + self.lib.lib3mf_slicestack_getownpath.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_consumer_getconsumerid.restype = ctypes.c_int32 + self.lib.lib3mf_consumer_getconsumerid.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_consumer_getkeyid.restype = ctypes.c_int32 + self.lib.lib3mf_consumer_getkeyid.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_consumer_getkeyvalue.restype = ctypes.c_int32 + self.lib.lib3mf_consumer_getkeyvalue.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_accessright_getconsumer.restype = ctypes.c_int32 + self.lib.lib3mf_accessright_getconsumer.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_accessright_getwrappingalgorithm.restype = ctypes.c_int32 + self.lib.lib3mf_accessright_getwrappingalgorithm.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_accessright_getmgfalgorithm.restype = ctypes.c_int32 + self.lib.lib3mf_accessright_getmgfalgorithm.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_accessright_getdigestmethod.restype = ctypes.c_int32 + self.lib.lib3mf_accessright_getdigestmethod.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_contentencryptionparams_getencryptionalgorithm.restype = ctypes.c_int32 + self.lib.lib3mf_contentencryptionparams_getencryptionalgorithm.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_contentencryptionparams_getkey.restype = ctypes.c_int32 + self.lib.lib3mf_contentencryptionparams_getkey.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] + + self.lib.lib3mf_contentencryptionparams_getinitializationvector.restype = ctypes.c_int32 + self.lib.lib3mf_contentencryptionparams_getinitializationvector.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] + + self.lib.lib3mf_contentencryptionparams_getauthenticationtag.restype = ctypes.c_int32 + self.lib.lib3mf_contentencryptionparams_getauthenticationtag.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] + + self.lib.lib3mf_contentencryptionparams_setauthenticationtag.restype = ctypes.c_int32 + self.lib.lib3mf_contentencryptionparams_setauthenticationtag.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8)] + + self.lib.lib3mf_contentencryptionparams_getadditionalauthenticationdata.restype = ctypes.c_int32 + self.lib.lib3mf_contentencryptionparams_getadditionalauthenticationdata.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] + + self.lib.lib3mf_contentencryptionparams_getdescriptor.restype = ctypes.c_int32 + self.lib.lib3mf_contentencryptionparams_getdescriptor.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + + self.lib.lib3mf_contentencryptionparams_getkeyuuid.restype = ctypes.c_int32 + self.lib.lib3mf_contentencryptionparams_getkeyuuid.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_resourcedata_getpath.restype = ctypes.c_int32 + self.lib.lib3mf_resourcedata_getpath.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_resourcedata_getencryptionalgorithm.restype = ctypes.c_int32 + self.lib.lib3mf_resourcedata_getencryptionalgorithm.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_resourcedata_getcompression.restype = ctypes.c_int32 + self.lib.lib3mf_resourcedata_getcompression.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_resourcedata_getadditionalauthenticationdata.restype = ctypes.c_int32 + self.lib.lib3mf_resourcedata_getadditionalauthenticationdata.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint8)] + + self.lib.lib3mf_resourcedatagroup_getkeyuuid.restype = ctypes.c_int32 + self.lib.lib3mf_resourcedatagroup_getkeyuuid.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_resourcedatagroup_addaccessright.restype = ctypes.c_int32 + self.lib.lib3mf_resourcedatagroup_addaccessright.argtypes = [ctypes.c_void_p, ctypes.c_void_p, WrappingAlgorithm, MgfAlgorithm, DigestMethod, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_resourcedatagroup_findaccessrightbyconsumer.restype = ctypes.c_int32 + self.lib.lib3mf_resourcedatagroup_findaccessrightbyconsumer.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_resourcedatagroup_removeaccessright.restype = ctypes.c_int32 + self.lib.lib3mf_resourcedatagroup_removeaccessright.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_keystore_addconsumer.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_addconsumer.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_keystore_getconsumercount.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_getconsumercount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + + self.lib.lib3mf_keystore_getconsumer.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_getconsumer.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_keystore_removeconsumer.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_removeconsumer.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_keystore_findconsumer.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_findconsumer.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_keystore_getresourcedatagroupcount.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_getresourcedatagroupcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + + self.lib.lib3mf_keystore_addresourcedatagroup.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_addresourcedatagroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_keystore_getresourcedatagroup.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_getresourcedatagroup.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_keystore_removeresourcedatagroup.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_removeresourcedatagroup.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_keystore_findresourcedatagroup.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_findresourcedatagroup.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_keystore_addresourcedata.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_addresourcedata.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, EncryptionAlgorithm, Compression, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint8), ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_keystore_removeresourcedata.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_removeresourcedata.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_keystore_findresourcedata.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_findresourcedata.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_keystore_getresourcedatacount.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_getresourcedatacount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint64)] + + self.lib.lib3mf_keystore_getresourcedata.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_getresourcedata.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_keystore_getuuid.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_getuuid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_keystore_setuuid.restype = ctypes.c_int32 + self.lib.lib3mf_keystore_setuuid.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_model_rootmodelpart.restype = ctypes.c_int32 + self.lib.lib3mf_model_rootmodelpart.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_findorcreatepackagepart.restype = ctypes.c_int32 + self.lib.lib3mf_model_findorcreatepackagepart.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_setunit.restype = ctypes.c_int32 + self.lib.lib3mf_model_setunit.argtypes = [ctypes.c_void_p, ModelUnit] + + self.lib.lib3mf_model_getunit.restype = ctypes.c_int32 + self.lib.lib3mf_model_getunit.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_model_getlanguage.restype = ctypes.c_int32 + self.lib.lib3mf_model_getlanguage.argtypes = [ctypes.c_void_p, ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_model_setlanguage.restype = ctypes.c_int32 + self.lib.lib3mf_model_setlanguage.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_model_querywriter.restype = ctypes.c_int32 + self.lib.lib3mf_model_querywriter.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_queryreader.restype = ctypes.c_int32 + self.lib.lib3mf_model_queryreader.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getresourcebyid.restype = ctypes.c_int32 + self.lib.lib3mf_model_getresourcebyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_gettexture2dbyid.restype = ctypes.c_int32 + self.lib.lib3mf_model_gettexture2dbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getpropertytypebyid.restype = ctypes.c_int32 + self.lib.lib3mf_model_getpropertytypebyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_int32)] + + self.lib.lib3mf_model_getbasematerialgroupbyid.restype = ctypes.c_int32 + self.lib.lib3mf_model_getbasematerialgroupbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_gettexture2dgroupbyid.restype = ctypes.c_int32 + self.lib.lib3mf_model_gettexture2dgroupbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getcompositematerialsbyid.restype = ctypes.c_int32 + self.lib.lib3mf_model_getcompositematerialsbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getmultipropertygroupbyid.restype = ctypes.c_int32 + self.lib.lib3mf_model_getmultipropertygroupbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getmeshobjectbyid.restype = ctypes.c_int32 + self.lib.lib3mf_model_getmeshobjectbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getcomponentsobjectbyid.restype = ctypes.c_int32 + self.lib.lib3mf_model_getcomponentsobjectbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getcolorgroupbyid.restype = ctypes.c_int32 + self.lib.lib3mf_model_getcolorgroupbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getslicestackbyid.restype = ctypes.c_int32 + self.lib.lib3mf_model_getslicestackbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getlevelsetbyid.restype = ctypes.c_int32 + self.lib.lib3mf_model_getlevelsetbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getbuilduuid.restype = ctypes.c_int32 + self.lib.lib3mf_model_getbuilduuid.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool), ctypes.c_uint64, ctypes.POINTER(ctypes.c_uint64), ctypes.c_char_p] + + self.lib.lib3mf_model_setbuilduuid.restype = ctypes.c_int32 + self.lib.lib3mf_model_setbuilduuid.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_model_getbuilditems.restype = ctypes.c_int32 + self.lib.lib3mf_model_getbuilditems.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getoutbox.restype = ctypes.c_int32 + self.lib.lib3mf_model_getoutbox.argtypes = [ctypes.c_void_p, ctypes.POINTER(Box)] + + self.lib.lib3mf_model_getresources.restype = ctypes.c_int32 + self.lib.lib3mf_model_getresources.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getobjects.restype = ctypes.c_int32 + self.lib.lib3mf_model_getobjects.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getmeshobjects.restype = ctypes.c_int32 + self.lib.lib3mf_model_getmeshobjects.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getcomponentsobjects.restype = ctypes.c_int32 + self.lib.lib3mf_model_getcomponentsobjects.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_gettexture2ds.restype = ctypes.c_int32 + self.lib.lib3mf_model_gettexture2ds.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getbasematerialgroups.restype = ctypes.c_int32 + self.lib.lib3mf_model_getbasematerialgroups.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getcolorgroups.restype = ctypes.c_int32 + self.lib.lib3mf_model_getcolorgroups.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_gettexture2dgroups.restype = ctypes.c_int32 + self.lib.lib3mf_model_gettexture2dgroups.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getcompositematerials.restype = ctypes.c_int32 + self.lib.lib3mf_model_getcompositematerials.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getmultipropertygroups.restype = ctypes.c_int32 + self.lib.lib3mf_model_getmultipropertygroups.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getslicestacks.restype = ctypes.c_int32 + self.lib.lib3mf_model_getslicestacks.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getimage3ds.restype = ctypes.c_int32 + self.lib.lib3mf_model_getimage3ds.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_mergetomodel.restype = ctypes.c_int32 + self.lib.lib3mf_model_mergetomodel.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_mergefrommodel.restype = ctypes.c_int32 + self.lib.lib3mf_model_mergefrommodel.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_model_addmeshobject.restype = ctypes.c_int32 + self.lib.lib3mf_model_addmeshobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addcomponentsobject.restype = ctypes.c_int32 + self.lib.lib3mf_model_addcomponentsobject.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addslicestack.restype = ctypes.c_int32 + self.lib.lib3mf_model_addslicestack.argtypes = [ctypes.c_void_p, ctypes.c_double, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addtexture2dfromattachment.restype = ctypes.c_int32 + self.lib.lib3mf_model_addtexture2dfromattachment.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addbasematerialgroup.restype = ctypes.c_int32 + self.lib.lib3mf_model_addbasematerialgroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addcolorgroup.restype = ctypes.c_int32 + self.lib.lib3mf_model_addcolorgroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addtexture2dgroup.restype = ctypes.c_int32 + self.lib.lib3mf_model_addtexture2dgroup.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addcompositematerials.restype = ctypes.c_int32 + self.lib.lib3mf_model_addcompositematerials.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addmultipropertygroup.restype = ctypes.c_int32 + self.lib.lib3mf_model_addmultipropertygroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addimagestack.restype = ctypes.c_int32 + self.lib.lib3mf_model_addimagestack.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint32, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getimagestackbyid.restype = ctypes.c_int32 + self.lib.lib3mf_model_getimagestackbyid.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addbuilditem.restype = ctypes.c_int32 + self.lib.lib3mf_model_addbuilditem.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(Transform), ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_removebuilditem.restype = ctypes.c_int32 + self.lib.lib3mf_model_removebuilditem.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_model_getmetadatagroup.restype = ctypes.c_int32 + self.lib.lib3mf_model_getmetadatagroup.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addattachment.restype = ctypes.c_int32 + self.lib.lib3mf_model_addattachment.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_removeattachment.restype = ctypes.c_int32 + self.lib.lib3mf_model_removeattachment.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + self.lib.lib3mf_model_getattachment.restype = ctypes.c_int32 + self.lib.lib3mf_model_getattachment.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_findattachment.restype = ctypes.c_int32 + self.lib.lib3mf_model_findattachment.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getattachmentcount.restype = ctypes.c_int32 + self.lib.lib3mf_model_getattachmentcount.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint32)] + + self.lib.lib3mf_model_haspackagethumbnailattachment.restype = ctypes.c_int32 + self.lib.lib3mf_model_haspackagethumbnailattachment.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_bool)] + + self.lib.lib3mf_model_createpackagethumbnailattachment.restype = ctypes.c_int32 + self.lib.lib3mf_model_createpackagethumbnailattachment.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getpackagethumbnailattachment.restype = ctypes.c_int32 + self.lib.lib3mf_model_getpackagethumbnailattachment.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_removepackagethumbnailattachment.restype = ctypes.c_int32 + self.lib.lib3mf_model_removepackagethumbnailattachment.argtypes = [ctypes.c_void_p] + + self.lib.lib3mf_model_addcustomcontenttype.restype = ctypes.c_int32 + self.lib.lib3mf_model_addcustomcontenttype.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p] + + self.lib.lib3mf_model_removecustomcontenttype.restype = ctypes.c_int32 + self.lib.lib3mf_model_removecustomcontenttype.argtypes = [ctypes.c_void_p, ctypes.c_char_p] + + self.lib.lib3mf_model_setrandomnumbercallback.restype = ctypes.c_int32 + self.lib.lib3mf_model_setrandomnumbercallback.argtypes = [ctypes.c_void_p, RandomNumberCallback, ctypes.c_void_p] + + self.lib.lib3mf_model_getkeystore.restype = ctypes.c_int32 + self.lib.lib3mf_model_getkeystore.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getfunctions.restype = ctypes.c_int32 + self.lib.lib3mf_model_getfunctions.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addimplicitfunction.restype = ctypes.c_int32 + self.lib.lib3mf_model_addimplicitfunction.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addfunctionfromimage3d.restype = ctypes.c_int32 + self.lib.lib3mf_model_addfunctionfromimage3d.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addvolumedata.restype = ctypes.c_int32 + self.lib.lib3mf_model_addvolumedata.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_addlevelset.restype = ctypes.c_int32 + self.lib.lib3mf_model_addlevelset.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_getlevelsets.restype = ctypes.c_int32 + self.lib.lib3mf_model_getlevelsets.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p)] + + self.lib.lib3mf_model_removeresource.restype = ctypes.c_int32 + self.lib.lib3mf_model_removeresource.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + except AttributeError as ae: + raise ELib3MFException(ErrorCodes.COULDNOTFINDLIBRARYEXPORT, ae.args[0]) + + def _checkBinaryVersion(self): + nMajor, nMinor, _ = self.GetLibraryVersion() + if (nMajor != BindingVersion.MAJOR) or (nMinor < BindingVersion.MINOR): + raise ELib3MFException(ErrorCodes.INCOMPATIBLEBINARYVERSION) + + def checkError(self, instance, errorCode): + if errorCode != ErrorCodes.SUCCESS.value: + if instance: + if instance._wrapper != self: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'invalid wrapper call') + message,_ = self.GetLastError(instance) + raise ELib3MFException(errorCode, message) + + def GetLibraryVersion(self): + pMajor = ctypes.c_uint32() + pMinor = ctypes.c_uint32() + pMicro = ctypes.c_uint32() + self.checkError(None, self.lib.lib3mf_getlibraryversion(pMajor, pMinor, pMicro)) + + return pMajor.value, pMinor.value, pMicro.value + + def GetPrereleaseInformation(self): + pHasPrereleaseInfo = ctypes.c_bool() + nPrereleaseInfoBufferSize = ctypes.c_uint64(0) + nPrereleaseInfoNeededChars = ctypes.c_uint64(0) + pPrereleaseInfoBuffer = ctypes.c_char_p(None) + self.checkError(None, self.lib.lib3mf_getprereleaseinformation(pHasPrereleaseInfo, nPrereleaseInfoBufferSize, nPrereleaseInfoNeededChars, pPrereleaseInfoBuffer)) + nPrereleaseInfoBufferSize = ctypes.c_uint64(nPrereleaseInfoNeededChars.value) + pPrereleaseInfoBuffer = (ctypes.c_char * (nPrereleaseInfoNeededChars.value))() + self.checkError(None, self.lib.lib3mf_getprereleaseinformation(pHasPrereleaseInfo, nPrereleaseInfoBufferSize, nPrereleaseInfoNeededChars, pPrereleaseInfoBuffer)) + + return pHasPrereleaseInfo.value, pPrereleaseInfoBuffer.value.decode() + + def GetBuildInformation(self): + pHasBuildInfo = ctypes.c_bool() + nBuildInformationBufferSize = ctypes.c_uint64(0) + nBuildInformationNeededChars = ctypes.c_uint64(0) + pBuildInformationBuffer = ctypes.c_char_p(None) + self.checkError(None, self.lib.lib3mf_getbuildinformation(pHasBuildInfo, nBuildInformationBufferSize, nBuildInformationNeededChars, pBuildInformationBuffer)) + nBuildInformationBufferSize = ctypes.c_uint64(nBuildInformationNeededChars.value) + pBuildInformationBuffer = (ctypes.c_char * (nBuildInformationNeededChars.value))() + self.checkError(None, self.lib.lib3mf_getbuildinformation(pHasBuildInfo, nBuildInformationBufferSize, nBuildInformationNeededChars, pBuildInformationBuffer)) + + return pHasBuildInfo.value, pBuildInformationBuffer.value.decode() + + def GetSpecificationVersion(self, SpecificationURL): + pSpecificationURL = ctypes.c_char_p(str.encode(SpecificationURL)) + pIsSupported = ctypes.c_bool() + pMajor = ctypes.c_uint32() + pMinor = ctypes.c_uint32() + pMicro = ctypes.c_uint32() + self.checkError(None, self.lib.lib3mf_getspecificationversion(pSpecificationURL, pIsSupported, pMajor, pMinor, pMicro)) + + return pIsSupported.value, pMajor.value, pMinor.value, pMicro.value + + def CreateModel(self): + ModelHandle = ctypes.c_void_p() + self.checkError(None, self.lib.lib3mf_createmodel(ModelHandle)) + if ModelHandle: + ModelObject = self._polymorphicFactory(ModelHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ModelObject + + def Release(self, InstanceObject): + InstanceHandle = None + if InstanceObject: + InstanceHandle = InstanceObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self.checkError(None, self.lib.lib3mf_release(InstanceHandle)) + + + def Acquire(self, InstanceObject): + InstanceHandle = None + if InstanceObject: + InstanceHandle = InstanceObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self.checkError(None, self.lib.lib3mf_acquire(InstanceHandle)) + + + def SetJournal(self, JournalPath): + pJournalPath = ctypes.c_char_p(str.encode(JournalPath)) + self.checkError(None, self.lib.lib3mf_setjournal(pJournalPath)) + + + def GetLastError(self, InstanceObject): + InstanceHandle = None + if InstanceObject: + InstanceHandle = InstanceObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + nLastErrorStringBufferSize = ctypes.c_uint64(0) + nLastErrorStringNeededChars = ctypes.c_uint64(0) + pLastErrorStringBuffer = ctypes.c_char_p(None) + pHasLastError = ctypes.c_bool() + self.checkError(None, self.lib.lib3mf_getlasterror(InstanceHandle, nLastErrorStringBufferSize, nLastErrorStringNeededChars, pLastErrorStringBuffer, pHasLastError)) + nLastErrorStringBufferSize = ctypes.c_uint64(nLastErrorStringNeededChars.value) + pLastErrorStringBuffer = (ctypes.c_char * (nLastErrorStringNeededChars.value))() + self.checkError(None, self.lib.lib3mf_getlasterror(InstanceHandle, nLastErrorStringBufferSize, nLastErrorStringNeededChars, pLastErrorStringBuffer, pHasLastError)) + + return pLastErrorStringBuffer.value.decode(), pHasLastError.value + + def GetSymbolLookupMethod(self): + pSymbolLookupMethod = ctypes.c_void_p() + self.checkError(None, self.lib.lib3mf_getsymbollookupmethod(pSymbolLookupMethod)) + + return pSymbolLookupMethod.value + + def RetrieveProgressMessage(self, TheProgressIdentifier): + nProgressMessageBufferSize = ctypes.c_uint64(0) + nProgressMessageNeededChars = ctypes.c_uint64(0) + pProgressMessageBuffer = ctypes.c_char_p(None) + self.checkError(None, self.lib.lib3mf_retrieveprogressmessage(TheProgressIdentifier, nProgressMessageBufferSize, nProgressMessageNeededChars, pProgressMessageBuffer)) + nProgressMessageBufferSize = ctypes.c_uint64(nProgressMessageNeededChars.value) + pProgressMessageBuffer = (ctypes.c_char * (nProgressMessageNeededChars.value))() + self.checkError(None, self.lib.lib3mf_retrieveprogressmessage(TheProgressIdentifier, nProgressMessageBufferSize, nProgressMessageNeededChars, pProgressMessageBuffer)) + + return pProgressMessageBuffer.value.decode() + + def RGBAToColor(self, Red, Green, Blue, Alpha): + nRed = ctypes.c_uint8(Red) + nGreen = ctypes.c_uint8(Green) + nBlue = ctypes.c_uint8(Blue) + nAlpha = ctypes.c_uint8(Alpha) + pTheColor = Color() + self.checkError(None, self.lib.lib3mf_rgbatocolor(nRed, nGreen, nBlue, nAlpha, pTheColor)) + + return pTheColor + + def FloatRGBAToColor(self, Red, Green, Blue, Alpha): + fRed = ctypes.c_float(Red) + fGreen = ctypes.c_float(Green) + fBlue = ctypes.c_float(Blue) + fAlpha = ctypes.c_float(Alpha) + pTheColor = Color() + self.checkError(None, self.lib.lib3mf_floatrgbatocolor(fRed, fGreen, fBlue, fAlpha, pTheColor)) + + return pTheColor + + def ColorToRGBA(self, TheColor): + pRed = ctypes.c_uint8() + pGreen = ctypes.c_uint8() + pBlue = ctypes.c_uint8() + pAlpha = ctypes.c_uint8() + self.checkError(None, self.lib.lib3mf_colortorgba(TheColor, pRed, pGreen, pBlue, pAlpha)) + + return pRed.value, pGreen.value, pBlue.value, pAlpha.value + + def ColorToFloatRGBA(self, TheColor): + pRed = ctypes.c_float() + pGreen = ctypes.c_float() + pBlue = ctypes.c_float() + pAlpha = ctypes.c_float() + self.checkError(None, self.lib.lib3mf_colortofloatrgba(TheColor, pRed, pGreen, pBlue, pAlpha)) + + return pRed.value, pGreen.value, pBlue.value, pAlpha.value + + def GetIdentityTransform(self): + pTransform = Transform() + self.checkError(None, self.lib.lib3mf_getidentitytransform(pTransform)) + + return pTransform + + def GetUniformScaleTransform(self, Factor): + fFactor = ctypes.c_float(Factor) + pTransform = Transform() + self.checkError(None, self.lib.lib3mf_getuniformscaletransform(fFactor, pTransform)) + + return pTransform + + def GetScaleTransform(self, FactorX, FactorY, FactorZ): + fFactorX = ctypes.c_float(FactorX) + fFactorY = ctypes.c_float(FactorY) + fFactorZ = ctypes.c_float(FactorZ) + pTransform = Transform() + self.checkError(None, self.lib.lib3mf_getscaletransform(fFactorX, fFactorY, fFactorZ, pTransform)) + + return pTransform + + def GetTranslationTransform(self, VectorX, VectorY, VectorZ): + fVectorX = ctypes.c_float(VectorX) + fVectorY = ctypes.c_float(VectorY) + fVectorZ = ctypes.c_float(VectorZ) + pTransform = Transform() + self.checkError(None, self.lib.lib3mf_gettranslationtransform(fVectorX, fVectorY, fVectorZ, pTransform)) + + return pTransform + + '''IMPORTANT: PolymorphicFactory method should not be used by application directly. + It's designed to be used on Lib3MFHandle object only once. + If it's used on any existing object as a form of dynamic cast then + Wrapper.AcquireInstance(object) must be called after instantiating new object. + This is important to keep reference count matching between application and library sides. + ''' + def _polymorphicFactory(self, handle): + class PolymorphicFactory(): + def getObjectById(self, classtypeid, handle, wrapper): + methodName = 'getObjectById_' + format(classtypeid.value, '016X') + method = getattr(self, methodName, lambda: 'Invalid class type id') + return method(handle, wrapper) + def getObjectById_856632D0BAF1D8B7(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Base" + return Base(handle, wrapper) + def getObjectById_E76F642F363FD7E9(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Writer" + return Writer(handle, wrapper) + def getObjectById_2D86831DA59FBE72(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Reader" + return Reader(handle, wrapper) + def getObjectById_0E55A826D377483E(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::PackagePart" + return PackagePart(handle, wrapper) + def getObjectById_DFE3889D1B269CBB(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Resource" + return Resource(handle, wrapper) + def getObjectById_460F3515E2621DBE(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ResourceIterator" + return ResourceIterator(handle, wrapper) + def getObjectById_69684DB99FA813F6(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::SliceStackIterator" + return SliceStackIterator(handle, wrapper) + def getObjectById_DE92510BD2112288(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ObjectIterator" + return ObjectIterator(handle, wrapper) + def getObjectById_F4196034E2B9FDE6(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MeshObjectIterator" + return MeshObjectIterator(handle, wrapper) + def getObjectById_564DE4217ED7614A(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObjectIterator" + return ComponentsObjectIterator(handle, wrapper) + def getObjectById_4BD32B4870FFC03B(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Texture2DIterator" + return Texture2DIterator(handle, wrapper) + def getObjectById_65E6EDD9362C79CB(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroupIterator" + return BaseMaterialGroupIterator(handle, wrapper) + def getObjectById_10274A1757C729C0(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ColorGroupIterator" + return ColorGroupIterator(handle, wrapper) + def getObjectById_30D55F4DB88FE0CA(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroupIterator" + return Texture2DGroupIterator(handle, wrapper) + def getObjectById_A99CC6C3F70FB6F9(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterialsIterator" + return CompositeMaterialsIterator(handle, wrapper) + def getObjectById_C2BDF5D8CBBDB1F0(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroupIterator" + return MultiPropertyGroupIterator(handle, wrapper) + def getObjectById_C4B8EC00A82BF336(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Image3DIterator" + return Image3DIterator(handle, wrapper) + def getObjectById_40E9035363ACE65E(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::FunctionIterator" + return FunctionIterator(handle, wrapper) + def getObjectById_A0C005C035D5371D(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::LevelSetIterator" + return LevelSetIterator(handle, wrapper) + def getObjectById_D17716D063DE2C22(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MetaData" + return MetaData(handle, wrapper) + def getObjectById_0C3B85369E9B25D3(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MetaDataGroup" + return MetaDataGroup(handle, wrapper) + def getObjectById_2DA2136F577A779C(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Object" + return Object(handle, wrapper) + def getObjectById_3B3A6DC6EC610497(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MeshObject" + return MeshObject(handle, wrapper) + def getObjectById_E8A7D9C192EFD0E2(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::LevelSet" + return LevelSet(handle, wrapper) + def getObjectById_63B3B461B30B4BA5(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::BeamLattice" + return BeamLattice(handle, wrapper) + def getObjectById_4DF17E76926221C2(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::FunctionReference" + return FunctionReference(handle, wrapper) + def getObjectById_D85B5B6143E787E3(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataColor" + return VolumeDataColor(handle, wrapper) + def getObjectById_241FE6B4817C3FE4(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MaterialMapping" + return MaterialMapping(handle, wrapper) + def getObjectById_46F1DAC40581B304(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataComposite" + return VolumeDataComposite(handle, wrapper) + def getObjectById_FC368AA44ACE42DA(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataProperty" + return VolumeDataProperty(handle, wrapper) + def getObjectById_9200586FB91587A7(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::VolumeData" + return VolumeData(handle, wrapper) + def getObjectById_4ECDB6A6F69F2BEB(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Component" + return Component(handle, wrapper) + def getObjectById_6522CF04EB283FED(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObject" + return ComponentsObject(handle, wrapper) + def getObjectById_30CCDBE90E00B55B(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::BeamSet" + return BeamSet(handle, wrapper) + def getObjectById_B27D4656E16609FA(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroup" + return BaseMaterialGroup(handle, wrapper) + def getObjectById_D085FB2E49CDB5B1(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ColorGroup" + return ColorGroup(handle, wrapper) + def getObjectById_BC1208397E37055D(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroup" + return Texture2DGroup(handle, wrapper) + def getObjectById_CE16224D688B86F2(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterials" + return CompositeMaterials(handle, wrapper) + def getObjectById_B989E02E43158FE6(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroup" + return MultiPropertyGroup(handle, wrapper) + def getObjectById_BD938FF2D2663D61(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Image3D" + return Image3D(handle, wrapper) + def getObjectById_13A2561F0CFB712A(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ImageStack" + return ImageStack(handle, wrapper) + def getObjectById_8CE7A1191A63A35D(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Attachment" + return Attachment(handle, wrapper) + def getObjectById_E0441CF976B36319(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Texture2D" + return Texture2D(handle, wrapper) + def getObjectById_D5C49B04AF1963CD(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ImplicitPort" + return ImplicitPort(handle, wrapper) + def getObjectById_52F06268CD098EFE(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Iterator" + return Iterator(handle, wrapper) + def getObjectById_C62268F2D7C7012C(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ImplicitPortIterator" + return ImplicitPortIterator(handle, wrapper) + def getObjectById_E72592A7725AB29B(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ImplicitNode" + return ImplicitNode(handle, wrapper) + def getObjectById_B19B9FDA94B0A5E7(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::OneInputNode" + return OneInputNode(handle, wrapper) + def getObjectById_D5AEA50A56306722(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::SinNode" + return SinNode(handle, wrapper) + def getObjectById_59BC328F6FB5C5FF(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::CosNode" + return CosNode(handle, wrapper) + def getObjectById_2614CC572AF350B7(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::TanNode" + return TanNode(handle, wrapper) + def getObjectById_E554C8A7E72AAF4D(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ArcSinNode" + return ArcSinNode(handle, wrapper) + def getObjectById_943AF6AE0EFD2B8A(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ArcCosNode" + return ArcCosNode(handle, wrapper) + def getObjectById_E47D547615816BAD(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ArcTanNode" + return ArcTanNode(handle, wrapper) + def getObjectById_3C7756A456F2D089(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::SinhNode" + return SinhNode(handle, wrapper) + def getObjectById_4A993F91E1DE256D(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::CoshNode" + return CoshNode(handle, wrapper) + def getObjectById_CF077B19B0B78E9D(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::TanhNode" + return TanhNode(handle, wrapper) + def getObjectById_D9F5A53C657765AE(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::RoundNode" + return RoundNode(handle, wrapper) + def getObjectById_627E211653E11D93(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::CeilNode" + return CeilNode(handle, wrapper) + def getObjectById_392A0F4C041D249C(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::FloorNode" + return FloorNode(handle, wrapper) + def getObjectById_8A45165E6C9646D7(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::SignNode" + return SignNode(handle, wrapper) + def getObjectById_53E62FD67F4D9A65(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::FractNode" + return FractNode(handle, wrapper) + def getObjectById_6B641C7060040BE3(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::AbsNode" + return AbsNode(handle, wrapper) + def getObjectById_3390243A8E2410F3(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ExpNode" + return ExpNode(handle, wrapper) + def getObjectById_0070021D73AA89FD(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::LogNode" + return LogNode(handle, wrapper) + def getObjectById_E8C0ABF7C5DC7068(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Log2Node" + return Log2Node(handle, wrapper) + def getObjectById_87740AD53454E0DF(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Log10Node" + return Log10Node(handle, wrapper) + def getObjectById_D85889E2739A74B1(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::LengthNode" + return LengthNode(handle, wrapper) + def getObjectById_A808B7599C158CE6(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::TransposeNode" + return TransposeNode(handle, wrapper) + def getObjectById_E8601F66A23A0540(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::InverseNode" + return InverseNode(handle, wrapper) + def getObjectById_9F831944A3DE31DA(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::SqrtNode" + return SqrtNode(handle, wrapper) + def getObjectById_CA86A77C71CD3FAE(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ResourceIdNode" + return ResourceIdNode(handle, wrapper) + def getObjectById_7DE3951BA4C1064C(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::TwoInputNode" + return TwoInputNode(handle, wrapper) + def getObjectById_57A2236998DF5248(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::AdditionNode" + return AdditionNode(handle, wrapper) + def getObjectById_6079B12FFF345D02(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::SubtractionNode" + return SubtractionNode(handle, wrapper) + def getObjectById_A3C27CF54C2AA76C(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MultiplicationNode" + return MultiplicationNode(handle, wrapper) + def getObjectById_B896B6413C08CF39(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::DivisionNode" + return DivisionNode(handle, wrapper) + def getObjectById_FE60932A66375FAD(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::DotNode" + return DotNode(handle, wrapper) + def getObjectById_106182D38CA5CFE3(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::CrossNode" + return CrossNode(handle, wrapper) + def getObjectById_B6153EF5DE7E5E11(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ArcTan2Node" + return ArcTan2Node(handle, wrapper) + def getObjectById_7570C43B9721D0C0(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MatVecMultiplicationNode" + return MatVecMultiplicationNode(handle, wrapper) + def getObjectById_846AFDE9A091E997(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MinNode" + return MinNode(handle, wrapper) + def getObjectById_073F910381BF250D(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MaxNode" + return MaxNode(handle, wrapper) + def getObjectById_1EF703D298223F2A(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::FmodNode" + return FmodNode(handle, wrapper) + def getObjectById_EA57335849379F22(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ModNode" + return ModNode(handle, wrapper) + def getObjectById_7700AA17CA1AC0F8(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::PowNode" + return PowNode(handle, wrapper) + def getObjectById_1127ED71E05A9BD4(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::SelectNode" + return SelectNode(handle, wrapper) + def getObjectById_77AF68C971B1485F(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ClampNode" + return ClampNode(handle, wrapper) + def getObjectById_49C24B8840C01F7E(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ComposeVectorNode" + return ComposeVectorNode(handle, wrapper) + def getObjectById_2E417B93351375E2(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::VectorFromScalarNode" + return VectorFromScalarNode(handle, wrapper) + def getObjectById_CC4F8D561CCE35D4(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::DecomposeVectorNode" + return DecomposeVectorNode(handle, wrapper) + def getObjectById_9EF9EB54A53AA40D(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ComposeMatrixNode" + return ComposeMatrixNode(handle, wrapper) + def getObjectById_D6DFD0A7EB64AC33(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MatrixFromRowsNode" + return MatrixFromRowsNode(handle, wrapper) + def getObjectById_0DCBEAFCF83F3AAC(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MatrixFromColumnsNode" + return MatrixFromColumnsNode(handle, wrapper) + def getObjectById_3F8E5D082F966B1B(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ConstantNode" + return ConstantNode(handle, wrapper) + def getObjectById_9C9363B3F708D556(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ConstVecNode" + return ConstVecNode(handle, wrapper) + def getObjectById_F85C90EDCE6F90A4(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ConstMatNode" + return ConstMatNode(handle, wrapper) + def getObjectById_53601FD432E3DEF4(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MeshNode" + return MeshNode(handle, wrapper) + def getObjectById_29985A628251A9CD(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::UnsignedMeshNode" + return UnsignedMeshNode(handle, wrapper) + def getObjectById_0765C17C952F24E3(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::FunctionCallNode" + return FunctionCallNode(handle, wrapper) + def getObjectById_FC006BC888CAB4D0(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::NodeIterator" + return NodeIterator(handle, wrapper) + def getObjectById_9EFB2757CA1A5231(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Function" + return Function(handle, wrapper) + def getObjectById_6CE54469EEA83BC1(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ImplicitFunction" + return ImplicitFunction(handle, wrapper) + def getObjectById_9BD7D3C2026B8CE8(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::FunctionFromImage3D" + return FunctionFromImage3D(handle, wrapper) + def getObjectById_68FB2D5FFC4BA12A(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::BuildItem" + return BuildItem(handle, wrapper) + def getObjectById_A7D21BD364910860(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::BuildItemIterator" + return BuildItemIterator(handle, wrapper) + def getObjectById_2198BCF4D8DF9C40(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Slice" + return Slice(handle, wrapper) + def getObjectById_6594B031B6096238(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::SliceStack" + return SliceStack(handle, wrapper) + def getObjectById_D9E46D5E6D8118EE(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Consumer" + return Consumer(handle, wrapper) + def getObjectById_385C42FC5609498A(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::AccessRight" + return AccessRight(handle, wrapper) + def getObjectById_7FB36B91D4CE4671(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ContentEncryptionParams" + return ContentEncryptionParams(handle, wrapper) + def getObjectById_1A47A5E258E22EF9(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ResourceData" + return ResourceData(handle, wrapper) + def getObjectById_D59067227E428AA4(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ResourceDataGroup" + return ResourceDataGroup(handle, wrapper) + def getObjectById_1CC9E0CC082253C6(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::KeyStore" + return KeyStore(handle, wrapper) + def getObjectById_5A8164ECEDB03F09(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Model" + return Model(handle, wrapper) + + if not handle: + return None + pClassTypeId = ctypes.c_uint64() + self.checkError(None, self.lib.lib3mf_base_classtypeid(handle, pClassTypeId)) + factory = PolymorphicFactory() + return factory.getObjectById(pClassTypeId, handle, self) + + + +''' Class Implementation for Base +''' +class Base: + def __init__(self, handle, wrapper): + if not handle or not wrapper: + raise ELib3MFException(ErrorCodes.INVALIDPARAM) + self._handle = handle + self._wrapper = wrapper + + def __del__(self): + self._wrapper.Release(self) + def ClassTypeId(self): + pClassTypeId = ctypes.c_uint64() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_base_classtypeid(self._handle, pClassTypeId)) + + return pClassTypeId.value + + + +''' Class Implementation for Writer +''' +class Writer(Base): + def __init__(self, handle, wrapper): + Base.__init__(self, handle, wrapper) + def WriteToFile(self, Filename): + pFilename = ctypes.c_char_p(str.encode(Filename)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_writetofile(self._handle, pFilename)) + + + def GetStreamSize(self): + pStreamSize = ctypes.c_uint64() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_getstreamsize(self._handle, pStreamSize)) + + return pStreamSize.value + + def WriteToBuffer(self): + nBufferCount = ctypes.c_uint64(0) + nBufferNeededCount = ctypes.c_uint64(0) + pBufferBuffer = (ctypes.c_uint8*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_writetobuffer(self._handle, nBufferCount, nBufferNeededCount, pBufferBuffer)) + nBufferCount = ctypes.c_uint64(nBufferNeededCount.value) + pBufferBuffer = (ctypes.c_uint8 * nBufferNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_writetobuffer(self._handle, nBufferCount, nBufferNeededCount, pBufferBuffer)) + + return [pBufferBuffer[i] for i in range(nBufferNeededCount.value)] + + def WriteToCallback(self, TheWriteCallbackFunc, TheSeekCallbackFunc, UserData): + pUserData = ctypes.c_void_p(UserData) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_writetocallback(self._handle, TheWriteCallbackFunc, TheSeekCallbackFunc, pUserData)) + + + def SetProgressCallback(self, ProgressCallbackFunc, UserData): + pUserData = ctypes.c_void_p(UserData) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_setprogresscallback(self._handle, ProgressCallbackFunc, pUserData)) + + + def GetDecimalPrecision(self): + pDecimalPrecision = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_getdecimalprecision(self._handle, pDecimalPrecision)) + + return pDecimalPrecision.value + + def SetDecimalPrecision(self, DecimalPrecision): + nDecimalPrecision = ctypes.c_uint32(DecimalPrecision) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_setdecimalprecision(self._handle, nDecimalPrecision)) + + + def SetStrictModeActive(self, StrictModeActive): + bStrictModeActive = ctypes.c_bool(StrictModeActive) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_setstrictmodeactive(self._handle, bStrictModeActive)) + + + def GetStrictModeActive(self): + pStrictModeActive = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_getstrictmodeactive(self._handle, pStrictModeActive)) + + return pStrictModeActive.value + + def GetWarning(self, Index): + nIndex = ctypes.c_uint32(Index) + pErrorCode = ctypes.c_uint32() + nWarningBufferSize = ctypes.c_uint64(0) + nWarningNeededChars = ctypes.c_uint64(0) + pWarningBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_getwarning(self._handle, nIndex, pErrorCode, nWarningBufferSize, nWarningNeededChars, pWarningBuffer)) + nWarningBufferSize = ctypes.c_uint64(nWarningNeededChars.value) + pWarningBuffer = (ctypes.c_char * (nWarningNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_getwarning(self._handle, nIndex, pErrorCode, nWarningBufferSize, nWarningNeededChars, pWarningBuffer)) + + return pErrorCode.value, pWarningBuffer.value.decode() + + def GetWarningCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_getwarningcount(self._handle, pCount)) + + return pCount.value + + def AddKeyWrappingCallback(self, ConsumerID, TheCallbackFunc, UserData): + pConsumerID = ctypes.c_char_p(str.encode(ConsumerID)) + pUserData = ctypes.c_void_p(UserData) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_addkeywrappingcallback(self._handle, pConsumerID, TheCallbackFunc, pUserData)) + + + def SetContentEncryptionCallback(self, TheCallbackFunc, UserData): + pUserData = ctypes.c_void_p(UserData) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_setcontentencryptioncallback(self._handle, TheCallbackFunc, pUserData)) + + + + +''' Class Implementation for Reader +''' +class Reader(Base): + def __init__(self, handle, wrapper): + Base.__init__(self, handle, wrapper) + def ReadFromFile(self, Filename): + pFilename = ctypes.c_char_p(str.encode(Filename)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_readfromfile(self._handle, pFilename)) + + + def ReadFromBuffer(self, Buffer): + nBufferCount = ctypes.c_uint64(len(Buffer)) + pBufferBuffer = (ctypes.c_uint8*len(Buffer))(*Buffer) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_readfrombuffer(self._handle, nBufferCount, pBufferBuffer)) + + + def ReadFromCallback(self, TheReadCallbackFunc, StreamSize, TheSeekCallbackFunc, UserData): + nStreamSize = ctypes.c_uint64(StreamSize) + pUserData = ctypes.c_void_p(UserData) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_readfromcallback(self._handle, TheReadCallbackFunc, nStreamSize, TheSeekCallbackFunc, pUserData)) + + + def SetProgressCallback(self, ProgressCallbackFunc, UserData): + pUserData = ctypes.c_void_p(UserData) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_setprogresscallback(self._handle, ProgressCallbackFunc, pUserData)) + + + def AddRelationToRead(self, RelationShipType): + pRelationShipType = ctypes.c_char_p(str.encode(RelationShipType)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_addrelationtoread(self._handle, pRelationShipType)) + + + def RemoveRelationToRead(self, RelationShipType): + pRelationShipType = ctypes.c_char_p(str.encode(RelationShipType)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_removerelationtoread(self._handle, pRelationShipType)) + + + def SetStrictModeActive(self, StrictModeActive): + bStrictModeActive = ctypes.c_bool(StrictModeActive) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_setstrictmodeactive(self._handle, bStrictModeActive)) + + + def GetStrictModeActive(self): + pStrictModeActive = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_getstrictmodeactive(self._handle, pStrictModeActive)) + + return pStrictModeActive.value + + def GetWarning(self, Index): + nIndex = ctypes.c_uint32(Index) + pErrorCode = ctypes.c_uint32() + nWarningBufferSize = ctypes.c_uint64(0) + nWarningNeededChars = ctypes.c_uint64(0) + pWarningBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_getwarning(self._handle, nIndex, pErrorCode, nWarningBufferSize, nWarningNeededChars, pWarningBuffer)) + nWarningBufferSize = ctypes.c_uint64(nWarningNeededChars.value) + pWarningBuffer = (ctypes.c_char * (nWarningNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_getwarning(self._handle, nIndex, pErrorCode, nWarningBufferSize, nWarningNeededChars, pWarningBuffer)) + + return pErrorCode.value, pWarningBuffer.value.decode() + + def GetWarningCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_getwarningcount(self._handle, pCount)) + + return pCount.value + + def AddKeyWrappingCallback(self, ConsumerID, TheCallbackFunc, UserData): + pConsumerID = ctypes.c_char_p(str.encode(ConsumerID)) + pUserData = ctypes.c_void_p(UserData) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_addkeywrappingcallback(self._handle, pConsumerID, TheCallbackFunc, pUserData)) + + + def SetContentEncryptionCallback(self, TheCallbackFunc, UserData): + pUserData = ctypes.c_void_p(UserData) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_setcontentencryptioncallback(self._handle, TheCallbackFunc, pUserData)) + + + + +''' Class Implementation for PackagePart +''' +class PackagePart(Base): + def __init__(self, handle, wrapper): + Base.__init__(self, handle, wrapper) + def GetPath(self): + nPathBufferSize = ctypes.c_uint64(0) + nPathNeededChars = ctypes.c_uint64(0) + pPathBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_packagepart_getpath(self._handle, nPathBufferSize, nPathNeededChars, pPathBuffer)) + nPathBufferSize = ctypes.c_uint64(nPathNeededChars.value) + pPathBuffer = (ctypes.c_char * (nPathNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_packagepart_getpath(self._handle, nPathBufferSize, nPathNeededChars, pPathBuffer)) + + return pPathBuffer.value.decode() + + def SetPath(self, Path): + pPath = ctypes.c_char_p(str.encode(Path)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_packagepart_setpath(self._handle, pPath)) + + + + +''' Class Implementation for Resource +''' +class Resource(Base): + def __init__(self, handle, wrapper): + Base.__init__(self, handle, wrapper) + def GetResourceID(self): + pUniqueResourceID = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resource_getresourceid(self._handle, pUniqueResourceID)) + + return pUniqueResourceID.value + + def GetUniqueResourceID(self): + pUniqueResourceID = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resource_getuniqueresourceid(self._handle, pUniqueResourceID)) + + return pUniqueResourceID.value + + def PackagePart(self): + PackagePartHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resource_packagepart(self._handle, PackagePartHandle)) + if PackagePartHandle: + PackagePartObject = self._wrapper._polymorphicFactory(PackagePartHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return PackagePartObject + + def SetPackagePart(self, PackagePartObject): + PackagePartHandle = None + if PackagePartObject: + PackagePartHandle = PackagePartObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resource_setpackagepart(self._handle, PackagePartHandle)) + + + def GetModelResourceID(self): + pModelResourceId = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resource_getmodelresourceid(self._handle, pModelResourceId)) + + return pModelResourceId.value + + + +''' Class Implementation for ResourceIterator +''' +class ResourceIterator(Base): + def __init__(self, handle, wrapper): + Base.__init__(self, handle, wrapper) + def MoveNext(self): + pHasNext = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resourceiterator_movenext(self._handle, pHasNext)) + + return pHasNext.value + + def MovePrevious(self): + pHasPrevious = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resourceiterator_moveprevious(self._handle, pHasPrevious)) + + return pHasPrevious.value + + def GetCurrent(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resourceiterator_getcurrent(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + def Clone(self): + OutResourceIteratorHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resourceiterator_clone(self._handle, OutResourceIteratorHandle)) + if OutResourceIteratorHandle: + OutResourceIteratorObject = self._wrapper._polymorphicFactory(OutResourceIteratorHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return OutResourceIteratorObject + + def Count(self): + pCount = ctypes.c_uint64() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resourceiterator_count(self._handle, pCount)) + + return pCount.value + + + +''' Class Implementation for SliceStackIterator +''' +class SliceStackIterator(ResourceIterator): + def __init__(self, handle, wrapper): + ResourceIterator.__init__(self, handle, wrapper) + def GetCurrentSliceStack(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_slicestackiterator_getcurrentslicestack(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + + +''' Class Implementation for ObjectIterator +''' +class ObjectIterator(ResourceIterator): + def __init__(self, handle, wrapper): + ResourceIterator.__init__(self, handle, wrapper) + def GetCurrentObject(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_objectiterator_getcurrentobject(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + + +''' Class Implementation for MeshObjectIterator +''' +class MeshObjectIterator(ResourceIterator): + def __init__(self, handle, wrapper): + ResourceIterator.__init__(self, handle, wrapper) + def GetCurrentMeshObject(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobjectiterator_getcurrentmeshobject(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + + +''' Class Implementation for ComponentsObjectIterator +''' +class ComponentsObjectIterator(ResourceIterator): + def __init__(self, handle, wrapper): + ResourceIterator.__init__(self, handle, wrapper) + def GetCurrentComponentsObject(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_componentsobjectiterator_getcurrentcomponentsobject(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + + +''' Class Implementation for Texture2DIterator +''' +class Texture2DIterator(ResourceIterator): + def __init__(self, handle, wrapper): + ResourceIterator.__init__(self, handle, wrapper) + def GetCurrentTexture2D(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2diterator_getcurrenttexture2d(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + + +''' Class Implementation for BaseMaterialGroupIterator +''' +class BaseMaterialGroupIterator(ResourceIterator): + def __init__(self, handle, wrapper): + ResourceIterator.__init__(self, handle, wrapper) + def GetCurrentBaseMaterialGroup(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + + +''' Class Implementation for ColorGroupIterator +''' +class ColorGroupIterator(ResourceIterator): + def __init__(self, handle, wrapper): + ResourceIterator.__init__(self, handle, wrapper) + def GetCurrentColorGroup(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroupiterator_getcurrentcolorgroup(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + + +''' Class Implementation for Texture2DGroupIterator +''' +class Texture2DGroupIterator(ResourceIterator): + def __init__(self, handle, wrapper): + ResourceIterator.__init__(self, handle, wrapper) + def GetCurrentTexture2DGroup(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + + +''' Class Implementation for CompositeMaterialsIterator +''' +class CompositeMaterialsIterator(ResourceIterator): + def __init__(self, handle, wrapper): + ResourceIterator.__init__(self, handle, wrapper) + def GetCurrentCompositeMaterials(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerialsiterator_getcurrentcompositematerials(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + + +''' Class Implementation for MultiPropertyGroupIterator +''' +class MultiPropertyGroupIterator(ResourceIterator): + def __init__(self, handle, wrapper): + ResourceIterator.__init__(self, handle, wrapper) + def GetCurrentMultiPropertyGroup(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + + +''' Class Implementation for Image3DIterator +''' +class Image3DIterator(ResourceIterator): + def __init__(self, handle, wrapper): + ResourceIterator.__init__(self, handle, wrapper) + def GetCurrentImage3D(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_image3diterator_getcurrentimage3d(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + + +''' Class Implementation for FunctionIterator +''' +class FunctionIterator(ResourceIterator): + def __init__(self, handle, wrapper): + ResourceIterator.__init__(self, handle, wrapper) + def GetCurrentFunction(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functioniterator_getcurrentfunction(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + + +''' Class Implementation for LevelSetIterator +''' +class LevelSetIterator(ResourceIterator): + def __init__(self, handle, wrapper): + ResourceIterator.__init__(self, handle, wrapper) + def GetCurrentLevelSet(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelsetiterator_getcurrentlevelset(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceObject + + + +''' Class Implementation for MetaData +''' +class MetaData(Base): + def __init__(self, handle, wrapper): + Base.__init__(self, handle, wrapper) + def GetNameSpace(self): + nNameSpaceBufferSize = ctypes.c_uint64(0) + nNameSpaceNeededChars = ctypes.c_uint64(0) + pNameSpaceBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getnamespace(self._handle, nNameSpaceBufferSize, nNameSpaceNeededChars, pNameSpaceBuffer)) + nNameSpaceBufferSize = ctypes.c_uint64(nNameSpaceNeededChars.value) + pNameSpaceBuffer = (ctypes.c_char * (nNameSpaceNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getnamespace(self._handle, nNameSpaceBufferSize, nNameSpaceNeededChars, pNameSpaceBuffer)) + + return pNameSpaceBuffer.value.decode() + + def SetNameSpace(self, NameSpace): + pNameSpace = ctypes.c_char_p(str.encode(NameSpace)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_setnamespace(self._handle, pNameSpace)) + + + def GetName(self): + nNameBufferSize = ctypes.c_uint64(0) + nNameNeededChars = ctypes.c_uint64(0) + pNameBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) + nNameBufferSize = ctypes.c_uint64(nNameNeededChars.value) + pNameBuffer = (ctypes.c_char * (nNameNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) + + return pNameBuffer.value.decode() + + def SetName(self, Name): + pName = ctypes.c_char_p(str.encode(Name)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_setname(self._handle, pName)) + + + def GetKey(self): + nKeyBufferSize = ctypes.c_uint64(0) + nKeyNeededChars = ctypes.c_uint64(0) + pKeyBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getkey(self._handle, nKeyBufferSize, nKeyNeededChars, pKeyBuffer)) + nKeyBufferSize = ctypes.c_uint64(nKeyNeededChars.value) + pKeyBuffer = (ctypes.c_char * (nKeyNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getkey(self._handle, nKeyBufferSize, nKeyNeededChars, pKeyBuffer)) + + return pKeyBuffer.value.decode() + + def GetMustPreserve(self): + pMustPreserve = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getmustpreserve(self._handle, pMustPreserve)) + + return pMustPreserve.value + + def SetMustPreserve(self, MustPreserve): + bMustPreserve = ctypes.c_bool(MustPreserve) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_setmustpreserve(self._handle, bMustPreserve)) + + + def GetType(self): + nTypeBufferSize = ctypes.c_uint64(0) + nTypeNeededChars = ctypes.c_uint64(0) + pTypeBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_gettype(self._handle, nTypeBufferSize, nTypeNeededChars, pTypeBuffer)) + nTypeBufferSize = ctypes.c_uint64(nTypeNeededChars.value) + pTypeBuffer = (ctypes.c_char * (nTypeNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_gettype(self._handle, nTypeBufferSize, nTypeNeededChars, pTypeBuffer)) + + return pTypeBuffer.value.decode() + + def SetType(self, Type): + pType = ctypes.c_char_p(str.encode(Type)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_settype(self._handle, pType)) + + + def GetValue(self): + nValueBufferSize = ctypes.c_uint64(0) + nValueNeededChars = ctypes.c_uint64(0) + pValueBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getvalue(self._handle, nValueBufferSize, nValueNeededChars, pValueBuffer)) + nValueBufferSize = ctypes.c_uint64(nValueNeededChars.value) + pValueBuffer = (ctypes.c_char * (nValueNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getvalue(self._handle, nValueBufferSize, nValueNeededChars, pValueBuffer)) + + return pValueBuffer.value.decode() + + def SetValue(self, Value): + pValue = ctypes.c_char_p(str.encode(Value)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_setvalue(self._handle, pValue)) + + + + +''' Class Implementation for MetaDataGroup +''' +class MetaDataGroup(Base): + def __init__(self, handle, wrapper): + Base.__init__(self, handle, wrapper) + def GetMetaDataCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadatagroup_getmetadatacount(self._handle, pCount)) + + return pCount.value + + def GetMetaData(self, Index): + nIndex = ctypes.c_uint32(Index) + MetaDataHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadatagroup_getmetadata(self._handle, nIndex, MetaDataHandle)) + if MetaDataHandle: + MetaDataObject = self._wrapper._polymorphicFactory(MetaDataHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return MetaDataObject + + def GetMetaDataByKey(self, NameSpace, Name): + pNameSpace = ctypes.c_char_p(str.encode(NameSpace)) + pName = ctypes.c_char_p(str.encode(Name)) + MetaDataHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadatagroup_getmetadatabykey(self._handle, pNameSpace, pName, MetaDataHandle)) + if MetaDataHandle: + MetaDataObject = self._wrapper._polymorphicFactory(MetaDataHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return MetaDataObject + + def RemoveMetaDataByIndex(self, Index): + nIndex = ctypes.c_uint32(Index) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadatagroup_removemetadatabyindex(self._handle, nIndex)) + + + def RemoveMetaData(self, TheMetaDataObject): + TheMetaDataHandle = None + if TheMetaDataObject: + TheMetaDataHandle = TheMetaDataObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadatagroup_removemetadata(self._handle, TheMetaDataHandle)) + + + def AddMetaData(self, NameSpace, Name, Value, Type, MustPreserve): + pNameSpace = ctypes.c_char_p(str.encode(NameSpace)) + pName = ctypes.c_char_p(str.encode(Name)) + pValue = ctypes.c_char_p(str.encode(Value)) + pType = ctypes.c_char_p(str.encode(Type)) + bMustPreserve = ctypes.c_bool(MustPreserve) + MetaDataHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadatagroup_addmetadata(self._handle, pNameSpace, pName, pValue, pType, bMustPreserve, MetaDataHandle)) + if MetaDataHandle: + MetaDataObject = self._wrapper._polymorphicFactory(MetaDataHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return MetaDataObject + + + +''' Class Implementation for Object +''' +class Object(Resource): + def __init__(self, handle, wrapper): + Resource.__init__(self, handle, wrapper) + def GetType(self): + pObjectType = ctypes.c_int32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_gettype(self._handle, pObjectType)) + + return ObjectType(pObjectType.value) + + def SetType(self, ObjectType): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_settype(self._handle, ObjectType)) + + + def GetName(self): + nNameBufferSize = ctypes.c_uint64(0) + nNameNeededChars = ctypes.c_uint64(0) + pNameBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) + nNameBufferSize = ctypes.c_uint64(nNameNeededChars.value) + pNameBuffer = (ctypes.c_char * (nNameNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) + + return pNameBuffer.value.decode() + + def SetName(self, Name): + pName = ctypes.c_char_p(str.encode(Name)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_setname(self._handle, pName)) + + + def GetPartNumber(self): + nPartNumberBufferSize = ctypes.c_uint64(0) + nPartNumberNeededChars = ctypes.c_uint64(0) + pPartNumberBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getpartnumber(self._handle, nPartNumberBufferSize, nPartNumberNeededChars, pPartNumberBuffer)) + nPartNumberBufferSize = ctypes.c_uint64(nPartNumberNeededChars.value) + pPartNumberBuffer = (ctypes.c_char * (nPartNumberNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getpartnumber(self._handle, nPartNumberBufferSize, nPartNumberNeededChars, pPartNumberBuffer)) + + return pPartNumberBuffer.value.decode() + + def SetPartNumber(self, PartNumber): + pPartNumber = ctypes.c_char_p(str.encode(PartNumber)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_setpartnumber(self._handle, pPartNumber)) + + + def IsMeshObject(self): + pIsMeshObject = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_ismeshobject(self._handle, pIsMeshObject)) + + return pIsMeshObject.value + + def IsComponentsObject(self): + pIsComponentsObject = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_iscomponentsobject(self._handle, pIsComponentsObject)) + + return pIsComponentsObject.value + + def IsLevelSetObject(self): + pIsLevelSetObject = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_islevelsetobject(self._handle, pIsLevelSetObject)) + + return pIsLevelSetObject.value + + def IsValid(self): + pIsValid = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_isvalid(self._handle, pIsValid)) + + return pIsValid.value + + def SetAttachmentAsThumbnail(self, AttachmentObject): + AttachmentHandle = None + if AttachmentObject: + AttachmentHandle = AttachmentObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_setattachmentasthumbnail(self._handle, AttachmentHandle)) + + + def GetThumbnailAttachment(self): + AttachmentHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getthumbnailattachment(self._handle, AttachmentHandle)) + if AttachmentHandle: + AttachmentObject = self._wrapper._polymorphicFactory(AttachmentHandle) + else: + AttachmentObject = None + + return AttachmentObject + + def ClearThumbnailAttachment(self): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_clearthumbnailattachment(self._handle)) + + + def GetOutbox(self): + pOutbox = Box() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getoutbox(self._handle, pOutbox)) + + return pOutbox + + def GetUUID(self): + pHasUUID = ctypes.c_bool() + nUUIDBufferSize = ctypes.c_uint64(0) + nUUIDNeededChars = ctypes.c_uint64(0) + pUUIDBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getuuid(self._handle, pHasUUID, nUUIDBufferSize, nUUIDNeededChars, pUUIDBuffer)) + nUUIDBufferSize = ctypes.c_uint64(nUUIDNeededChars.value) + pUUIDBuffer = (ctypes.c_char * (nUUIDNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getuuid(self._handle, pHasUUID, nUUIDBufferSize, nUUIDNeededChars, pUUIDBuffer)) + + return pHasUUID.value, pUUIDBuffer.value.decode() + + def SetUUID(self, UUID): + pUUID = ctypes.c_char_p(str.encode(UUID)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_setuuid(self._handle, pUUID)) + + + def GetMetaDataGroup(self): + MetaDataGroupHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getmetadatagroup(self._handle, MetaDataGroupHandle)) + if MetaDataGroupHandle: + MetaDataGroupObject = self._wrapper._polymorphicFactory(MetaDataGroupHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return MetaDataGroupObject + + def SetSlicesMeshResolution(self, MeshResolution): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_setslicesmeshresolution(self._handle, MeshResolution)) + + + def GetSlicesMeshResolution(self): + pMeshResolution = ctypes.c_int32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getslicesmeshresolution(self._handle, pMeshResolution)) + + return SlicesMeshResolution(pMeshResolution.value) + + def HasSlices(self, Recursive): + bRecursive = ctypes.c_bool(Recursive) + pHasSlices = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_hasslices(self._handle, bRecursive, pHasSlices)) + + return pHasSlices.value + + def ClearSliceStack(self): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_clearslicestack(self._handle)) + + + def GetSliceStack(self): + SliceStackInstanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getslicestack(self._handle, SliceStackInstanceHandle)) + if SliceStackInstanceHandle: + SliceStackInstanceObject = self._wrapper._polymorphicFactory(SliceStackInstanceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return SliceStackInstanceObject + + def AssignSliceStack(self, SliceStackInstanceObject): + SliceStackInstanceHandle = None + if SliceStackInstanceObject: + SliceStackInstanceHandle = SliceStackInstanceObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_assignslicestack(self._handle, SliceStackInstanceHandle)) + + + + +''' Class Implementation for MeshObject +''' +class MeshObject(Object): + def __init__(self, handle, wrapper): + Object.__init__(self, handle, wrapper) + def GetVertexCount(self): + pVertexCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getvertexcount(self._handle, pVertexCount)) + + return pVertexCount.value + + def GetTriangleCount(self): + pVertexCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_gettrianglecount(self._handle, pVertexCount)) + + return pVertexCount.value + + def GetVertex(self, Index): + nIndex = ctypes.c_uint32(Index) + pCoordinates = Position() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getvertex(self._handle, nIndex, pCoordinates)) + + return pCoordinates + + def SetVertex(self, Index, Coordinates): + nIndex = ctypes.c_uint32(Index) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_setvertex(self._handle, nIndex, Coordinates)) + + + def AddVertex(self, Coordinates): + pNewIndex = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_addvertex(self._handle, Coordinates, pNewIndex)) + + return pNewIndex.value + + def GetVertices(self): + nVerticesCount = ctypes.c_uint64(0) + nVerticesNeededCount = ctypes.c_uint64(0) + pVerticesBuffer = (Position*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getvertices(self._handle, nVerticesCount, nVerticesNeededCount, pVerticesBuffer)) + nVerticesCount = ctypes.c_uint64(nVerticesNeededCount.value) + pVerticesBuffer = (Position * nVerticesNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getvertices(self._handle, nVerticesCount, nVerticesNeededCount, pVerticesBuffer)) + + return [pVerticesBuffer[i] for i in range(nVerticesNeededCount.value)] + + def GetTriangle(self, Index): + nIndex = ctypes.c_uint32(Index) + pIndices = Triangle() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_gettriangle(self._handle, nIndex, pIndices)) + + return pIndices + + def SetTriangle(self, Index, Indices): + nIndex = ctypes.c_uint32(Index) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_settriangle(self._handle, nIndex, Indices)) + + + def AddTriangle(self, Indices): + pNewIndex = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_addtriangle(self._handle, Indices, pNewIndex)) + + return pNewIndex.value + + def GetTriangleIndices(self): + nIndicesCount = ctypes.c_uint64(0) + nIndicesNeededCount = ctypes.c_uint64(0) + pIndicesBuffer = (Triangle*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_gettriangleindices(self._handle, nIndicesCount, nIndicesNeededCount, pIndicesBuffer)) + nIndicesCount = ctypes.c_uint64(nIndicesNeededCount.value) + pIndicesBuffer = (Triangle * nIndicesNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_gettriangleindices(self._handle, nIndicesCount, nIndicesNeededCount, pIndicesBuffer)) + + return [pIndicesBuffer[i] for i in range(nIndicesNeededCount.value)] + + def SetObjectLevelProperty(self, UniqueResourceID, PropertyID): + nUniqueResourceID = ctypes.c_uint32(UniqueResourceID) + nPropertyID = ctypes.c_uint32(PropertyID) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_setobjectlevelproperty(self._handle, nUniqueResourceID, nPropertyID)) + + + def GetObjectLevelProperty(self): + pUniqueResourceID = ctypes.c_uint32() + pPropertyID = ctypes.c_uint32() + pHasObjectLevelProperty = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getobjectlevelproperty(self._handle, pUniqueResourceID, pPropertyID, pHasObjectLevelProperty)) + + return pUniqueResourceID.value, pPropertyID.value, pHasObjectLevelProperty.value + + def SetTriangleProperties(self, Index, Properties): + nIndex = ctypes.c_uint32(Index) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_settriangleproperties(self._handle, nIndex, Properties)) + + + def GetTriangleProperties(self, Index): + nIndex = ctypes.c_uint32(Index) + pProperty = TriangleProperties() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_gettriangleproperties(self._handle, nIndex, pProperty)) + + return pProperty + + def SetAllTriangleProperties(self, PropertiesArray): + nPropertiesArrayCount = ctypes.c_uint64(len(PropertiesArray)) + pPropertiesArrayBuffer = (TriangleProperties*len(PropertiesArray))(*PropertiesArray) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_setalltriangleproperties(self._handle, nPropertiesArrayCount, pPropertiesArrayBuffer)) + + + def GetAllTriangleProperties(self): + nPropertiesArrayCount = ctypes.c_uint64(0) + nPropertiesArrayNeededCount = ctypes.c_uint64(0) + pPropertiesArrayBuffer = (TriangleProperties*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getalltriangleproperties(self._handle, nPropertiesArrayCount, nPropertiesArrayNeededCount, pPropertiesArrayBuffer)) + nPropertiesArrayCount = ctypes.c_uint64(nPropertiesArrayNeededCount.value) + pPropertiesArrayBuffer = (TriangleProperties * nPropertiesArrayNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getalltriangleproperties(self._handle, nPropertiesArrayCount, nPropertiesArrayNeededCount, pPropertiesArrayBuffer)) + + return [pPropertiesArrayBuffer[i] for i in range(nPropertiesArrayNeededCount.value)] + + def ClearAllProperties(self): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_clearallproperties(self._handle)) + + + def SetGeometry(self, Vertices, Indices): + nVerticesCount = ctypes.c_uint64(len(Vertices)) + pVerticesBuffer = (Position*len(Vertices))(*Vertices) + nIndicesCount = ctypes.c_uint64(len(Indices)) + pIndicesBuffer = (Triangle*len(Indices))(*Indices) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_setgeometry(self._handle, nVerticesCount, pVerticesBuffer, nIndicesCount, pIndicesBuffer)) + + + def IsManifoldAndOriented(self): + pIsManifoldAndOriented = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_ismanifoldandoriented(self._handle, pIsManifoldAndOriented)) + + return pIsManifoldAndOriented.value + + def BeamLattice(self): + TheBeamLatticeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_beamlattice(self._handle, TheBeamLatticeHandle)) + if TheBeamLatticeHandle: + TheBeamLatticeObject = self._wrapper._polymorphicFactory(TheBeamLatticeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return TheBeamLatticeObject + + def GetVolumeData(self): + TheVolumeDataHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getvolumedata(self._handle, TheVolumeDataHandle)) + if TheVolumeDataHandle: + TheVolumeDataObject = self._wrapper._polymorphicFactory(TheVolumeDataHandle) + else: + TheVolumeDataObject = None + + return TheVolumeDataObject + + def SetVolumeData(self, TheVolumeDataObject): + TheVolumeDataHandle = None + if TheVolumeDataObject: + TheVolumeDataHandle = TheVolumeDataObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_setvolumedata(self._handle, TheVolumeDataHandle)) + + + + +''' Class Implementation for LevelSet +''' +class LevelSet(Object): + def __init__(self, handle, wrapper): + Object.__init__(self, handle, wrapper) + def GetFunction(self): + TheFunctionHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_getfunction(self._handle, TheFunctionHandle)) + if TheFunctionHandle: + TheFunctionObject = self._wrapper._polymorphicFactory(TheFunctionHandle) + else: + TheFunctionObject = None + + return TheFunctionObject + + def SetFunction(self, TheFunctionObject): + TheFunctionHandle = None + if TheFunctionObject: + TheFunctionHandle = TheFunctionObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_setfunction(self._handle, TheFunctionHandle)) + + + def GetTransform(self): + pTransform = Transform() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_gettransform(self._handle, pTransform)) + + return pTransform + + def SetTransform(self, Transform): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_settransform(self._handle, Transform)) + + + def GetChannelName(self): + nChannelNameBufferSize = ctypes.c_uint64(0) + nChannelNameNeededChars = ctypes.c_uint64(0) + pChannelNameBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_getchannelname(self._handle, nChannelNameBufferSize, nChannelNameNeededChars, pChannelNameBuffer)) + nChannelNameBufferSize = ctypes.c_uint64(nChannelNameNeededChars.value) + pChannelNameBuffer = (ctypes.c_char * (nChannelNameNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_getchannelname(self._handle, nChannelNameBufferSize, nChannelNameNeededChars, pChannelNameBuffer)) + + return pChannelNameBuffer.value.decode() + + def SetChannelName(self, ChannelName): + pChannelName = ctypes.c_char_p(str.encode(ChannelName)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_setchannelname(self._handle, pChannelName)) + + + def SetMinFeatureSize(self, MinFeatureSize): + dMinFeatureSize = ctypes.c_double(MinFeatureSize) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_setminfeaturesize(self._handle, dMinFeatureSize)) + + + def GetMinFeatureSize(self): + pMinFeatureSize = ctypes.c_double() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_getminfeaturesize(self._handle, pMinFeatureSize)) + + return pMinFeatureSize.value + + def SetFallBackValue(self, FallBackValue): + dFallBackValue = ctypes.c_double(FallBackValue) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_setfallbackvalue(self._handle, dFallBackValue)) + + + def GetFallBackValue(self): + pFallBackValue = ctypes.c_double() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_getfallbackvalue(self._handle, pFallBackValue)) + + return pFallBackValue.value + + def SetMeshBBoxOnly(self, MeshBBoxOnly): + bMeshBBoxOnly = ctypes.c_bool(MeshBBoxOnly) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_setmeshbboxonly(self._handle, bMeshBBoxOnly)) + + + def GetMeshBBoxOnly(self): + pMeshBBoxOnly = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_getmeshbboxonly(self._handle, pMeshBBoxOnly)) + + return pMeshBBoxOnly.value + + def SetMesh(self, TheMeshObject): + TheMeshHandle = None + if TheMeshObject: + TheMeshHandle = TheMeshObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_setmesh(self._handle, TheMeshHandle)) + + + def GetMesh(self): + TheMeshHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_getmesh(self._handle, TheMeshHandle)) + if TheMeshHandle: + TheMeshObject = self._wrapper._polymorphicFactory(TheMeshHandle) + else: + TheMeshObject = None + + return TheMeshObject + + def GetVolumeData(self): + TheVolumeDataHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_getvolumedata(self._handle, TheVolumeDataHandle)) + if TheVolumeDataHandle: + TheVolumeDataObject = self._wrapper._polymorphicFactory(TheVolumeDataHandle) + else: + TheVolumeDataObject = None + + return TheVolumeDataObject + + def SetVolumeData(self, TheVolumeDataObject): + TheVolumeDataHandle = None + if TheVolumeDataObject: + TheVolumeDataHandle = TheVolumeDataObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_levelset_setvolumedata(self._handle, TheVolumeDataHandle)) + + + + +''' Class Implementation for BeamLattice +''' +class BeamLattice(Base): + def __init__(self, handle, wrapper): + Base.__init__(self, handle, wrapper) + def GetMinLength(self): + pMinLength = ctypes.c_double() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getminlength(self._handle, pMinLength)) + + return pMinLength.value + + def SetMinLength(self, MinLength): + dMinLength = ctypes.c_double(MinLength) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setminlength(self._handle, dMinLength)) + + + def GetClipping(self): + pClipMode = ctypes.c_int32() + pUniqueResourceID = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getclipping(self._handle, pClipMode, pUniqueResourceID)) + + return BeamLatticeClipMode(pClipMode.value), pUniqueResourceID.value + + def SetClipping(self, ClipMode, UniqueResourceID): + nUniqueResourceID = ctypes.c_uint32(UniqueResourceID) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setclipping(self._handle, ClipMode, nUniqueResourceID)) + + + def GetRepresentation(self): + pHasRepresentation = ctypes.c_bool() + pUniqueResourceID = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getrepresentation(self._handle, pHasRepresentation, pUniqueResourceID)) + + return pHasRepresentation.value, pUniqueResourceID.value + + def SetRepresentation(self, UniqueResourceID): + nUniqueResourceID = ctypes.c_uint32(UniqueResourceID) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setrepresentation(self._handle, nUniqueResourceID)) + + + def GetBallOptions(self): + pBallMode = ctypes.c_int32() + pBallRadius = ctypes.c_double() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getballoptions(self._handle, pBallMode, pBallRadius)) + + return BeamLatticeBallMode(pBallMode.value), pBallRadius.value + + def SetBallOptions(self, BallMode, BallRadius): + dBallRadius = ctypes.c_double(BallRadius) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setballoptions(self._handle, BallMode, dBallRadius)) + + + def GetBeamCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getbeamcount(self._handle, pCount)) + + return pCount.value + + def GetBeam(self, Index): + nIndex = ctypes.c_uint32(Index) + pBeamInfo = Beam() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getbeam(self._handle, nIndex, pBeamInfo)) + + return pBeamInfo - def _checkBinaryVersion(self): - nMajor, nMinor, _ = self.GetLibraryVersion() - if (nMajor != BindingVersion.MAJOR) or (nMinor < BindingVersion.MINOR): - raise ELib3MFException(ErrorCodes.INCOMPATIBLEBINARYVERSION) + def AddBeam(self, BeamInfo): + pIndex = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_addbeam(self._handle, BeamInfo, pIndex)) + + return pIndex.value - def checkError(self, instance, errorCode): - if errorCode != ErrorCodes.SUCCESS.value: - if instance: - if instance._wrapper != self: - raise ELib3MFException(ErrorCodes.INVALIDCAST, 'invalid wrapper call') - message,_ = self.GetLastError(instance) - raise ELib3MFException(errorCode, message) + def SetBeam(self, Index, BeamInfo): + nIndex = ctypes.c_uint32(Index) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setbeam(self._handle, nIndex, BeamInfo)) + - def GetLibraryVersion(self): - pMajor = ctypes.c_uint32() - pMinor = ctypes.c_uint32() - pMicro = ctypes.c_uint32() - self.checkError(None, self.lib.lib3mf_getlibraryversion(pMajor, pMinor, pMicro)) + def SetBeams(self, BeamInfo): + nBeamInfoCount = ctypes.c_uint64(len(BeamInfo)) + pBeamInfoBuffer = (Beam*len(BeamInfo))(*BeamInfo) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setbeams(self._handle, nBeamInfoCount, pBeamInfoBuffer)) - return pMajor.value, pMinor.value, pMicro.value - def GetPrereleaseInformation(self): - pHasPrereleaseInfo = ctypes.c_bool() - nPrereleaseInfoBufferSize = ctypes.c_uint64(0) - nPrereleaseInfoNeededChars = ctypes.c_uint64(0) - pPrereleaseInfoBuffer = ctypes.c_char_p(None) - self.checkError(None, self.lib.lib3mf_getprereleaseinformation(pHasPrereleaseInfo, nPrereleaseInfoBufferSize, nPrereleaseInfoNeededChars, pPrereleaseInfoBuffer)) - nPrereleaseInfoBufferSize = ctypes.c_uint64(nPrereleaseInfoNeededChars.value) - pPrereleaseInfoBuffer = (ctypes.c_char * (nPrereleaseInfoNeededChars.value))() - self.checkError(None, self.lib.lib3mf_getprereleaseinformation(pHasPrereleaseInfo, nPrereleaseInfoBufferSize, nPrereleaseInfoNeededChars, pPrereleaseInfoBuffer)) + def GetBeams(self): + nBeamInfoCount = ctypes.c_uint64(0) + nBeamInfoNeededCount = ctypes.c_uint64(0) + pBeamInfoBuffer = (Beam*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getbeams(self._handle, nBeamInfoCount, nBeamInfoNeededCount, pBeamInfoBuffer)) + nBeamInfoCount = ctypes.c_uint64(nBeamInfoNeededCount.value) + pBeamInfoBuffer = (Beam * nBeamInfoNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getbeams(self._handle, nBeamInfoCount, nBeamInfoNeededCount, pBeamInfoBuffer)) - return pHasPrereleaseInfo.value, pPrereleaseInfoBuffer.value.decode() + return [pBeamInfoBuffer[i] for i in range(nBeamInfoNeededCount.value)] - def GetBuildInformation(self): - pHasBuildInfo = ctypes.c_bool() - nBuildInformationBufferSize = ctypes.c_uint64(0) - nBuildInformationNeededChars = ctypes.c_uint64(0) - pBuildInformationBuffer = ctypes.c_char_p(None) - self.checkError(None, self.lib.lib3mf_getbuildinformation(pHasBuildInfo, nBuildInformationBufferSize, nBuildInformationNeededChars, pBuildInformationBuffer)) - nBuildInformationBufferSize = ctypes.c_uint64(nBuildInformationNeededChars.value) - pBuildInformationBuffer = (ctypes.c_char * (nBuildInformationNeededChars.value))() - self.checkError(None, self.lib.lib3mf_getbuildinformation(pHasBuildInfo, nBuildInformationBufferSize, nBuildInformationNeededChars, pBuildInformationBuffer)) + def GetBallCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getballcount(self._handle, pCount)) - return pHasBuildInfo.value, pBuildInformationBuffer.value.decode() + return pCount.value - def GetSpecificationVersion(self, SpecificationURL): - pSpecificationURL = ctypes.c_char_p(str.encode(SpecificationURL)) - pIsSupported = ctypes.c_bool() - pMajor = ctypes.c_uint32() - pMinor = ctypes.c_uint32() - pMicro = ctypes.c_uint32() - self.checkError(None, self.lib.lib3mf_getspecificationversion(pSpecificationURL, pIsSupported, pMajor, pMinor, pMicro)) + def GetBall(self, Index): + nIndex = ctypes.c_uint32(Index) + pBallInfo = Ball() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getball(self._handle, nIndex, pBallInfo)) - return pIsSupported.value, pMajor.value, pMinor.value, pMicro.value + return pBallInfo - def CreateModel(self): - ModelHandle = ctypes.c_void_p() - self.checkError(None, self.lib.lib3mf_createmodel(ModelHandle)) - if ModelHandle: - ModelObject = self._polymorphicFactory(ModelHandle) + def AddBall(self, BallInfo): + pIndex = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_addball(self._handle, BallInfo, pIndex)) + + return pIndex.value + + def SetBall(self, Index, BallInfo): + nIndex = ctypes.c_uint32(Index) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setball(self._handle, nIndex, BallInfo)) + + + def SetBalls(self, BallInfo): + nBallInfoCount = ctypes.c_uint64(len(BallInfo)) + pBallInfoBuffer = (Ball*len(BallInfo))(*BallInfo) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setballs(self._handle, nBallInfoCount, pBallInfoBuffer)) + + + def GetBalls(self): + nBallInfoCount = ctypes.c_uint64(0) + nBallInfoNeededCount = ctypes.c_uint64(0) + pBallInfoBuffer = (Ball*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getballs(self._handle, nBallInfoCount, nBallInfoNeededCount, pBallInfoBuffer)) + nBallInfoCount = ctypes.c_uint64(nBallInfoNeededCount.value) + pBallInfoBuffer = (Ball * nBallInfoNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getballs(self._handle, nBallInfoCount, nBallInfoNeededCount, pBallInfoBuffer)) + + return [pBallInfoBuffer[i] for i in range(nBallInfoNeededCount.value)] + + def GetBeamSetCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getbeamsetcount(self._handle, pCount)) + + return pCount.value + + def AddBeamSet(self): + BeamSetHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_addbeamset(self._handle, BeamSetHandle)) + if BeamSetHandle: + BeamSetObject = self._wrapper._polymorphicFactory(BeamSetHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return ModelObject + return BeamSetObject - def Release(self, InstanceObject): - InstanceHandle = None - if InstanceObject: - InstanceHandle = InstanceObject._handle + def GetBeamSet(self, Index): + nIndex = ctypes.c_uint32(Index) + BeamSetHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getbeamset(self._handle, nIndex, BeamSetHandle)) + if BeamSetHandle: + BeamSetObject = self._wrapper._polymorphicFactory(BeamSetHandle) else: - raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') - self.checkError(None, self.lib.lib3mf_release(InstanceHandle)) + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return BeamSetObject - def Acquire(self, InstanceObject): - InstanceHandle = None - if InstanceObject: - InstanceHandle = InstanceObject._handle + + +''' Class Implementation for FunctionReference +''' +class FunctionReference(Base): + def __init__(self, handle, wrapper): + Base.__init__(self, handle, wrapper) + def GetFunctionResourceID(self): + pUniqueResourceID = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionreference_getfunctionresourceid(self._handle, pUniqueResourceID)) + + return pUniqueResourceID.value + + def SetFunctionResourceID(self, UniqueResourceID): + nUniqueResourceID = ctypes.c_uint32(UniqueResourceID) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionreference_setfunctionresourceid(self._handle, nUniqueResourceID)) + + + def GetTransform(self): + pTransform = Transform() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionreference_gettransform(self._handle, pTransform)) + + return pTransform + + def SetTransform(self, Transform): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionreference_settransform(self._handle, Transform)) + + + def GetChannelName(self): + nChannelNameBufferSize = ctypes.c_uint64(0) + nChannelNameNeededChars = ctypes.c_uint64(0) + pChannelNameBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionreference_getchannelname(self._handle, nChannelNameBufferSize, nChannelNameNeededChars, pChannelNameBuffer)) + nChannelNameBufferSize = ctypes.c_uint64(nChannelNameNeededChars.value) + pChannelNameBuffer = (ctypes.c_char * (nChannelNameNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionreference_getchannelname(self._handle, nChannelNameBufferSize, nChannelNameNeededChars, pChannelNameBuffer)) + + return pChannelNameBuffer.value.decode() + + def SetChannelName(self, ChannelName): + pChannelName = ctypes.c_char_p(str.encode(ChannelName)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionreference_setchannelname(self._handle, pChannelName)) + + + def SetMinFeatureSize(self, MinFeatureSize): + dMinFeatureSize = ctypes.c_double(MinFeatureSize) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionreference_setminfeaturesize(self._handle, dMinFeatureSize)) + + + def GetMinFeatureSize(self): + pMinFeatureSize = ctypes.c_double() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionreference_getminfeaturesize(self._handle, pMinFeatureSize)) + + return pMinFeatureSize.value + + def SetFallBackValue(self, FallBackValue): + dFallBackValue = ctypes.c_double(FallBackValue) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionreference_setfallbackvalue(self._handle, dFallBackValue)) + + + def GetFallBackValue(self): + pFallBackValue = ctypes.c_double() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionreference_getfallbackvalue(self._handle, pFallBackValue)) + + return pFallBackValue.value + + + +''' Class Implementation for VolumeDataColor +''' +class VolumeDataColor(FunctionReference): + def __init__(self, handle, wrapper): + FunctionReference.__init__(self, handle, wrapper) + + +''' Class Implementation for MaterialMapping +''' +class MaterialMapping(FunctionReference): + def __init__(self, handle, wrapper): + FunctionReference.__init__(self, handle, wrapper) + + +''' Class Implementation for VolumeDataComposite +''' +class VolumeDataComposite(Base): + def __init__(self, handle, wrapper): + Base.__init__(self, handle, wrapper) + def GetBaseMaterialGroup(self): + BaseMaterialGroupInstanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedatacomposite_getbasematerialgroup(self._handle, BaseMaterialGroupInstanceHandle)) + if BaseMaterialGroupInstanceHandle: + BaseMaterialGroupInstanceObject = self._wrapper._polymorphicFactory(BaseMaterialGroupInstanceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return BaseMaterialGroupInstanceObject + + def SetBaseMaterialGroup(self, BaseMaterialGroupInstanceObject): + BaseMaterialGroupInstanceHandle = None + if BaseMaterialGroupInstanceObject: + BaseMaterialGroupInstanceHandle = BaseMaterialGroupInstanceObject._handle else: raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') - self.checkError(None, self.lib.lib3mf_acquire(InstanceHandle)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedatacomposite_setbasematerialgroup(self._handle, BaseMaterialGroupInstanceHandle)) - def SetJournal(self, JournalPath): - pJournalPath = ctypes.c_char_p(str.encode(JournalPath)) - self.checkError(None, self.lib.lib3mf_setjournal(pJournalPath)) + def GetMaterialMappingCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedatacomposite_getmaterialmappingcount(self._handle, pCount)) + return pCount.value - def GetLastError(self, InstanceObject): - InstanceHandle = None - if InstanceObject: - InstanceHandle = InstanceObject._handle + def GetMaterialMapping(self, Index): + nIndex = ctypes.c_uint32(Index) + TheMaterialMappingHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedatacomposite_getmaterialmapping(self._handle, nIndex, TheMaterialMappingHandle)) + if TheMaterialMappingHandle: + TheMaterialMappingObject = self._wrapper._polymorphicFactory(TheMaterialMappingHandle) else: - raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') - nLastErrorStringBufferSize = ctypes.c_uint64(0) - nLastErrorStringNeededChars = ctypes.c_uint64(0) - pLastErrorStringBuffer = ctypes.c_char_p(None) - pHasLastError = ctypes.c_bool() - self.checkError(None, self.lib.lib3mf_getlasterror(InstanceHandle, nLastErrorStringBufferSize, nLastErrorStringNeededChars, pLastErrorStringBuffer, pHasLastError)) - nLastErrorStringBufferSize = ctypes.c_uint64(nLastErrorStringNeededChars.value) - pLastErrorStringBuffer = (ctypes.c_char * (nLastErrorStringNeededChars.value))() - self.checkError(None, self.lib.lib3mf_getlasterror(InstanceHandle, nLastErrorStringBufferSize, nLastErrorStringNeededChars, pLastErrorStringBuffer, pHasLastError)) + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return TheMaterialMappingObject + + def AddMaterialMapping(self, Transform): + TheMaterialMappingHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedatacomposite_addmaterialmapping(self._handle, Transform, TheMaterialMappingHandle)) + if TheMaterialMappingHandle: + TheMaterialMappingObject = self._wrapper._polymorphicFactory(TheMaterialMappingHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return TheMaterialMappingObject + + def RemoveMaterialMapping(self, Index): + nIndex = ctypes.c_uint32(Index) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedatacomposite_removematerialmapping(self._handle, nIndex)) + + + + +''' Class Implementation for VolumeDataProperty +''' +class VolumeDataProperty(FunctionReference): + def __init__(self, handle, wrapper): + FunctionReference.__init__(self, handle, wrapper) + def GetName(self): + nPropertyNameBufferSize = ctypes.c_uint64(0) + nPropertyNameNeededChars = ctypes.c_uint64(0) + pPropertyNameBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedataproperty_getname(self._handle, nPropertyNameBufferSize, nPropertyNameNeededChars, pPropertyNameBuffer)) + nPropertyNameBufferSize = ctypes.c_uint64(nPropertyNameNeededChars.value) + pPropertyNameBuffer = (ctypes.c_char * (nPropertyNameNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedataproperty_getname(self._handle, nPropertyNameBufferSize, nPropertyNameNeededChars, pPropertyNameBuffer)) + + return pPropertyNameBuffer.value.decode() + + def SetIsRequired(self, IsRequired): + bIsRequired = ctypes.c_bool(IsRequired) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedataproperty_setisrequired(self._handle, bIsRequired)) + + + def IsRequired(self): + pIsRequired = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedataproperty_isrequired(self._handle, pIsRequired)) + + return pIsRequired.value + + + +''' Class Implementation for VolumeData +''' +class VolumeData(Resource): + def __init__(self, handle, wrapper): + Resource.__init__(self, handle, wrapper) + def GetComposite(self): + TheCompositeDataHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedata_getcomposite(self._handle, TheCompositeDataHandle)) + if TheCompositeDataHandle: + TheCompositeDataObject = self._wrapper._polymorphicFactory(TheCompositeDataHandle) + else: + TheCompositeDataObject = None + + return TheCompositeDataObject + + def CreateNewComposite(self): + TheCompositeDataHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedata_createnewcomposite(self._handle, TheCompositeDataHandle)) + if TheCompositeDataHandle: + TheCompositeDataObject = self._wrapper._polymorphicFactory(TheCompositeDataHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return TheCompositeDataObject + + def RemoveComposite(self): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedata_removecomposite(self._handle)) + + + def GetColor(self): + TheColorDataHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedata_getcolor(self._handle, TheColorDataHandle)) + if TheColorDataHandle: + TheColorDataObject = self._wrapper._polymorphicFactory(TheColorDataHandle) + else: + TheColorDataObject = None + + return TheColorDataObject + + def CreateNewColor(self, TheFunctionObject): + TheFunctionHandle = None + if TheFunctionObject: + TheFunctionHandle = TheFunctionObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + TheColorDataHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedata_createnewcolor(self._handle, TheFunctionHandle, TheColorDataHandle)) + if TheColorDataHandle: + TheColorDataObject = self._wrapper._polymorphicFactory(TheColorDataHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pLastErrorStringBuffer.value.decode(), pHasLastError.value + return TheColorDataObject - def GetSymbolLookupMethod(self): - pSymbolLookupMethod = ctypes.c_void_p() - self.checkError(None, self.lib.lib3mf_getsymbollookupmethod(pSymbolLookupMethod)) + def RemoveColor(self): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedata_removecolor(self._handle)) - return pSymbolLookupMethod.value - def RetrieveProgressMessage(self, TheProgressIdentifier): - nProgressMessageBufferSize = ctypes.c_uint64(0) - nProgressMessageNeededChars = ctypes.c_uint64(0) - pProgressMessageBuffer = ctypes.c_char_p(None) - self.checkError(None, self.lib.lib3mf_retrieveprogressmessage(TheProgressIdentifier, nProgressMessageBufferSize, nProgressMessageNeededChars, pProgressMessageBuffer)) - nProgressMessageBufferSize = ctypes.c_uint64(nProgressMessageNeededChars.value) - pProgressMessageBuffer = (ctypes.c_char * (nProgressMessageNeededChars.value))() - self.checkError(None, self.lib.lib3mf_retrieveprogressmessage(TheProgressIdentifier, nProgressMessageBufferSize, nProgressMessageNeededChars, pProgressMessageBuffer)) + def GetPropertyCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedata_getpropertycount(self._handle, pCount)) - return pProgressMessageBuffer.value.decode() + return pCount.value - def RGBAToColor(self, Red, Green, Blue, Alpha): - nRed = ctypes.c_uint8(Red) - nGreen = ctypes.c_uint8(Green) - nBlue = ctypes.c_uint8(Blue) - nAlpha = ctypes.c_uint8(Alpha) - pTheColor = Color() - self.checkError(None, self.lib.lib3mf_rgbatocolor(nRed, nGreen, nBlue, nAlpha, pTheColor)) + def GetProperty(self, Index): + nIndex = ctypes.c_uint32(Index) + TheVolumeDataPropertyHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedata_getproperty(self._handle, nIndex, TheVolumeDataPropertyHandle)) + if TheVolumeDataPropertyHandle: + TheVolumeDataPropertyObject = self._wrapper._polymorphicFactory(TheVolumeDataPropertyHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pTheColor + return TheVolumeDataPropertyObject - def FloatRGBAToColor(self, Red, Green, Blue, Alpha): - fRed = ctypes.c_float(Red) - fGreen = ctypes.c_float(Green) - fBlue = ctypes.c_float(Blue) - fAlpha = ctypes.c_float(Alpha) - pTheColor = Color() - self.checkError(None, self.lib.lib3mf_floatrgbatocolor(fRed, fGreen, fBlue, fAlpha, pTheColor)) + def AddPropertyFromFunction(self, Name, TheFunctionObject): + pName = ctypes.c_char_p(str.encode(Name)) + TheFunctionHandle = None + if TheFunctionObject: + TheFunctionHandle = TheFunctionObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + TheVolumeDataPropertyHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedata_addpropertyfromfunction(self._handle, pName, TheFunctionHandle, TheVolumeDataPropertyHandle)) + if TheVolumeDataPropertyHandle: + TheVolumeDataPropertyObject = self._wrapper._polymorphicFactory(TheVolumeDataPropertyHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pTheColor + return TheVolumeDataPropertyObject - def ColorToRGBA(self, TheColor): - pRed = ctypes.c_uint8() - pGreen = ctypes.c_uint8() - pBlue = ctypes.c_uint8() - pAlpha = ctypes.c_uint8() - self.checkError(None, self.lib.lib3mf_colortorgba(TheColor, pRed, pGreen, pBlue, pAlpha)) + def RemoveProperty(self, Index): + nIndex = ctypes.c_uint32(Index) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_volumedata_removeproperty(self._handle, nIndex)) - return pRed.value, pGreen.value, pBlue.value, pAlpha.value - def ColorToFloatRGBA(self, TheColor): - pRed = ctypes.c_float() - pGreen = ctypes.c_float() - pBlue = ctypes.c_float() - pAlpha = ctypes.c_float() - self.checkError(None, self.lib.lib3mf_colortofloatrgba(TheColor, pRed, pGreen, pBlue, pAlpha)) + + +''' Class Implementation for Component +''' +class Component(Base): + def __init__(self, handle, wrapper): + Base.__init__(self, handle, wrapper) + def GetObjectResource(self): + ObjectResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_getobjectresource(self._handle, ObjectResourceHandle)) + if ObjectResourceHandle: + ObjectResourceObject = self._wrapper._polymorphicFactory(ObjectResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pRed.value, pGreen.value, pBlue.value, pAlpha.value + return ObjectResourceObject - def GetIdentityTransform(self): - pTransform = Transform() - self.checkError(None, self.lib.lib3mf_getidentitytransform(pTransform)) + def GetObjectResourceID(self): + pUniqueResourceID = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_getobjectresourceid(self._handle, pUniqueResourceID)) - return pTransform + return pUniqueResourceID.value - def GetUniformScaleTransform(self, Factor): - fFactor = ctypes.c_float(Factor) - pTransform = Transform() - self.checkError(None, self.lib.lib3mf_getuniformscaletransform(fFactor, pTransform)) + def GetUUID(self): + pHasUUID = ctypes.c_bool() + nUUIDBufferSize = ctypes.c_uint64(0) + nUUIDNeededChars = ctypes.c_uint64(0) + pUUIDBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_getuuid(self._handle, pHasUUID, nUUIDBufferSize, nUUIDNeededChars, pUUIDBuffer)) + nUUIDBufferSize = ctypes.c_uint64(nUUIDNeededChars.value) + pUUIDBuffer = (ctypes.c_char * (nUUIDNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_getuuid(self._handle, pHasUUID, nUUIDBufferSize, nUUIDNeededChars, pUUIDBuffer)) - return pTransform + return pHasUUID.value, pUUIDBuffer.value.decode() - def GetScaleTransform(self, FactorX, FactorY, FactorZ): - fFactorX = ctypes.c_float(FactorX) - fFactorY = ctypes.c_float(FactorY) - fFactorZ = ctypes.c_float(FactorZ) - pTransform = Transform() - self.checkError(None, self.lib.lib3mf_getscaletransform(fFactorX, fFactorY, fFactorZ, pTransform)) + def SetUUID(self, UUID): + pUUID = ctypes.c_char_p(str.encode(UUID)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_setuuid(self._handle, pUUID)) - return pTransform - def GetTranslationTransform(self, VectorX, VectorY, VectorZ): - fVectorX = ctypes.c_float(VectorX) - fVectorY = ctypes.c_float(VectorY) - fVectorZ = ctypes.c_float(VectorZ) + def HasTransform(self): + pHasTransform = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_hastransform(self._handle, pHasTransform)) + + return pHasTransform.value + + def GetTransform(self): pTransform = Transform() - self.checkError(None, self.lib.lib3mf_gettranslationtransform(fVectorX, fVectorY, fVectorZ, pTransform)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_gettransform(self._handle, pTransform)) return pTransform - '''IMPORTANT: PolymorphicFactory method should not be used by application directly. - It's designed to be used on Lib3MFHandle object only once. - If it's used on any existing object as a form of dynamic cast then - Wrapper.AcquireInstance(object) must be called after instantiating new object. - This is important to keep reference count matching between application and library sides. - ''' - def _polymorphicFactory(self, handle): - class PolymorphicFactory(): - def getObjectById(self, classtypeid, handle, wrapper): - methodName = 'getObjectById_' + format(classtypeid.value, '016X') - method = getattr(self, methodName, lambda: 'Invalid class type id') - return method(handle, wrapper) - def getObjectById_856632D0BAF1D8B7(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Base" - return Base(handle, wrapper) - def getObjectById_E76F642F363FD7E9(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Writer" - return Writer(handle, wrapper) - def getObjectById_2D86831DA59FBE72(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Reader" - return Reader(handle, wrapper) - def getObjectById_0E55A826D377483E(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::PackagePart" - return PackagePart(handle, wrapper) - def getObjectById_DFE3889D1B269CBB(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Resource" - return Resource(handle, wrapper) - def getObjectById_460F3515E2621DBE(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ResourceIterator" - return ResourceIterator(handle, wrapper) - def getObjectById_69684DB99FA813F6(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::SliceStackIterator" - return SliceStackIterator(handle, wrapper) - def getObjectById_DE92510BD2112288(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ObjectIterator" - return ObjectIterator(handle, wrapper) - def getObjectById_F4196034E2B9FDE6(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MeshObjectIterator" - return MeshObjectIterator(handle, wrapper) - def getObjectById_564DE4217ED7614A(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObjectIterator" - return ComponentsObjectIterator(handle, wrapper) - def getObjectById_4BD32B4870FFC03B(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Texture2DIterator" - return Texture2DIterator(handle, wrapper) - def getObjectById_65E6EDD9362C79CB(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroupIterator" - return BaseMaterialGroupIterator(handle, wrapper) - def getObjectById_10274A1757C729C0(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ColorGroupIterator" - return ColorGroupIterator(handle, wrapper) - def getObjectById_30D55F4DB88FE0CA(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroupIterator" - return Texture2DGroupIterator(handle, wrapper) - def getObjectById_A99CC6C3F70FB6F9(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterialsIterator" - return CompositeMaterialsIterator(handle, wrapper) - def getObjectById_C2BDF5D8CBBDB1F0(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroupIterator" - return MultiPropertyGroupIterator(handle, wrapper) - def getObjectById_D17716D063DE2C22(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MetaData" - return MetaData(handle, wrapper) - def getObjectById_0C3B85369E9B25D3(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MetaDataGroup" - return MetaDataGroup(handle, wrapper) - def getObjectById_2DA2136F577A779C(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Object" - return Object(handle, wrapper) - def getObjectById_3B3A6DC6EC610497(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MeshObject" - return MeshObject(handle, wrapper) - def getObjectById_63B3B461B30B4BA5(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::BeamLattice" - return BeamLattice(handle, wrapper) - def getObjectById_4ECDB6A6F69F2BEB(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Component" - return Component(handle, wrapper) - def getObjectById_6522CF04EB283FED(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObject" - return ComponentsObject(handle, wrapper) - def getObjectById_30CCDBE90E00B55B(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::BeamSet" - return BeamSet(handle, wrapper) - def getObjectById_B27D4656E16609FA(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::BaseMaterialGroup" - return BaseMaterialGroup(handle, wrapper) - def getObjectById_D085FB2E49CDB5B1(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ColorGroup" - return ColorGroup(handle, wrapper) - def getObjectById_BC1208397E37055D(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Texture2DGroup" - return Texture2DGroup(handle, wrapper) - def getObjectById_CE16224D688B86F2(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterials" - return CompositeMaterials(handle, wrapper) - def getObjectById_B989E02E43158FE6(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroup" - return MultiPropertyGroup(handle, wrapper) - def getObjectById_8CE7A1191A63A35D(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Attachment" - return Attachment(handle, wrapper) - def getObjectById_E0441CF976B36319(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Texture2D" - return Texture2D(handle, wrapper) - def getObjectById_68FB2D5FFC4BA12A(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::BuildItem" - return BuildItem(handle, wrapper) - def getObjectById_A7D21BD364910860(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::BuildItemIterator" - return BuildItemIterator(handle, wrapper) - def getObjectById_2198BCF4D8DF9C40(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Slice" - return Slice(handle, wrapper) - def getObjectById_6594B031B6096238(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::SliceStack" - return SliceStack(handle, wrapper) - def getObjectById_D9E46D5E6D8118EE(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Consumer" - return Consumer(handle, wrapper) - def getObjectById_385C42FC5609498A(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::AccessRight" - return AccessRight(handle, wrapper) - def getObjectById_7FB36B91D4CE4671(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ContentEncryptionParams" - return ContentEncryptionParams(handle, wrapper) - def getObjectById_1A47A5E258E22EF9(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ResourceData" - return ResourceData(handle, wrapper) - def getObjectById_D59067227E428AA4(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::ResourceDataGroup" - return ResourceDataGroup(handle, wrapper) - def getObjectById_1CC9E0CC082253C6(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::KeyStore" - return KeyStore(handle, wrapper) - def getObjectById_5A8164ECEDB03F09(self, handle, wrapper): # First 64 bits of SHA1 of a string: "Lib3MF::Model" - return Model(handle, wrapper) + def SetTransform(self, Transform): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_settransform(self._handle, Transform)) - if not handle: - return None - pClassTypeId = ctypes.c_uint64() - self.checkError(None, self.lib.lib3mf_base_classtypeid(handle, pClassTypeId)) - factory = PolymorphicFactory() - return factory.getObjectById(pClassTypeId, handle, self) -''' Class Implementation for Base +''' Class Implementation for ComponentsObject ''' -class Base: +class ComponentsObject(Object): def __init__(self, handle, wrapper): - if not handle or not wrapper: - raise ELib3MFException(ErrorCodes.INVALIDPARAM) - self._handle = handle - self._wrapper = wrapper + Object.__init__(self, handle, wrapper) + def AddComponent(self, ObjectResourceObject, Transform): + ObjectResourceHandle = None + if ObjectResourceObject: + ObjectResourceHandle = ObjectResourceObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + ComponentInstanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_componentsobject_addcomponent(self._handle, ObjectResourceHandle, Transform, ComponentInstanceHandle)) + if ComponentInstanceHandle: + ComponentInstanceObject = self._wrapper._polymorphicFactory(ComponentInstanceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ComponentInstanceObject + + def GetComponent(self, Index): + nIndex = ctypes.c_uint32(Index) + ComponentInstanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_componentsobject_getcomponent(self._handle, nIndex, ComponentInstanceHandle)) + if ComponentInstanceHandle: + ComponentInstanceObject = self._wrapper._polymorphicFactory(ComponentInstanceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ComponentInstanceObject - def __del__(self): - self._wrapper.Release(self) - def ClassTypeId(self): - pClassTypeId = ctypes.c_uint64() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_base_classtypeid(self._handle, pClassTypeId)) + def GetComponentCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_componentsobject_getcomponentcount(self._handle, pCount)) - return pClassTypeId.value + return pCount.value -''' Class Implementation for Writer +''' Class Implementation for BeamSet ''' -class Writer(Base): +class BeamSet(Base): def __init__(self, handle, wrapper): Base.__init__(self, handle, wrapper) - def WriteToFile(self, Filename): - pFilename = ctypes.c_char_p(str.encode(Filename)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_writetofile(self._handle, pFilename)) + def SetName(self, Name): + pName = ctypes.c_char_p(str.encode(Name)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_setname(self._handle, pName)) - def GetStreamSize(self): - pStreamSize = ctypes.c_uint64() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_getstreamsize(self._handle, pStreamSize)) + def GetName(self): + nNameBufferSize = ctypes.c_uint64(0) + nNameNeededChars = ctypes.c_uint64(0) + pNameBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) + nNameBufferSize = ctypes.c_uint64(nNameNeededChars.value) + pNameBuffer = (ctypes.c_char * (nNameNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) - return pStreamSize.value + return pNameBuffer.value.decode() - def WriteToBuffer(self): - nBufferCount = ctypes.c_uint64(0) - nBufferNeededCount = ctypes.c_uint64(0) - pBufferBuffer = (ctypes.c_uint8*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_writetobuffer(self._handle, nBufferCount, nBufferNeededCount, pBufferBuffer)) - nBufferCount = ctypes.c_uint64(nBufferNeededCount.value) - pBufferBuffer = (ctypes.c_uint8 * nBufferNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_writetobuffer(self._handle, nBufferCount, nBufferNeededCount, pBufferBuffer)) + def SetIdentifier(self, Identifier): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_setidentifier(self._handle, pIdentifier)) - return [pBufferBuffer[i] for i in range(nBufferNeededCount.value)] - def WriteToCallback(self, TheWriteCallbackFunc, TheSeekCallbackFunc, UserData): - pUserData = ctypes.c_void_p(UserData) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_writetocallback(self._handle, TheWriteCallbackFunc, TheSeekCallbackFunc, pUserData)) + def GetIdentifier(self): + nIdentifierBufferSize = ctypes.c_uint64(0) + nIdentifierNeededChars = ctypes.c_uint64(0) + pIdentifierBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getidentifier(self._handle, nIdentifierBufferSize, nIdentifierNeededChars, pIdentifierBuffer)) + nIdentifierBufferSize = ctypes.c_uint64(nIdentifierNeededChars.value) + pIdentifierBuffer = (ctypes.c_char * (nIdentifierNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getidentifier(self._handle, nIdentifierBufferSize, nIdentifierNeededChars, pIdentifierBuffer)) + return pIdentifierBuffer.value.decode() - def SetProgressCallback(self, ProgressCallbackFunc, UserData): - pUserData = ctypes.c_void_p(UserData) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_setprogresscallback(self._handle, ProgressCallbackFunc, pUserData)) + def GetReferenceCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getreferencecount(self._handle, pCount)) + return pCount.value - def GetDecimalPrecision(self): - pDecimalPrecision = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_getdecimalprecision(self._handle, pDecimalPrecision)) + def SetReferences(self, References): + nReferencesCount = ctypes.c_uint64(len(References)) + pReferencesBuffer = (ctypes.c_uint32*len(References))(*References) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_setreferences(self._handle, nReferencesCount, pReferencesBuffer)) - return pDecimalPrecision.value - def SetDecimalPrecision(self, DecimalPrecision): - nDecimalPrecision = ctypes.c_uint32(DecimalPrecision) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_setdecimalprecision(self._handle, nDecimalPrecision)) + def GetReferences(self): + nReferencesCount = ctypes.c_uint64(0) + nReferencesNeededCount = ctypes.c_uint64(0) + pReferencesBuffer = (ctypes.c_uint32*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getreferences(self._handle, nReferencesCount, nReferencesNeededCount, pReferencesBuffer)) + nReferencesCount = ctypes.c_uint64(nReferencesNeededCount.value) + pReferencesBuffer = (ctypes.c_uint32 * nReferencesNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getreferences(self._handle, nReferencesCount, nReferencesNeededCount, pReferencesBuffer)) + return [pReferencesBuffer[i] for i in range(nReferencesNeededCount.value)] - def SetStrictModeActive(self, StrictModeActive): - bStrictModeActive = ctypes.c_bool(StrictModeActive) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_setstrictmodeactive(self._handle, bStrictModeActive)) + def GetBallReferenceCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getballreferencecount(self._handle, pCount)) + return pCount.value - def GetStrictModeActive(self): - pStrictModeActive = ctypes.c_bool() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_getstrictmodeactive(self._handle, pStrictModeActive)) + def SetBallReferences(self, BallReferences): + nBallReferencesCount = ctypes.c_uint64(len(BallReferences)) + pBallReferencesBuffer = (ctypes.c_uint32*len(BallReferences))(*BallReferences) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_setballreferences(self._handle, nBallReferencesCount, pBallReferencesBuffer)) - return pStrictModeActive.value - def GetWarning(self, Index): - nIndex = ctypes.c_uint32(Index) - pErrorCode = ctypes.c_uint32() - nWarningBufferSize = ctypes.c_uint64(0) - nWarningNeededChars = ctypes.c_uint64(0) - pWarningBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_getwarning(self._handle, nIndex, pErrorCode, nWarningBufferSize, nWarningNeededChars, pWarningBuffer)) - nWarningBufferSize = ctypes.c_uint64(nWarningNeededChars.value) - pWarningBuffer = (ctypes.c_char * (nWarningNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_getwarning(self._handle, nIndex, pErrorCode, nWarningBufferSize, nWarningNeededChars, pWarningBuffer)) + def GetBallReferences(self): + nBallReferencesCount = ctypes.c_uint64(0) + nBallReferencesNeededCount = ctypes.c_uint64(0) + pBallReferencesBuffer = (ctypes.c_uint32*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getballreferences(self._handle, nBallReferencesCount, nBallReferencesNeededCount, pBallReferencesBuffer)) + nBallReferencesCount = ctypes.c_uint64(nBallReferencesNeededCount.value) + pBallReferencesBuffer = (ctypes.c_uint32 * nBallReferencesNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getballreferences(self._handle, nBallReferencesCount, nBallReferencesNeededCount, pBallReferencesBuffer)) - return pErrorCode.value, pWarningBuffer.value.decode() + return [pBallReferencesBuffer[i] for i in range(nBallReferencesNeededCount.value)] - def GetWarningCount(self): + + +''' Class Implementation for BaseMaterialGroup +''' +class BaseMaterialGroup(Resource): + def __init__(self, handle, wrapper): + Resource.__init__(self, handle, wrapper) + def GetCount(self): pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_getwarningcount(self._handle, pCount)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_getcount(self._handle, pCount)) return pCount.value - def AddKeyWrappingCallback(self, ConsumerID, TheCallbackFunc, UserData): - pConsumerID = ctypes.c_char_p(str.encode(ConsumerID)) - pUserData = ctypes.c_void_p(UserData) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_addkeywrappingcallback(self._handle, pConsumerID, TheCallbackFunc, pUserData)) + def GetAllPropertyIDs(self): + nPropertyIDsCount = ctypes.c_uint64(0) + nPropertyIDsNeededCount = ctypes.c_uint64(0) + pPropertyIDsBuffer = (ctypes.c_uint32*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + nPropertyIDsCount = ctypes.c_uint64(nPropertyIDsNeededCount.value) + pPropertyIDsBuffer = (ctypes.c_uint32 * nPropertyIDsNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + return [pPropertyIDsBuffer[i] for i in range(nPropertyIDsNeededCount.value)] - def SetContentEncryptionCallback(self, TheCallbackFunc, UserData): - pUserData = ctypes.c_void_p(UserData) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_writer_setcontentencryptioncallback(self._handle, TheCallbackFunc, pUserData)) + def AddMaterial(self, Name, DisplayColor): + pName = ctypes.c_char_p(str.encode(Name)) + pPropertyID = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_addmaterial(self._handle, pName, DisplayColor, pPropertyID)) + return pPropertyID.value - - -''' Class Implementation for Reader -''' -class Reader(Base): - def __init__(self, handle, wrapper): - Base.__init__(self, handle, wrapper) - def ReadFromFile(self, Filename): - pFilename = ctypes.c_char_p(str.encode(Filename)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_readfromfile(self._handle, pFilename)) + def RemoveMaterial(self, PropertyID): + nPropertyID = ctypes.c_uint32(PropertyID) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_removematerial(self._handle, nPropertyID)) - def ReadFromBuffer(self, Buffer): - nBufferCount = ctypes.c_uint64(len(Buffer)) - pBufferBuffer = (ctypes.c_uint8*len(Buffer))(*Buffer) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_readfrombuffer(self._handle, nBufferCount, pBufferBuffer)) + def GetName(self, PropertyID): + nPropertyID = ctypes.c_uint32(PropertyID) + nNameBufferSize = ctypes.c_uint64(0) + nNameNeededChars = ctypes.c_uint64(0) + pNameBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_getname(self._handle, nPropertyID, nNameBufferSize, nNameNeededChars, pNameBuffer)) + nNameBufferSize = ctypes.c_uint64(nNameNeededChars.value) + pNameBuffer = (ctypes.c_char * (nNameNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_getname(self._handle, nPropertyID, nNameBufferSize, nNameNeededChars, pNameBuffer)) + return pNameBuffer.value.decode() - def ReadFromCallback(self, TheReadCallbackFunc, StreamSize, TheSeekCallbackFunc, UserData): - nStreamSize = ctypes.c_uint64(StreamSize) - pUserData = ctypes.c_void_p(UserData) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_readfromcallback(self._handle, TheReadCallbackFunc, nStreamSize, TheSeekCallbackFunc, pUserData)) + def SetName(self, PropertyID, Name): + nPropertyID = ctypes.c_uint32(PropertyID) + pName = ctypes.c_char_p(str.encode(Name)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_setname(self._handle, nPropertyID, pName)) - def SetProgressCallback(self, ProgressCallbackFunc, UserData): - pUserData = ctypes.c_void_p(UserData) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_setprogresscallback(self._handle, ProgressCallbackFunc, pUserData)) + def SetDisplayColor(self, PropertyID, TheColor): + nPropertyID = ctypes.c_uint32(PropertyID) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_setdisplaycolor(self._handle, nPropertyID, TheColor)) - def AddRelationToRead(self, RelationShipType): - pRelationShipType = ctypes.c_char_p(str.encode(RelationShipType)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_addrelationtoread(self._handle, pRelationShipType)) + def GetDisplayColor(self, PropertyID): + nPropertyID = ctypes.c_uint32(PropertyID) + pTheColor = Color() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_getdisplaycolor(self._handle, nPropertyID, pTheColor)) + return pTheColor - def RemoveRelationToRead(self, RelationShipType): - pRelationShipType = ctypes.c_char_p(str.encode(RelationShipType)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_removerelationtoread(self._handle, pRelationShipType)) + + +''' Class Implementation for ColorGroup +''' +class ColorGroup(Resource): + def __init__(self, handle, wrapper): + Resource.__init__(self, handle, wrapper) + def GetCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_getcount(self._handle, pCount)) + return pCount.value - def SetStrictModeActive(self, StrictModeActive): - bStrictModeActive = ctypes.c_bool(StrictModeActive) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_setstrictmodeactive(self._handle, bStrictModeActive)) + def GetAllPropertyIDs(self): + nPropertyIDsCount = ctypes.c_uint64(0) + nPropertyIDsNeededCount = ctypes.c_uint64(0) + pPropertyIDsBuffer = (ctypes.c_uint32*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + nPropertyIDsCount = ctypes.c_uint64(nPropertyIDsNeededCount.value) + pPropertyIDsBuffer = (ctypes.c_uint32 * nPropertyIDsNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + return [pPropertyIDsBuffer[i] for i in range(nPropertyIDsNeededCount.value)] - def GetStrictModeActive(self): - pStrictModeActive = ctypes.c_bool() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_getstrictmodeactive(self._handle, pStrictModeActive)) + def AddColor(self, TheColor): + pPropertyID = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_addcolor(self._handle, TheColor, pPropertyID)) - return pStrictModeActive.value + return pPropertyID.value - def GetWarning(self, Index): - nIndex = ctypes.c_uint32(Index) - pErrorCode = ctypes.c_uint32() - nWarningBufferSize = ctypes.c_uint64(0) - nWarningNeededChars = ctypes.c_uint64(0) - pWarningBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_getwarning(self._handle, nIndex, pErrorCode, nWarningBufferSize, nWarningNeededChars, pWarningBuffer)) - nWarningBufferSize = ctypes.c_uint64(nWarningNeededChars.value) - pWarningBuffer = (ctypes.c_char * (nWarningNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_getwarning(self._handle, nIndex, pErrorCode, nWarningBufferSize, nWarningNeededChars, pWarningBuffer)) + def RemoveColor(self, PropertyID): + nPropertyID = ctypes.c_uint32(PropertyID) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_removecolor(self._handle, nPropertyID)) + + + def SetColor(self, PropertyID, TheColor): + nPropertyID = ctypes.c_uint32(PropertyID) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_setcolor(self._handle, nPropertyID, TheColor)) + + + def GetColor(self, PropertyID): + nPropertyID = ctypes.c_uint32(PropertyID) + pTheColor = Color() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_getcolor(self._handle, nPropertyID, pTheColor)) - return pErrorCode.value, pWarningBuffer.value.decode() + return pTheColor - def GetWarningCount(self): + + +''' Class Implementation for Texture2DGroup +''' +class Texture2DGroup(Resource): + def __init__(self, handle, wrapper): + Resource.__init__(self, handle, wrapper) + def GetCount(self): pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_getwarningcount(self._handle, pCount)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_getcount(self._handle, pCount)) return pCount.value - def AddKeyWrappingCallback(self, ConsumerID, TheCallbackFunc, UserData): - pConsumerID = ctypes.c_char_p(str.encode(ConsumerID)) - pUserData = ctypes.c_void_p(UserData) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_addkeywrappingcallback(self._handle, pConsumerID, TheCallbackFunc, pUserData)) + def GetAllPropertyIDs(self): + nPropertyIDsCount = ctypes.c_uint64(0) + nPropertyIDsNeededCount = ctypes.c_uint64(0) + pPropertyIDsBuffer = (ctypes.c_uint32*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + nPropertyIDsCount = ctypes.c_uint64(nPropertyIDsNeededCount.value) + pPropertyIDsBuffer = (ctypes.c_uint32 * nPropertyIDsNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + return [pPropertyIDsBuffer[i] for i in range(nPropertyIDsNeededCount.value)] - def SetContentEncryptionCallback(self, TheCallbackFunc, UserData): - pUserData = ctypes.c_void_p(UserData) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_reader_setcontentencryptioncallback(self._handle, TheCallbackFunc, pUserData)) + def AddTex2Coord(self, UVCoordinate): + pPropertyID = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_addtex2coord(self._handle, UVCoordinate, pPropertyID)) + return pPropertyID.value - - -''' Class Implementation for PackagePart -''' -class PackagePart(Base): - def __init__(self, handle, wrapper): - Base.__init__(self, handle, wrapper) - def GetPath(self): - nPathBufferSize = ctypes.c_uint64(0) - nPathNeededChars = ctypes.c_uint64(0) - pPathBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_packagepart_getpath(self._handle, nPathBufferSize, nPathNeededChars, pPathBuffer)) - nPathBufferSize = ctypes.c_uint64(nPathNeededChars.value) - pPathBuffer = (ctypes.c_char * (nPathNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_packagepart_getpath(self._handle, nPathBufferSize, nPathNeededChars, pPathBuffer)) + def GetTex2Coord(self, PropertyID): + nPropertyID = ctypes.c_uint32(PropertyID) + pUVCoordinate = Tex2Coord() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_gettex2coord(self._handle, nPropertyID, pUVCoordinate)) - return pPathBuffer.value.decode() + return pUVCoordinate - def SetPath(self, Path): - pPath = ctypes.c_char_p(str.encode(Path)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_packagepart_setpath(self._handle, pPath)) + def RemoveTex2Coord(self, PropertyID): + nPropertyID = ctypes.c_uint32(PropertyID) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_removetex2coord(self._handle, nPropertyID)) + def GetTexture2D(self): + Texture2DInstanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_gettexture2d(self._handle, Texture2DInstanceHandle)) + if Texture2DInstanceHandle: + Texture2DInstanceObject = self._wrapper._polymorphicFactory(Texture2DInstanceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return Texture2DInstanceObject + -''' Class Implementation for Resource +''' Class Implementation for CompositeMaterials ''' -class Resource(Base): +class CompositeMaterials(Resource): def __init__(self, handle, wrapper): - Base.__init__(self, handle, wrapper) - def GetResourceID(self): - pUniqueResourceID = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resource_getresourceid(self._handle, pUniqueResourceID)) + Resource.__init__(self, handle, wrapper) + def GetCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_getcount(self._handle, pCount)) - return pUniqueResourceID.value + return pCount.value - def GetUniqueResourceID(self): - pUniqueResourceID = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resource_getuniqueresourceid(self._handle, pUniqueResourceID)) + def GetAllPropertyIDs(self): + nPropertyIDsCount = ctypes.c_uint64(0) + nPropertyIDsNeededCount = ctypes.c_uint64(0) + pPropertyIDsBuffer = (ctypes.c_uint32*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + nPropertyIDsCount = ctypes.c_uint64(nPropertyIDsNeededCount.value) + pPropertyIDsBuffer = (ctypes.c_uint32 * nPropertyIDsNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) - return pUniqueResourceID.value + return [pPropertyIDsBuffer[i] for i in range(nPropertyIDsNeededCount.value)] - def PackagePart(self): - PackagePartHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resource_packagepart(self._handle, PackagePartHandle)) - if PackagePartHandle: - PackagePartObject = self._wrapper._polymorphicFactory(PackagePartHandle) + def GetBaseMaterialGroup(self): + BaseMaterialGroupInstanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_getbasematerialgroup(self._handle, BaseMaterialGroupInstanceHandle)) + if BaseMaterialGroupInstanceHandle: + BaseMaterialGroupInstanceObject = self._wrapper._polymorphicFactory(BaseMaterialGroupInstanceHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return PackagePartObject + return BaseMaterialGroupInstanceObject - def SetPackagePart(self, PackagePartObject): - PackagePartHandle = None - if PackagePartObject: - PackagePartHandle = PackagePartObject._handle - else: - raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resource_setpackagepart(self._handle, PackagePartHandle)) + def AddComposite(self, Composite): + nCompositeCount = ctypes.c_uint64(len(Composite)) + pCompositeBuffer = (CompositeConstituent*len(Composite))(*Composite) + pPropertyID = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_addcomposite(self._handle, nCompositeCount, pCompositeBuffer, pPropertyID)) + return pPropertyID.value - def GetModelResourceID(self): - pModelResourceId = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resource_getmodelresourceid(self._handle, pModelResourceId)) + def RemoveComposite(self, PropertyID): + nPropertyID = ctypes.c_uint32(PropertyID) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_removecomposite(self._handle, nPropertyID)) - return pModelResourceId.value + + def GetComposite(self, PropertyID): + nPropertyID = ctypes.c_uint32(PropertyID) + nCompositeCount = ctypes.c_uint64(0) + nCompositeNeededCount = ctypes.c_uint64(0) + pCompositeBuffer = (CompositeConstituent*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_getcomposite(self._handle, nPropertyID, nCompositeCount, nCompositeNeededCount, pCompositeBuffer)) + nCompositeCount = ctypes.c_uint64(nCompositeNeededCount.value) + pCompositeBuffer = (CompositeConstituent * nCompositeNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_getcomposite(self._handle, nPropertyID, nCompositeCount, nCompositeNeededCount, pCompositeBuffer)) + + return [pCompositeBuffer[i] for i in range(nCompositeNeededCount.value)] -''' Class Implementation for ResourceIterator +''' Class Implementation for MultiPropertyGroup ''' -class ResourceIterator(Base): +class MultiPropertyGroup(Resource): def __init__(self, handle, wrapper): - Base.__init__(self, handle, wrapper) - def MoveNext(self): - pHasNext = ctypes.c_bool() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resourceiterator_movenext(self._handle, pHasNext)) + Resource.__init__(self, handle, wrapper) + def GetCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getcount(self._handle, pCount)) - return pHasNext.value + return pCount.value - def MovePrevious(self): - pHasPrevious = ctypes.c_bool() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resourceiterator_moveprevious(self._handle, pHasPrevious)) + def GetAllPropertyIDs(self): + nPropertyIDsCount = ctypes.c_uint64(0) + nPropertyIDsNeededCount = ctypes.c_uint64(0) + pPropertyIDsBuffer = (ctypes.c_uint32*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + nPropertyIDsCount = ctypes.c_uint64(nPropertyIDsNeededCount.value) + pPropertyIDsBuffer = (ctypes.c_uint32 * nPropertyIDsNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) - return pHasPrevious.value + return [pPropertyIDsBuffer[i] for i in range(nPropertyIDsNeededCount.value)] - def GetCurrent(self): - ResourceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resourceiterator_getcurrent(self._handle, ResourceHandle)) - if ResourceHandle: - ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) - else: - raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + def AddMultiProperty(self, PropertyIDs): + nPropertyIDsCount = ctypes.c_uint64(len(PropertyIDs)) + pPropertyIDsBuffer = (ctypes.c_uint32*len(PropertyIDs))(*PropertyIDs) + pPropertyID = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_addmultiproperty(self._handle, nPropertyIDsCount, pPropertyIDsBuffer, pPropertyID)) - return ResourceObject + return pPropertyID.value - def Clone(self): - OutResourceIteratorHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resourceiterator_clone(self._handle, OutResourceIteratorHandle)) - if OutResourceIteratorHandle: - OutResourceIteratorObject = self._wrapper._polymorphicFactory(OutResourceIteratorHandle) - else: - raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + def SetMultiProperty(self, PropertyID, PropertyIDs): + nPropertyID = ctypes.c_uint32(PropertyID) + nPropertyIDsCount = ctypes.c_uint64(len(PropertyIDs)) + pPropertyIDsBuffer = (ctypes.c_uint32*len(PropertyIDs))(*PropertyIDs) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_setmultiproperty(self._handle, nPropertyID, nPropertyIDsCount, pPropertyIDsBuffer)) - return OutResourceIteratorObject - def Count(self): - pCount = ctypes.c_uint64() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resourceiterator_count(self._handle, pCount)) + def GetMultiProperty(self, PropertyID): + nPropertyID = ctypes.c_uint32(PropertyID) + nPropertyIDsCount = ctypes.c_uint64(0) + nPropertyIDsNeededCount = ctypes.c_uint64(0) + pPropertyIDsBuffer = (ctypes.c_uint32*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getmultiproperty(self._handle, nPropertyID, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + nPropertyIDsCount = ctypes.c_uint64(nPropertyIDsNeededCount.value) + pPropertyIDsBuffer = (ctypes.c_uint32 * nPropertyIDsNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getmultiproperty(self._handle, nPropertyID, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + + return [pPropertyIDsBuffer[i] for i in range(nPropertyIDsNeededCount.value)] + + def RemoveMultiProperty(self, PropertyID): + nPropertyID = ctypes.c_uint32(PropertyID) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_removemultiproperty(self._handle, nPropertyID)) + + + def GetLayerCount(self): + pCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getlayercount(self._handle, pCount)) return pCount.value - - -''' Class Implementation for SliceStackIterator -''' -class SliceStackIterator(ResourceIterator): - def __init__(self, handle, wrapper): - ResourceIterator.__init__(self, handle, wrapper) - def GetCurrentSliceStack(self): - ResourceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_slicestackiterator_getcurrentslicestack(self._handle, ResourceHandle)) - if ResourceHandle: - ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) - else: - raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + def AddLayer(self, TheLayer): + pLayerIndex = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_addlayer(self._handle, TheLayer, pLayerIndex)) - return ResourceObject + return pLayerIndex.value - - -''' Class Implementation for ObjectIterator -''' -class ObjectIterator(ResourceIterator): - def __init__(self, handle, wrapper): - ResourceIterator.__init__(self, handle, wrapper) - def GetCurrentObject(self): - ResourceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_objectiterator_getcurrentobject(self._handle, ResourceHandle)) - if ResourceHandle: - ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) - else: - raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + def GetLayer(self, LayerIndex): + nLayerIndex = ctypes.c_uint32(LayerIndex) + pTheLayer = MultiPropertyLayer() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getlayer(self._handle, nLayerIndex, pTheLayer)) - return ResourceObject + return pTheLayer - - -''' Class Implementation for MeshObjectIterator -''' -class MeshObjectIterator(ResourceIterator): - def __init__(self, handle, wrapper): - ResourceIterator.__init__(self, handle, wrapper) - def GetCurrentMeshObject(self): - ResourceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobjectiterator_getcurrentmeshobject(self._handle, ResourceHandle)) - if ResourceHandle: - ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) - else: - raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + def RemoveLayer(self, LayerIndex): + nLayerIndex = ctypes.c_uint32(LayerIndex) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_removelayer(self._handle, nLayerIndex)) - return ResourceObject -''' Class Implementation for ComponentsObjectIterator +''' Class Implementation for Image3D ''' -class ComponentsObjectIterator(ResourceIterator): +class Image3D(Resource): def __init__(self, handle, wrapper): - ResourceIterator.__init__(self, handle, wrapper) - def GetCurrentComponentsObject(self): - ResourceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_componentsobjectiterator_getcurrentcomponentsobject(self._handle, ResourceHandle)) - if ResourceHandle: - ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) - else: - raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + Resource.__init__(self, handle, wrapper) + def GetName(self): + nNameBufferSize = ctypes.c_uint64(0) + nNameNeededChars = ctypes.c_uint64(0) + pNameBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_image3d_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) + nNameBufferSize = ctypes.c_uint64(nNameNeededChars.value) + pNameBuffer = (ctypes.c_char * (nNameNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_image3d_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) - return ResourceObject + return pNameBuffer.value.decode() + + def SetName(self, Name): + pName = ctypes.c_char_p(str.encode(Name)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_image3d_setname(self._handle, pName)) + + + def IsImageStack(self): + pIsImageStack = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_image3d_isimagestack(self._handle, pIsImageStack)) + + return pIsImageStack.value -''' Class Implementation for Texture2DIterator +''' Class Implementation for ImageStack ''' -class Texture2DIterator(ResourceIterator): +class ImageStack(Image3D): def __init__(self, handle, wrapper): - ResourceIterator.__init__(self, handle, wrapper) - def GetCurrentTexture2D(self): - ResourceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2diterator_getcurrenttexture2d(self._handle, ResourceHandle)) - if ResourceHandle: - ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + Image3D.__init__(self, handle, wrapper) + def GetRowCount(self): + pRowCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_imagestack_getrowcount(self._handle, pRowCount)) + + return pRowCount.value + + def SetRowCount(self, RowCount): + nRowCount = ctypes.c_uint32(RowCount) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_imagestack_setrowcount(self._handle, nRowCount)) + + + def GetColumnCount(self): + pColumnCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_imagestack_getcolumncount(self._handle, pColumnCount)) + + return pColumnCount.value + + def SetColumnCount(self, ColumnCount): + nColumnCount = ctypes.c_uint32(ColumnCount) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_imagestack_setcolumncount(self._handle, nColumnCount)) + + + def GetSheetCount(self): + pSheetCount = ctypes.c_uint32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_imagestack_getsheetcount(self._handle, pSheetCount)) + + return pSheetCount.value + + def GetSheet(self, Index): + nIndex = ctypes.c_uint32(Index) + SheetHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_imagestack_getsheet(self._handle, nIndex, SheetHandle)) + if SheetHandle: + SheetObject = self._wrapper._polymorphicFactory(SheetHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return ResourceObject + return SheetObject - - -''' Class Implementation for BaseMaterialGroupIterator -''' -class BaseMaterialGroupIterator(ResourceIterator): - def __init__(self, handle, wrapper): - ResourceIterator.__init__(self, handle, wrapper) - def GetCurrentBaseMaterialGroup(self): - ResourceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroupiterator_getcurrentbasematerialgroup(self._handle, ResourceHandle)) - if ResourceHandle: - ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + def SetSheet(self, Index, SheetObject): + nIndex = ctypes.c_uint32(Index) + SheetHandle = None + if SheetObject: + SheetHandle = SheetObject._handle else: - raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_imagestack_setsheet(self._handle, nIndex, SheetHandle)) - return ResourceObject - - -''' Class Implementation for ColorGroupIterator -''' -class ColorGroupIterator(ResourceIterator): - def __init__(self, handle, wrapper): - ResourceIterator.__init__(self, handle, wrapper) - def GetCurrentColorGroup(self): - ResourceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroupiterator_getcurrentcolorgroup(self._handle, ResourceHandle)) - if ResourceHandle: - ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + def CreateEmptySheet(self, Index, Path): + nIndex = ctypes.c_uint32(Index) + pPath = ctypes.c_char_p(str.encode(Path)) + SheetHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_imagestack_createemptysheet(self._handle, nIndex, pPath, SheetHandle)) + if SheetHandle: + SheetObject = self._wrapper._polymorphicFactory(SheetHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return ResourceObject + return SheetObject - - -''' Class Implementation for Texture2DGroupIterator -''' -class Texture2DGroupIterator(ResourceIterator): - def __init__(self, handle, wrapper): - ResourceIterator.__init__(self, handle, wrapper) - def GetCurrentTexture2DGroup(self): - ResourceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroupiterator_getcurrenttexture2dgroup(self._handle, ResourceHandle)) - if ResourceHandle: - ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + def CreateSheetFromBuffer(self, Index, Path, Data): + nIndex = ctypes.c_uint32(Index) + pPath = ctypes.c_char_p(str.encode(Path)) + nDataCount = ctypes.c_uint64(len(Data)) + pDataBuffer = (ctypes.c_uint8*len(Data))(*Data) + SheetHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_imagestack_createsheetfrombuffer(self._handle, nIndex, pPath, nDataCount, pDataBuffer, SheetHandle)) + if SheetHandle: + SheetObject = self._wrapper._polymorphicFactory(SheetHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return ResourceObject + return SheetObject - - -''' Class Implementation for CompositeMaterialsIterator -''' -class CompositeMaterialsIterator(ResourceIterator): - def __init__(self, handle, wrapper): - ResourceIterator.__init__(self, handle, wrapper) - def GetCurrentCompositeMaterials(self): - ResourceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerialsiterator_getcurrentcompositematerials(self._handle, ResourceHandle)) - if ResourceHandle: - ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + def CreateSheetFromFile(self, Index, Path, FileName): + nIndex = ctypes.c_uint32(Index) + pPath = ctypes.c_char_p(str.encode(Path)) + pFileName = ctypes.c_char_p(str.encode(FileName)) + SheetHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_imagestack_createsheetfromfile(self._handle, nIndex, pPath, pFileName, SheetHandle)) + if SheetHandle: + SheetObject = self._wrapper._polymorphicFactory(SheetHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return ResourceObject + return SheetObject -''' Class Implementation for MultiPropertyGroupIterator +''' Class Implementation for Attachment ''' -class MultiPropertyGroupIterator(ResourceIterator): +class Attachment(Base): def __init__(self, handle, wrapper): - ResourceIterator.__init__(self, handle, wrapper) - def GetCurrentMultiPropertyGroup(self): - ResourceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup(self._handle, ResourceHandle)) - if ResourceHandle: - ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + Base.__init__(self, handle, wrapper) + def GetPath(self): + nPathBufferSize = ctypes.c_uint64(0) + nPathNeededChars = ctypes.c_uint64(0) + pPathBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_getpath(self._handle, nPathBufferSize, nPathNeededChars, pPathBuffer)) + nPathBufferSize = ctypes.c_uint64(nPathNeededChars.value) + pPathBuffer = (ctypes.c_char * (nPathNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_getpath(self._handle, nPathBufferSize, nPathNeededChars, pPathBuffer)) + + return pPathBuffer.value.decode() + + def SetPath(self, Path): + pPath = ctypes.c_char_p(str.encode(Path)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_setpath(self._handle, pPath)) + + + def PackagePart(self): + PackagePartHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_packagepart(self._handle, PackagePartHandle)) + if PackagePartHandle: + PackagePartObject = self._wrapper._polymorphicFactory(PackagePartHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return ResourceObject + return PackagePartObject - - -''' Class Implementation for MetaData -''' -class MetaData(Base): - def __init__(self, handle, wrapper): - Base.__init__(self, handle, wrapper) - def GetNameSpace(self): - nNameSpaceBufferSize = ctypes.c_uint64(0) - nNameSpaceNeededChars = ctypes.c_uint64(0) - pNameSpaceBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getnamespace(self._handle, nNameSpaceBufferSize, nNameSpaceNeededChars, pNameSpaceBuffer)) - nNameSpaceBufferSize = ctypes.c_uint64(nNameSpaceNeededChars.value) - pNameSpaceBuffer = (ctypes.c_char * (nNameSpaceNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getnamespace(self._handle, nNameSpaceBufferSize, nNameSpaceNeededChars, pNameSpaceBuffer)) + def GetRelationShipType(self): + nPathBufferSize = ctypes.c_uint64(0) + nPathNeededChars = ctypes.c_uint64(0) + pPathBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_getrelationshiptype(self._handle, nPathBufferSize, nPathNeededChars, pPathBuffer)) + nPathBufferSize = ctypes.c_uint64(nPathNeededChars.value) + pPathBuffer = (ctypes.c_char * (nPathNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_getrelationshiptype(self._handle, nPathBufferSize, nPathNeededChars, pPathBuffer)) - return pNameSpaceBuffer.value.decode() + return pPathBuffer.value.decode() - def SetNameSpace(self, NameSpace): - pNameSpace = ctypes.c_char_p(str.encode(NameSpace)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_setnamespace(self._handle, pNameSpace)) + def SetRelationShipType(self, Path): + pPath = ctypes.c_char_p(str.encode(Path)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_setrelationshiptype(self._handle, pPath)) - def GetName(self): - nNameBufferSize = ctypes.c_uint64(0) - nNameNeededChars = ctypes.c_uint64(0) - pNameBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) - nNameBufferSize = ctypes.c_uint64(nNameNeededChars.value) - pNameBuffer = (ctypes.c_char * (nNameNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) + def WriteToFile(self, FileName): + pFileName = ctypes.c_char_p(str.encode(FileName)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_writetofile(self._handle, pFileName)) - return pNameBuffer.value.decode() - def SetName(self, Name): - pName = ctypes.c_char_p(str.encode(Name)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_setname(self._handle, pName)) + def ReadFromFile(self, FileName): + pFileName = ctypes.c_char_p(str.encode(FileName)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_readfromfile(self._handle, pFileName)) + + + def ReadFromCallback(self, TheReadCallbackFunc, StreamSize, TheSeekCallbackFunc, UserData): + nStreamSize = ctypes.c_uint64(StreamSize) + pUserData = ctypes.c_void_p(UserData) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_readfromcallback(self._handle, TheReadCallbackFunc, nStreamSize, TheSeekCallbackFunc, pUserData)) + + + def GetStreamSize(self): + pStreamSize = ctypes.c_uint64() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_getstreamsize(self._handle, pStreamSize)) + + return pStreamSize.value + + def WriteToBuffer(self): + nBufferCount = ctypes.c_uint64(0) + nBufferNeededCount = ctypes.c_uint64(0) + pBufferBuffer = (ctypes.c_uint8*0)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_writetobuffer(self._handle, nBufferCount, nBufferNeededCount, pBufferBuffer)) + nBufferCount = ctypes.c_uint64(nBufferNeededCount.value) + pBufferBuffer = (ctypes.c_uint8 * nBufferNeededCount.value)() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_writetobuffer(self._handle, nBufferCount, nBufferNeededCount, pBufferBuffer)) + + return [pBufferBuffer[i] for i in range(nBufferNeededCount.value)] + + def ReadFromBuffer(self, Buffer): + nBufferCount = ctypes.c_uint64(len(Buffer)) + pBufferBuffer = (ctypes.c_uint8*len(Buffer))(*Buffer) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_readfrombuffer(self._handle, nBufferCount, pBufferBuffer)) + + + + +''' Class Implementation for Texture2D +''' +class Texture2D(Resource): + def __init__(self, handle, wrapper): + Resource.__init__(self, handle, wrapper) + def GetAttachment(self): + AttachmentHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_getattachment(self._handle, AttachmentHandle)) + if AttachmentHandle: + AttachmentObject = self._wrapper._polymorphicFactory(AttachmentHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return AttachmentObject - def GetKey(self): - nKeyBufferSize = ctypes.c_uint64(0) - nKeyNeededChars = ctypes.c_uint64(0) - pKeyBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getkey(self._handle, nKeyBufferSize, nKeyNeededChars, pKeyBuffer)) - nKeyBufferSize = ctypes.c_uint64(nKeyNeededChars.value) - pKeyBuffer = (ctypes.c_char * (nKeyNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getkey(self._handle, nKeyBufferSize, nKeyNeededChars, pKeyBuffer)) + def SetAttachment(self, AttachmentObject): + AttachmentHandle = None + if AttachmentObject: + AttachmentHandle = AttachmentObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_setattachment(self._handle, AttachmentHandle)) - return pKeyBuffer.value.decode() - def GetMustPreserve(self): - pMustPreserve = ctypes.c_bool() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getmustpreserve(self._handle, pMustPreserve)) + def GetContentType(self): + pContentType = ctypes.c_int32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_getcontenttype(self._handle, pContentType)) - return pMustPreserve.value + return TextureType(pContentType.value) - def SetMustPreserve(self, MustPreserve): - bMustPreserve = ctypes.c_bool(MustPreserve) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_setmustpreserve(self._handle, bMustPreserve)) + def SetContentType(self, ContentType): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_setcontenttype(self._handle, ContentType)) - def GetType(self): - nTypeBufferSize = ctypes.c_uint64(0) - nTypeNeededChars = ctypes.c_uint64(0) - pTypeBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_gettype(self._handle, nTypeBufferSize, nTypeNeededChars, pTypeBuffer)) - nTypeBufferSize = ctypes.c_uint64(nTypeNeededChars.value) - pTypeBuffer = (ctypes.c_char * (nTypeNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_gettype(self._handle, nTypeBufferSize, nTypeNeededChars, pTypeBuffer)) + def GetTileStyleUV(self): + pTileStyleU = ctypes.c_int32() + pTileStyleV = ctypes.c_int32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_gettilestyleuv(self._handle, pTileStyleU, pTileStyleV)) - return pTypeBuffer.value.decode() + return TextureTileStyle(pTileStyleU.value), TextureTileStyle(pTileStyleV.value) - def SetType(self, Type): - pType = ctypes.c_char_p(str.encode(Type)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_settype(self._handle, pType)) + def SetTileStyleUV(self, TileStyleU, TileStyleV): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_settilestyleuv(self._handle, TileStyleU, TileStyleV)) - def GetValue(self): - nValueBufferSize = ctypes.c_uint64(0) - nValueNeededChars = ctypes.c_uint64(0) - pValueBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getvalue(self._handle, nValueBufferSize, nValueNeededChars, pValueBuffer)) - nValueBufferSize = ctypes.c_uint64(nValueNeededChars.value) - pValueBuffer = (ctypes.c_char * (nValueNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_getvalue(self._handle, nValueBufferSize, nValueNeededChars, pValueBuffer)) + def GetFilter(self): + pFilter = ctypes.c_int32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_getfilter(self._handle, pFilter)) - return pValueBuffer.value.decode() + return TextureFilter(pFilter.value) - def SetValue(self, Value): - pValue = ctypes.c_char_p(str.encode(Value)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadata_setvalue(self._handle, pValue)) + def SetFilter(self, Filter): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_setfilter(self._handle, Filter)) -''' Class Implementation for MetaDataGroup +''' Class Implementation for ImplicitPort ''' -class MetaDataGroup(Base): +class ImplicitPort(Base): def __init__(self, handle, wrapper): Base.__init__(self, handle, wrapper) - def GetMetaDataCount(self): - pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadatagroup_getmetadatacount(self._handle, pCount)) - - return pCount.value - - def GetMetaData(self, Index): - nIndex = ctypes.c_uint32(Index) - MetaDataHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadatagroup_getmetadata(self._handle, nIndex, MetaDataHandle)) - if MetaDataHandle: - MetaDataObject = self._wrapper._polymorphicFactory(MetaDataHandle) - else: - raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + def GetIdentifier(self): + nIdentifierBufferSize = ctypes.c_uint64(0) + nIdentifierNeededChars = ctypes.c_uint64(0) + pIdentifierBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitport_getidentifier(self._handle, nIdentifierBufferSize, nIdentifierNeededChars, pIdentifierBuffer)) + nIdentifierBufferSize = ctypes.c_uint64(nIdentifierNeededChars.value) + pIdentifierBuffer = (ctypes.c_char * (nIdentifierNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitport_getidentifier(self._handle, nIdentifierBufferSize, nIdentifierNeededChars, pIdentifierBuffer)) - return MetaDataObject + return pIdentifierBuffer.value.decode() - def GetMetaDataByKey(self, NameSpace, Name): - pNameSpace = ctypes.c_char_p(str.encode(NameSpace)) - pName = ctypes.c_char_p(str.encode(Name)) - MetaDataHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadatagroup_getmetadatabykey(self._handle, pNameSpace, pName, MetaDataHandle)) - if MetaDataHandle: - MetaDataObject = self._wrapper._polymorphicFactory(MetaDataHandle) - else: - raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + def SetIdentifier(self, Identifier): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitport_setidentifier(self._handle, pIdentifier)) - return MetaDataObject - def RemoveMetaDataByIndex(self, Index): - nIndex = ctypes.c_uint32(Index) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadatagroup_removemetadatabyindex(self._handle, nIndex)) + def GetDisplayName(self): + nDisplayNameBufferSize = ctypes.c_uint64(0) + nDisplayNameNeededChars = ctypes.c_uint64(0) + pDisplayNameBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitport_getdisplayname(self._handle, nDisplayNameBufferSize, nDisplayNameNeededChars, pDisplayNameBuffer)) + nDisplayNameBufferSize = ctypes.c_uint64(nDisplayNameNeededChars.value) + pDisplayNameBuffer = (ctypes.c_char * (nDisplayNameNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitport_getdisplayname(self._handle, nDisplayNameBufferSize, nDisplayNameNeededChars, pDisplayNameBuffer)) + return pDisplayNameBuffer.value.decode() - def RemoveMetaData(self, TheMetaDataObject): - TheMetaDataHandle = None - if TheMetaDataObject: - TheMetaDataHandle = TheMetaDataObject._handle - else: - raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadatagroup_removemetadata(self._handle, TheMetaDataHandle)) + def SetDisplayName(self, DisplayName): + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitport_setdisplayname(self._handle, pDisplayName)) - def AddMetaData(self, NameSpace, Name, Value, Type, MustPreserve): - pNameSpace = ctypes.c_char_p(str.encode(NameSpace)) - pName = ctypes.c_char_p(str.encode(Name)) - pValue = ctypes.c_char_p(str.encode(Value)) - pType = ctypes.c_char_p(str.encode(Type)) - bMustPreserve = ctypes.c_bool(MustPreserve) - MetaDataHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_metadatagroup_addmetadata(self._handle, pNameSpace, pName, pValue, pType, bMustPreserve, MetaDataHandle)) - if MetaDataHandle: - MetaDataObject = self._wrapper._polymorphicFactory(MetaDataHandle) - else: - raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + def SetType(self, ImplicitPortType): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitport_settype(self._handle, ImplicitPortType)) - return MetaDataObject - - -''' Class Implementation for Object -''' -class Object(Resource): - def __init__(self, handle, wrapper): - Resource.__init__(self, handle, wrapper) def GetType(self): - pObjectType = ctypes.c_int32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_gettype(self._handle, pObjectType)) + pImplicitPortType = ctypes.c_int32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitport_gettype(self._handle, pImplicitPortType)) - return ObjectType(pObjectType.value) + return ImplicitPortType(pImplicitPortType.value) - def SetType(self, ObjectType): - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_settype(self._handle, ObjectType)) + def GetReference(self): + nReferenceBufferSize = ctypes.c_uint64(0) + nReferenceNeededChars = ctypes.c_uint64(0) + pReferenceBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitport_getreference(self._handle, nReferenceBufferSize, nReferenceNeededChars, pReferenceBuffer)) + nReferenceBufferSize = ctypes.c_uint64(nReferenceNeededChars.value) + pReferenceBuffer = (ctypes.c_char * (nReferenceNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitport_getreference(self._handle, nReferenceBufferSize, nReferenceNeededChars, pReferenceBuffer)) + return pReferenceBuffer.value.decode() - def GetName(self): - nNameBufferSize = ctypes.c_uint64(0) - nNameNeededChars = ctypes.c_uint64(0) - pNameBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) - nNameBufferSize = ctypes.c_uint64(nNameNeededChars.value) - pNameBuffer = (ctypes.c_char * (nNameNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) + def SetReference(self, Reference): + pReference = ctypes.c_char_p(str.encode(Reference)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitport_setreference(self._handle, pReference)) - return pNameBuffer.value.decode() - def SetName(self, Name): - pName = ctypes.c_char_p(str.encode(Name)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_setname(self._handle, pName)) + + +''' Class Implementation for Iterator +''' +class Iterator(Base): + def __init__(self, handle, wrapper): + Base.__init__(self, handle, wrapper) + def MoveNext(self): + pHasNext = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_iterator_movenext(self._handle, pHasNext)) + return pHasNext.value - def GetPartNumber(self): - nPartNumberBufferSize = ctypes.c_uint64(0) - nPartNumberNeededChars = ctypes.c_uint64(0) - pPartNumberBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getpartnumber(self._handle, nPartNumberBufferSize, nPartNumberNeededChars, pPartNumberBuffer)) - nPartNumberBufferSize = ctypes.c_uint64(nPartNumberNeededChars.value) - pPartNumberBuffer = (ctypes.c_char * (nPartNumberNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getpartnumber(self._handle, nPartNumberBufferSize, nPartNumberNeededChars, pPartNumberBuffer)) + def MovePrevious(self): + pHasPrevious = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_iterator_moveprevious(self._handle, pHasPrevious)) - return pPartNumberBuffer.value.decode() + return pHasPrevious.value - def SetPartNumber(self, PartNumber): - pPartNumber = ctypes.c_char_p(str.encode(PartNumber)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_setpartnumber(self._handle, pPartNumber)) + def Count(self): + pCount = ctypes.c_uint64() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_iterator_count(self._handle, pCount)) + return pCount.value - def IsMeshObject(self): - pIsMeshObject = ctypes.c_bool() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_ismeshobject(self._handle, pIsMeshObject)) + + +''' Class Implementation for ImplicitPortIterator +''' +class ImplicitPortIterator(Iterator): + def __init__(self, handle, wrapper): + Iterator.__init__(self, handle, wrapper) + def GetCurrent(self): + PortHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitportiterator_getcurrent(self._handle, PortHandle)) + if PortHandle: + PortObject = self._wrapper._polymorphicFactory(PortHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pIsMeshObject.value + return PortObject - def IsComponentsObject(self): - pIsComponentsObject = ctypes.c_bool() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_iscomponentsobject(self._handle, pIsComponentsObject)) + + +''' Class Implementation for ImplicitNode +''' +class ImplicitNode(Base): + def __init__(self, handle, wrapper): + Base.__init__(self, handle, wrapper) + def GetIdentifier(self): + nIdentifierBufferSize = ctypes.c_uint64(0) + nIdentifierNeededChars = ctypes.c_uint64(0) + pIdentifierBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_getidentifier(self._handle, nIdentifierBufferSize, nIdentifierNeededChars, pIdentifierBuffer)) + nIdentifierBufferSize = ctypes.c_uint64(nIdentifierNeededChars.value) + pIdentifierBuffer = (ctypes.c_char * (nIdentifierNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_getidentifier(self._handle, nIdentifierBufferSize, nIdentifierNeededChars, pIdentifierBuffer)) - return pIsComponentsObject.value + return pIdentifierBuffer.value.decode() - def IsValid(self): - pIsValid = ctypes.c_bool() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_isvalid(self._handle, pIsValid)) + def SetIdentifier(self, Identifier): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_setidentifier(self._handle, pIdentifier)) - return pIsValid.value - def SetAttachmentAsThumbnail(self, AttachmentObject): - AttachmentHandle = None - if AttachmentObject: - AttachmentHandle = AttachmentObject._handle - else: - raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_setattachmentasthumbnail(self._handle, AttachmentHandle)) + def GetDisplayName(self): + nDisplayNameBufferSize = ctypes.c_uint64(0) + nDisplayNameNeededChars = ctypes.c_uint64(0) + pDisplayNameBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_getdisplayname(self._handle, nDisplayNameBufferSize, nDisplayNameNeededChars, pDisplayNameBuffer)) + nDisplayNameBufferSize = ctypes.c_uint64(nDisplayNameNeededChars.value) + pDisplayNameBuffer = (ctypes.c_char * (nDisplayNameNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_getdisplayname(self._handle, nDisplayNameBufferSize, nDisplayNameNeededChars, pDisplayNameBuffer)) + return pDisplayNameBuffer.value.decode() - def GetThumbnailAttachment(self): - AttachmentHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getthumbnailattachment(self._handle, AttachmentHandle)) - if AttachmentHandle: - AttachmentObject = self._wrapper._polymorphicFactory(AttachmentHandle) - else: - AttachmentObject = None + def SetDisplayName(self, DisplayName): + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_setdisplayname(self._handle, pDisplayName)) - return AttachmentObject - def ClearThumbnailAttachment(self): - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_clearthumbnailattachment(self._handle)) + def GetTag(self): + nTagBufferSize = ctypes.c_uint64(0) + nTagNeededChars = ctypes.c_uint64(0) + pTagBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_gettag(self._handle, nTagBufferSize, nTagNeededChars, pTagBuffer)) + nTagBufferSize = ctypes.c_uint64(nTagNeededChars.value) + pTagBuffer = (ctypes.c_char * (nTagNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_gettag(self._handle, nTagBufferSize, nTagNeededChars, pTagBuffer)) + return pTagBuffer.value.decode() - def GetOutbox(self): - pOutbox = Box() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getoutbox(self._handle, pOutbox)) + def SetTag(self, Tag): + pTag = ctypes.c_char_p(str.encode(Tag)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_settag(self._handle, pTag)) - return pOutbox - def GetUUID(self): - pHasUUID = ctypes.c_bool() - nUUIDBufferSize = ctypes.c_uint64(0) - nUUIDNeededChars = ctypes.c_uint64(0) - pUUIDBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getuuid(self._handle, pHasUUID, nUUIDBufferSize, nUUIDNeededChars, pUUIDBuffer)) - nUUIDBufferSize = ctypes.c_uint64(nUUIDNeededChars.value) - pUUIDBuffer = (ctypes.c_char * (nUUIDNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getuuid(self._handle, pHasUUID, nUUIDBufferSize, nUUIDNeededChars, pUUIDBuffer)) + def GetNodeType(self): + pType = ctypes.c_int32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_getnodetype(self._handle, pType)) - return pHasUUID.value, pUUIDBuffer.value.decode() + return ImplicitNodeType(pType.value) - def SetUUID(self, UUID): - pUUID = ctypes.c_char_p(str.encode(UUID)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_setuuid(self._handle, pUUID)) + def AddInput(self, Identifier, DisplayName): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + PortHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_addinput(self._handle, pIdentifier, pDisplayName, PortHandle)) + if PortHandle: + PortObject = self._wrapper._polymorphicFactory(PortHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return PortObject - def GetMetaDataGroup(self): - MetaDataGroupHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getmetadatagroup(self._handle, MetaDataGroupHandle)) - if MetaDataGroupHandle: - MetaDataGroupObject = self._wrapper._polymorphicFactory(MetaDataGroupHandle) + def GetInputs(self): + IteratorHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_getinputs(self._handle, IteratorHandle)) + if IteratorHandle: + IteratorObject = self._wrapper._polymorphicFactory(IteratorHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return IteratorObject + + def AddOutput(self, Identifier, DisplayName): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + PortHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_addoutput(self._handle, pIdentifier, pDisplayName, PortHandle)) + if PortHandle: + PortObject = self._wrapper._polymorphicFactory(PortHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return MetaDataGroupObject + return PortObject - def SetSlicesMeshResolution(self, MeshResolution): - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_setslicesmeshresolution(self._handle, MeshResolution)) + def GetOutputs(self): + IteratorHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_getoutputs(self._handle, IteratorHandle)) + if IteratorHandle: + IteratorObject = self._wrapper._polymorphicFactory(IteratorHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return IteratorObject - def GetSlicesMeshResolution(self): - pMeshResolution = ctypes.c_int32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getslicesmeshresolution(self._handle, pMeshResolution)) + def FindInput(self, Identifier): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + InputHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_findinput(self._handle, pIdentifier, InputHandle)) + if InputHandle: + InputObject = self._wrapper._polymorphicFactory(InputHandle) + else: + InputObject = None - return SlicesMeshResolution(pMeshResolution.value) + return InputObject - def HasSlices(self, Recursive): - bRecursive = ctypes.c_bool(Recursive) - pHasSlices = ctypes.c_bool() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_hasslices(self._handle, bRecursive, pHasSlices)) + def FindOutput(self, Identifier): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + OutputHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_findoutput(self._handle, pIdentifier, OutputHandle)) + if OutputHandle: + OutputObject = self._wrapper._polymorphicFactory(OutputHandle) + else: + OutputObject = None - return pHasSlices.value + return OutputObject - def ClearSliceStack(self): - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_clearslicestack(self._handle)) + def AreTypesValid(self): + pValid = ctypes.c_bool() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitnode_aretypesvalid(self._handle, pValid)) + return pValid.value - def GetSliceStack(self): - SliceStackInstanceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_getslicestack(self._handle, SliceStackInstanceHandle)) - if SliceStackInstanceHandle: - SliceStackInstanceObject = self._wrapper._polymorphicFactory(SliceStackInstanceHandle) + + +''' Class Implementation for OneInputNode +''' +class OneInputNode(ImplicitNode): + def __init__(self, handle, wrapper): + ImplicitNode.__init__(self, handle, wrapper) + def GetInputA(self): + InputHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_oneinputnode_getinputa(self._handle, InputHandle)) + if InputHandle: + InputObject = self._wrapper._polymorphicFactory(InputHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return SliceStackInstanceObject + return InputObject - def AssignSliceStack(self, SliceStackInstanceObject): - SliceStackInstanceHandle = None - if SliceStackInstanceObject: - SliceStackInstanceHandle = SliceStackInstanceObject._handle + def GetOutputResult(self): + ResultHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_oneinputnode_getoutputresult(self._handle, ResultHandle)) + if ResultHandle: + ResultObject = self._wrapper._polymorphicFactory(ResultHandle) else: - raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_object_assignslicestack(self._handle, SliceStackInstanceHandle)) + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return ResultObject -''' Class Implementation for MeshObject +''' Class Implementation for SinNode ''' -class MeshObject(Object): +class SinNode(OneInputNode): def __init__(self, handle, wrapper): - Object.__init__(self, handle, wrapper) - def GetVertexCount(self): - pVertexCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getvertexcount(self._handle, pVertexCount)) - - return pVertexCount.value - - def GetTriangleCount(self): - pVertexCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_gettrianglecount(self._handle, pVertexCount)) - - return pVertexCount.value - - def GetVertex(self, Index): - nIndex = ctypes.c_uint32(Index) - pCoordinates = Position() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getvertex(self._handle, nIndex, pCoordinates)) - - return pCoordinates - - def SetVertex(self, Index, Coordinates): - nIndex = ctypes.c_uint32(Index) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_setvertex(self._handle, nIndex, Coordinates)) + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for CosNode +''' +class CosNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for TanNode +''' +class TanNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for ArcSinNode +''' +class ArcSinNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for ArcCosNode +''' +class ArcCosNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for ArcTanNode +''' +class ArcTanNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for SinhNode +''' +class SinhNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for CoshNode +''' +class CoshNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for TanhNode +''' +class TanhNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for RoundNode +''' +class RoundNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for CeilNode +''' +class CeilNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for FloorNode +''' +class FloorNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for SignNode +''' +class SignNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for FractNode +''' +class FractNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for AbsNode +''' +class AbsNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for ExpNode +''' +class ExpNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for LogNode +''' +class LogNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for Log2Node +''' +class Log2Node(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for Log10Node +''' +class Log10Node(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for LengthNode +''' +class LengthNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for TransposeNode +''' +class TransposeNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for InverseNode +''' +class InverseNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for SqrtNode +''' +class SqrtNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for ResourceIdNode +''' +class ResourceIdNode(ImplicitNode): + def __init__(self, handle, wrapper): + ImplicitNode.__init__(self, handle, wrapper) + def SetResource(self, ResourceObject): + ResourceHandle = None + if ResourceObject: + ResourceHandle = ResourceObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resourceidnode_setresource(self._handle, ResourceHandle)) - def AddVertex(self, Coordinates): - pNewIndex = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_addvertex(self._handle, Coordinates, pNewIndex)) + def GetResource(self): + ResourceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resourceidnode_getresource(self._handle, ResourceHandle)) + if ResourceHandle: + ResourceObject = self._wrapper._polymorphicFactory(ResourceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pNewIndex.value + return ResourceObject - def GetVertices(self): - nVerticesCount = ctypes.c_uint64(0) - nVerticesNeededCount = ctypes.c_uint64(0) - pVerticesBuffer = (Position*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getvertices(self._handle, nVerticesCount, nVerticesNeededCount, pVerticesBuffer)) - nVerticesCount = ctypes.c_uint64(nVerticesNeededCount.value) - pVerticesBuffer = (Position * nVerticesNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getvertices(self._handle, nVerticesCount, nVerticesNeededCount, pVerticesBuffer)) + def GetOutputValue(self): + ValueHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_resourceidnode_getoutputvalue(self._handle, ValueHandle)) + if ValueHandle: + ValueObject = self._wrapper._polymorphicFactory(ValueHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pVerticesBuffer[i] for i in range(nVerticesNeededCount.value)] + return ValueObject - def GetTriangle(self, Index): - nIndex = ctypes.c_uint32(Index) - pIndices = Triangle() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_gettriangle(self._handle, nIndex, pIndices)) + + +''' Class Implementation for TwoInputNode +''' +class TwoInputNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + def GetInputB(self): + BHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_twoinputnode_getinputb(self._handle, BHandle)) + if BHandle: + BObject = self._wrapper._polymorphicFactory(BHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pIndices + return BObject - def SetTriangle(self, Index, Indices): - nIndex = ctypes.c_uint32(Index) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_settriangle(self._handle, nIndex, Indices)) + + +''' Class Implementation for AdditionNode +''' +class AdditionNode(TwoInputNode): + def __init__(self, handle, wrapper): + TwoInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for SubtractionNode +''' +class SubtractionNode(TwoInputNode): + def __init__(self, handle, wrapper): + TwoInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for MultiplicationNode +''' +class MultiplicationNode(TwoInputNode): + def __init__(self, handle, wrapper): + TwoInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for DivisionNode +''' +class DivisionNode(TwoInputNode): + def __init__(self, handle, wrapper): + TwoInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for DotNode +''' +class DotNode(TwoInputNode): + def __init__(self, handle, wrapper): + TwoInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for CrossNode +''' +class CrossNode(TwoInputNode): + def __init__(self, handle, wrapper): + TwoInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for ArcTan2Node +''' +class ArcTan2Node(TwoInputNode): + def __init__(self, handle, wrapper): + TwoInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for MatVecMultiplicationNode +''' +class MatVecMultiplicationNode(TwoInputNode): + def __init__(self, handle, wrapper): + TwoInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for MinNode +''' +class MinNode(TwoInputNode): + def __init__(self, handle, wrapper): + TwoInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for MaxNode +''' +class MaxNode(TwoInputNode): + def __init__(self, handle, wrapper): + TwoInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for FmodNode +''' +class FmodNode(TwoInputNode): + def __init__(self, handle, wrapper): + TwoInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for ModNode +''' +class ModNode(TwoInputNode): + def __init__(self, handle, wrapper): + TwoInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for PowNode +''' +class PowNode(TwoInputNode): + def __init__(self, handle, wrapper): + TwoInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for SelectNode +''' +class SelectNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + def GetInputB(self): + BHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_selectnode_getinputb(self._handle, BHandle)) + if BHandle: + BObject = self._wrapper._polymorphicFactory(BHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return BObject - def AddTriangle(self, Indices): - pNewIndex = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_addtriangle(self._handle, Indices, pNewIndex)) + def GetInputC(self): + CHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_selectnode_getinputc(self._handle, CHandle)) + if CHandle: + CObject = self._wrapper._polymorphicFactory(CHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pNewIndex.value + return CObject - def GetTriangleIndices(self): - nIndicesCount = ctypes.c_uint64(0) - nIndicesNeededCount = ctypes.c_uint64(0) - pIndicesBuffer = (Triangle*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_gettriangleindices(self._handle, nIndicesCount, nIndicesNeededCount, pIndicesBuffer)) - nIndicesCount = ctypes.c_uint64(nIndicesNeededCount.value) - pIndicesBuffer = (Triangle * nIndicesNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_gettriangleindices(self._handle, nIndicesCount, nIndicesNeededCount, pIndicesBuffer)) + def GetInputD(self): + DHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_selectnode_getinputd(self._handle, DHandle)) + if DHandle: + DObject = self._wrapper._polymorphicFactory(DHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pIndicesBuffer[i] for i in range(nIndicesNeededCount.value)] + return DObject - def SetObjectLevelProperty(self, UniqueResourceID, PropertyID): - nUniqueResourceID = ctypes.c_uint32(UniqueResourceID) - nPropertyID = ctypes.c_uint32(PropertyID) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_setobjectlevelproperty(self._handle, nUniqueResourceID, nPropertyID)) + + +''' Class Implementation for ClampNode +''' +class ClampNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + def GetInputMin(self): + MinHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_clampnode_getinputmin(self._handle, MinHandle)) + if MinHandle: + MinObject = self._wrapper._polymorphicFactory(MinHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return MinObject - def GetObjectLevelProperty(self): - pUniqueResourceID = ctypes.c_uint32() - pPropertyID = ctypes.c_uint32() - pHasObjectLevelProperty = ctypes.c_bool() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getobjectlevelproperty(self._handle, pUniqueResourceID, pPropertyID, pHasObjectLevelProperty)) + def GetInputMax(self): + MaxHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_clampnode_getinputmax(self._handle, MaxHandle)) + if MaxHandle: + MaxObject = self._wrapper._polymorphicFactory(MaxHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pUniqueResourceID.value, pPropertyID.value, pHasObjectLevelProperty.value + return MaxObject - def SetTriangleProperties(self, Index, Properties): - nIndex = ctypes.c_uint32(Index) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_settriangleproperties(self._handle, nIndex, Properties)) + + +''' Class Implementation for ComposeVectorNode +''' +class ComposeVectorNode(ImplicitNode): + def __init__(self, handle, wrapper): + ImplicitNode.__init__(self, handle, wrapper) + def GetInputX(self): + XHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composevectornode_getinputx(self._handle, XHandle)) + if XHandle: + XObject = self._wrapper._polymorphicFactory(XHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return XObject - def GetTriangleProperties(self, Index): - nIndex = ctypes.c_uint32(Index) - pProperty = TriangleProperties() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_gettriangleproperties(self._handle, nIndex, pProperty)) + def GetInputY(self): + YHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composevectornode_getinputy(self._handle, YHandle)) + if YHandle: + YObject = self._wrapper._polymorphicFactory(YHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pProperty + return YObject - def SetAllTriangleProperties(self, PropertiesArray): - nPropertiesArrayCount = ctypes.c_uint64(len(PropertiesArray)) - pPropertiesArrayBuffer = (TriangleProperties*len(PropertiesArray))(*PropertiesArray) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_setalltriangleproperties(self._handle, nPropertiesArrayCount, pPropertiesArrayBuffer)) + def GetInputZ(self): + ZHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composevectornode_getinputz(self._handle, ZHandle)) + if ZHandle: + ZObject = self._wrapper._polymorphicFactory(ZHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return ZObject - def GetAllTriangleProperties(self): - nPropertiesArrayCount = ctypes.c_uint64(0) - nPropertiesArrayNeededCount = ctypes.c_uint64(0) - pPropertiesArrayBuffer = (TriangleProperties*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getalltriangleproperties(self._handle, nPropertiesArrayCount, nPropertiesArrayNeededCount, pPropertiesArrayBuffer)) - nPropertiesArrayCount = ctypes.c_uint64(nPropertiesArrayNeededCount.value) - pPropertiesArrayBuffer = (TriangleProperties * nPropertiesArrayNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_getalltriangleproperties(self._handle, nPropertiesArrayCount, nPropertiesArrayNeededCount, pPropertiesArrayBuffer)) + def GetOutputResult(self): + ResultHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composevectornode_getoutputresult(self._handle, ResultHandle)) + if ResultHandle: + ResultObject = self._wrapper._polymorphicFactory(ResultHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pPropertiesArrayBuffer[i] for i in range(nPropertiesArrayNeededCount.value)] + return ResultObject - def ClearAllProperties(self): - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_clearallproperties(self._handle)) + + +''' Class Implementation for VectorFromScalarNode +''' +class VectorFromScalarNode(OneInputNode): + def __init__(self, handle, wrapper): + OneInputNode.__init__(self, handle, wrapper) + + +''' Class Implementation for DecomposeVectorNode +''' +class DecomposeVectorNode(ImplicitNode): + def __init__(self, handle, wrapper): + ImplicitNode.__init__(self, handle, wrapper) + def GetInputA(self): + AHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_decomposevectornode_getinputa(self._handle, AHandle)) + if AHandle: + AObject = self._wrapper._polymorphicFactory(AHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return AObject - def SetGeometry(self, Vertices, Indices): - nVerticesCount = ctypes.c_uint64(len(Vertices)) - pVerticesBuffer = (Position*len(Vertices))(*Vertices) - nIndicesCount = ctypes.c_uint64(len(Indices)) - pIndicesBuffer = (Triangle*len(Indices))(*Indices) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_setgeometry(self._handle, nVerticesCount, pVerticesBuffer, nIndicesCount, pIndicesBuffer)) + def GetOutputX(self): + XHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_decomposevectornode_getoutputx(self._handle, XHandle)) + if XHandle: + XObject = self._wrapper._polymorphicFactory(XHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return XObject - def IsManifoldAndOriented(self): - pIsManifoldAndOriented = ctypes.c_bool() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_ismanifoldandoriented(self._handle, pIsManifoldAndOriented)) + def GetOutputY(self): + YHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_decomposevectornode_getoutputy(self._handle, YHandle)) + if YHandle: + YObject = self._wrapper._polymorphicFactory(YHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pIsManifoldAndOriented.value + return YObject - def BeamLattice(self): - TheBeamLatticeHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshobject_beamlattice(self._handle, TheBeamLatticeHandle)) - if TheBeamLatticeHandle: - TheBeamLatticeObject = self._wrapper._polymorphicFactory(TheBeamLatticeHandle) + def GetOutputZ(self): + ZHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_decomposevectornode_getoutputz(self._handle, ZHandle)) + if ZHandle: + ZObject = self._wrapper._polymorphicFactory(ZHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return TheBeamLatticeObject + return ZObject -''' Class Implementation for BeamLattice +''' Class Implementation for ComposeMatrixNode ''' -class BeamLattice(Base): +class ComposeMatrixNode(ImplicitNode): def __init__(self, handle, wrapper): - Base.__init__(self, handle, wrapper) - def GetMinLength(self): - pMinLength = ctypes.c_double() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getminlength(self._handle, pMinLength)) + ImplicitNode.__init__(self, handle, wrapper) + def GetInputM00(self): + M00Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm00(self._handle, M00Handle)) + if M00Handle: + M00Object = self._wrapper._polymorphicFactory(M00Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pMinLength.value + return M00Object - def SetMinLength(self, MinLength): - dMinLength = ctypes.c_double(MinLength) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setminlength(self._handle, dMinLength)) + def GetInputM01(self): + M01Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm01(self._handle, M01Handle)) + if M01Handle: + M01Object = self._wrapper._polymorphicFactory(M01Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return M01Object - def GetClipping(self): - pClipMode = ctypes.c_int32() - pUniqueResourceID = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getclipping(self._handle, pClipMode, pUniqueResourceID)) + def GetInputM02(self): + M02Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm02(self._handle, M02Handle)) + if M02Handle: + M02Object = self._wrapper._polymorphicFactory(M02Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return BeamLatticeClipMode(pClipMode.value), pUniqueResourceID.value + return M02Object - def SetClipping(self, ClipMode, UniqueResourceID): - nUniqueResourceID = ctypes.c_uint32(UniqueResourceID) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setclipping(self._handle, ClipMode, nUniqueResourceID)) + def GetInputM03(self): + M03Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm03(self._handle, M03Handle)) + if M03Handle: + M03Object = self._wrapper._polymorphicFactory(M03Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return M03Object - def GetRepresentation(self): - pHasRepresentation = ctypes.c_bool() - pUniqueResourceID = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getrepresentation(self._handle, pHasRepresentation, pUniqueResourceID)) + def GetInputM10(self): + M10Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm10(self._handle, M10Handle)) + if M10Handle: + M10Object = self._wrapper._polymorphicFactory(M10Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pHasRepresentation.value, pUniqueResourceID.value + return M10Object - def SetRepresentation(self, UniqueResourceID): - nUniqueResourceID = ctypes.c_uint32(UniqueResourceID) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setrepresentation(self._handle, nUniqueResourceID)) + def GetInputM11(self): + M11Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm11(self._handle, M11Handle)) + if M11Handle: + M11Object = self._wrapper._polymorphicFactory(M11Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return M11Object - def GetBallOptions(self): - pBallMode = ctypes.c_int32() - pBallRadius = ctypes.c_double() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getballoptions(self._handle, pBallMode, pBallRadius)) + def GetInputM12(self): + M12Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm12(self._handle, M12Handle)) + if M12Handle: + M12Object = self._wrapper._polymorphicFactory(M12Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return BeamLatticeBallMode(pBallMode.value), pBallRadius.value + return M12Object - def SetBallOptions(self, BallMode, BallRadius): - dBallRadius = ctypes.c_double(BallRadius) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setballoptions(self._handle, BallMode, dBallRadius)) + def GetInputM13(self): + M13Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm13(self._handle, M13Handle)) + if M13Handle: + M13Object = self._wrapper._polymorphicFactory(M13Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return M13Object - def GetBeamCount(self): - pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getbeamcount(self._handle, pCount)) + def GetInputM20(self): + M20Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm20(self._handle, M20Handle)) + if M20Handle: + M20Object = self._wrapper._polymorphicFactory(M20Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pCount.value + return M20Object - def GetBeam(self, Index): - nIndex = ctypes.c_uint32(Index) - pBeamInfo = Beam() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getbeam(self._handle, nIndex, pBeamInfo)) + def GetInputM21(self): + M21Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm21(self._handle, M21Handle)) + if M21Handle: + M21Object = self._wrapper._polymorphicFactory(M21Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pBeamInfo + return M21Object - def AddBeam(self, BeamInfo): - pIndex = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_addbeam(self._handle, BeamInfo, pIndex)) + def GetInputM22(self): + M22Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm22(self._handle, M22Handle)) + if M22Handle: + M22Object = self._wrapper._polymorphicFactory(M22Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pIndex.value + return M22Object - def SetBeam(self, Index, BeamInfo): - nIndex = ctypes.c_uint32(Index) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setbeam(self._handle, nIndex, BeamInfo)) + def GetInputM23(self): + M23Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm23(self._handle, M23Handle)) + if M23Handle: + M23Object = self._wrapper._polymorphicFactory(M23Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return M23Object - def SetBeams(self, BeamInfo): - nBeamInfoCount = ctypes.c_uint64(len(BeamInfo)) - pBeamInfoBuffer = (Beam*len(BeamInfo))(*BeamInfo) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setbeams(self._handle, nBeamInfoCount, pBeamInfoBuffer)) + def GetInputM30(self): + M30Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm30(self._handle, M30Handle)) + if M30Handle: + M30Object = self._wrapper._polymorphicFactory(M30Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return M30Object - def GetBeams(self): - nBeamInfoCount = ctypes.c_uint64(0) - nBeamInfoNeededCount = ctypes.c_uint64(0) - pBeamInfoBuffer = (Beam*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getbeams(self._handle, nBeamInfoCount, nBeamInfoNeededCount, pBeamInfoBuffer)) - nBeamInfoCount = ctypes.c_uint64(nBeamInfoNeededCount.value) - pBeamInfoBuffer = (Beam * nBeamInfoNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getbeams(self._handle, nBeamInfoCount, nBeamInfoNeededCount, pBeamInfoBuffer)) + def GetInputM31(self): + M31Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm31(self._handle, M31Handle)) + if M31Handle: + M31Object = self._wrapper._polymorphicFactory(M31Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pBeamInfoBuffer[i] for i in range(nBeamInfoNeededCount.value)] + return M31Object - def GetBallCount(self): - pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getballcount(self._handle, pCount)) + def GetInputM32(self): + M32Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm32(self._handle, M32Handle)) + if M32Handle: + M32Object = self._wrapper._polymorphicFactory(M32Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pCount.value + return M32Object - def GetBall(self, Index): - nIndex = ctypes.c_uint32(Index) - pBallInfo = Ball() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getball(self._handle, nIndex, pBallInfo)) + def GetInputM33(self): + M33Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getinputm33(self._handle, M33Handle)) + if M33Handle: + M33Object = self._wrapper._polymorphicFactory(M33Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pBallInfo + return M33Object - def AddBall(self, BallInfo): - pIndex = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_addball(self._handle, BallInfo, pIndex)) + def GetOutputResult(self): + ResultHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_composematrixnode_getoutputresult(self._handle, ResultHandle)) + if ResultHandle: + ResultObject = self._wrapper._polymorphicFactory(ResultHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pIndex.value + return ResultObject - def SetBall(self, Index, BallInfo): - nIndex = ctypes.c_uint32(Index) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setball(self._handle, nIndex, BallInfo)) + + +''' Class Implementation for MatrixFromRowsNode +''' +class MatrixFromRowsNode(ImplicitNode): + def __init__(self, handle, wrapper): + ImplicitNode.__init__(self, handle, wrapper) + def GetInputA(self): + Row0Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_matrixfromrowsnode_getinputa(self._handle, Row0Handle)) + if Row0Handle: + Row0Object = self._wrapper._polymorphicFactory(Row0Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return Row0Object - def SetBalls(self, BallInfo): - nBallInfoCount = ctypes.c_uint64(len(BallInfo)) - pBallInfoBuffer = (Ball*len(BallInfo))(*BallInfo) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_setballs(self._handle, nBallInfoCount, pBallInfoBuffer)) + def GetInputB(self): + Row1Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_matrixfromrowsnode_getinputb(self._handle, Row1Handle)) + if Row1Handle: + Row1Object = self._wrapper._polymorphicFactory(Row1Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return Row1Object - def GetBalls(self): - nBallInfoCount = ctypes.c_uint64(0) - nBallInfoNeededCount = ctypes.c_uint64(0) - pBallInfoBuffer = (Ball*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getballs(self._handle, nBallInfoCount, nBallInfoNeededCount, pBallInfoBuffer)) - nBallInfoCount = ctypes.c_uint64(nBallInfoNeededCount.value) - pBallInfoBuffer = (Ball * nBallInfoNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getballs(self._handle, nBallInfoCount, nBallInfoNeededCount, pBallInfoBuffer)) + def GetInputC(self): + Row2Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_matrixfromrowsnode_getinputc(self._handle, Row2Handle)) + if Row2Handle: + Row2Object = self._wrapper._polymorphicFactory(Row2Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pBallInfoBuffer[i] for i in range(nBallInfoNeededCount.value)] + return Row2Object - def GetBeamSetCount(self): - pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getbeamsetcount(self._handle, pCount)) + def GetInputD(self): + Row3Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_matrixfromrowsnode_getinputd(self._handle, Row3Handle)) + if Row3Handle: + Row3Object = self._wrapper._polymorphicFactory(Row3Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return Row3Object + + def GetOutputResult(self): + ResultHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_matrixfromrowsnode_getoutputresult(self._handle, ResultHandle)) + if ResultHandle: + ResultObject = self._wrapper._polymorphicFactory(ResultHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResultObject + + + +''' Class Implementation for MatrixFromColumnsNode +''' +class MatrixFromColumnsNode(ImplicitNode): + def __init__(self, handle, wrapper): + ImplicitNode.__init__(self, handle, wrapper) + def GetInputA(self): + Column0Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_matrixfromcolumnsnode_getinputa(self._handle, Column0Handle)) + if Column0Handle: + Column0Object = self._wrapper._polymorphicFactory(Column0Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return Column0Object + + def GetInputB(self): + Column1Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_matrixfromcolumnsnode_getinputb(self._handle, Column1Handle)) + if Column1Handle: + Column1Object = self._wrapper._polymorphicFactory(Column1Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return Column1Object + + def GetInputC(self): + Column2Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_matrixfromcolumnsnode_getinputc(self._handle, Column2Handle)) + if Column2Handle: + Column2Object = self._wrapper._polymorphicFactory(Column2Handle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pCount.value + return Column2Object - def AddBeamSet(self): - BeamSetHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_addbeamset(self._handle, BeamSetHandle)) - if BeamSetHandle: - BeamSetObject = self._wrapper._polymorphicFactory(BeamSetHandle) + def GetInputD(self): + Column3Handle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_matrixfromcolumnsnode_getinputd(self._handle, Column3Handle)) + if Column3Handle: + Column3Object = self._wrapper._polymorphicFactory(Column3Handle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return BeamSetObject + return Column3Object - def GetBeamSet(self, Index): - nIndex = ctypes.c_uint32(Index) - BeamSetHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamlattice_getbeamset(self._handle, nIndex, BeamSetHandle)) - if BeamSetHandle: - BeamSetObject = self._wrapper._polymorphicFactory(BeamSetHandle) + def GetOutputResult(self): + ResultHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_matrixfromcolumnsnode_getoutputresult(self._handle, ResultHandle)) + if ResultHandle: + ResultObject = self._wrapper._polymorphicFactory(ResultHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return BeamSetObject + return ResultObject -''' Class Implementation for Component +''' Class Implementation for ConstantNode ''' -class Component(Base): +class ConstantNode(ImplicitNode): def __init__(self, handle, wrapper): - Base.__init__(self, handle, wrapper) - def GetObjectResource(self): - ObjectResourceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_getobjectresource(self._handle, ObjectResourceHandle)) - if ObjectResourceHandle: - ObjectResourceObject = self._wrapper._polymorphicFactory(ObjectResourceHandle) + ImplicitNode.__init__(self, handle, wrapper) + def SetConstant(self, Value): + dValue = ctypes.c_double(Value) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_constantnode_setconstant(self._handle, dValue)) + + + def GetConstant(self): + pValue = ctypes.c_double() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_constantnode_getconstant(self._handle, pValue)) + + return pValue.value + + def GetOutputValue(self): + ValueHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_constantnode_getoutputvalue(self._handle, ValueHandle)) + if ValueHandle: + ValueObject = self._wrapper._polymorphicFactory(ValueHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return ObjectResourceObject + return ValueObject - def GetObjectResourceID(self): - pUniqueResourceID = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_getobjectresourceid(self._handle, pUniqueResourceID)) + + +''' Class Implementation for ConstVecNode +''' +class ConstVecNode(ImplicitNode): + def __init__(self, handle, wrapper): + ImplicitNode.__init__(self, handle, wrapper) + def SetVector(self, Value): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_constvecnode_setvector(self._handle, Value)) - return pUniqueResourceID.value - def GetUUID(self): - pHasUUID = ctypes.c_bool() - nUUIDBufferSize = ctypes.c_uint64(0) - nUUIDNeededChars = ctypes.c_uint64(0) - pUUIDBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_getuuid(self._handle, pHasUUID, nUUIDBufferSize, nUUIDNeededChars, pUUIDBuffer)) - nUUIDBufferSize = ctypes.c_uint64(nUUIDNeededChars.value) - pUUIDBuffer = (ctypes.c_char * (nUUIDNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_getuuid(self._handle, pHasUUID, nUUIDBufferSize, nUUIDNeededChars, pUUIDBuffer)) + def GetVector(self): + pValue = Vector() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_constvecnode_getvector(self._handle, pValue)) - return pHasUUID.value, pUUIDBuffer.value.decode() + return pValue - def SetUUID(self, UUID): - pUUID = ctypes.c_char_p(str.encode(UUID)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_setuuid(self._handle, pUUID)) + def GetOutputVector(self): + VectorHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_constvecnode_getoutputvector(self._handle, VectorHandle)) + if VectorHandle: + VectorObject = self._wrapper._polymorphicFactory(VectorHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return VectorObject - def HasTransform(self): - pHasTransform = ctypes.c_bool() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_hastransform(self._handle, pHasTransform)) + + +''' Class Implementation for ConstMatNode +''' +class ConstMatNode(ImplicitNode): + def __init__(self, handle, wrapper): + ImplicitNode.__init__(self, handle, wrapper) + def SetMatrix(self, Value): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_constmatnode_setmatrix(self._handle, Value)) - return pHasTransform.value - def GetTransform(self): - pTransform = Transform() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_gettransform(self._handle, pTransform)) + def GetMatrix(self): + pValue = Matrix4x4() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_constmatnode_getmatrix(self._handle, pValue)) - return pTransform + return pValue - def SetTransform(self, Transform): - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_component_settransform(self._handle, Transform)) + def GetOutputMatrix(self): + MatrixHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_constmatnode_getoutputmatrix(self._handle, MatrixHandle)) + if MatrixHandle: + MatrixObject = self._wrapper._polymorphicFactory(MatrixHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return MatrixObject -''' Class Implementation for ComponentsObject +''' Class Implementation for MeshNode ''' -class ComponentsObject(Object): +class MeshNode(ImplicitNode): def __init__(self, handle, wrapper): - Object.__init__(self, handle, wrapper) - def AddComponent(self, ObjectResourceObject, Transform): - ObjectResourceHandle = None - if ObjectResourceObject: - ObjectResourceHandle = ObjectResourceObject._handle + ImplicitNode.__init__(self, handle, wrapper) + def GetInputMesh(self): + MeshHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshnode_getinputmesh(self._handle, MeshHandle)) + if MeshHandle: + MeshObject = self._wrapper._polymorphicFactory(MeshHandle) else: - raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') - ComponentInstanceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_componentsobject_addcomponent(self._handle, ObjectResourceHandle, Transform, ComponentInstanceHandle)) - if ComponentInstanceHandle: - ComponentInstanceObject = self._wrapper._polymorphicFactory(ComponentInstanceHandle) + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return MeshObject + + def GetInputPos(self): + PosHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshnode_getinputpos(self._handle, PosHandle)) + if PosHandle: + PosObject = self._wrapper._polymorphicFactory(PosHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return ComponentInstanceObject + return PosObject - def GetComponent(self, Index): - nIndex = ctypes.c_uint32(Index) - ComponentInstanceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_componentsobject_getcomponent(self._handle, nIndex, ComponentInstanceHandle)) - if ComponentInstanceHandle: - ComponentInstanceObject = self._wrapper._polymorphicFactory(ComponentInstanceHandle) + def GetOutputDistance(self): + DistanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_meshnode_getoutputdistance(self._handle, DistanceHandle)) + if DistanceHandle: + DistanceObject = self._wrapper._polymorphicFactory(DistanceHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return ComponentInstanceObject + return DistanceObject - def GetComponentCount(self): - pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_componentsobject_getcomponentcount(self._handle, pCount)) + + +''' Class Implementation for UnsignedMeshNode +''' +class UnsignedMeshNode(ImplicitNode): + def __init__(self, handle, wrapper): + ImplicitNode.__init__(self, handle, wrapper) + def GetInputMesh(self): + MeshHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_unsignedmeshnode_getinputmesh(self._handle, MeshHandle)) + if MeshHandle: + MeshObject = self._wrapper._polymorphicFactory(MeshHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pCount.value + return MeshObject + + def GetInputPos(self): + PosHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_unsignedmeshnode_getinputpos(self._handle, PosHandle)) + if PosHandle: + PosObject = self._wrapper._polymorphicFactory(PosHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return PosObject + + def GetOutputDistance(self): + DistanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_unsignedmeshnode_getoutputdistance(self._handle, DistanceHandle)) + if DistanceHandle: + DistanceObject = self._wrapper._polymorphicFactory(DistanceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return DistanceObject -''' Class Implementation for BeamSet +''' Class Implementation for FunctionCallNode ''' -class BeamSet(Base): +class FunctionCallNode(ImplicitNode): def __init__(self, handle, wrapper): - Base.__init__(self, handle, wrapper) - def SetName(self, Name): - pName = ctypes.c_char_p(str.encode(Name)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_setname(self._handle, pName)) + ImplicitNode.__init__(self, handle, wrapper) + def GetInputFunctionID(self): + FunctionHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functioncallnode_getinputfunctionid(self._handle, FunctionHandle)) + if FunctionHandle: + FunctionObject = self._wrapper._polymorphicFactory(FunctionHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return FunctionObject - def GetName(self): - nNameBufferSize = ctypes.c_uint64(0) - nNameNeededChars = ctypes.c_uint64(0) - pNameBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) - nNameBufferSize = ctypes.c_uint64(nNameNeededChars.value) - pNameBuffer = (ctypes.c_char * (nNameNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getname(self._handle, nNameBufferSize, nNameNeededChars, pNameBuffer)) + + +''' Class Implementation for NodeIterator +''' +class NodeIterator(Iterator): + def __init__(self, handle, wrapper): + Iterator.__init__(self, handle, wrapper) + def GetCurrent(self): + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_nodeiterator_getcurrent(self._handle, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pNameBuffer.value.decode() + return NodeObject - def SetIdentifier(self, Identifier): + + +''' Class Implementation for Function +''' +class Function(Resource): + def __init__(self, handle, wrapper): + Resource.__init__(self, handle, wrapper) + def GetDisplayName(self): + nDisplayNameBufferSize = ctypes.c_uint64(0) + nDisplayNameNeededChars = ctypes.c_uint64(0) + pDisplayNameBuffer = ctypes.c_char_p(None) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_function_getdisplayname(self._handle, nDisplayNameBufferSize, nDisplayNameNeededChars, pDisplayNameBuffer)) + nDisplayNameBufferSize = ctypes.c_uint64(nDisplayNameNeededChars.value) + pDisplayNameBuffer = (ctypes.c_char * (nDisplayNameNeededChars.value))() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_function_getdisplayname(self._handle, nDisplayNameBufferSize, nDisplayNameNeededChars, pDisplayNameBuffer)) + + return pDisplayNameBuffer.value.decode() + + def SetDisplayName(self, DisplayName): + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_function_setdisplayname(self._handle, pDisplayName)) + + + def AddInput(self, Identifier, DisplayName, Type): pIdentifier = ctypes.c_char_p(str.encode(Identifier)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_setidentifier(self._handle, pIdentifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + PortHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_function_addinput(self._handle, pIdentifier, pDisplayName, Type, PortHandle)) + if PortHandle: + PortObject = self._wrapper._polymorphicFactory(PortHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return PortObject + + def GetInputs(self): + IteratorHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_function_getinputs(self._handle, IteratorHandle)) + if IteratorHandle: + IteratorObject = self._wrapper._polymorphicFactory(IteratorHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return IteratorObject + + def RemoveInput(self, InputObject): + InputHandle = None + if InputObject: + InputHandle = InputObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_function_removeinput(self._handle, InputHandle)) + + + def AddOutput(self, Identifier, DisplayName, Type): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + PortHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_function_addoutput(self._handle, pIdentifier, pDisplayName, Type, PortHandle)) + if PortHandle: + PortObject = self._wrapper._polymorphicFactory(PortHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return PortObject + + def GetOutputs(self): + IteratorHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_function_getoutputs(self._handle, IteratorHandle)) + if IteratorHandle: + IteratorObject = self._wrapper._polymorphicFactory(IteratorHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return IteratorObject + + def RemoveOutput(self, OutputObject): + OutputHandle = None + if OutputObject: + OutputHandle = OutputObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_function_removeoutput(self._handle, OutputHandle)) + + + def FindInput(self, Identifier): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + InputHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_function_findinput(self._handle, pIdentifier, InputHandle)) + if InputHandle: + InputObject = self._wrapper._polymorphicFactory(InputHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return InputObject + + def FindOutput(self, Identifier): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + OutputHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_function_findoutput(self._handle, pIdentifier, OutputHandle)) + if OutputHandle: + OutputObject = self._wrapper._polymorphicFactory(OutputHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return OutputObject + + +''' Class Implementation for ImplicitFunction +''' +class ImplicitFunction(Function): + def __init__(self, handle, wrapper): + Function.__init__(self, handle, wrapper) def GetIdentifier(self): nIdentifierBufferSize = ctypes.c_uint64(0) nIdentifierNeededChars = ctypes.c_uint64(0) pIdentifierBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getidentifier(self._handle, nIdentifierBufferSize, nIdentifierNeededChars, pIdentifierBuffer)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_getidentifier(self._handle, nIdentifierBufferSize, nIdentifierNeededChars, pIdentifierBuffer)) nIdentifierBufferSize = ctypes.c_uint64(nIdentifierNeededChars.value) pIdentifierBuffer = (ctypes.c_char * (nIdentifierNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getidentifier(self._handle, nIdentifierBufferSize, nIdentifierNeededChars, pIdentifierBuffer)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_getidentifier(self._handle, nIdentifierBufferSize, nIdentifierNeededChars, pIdentifierBuffer)) return pIdentifierBuffer.value.decode() - def GetReferenceCount(self): - pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getreferencecount(self._handle, pCount)) + def SetIdentifier(self, Identifier): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_setidentifier(self._handle, pIdentifier)) - return pCount.value - def SetReferences(self, References): - nReferencesCount = ctypes.c_uint64(len(References)) - pReferencesBuffer = (ctypes.c_uint32*len(References))(*References) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_setreferences(self._handle, nReferencesCount, pReferencesBuffer)) + def AddNode(self, NodeType, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addnode(self._handle, NodeType, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def GetReferences(self): - nReferencesCount = ctypes.c_uint64(0) - nReferencesNeededCount = ctypes.c_uint64(0) - pReferencesBuffer = (ctypes.c_uint32*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getreferences(self._handle, nReferencesCount, nReferencesNeededCount, pReferencesBuffer)) - nReferencesCount = ctypes.c_uint64(nReferencesNeededCount.value) - pReferencesBuffer = (ctypes.c_uint32 * nReferencesNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getreferences(self._handle, nReferencesCount, nReferencesNeededCount, pReferencesBuffer)) + def AddSinNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addsinnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pReferencesBuffer[i] for i in range(nReferencesNeededCount.value)] + return NodeObject - def GetBallReferenceCount(self): - pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getballreferencecount(self._handle, pCount)) + def AddCosNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addcosnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pCount.value + return NodeObject - def SetBallReferences(self, BallReferences): - nBallReferencesCount = ctypes.c_uint64(len(BallReferences)) - pBallReferencesBuffer = (ctypes.c_uint32*len(BallReferences))(*BallReferences) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_setballreferences(self._handle, nBallReferencesCount, pBallReferencesBuffer)) + def AddTanNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addtannode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def GetBallReferences(self): - nBallReferencesCount = ctypes.c_uint64(0) - nBallReferencesNeededCount = ctypes.c_uint64(0) - pBallReferencesBuffer = (ctypes.c_uint32*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getballreferences(self._handle, nBallReferencesCount, nBallReferencesNeededCount, pBallReferencesBuffer)) - nBallReferencesCount = ctypes.c_uint64(nBallReferencesNeededCount.value) - pBallReferencesBuffer = (ctypes.c_uint32 * nBallReferencesNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_beamset_getballreferences(self._handle, nBallReferencesCount, nBallReferencesNeededCount, pBallReferencesBuffer)) + def AddArcSinNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addarcsinnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pBallReferencesBuffer[i] for i in range(nBallReferencesNeededCount.value)] + return NodeObject - - -''' Class Implementation for BaseMaterialGroup -''' -class BaseMaterialGroup(Resource): - def __init__(self, handle, wrapper): - Resource.__init__(self, handle, wrapper) - def GetCount(self): - pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_getcount(self._handle, pCount)) + def AddArcCosNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addarccosnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return NodeObject + + def AddArcTan2Node(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addarctan2node(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return NodeObject + + def AddSinhNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addsinhnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return NodeObject + + def AddCoshNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addcoshnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pCount.value + return NodeObject - def GetAllPropertyIDs(self): - nPropertyIDsCount = ctypes.c_uint64(0) - nPropertyIDsNeededCount = ctypes.c_uint64(0) - pPropertyIDsBuffer = (ctypes.c_uint32*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) - nPropertyIDsCount = ctypes.c_uint64(nPropertyIDsNeededCount.value) - pPropertyIDsBuffer = (ctypes.c_uint32 * nPropertyIDsNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + def AddTanhNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addtanhnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pPropertyIDsBuffer[i] for i in range(nPropertyIDsNeededCount.value)] + return NodeObject - def AddMaterial(self, Name, DisplayColor): - pName = ctypes.c_char_p(str.encode(Name)) - pPropertyID = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_addmaterial(self._handle, pName, DisplayColor, pPropertyID)) + def AddRoundNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addroundnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pPropertyID.value + return NodeObject - def RemoveMaterial(self, PropertyID): - nPropertyID = ctypes.c_uint32(PropertyID) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_removematerial(self._handle, nPropertyID)) + def AddCeilNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addceilnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def GetName(self, PropertyID): - nPropertyID = ctypes.c_uint32(PropertyID) - nNameBufferSize = ctypes.c_uint64(0) - nNameNeededChars = ctypes.c_uint64(0) - pNameBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_getname(self._handle, nPropertyID, nNameBufferSize, nNameNeededChars, pNameBuffer)) - nNameBufferSize = ctypes.c_uint64(nNameNeededChars.value) - pNameBuffer = (ctypes.c_char * (nNameNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_getname(self._handle, nPropertyID, nNameBufferSize, nNameNeededChars, pNameBuffer)) + def AddFloorNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addfloornode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pNameBuffer.value.decode() + return NodeObject - def SetName(self, PropertyID, Name): - nPropertyID = ctypes.c_uint32(PropertyID) - pName = ctypes.c_char_p(str.encode(Name)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_setname(self._handle, nPropertyID, pName)) + def AddSignNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addsignnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def SetDisplayColor(self, PropertyID, TheColor): - nPropertyID = ctypes.c_uint32(PropertyID) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_setdisplaycolor(self._handle, nPropertyID, TheColor)) + def AddFractNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addfractnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def GetDisplayColor(self, PropertyID): - nPropertyID = ctypes.c_uint32(PropertyID) - pTheColor = Color() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_basematerialgroup_getdisplaycolor(self._handle, nPropertyID, pTheColor)) + def AddAbsNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addabsnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pTheColor + return NodeObject - - -''' Class Implementation for ColorGroup -''' -class ColorGroup(Resource): - def __init__(self, handle, wrapper): - Resource.__init__(self, handle, wrapper) - def GetCount(self): - pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_getcount(self._handle, pCount)) + def AddExpNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addexpnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pCount.value + return NodeObject - def GetAllPropertyIDs(self): - nPropertyIDsCount = ctypes.c_uint64(0) - nPropertyIDsNeededCount = ctypes.c_uint64(0) - pPropertyIDsBuffer = (ctypes.c_uint32*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) - nPropertyIDsCount = ctypes.c_uint64(nPropertyIDsNeededCount.value) - pPropertyIDsBuffer = (ctypes.c_uint32 * nPropertyIDsNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + def AddLogNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addlognode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pPropertyIDsBuffer[i] for i in range(nPropertyIDsNeededCount.value)] + return NodeObject - def AddColor(self, TheColor): - pPropertyID = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_addcolor(self._handle, TheColor, pPropertyID)) + def AddLog2Node(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addlog2node(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pPropertyID.value + return NodeObject - def RemoveColor(self, PropertyID): - nPropertyID = ctypes.c_uint32(PropertyID) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_removecolor(self._handle, nPropertyID)) + def AddLog10Node(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addlog10node(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def SetColor(self, PropertyID, TheColor): - nPropertyID = ctypes.c_uint32(PropertyID) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_setcolor(self._handle, nPropertyID, TheColor)) + def AddLengthNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addlengthnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def GetColor(self, PropertyID): - nPropertyID = ctypes.c_uint32(PropertyID) - pTheColor = Color() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_colorgroup_getcolor(self._handle, nPropertyID, pTheColor)) + def AddTransposeNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addtransposenode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pTheColor + return NodeObject - - -''' Class Implementation for Texture2DGroup -''' -class Texture2DGroup(Resource): - def __init__(self, handle, wrapper): - Resource.__init__(self, handle, wrapper) - def GetCount(self): - pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_getcount(self._handle, pCount)) + def InverseNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_inversenode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pCount.value + return NodeObject - def GetAllPropertyIDs(self): - nPropertyIDsCount = ctypes.c_uint64(0) - nPropertyIDsNeededCount = ctypes.c_uint64(0) - pPropertyIDsBuffer = (ctypes.c_uint32*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) - nPropertyIDsCount = ctypes.c_uint64(nPropertyIDsNeededCount.value) - pPropertyIDsBuffer = (ctypes.c_uint32 * nPropertyIDsNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + def AddSqrtNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addsqrtnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pPropertyIDsBuffer[i] for i in range(nPropertyIDsNeededCount.value)] + return NodeObject - def AddTex2Coord(self, UVCoordinate): - pPropertyID = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_addtex2coord(self._handle, UVCoordinate, pPropertyID)) + def AddResourceIdNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addresourceidnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pPropertyID.value + return NodeObject - def GetTex2Coord(self, PropertyID): - nPropertyID = ctypes.c_uint32(PropertyID) - pUVCoordinate = Tex2Coord() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_gettex2coord(self._handle, nPropertyID, pUVCoordinate)) + def AddAdditionNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addadditionnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pUVCoordinate + return NodeObject - def RemoveTex2Coord(self, PropertyID): - nPropertyID = ctypes.c_uint32(PropertyID) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_removetex2coord(self._handle, nPropertyID)) + def AddSubtractionNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addsubtractionnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def GetTexture2D(self): - Texture2DInstanceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2dgroup_gettexture2d(self._handle, Texture2DInstanceHandle)) - if Texture2DInstanceHandle: - Texture2DInstanceObject = self._wrapper._polymorphicFactory(Texture2DInstanceHandle) + def AddMultiplicationNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addmultiplicationnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return Texture2DInstanceObject + return NodeObject - - -''' Class Implementation for CompositeMaterials -''' -class CompositeMaterials(Resource): - def __init__(self, handle, wrapper): - Resource.__init__(self, handle, wrapper) - def GetCount(self): - pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_getcount(self._handle, pCount)) + def AddDivisionNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_adddivisionnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pCount.value + return NodeObject - def GetAllPropertyIDs(self): - nPropertyIDsCount = ctypes.c_uint64(0) - nPropertyIDsNeededCount = ctypes.c_uint64(0) - pPropertyIDsBuffer = (ctypes.c_uint32*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) - nPropertyIDsCount = ctypes.c_uint64(nPropertyIDsNeededCount.value) - pPropertyIDsBuffer = (ctypes.c_uint32 * nPropertyIDsNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + def AddDotNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_adddotnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pPropertyIDsBuffer[i] for i in range(nPropertyIDsNeededCount.value)] + return NodeObject - def GetBaseMaterialGroup(self): - BaseMaterialGroupInstanceHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_getbasematerialgroup(self._handle, BaseMaterialGroupInstanceHandle)) - if BaseMaterialGroupInstanceHandle: - BaseMaterialGroupInstanceObject = self._wrapper._polymorphicFactory(BaseMaterialGroupInstanceHandle) + def AddCrossNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addcrossnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return BaseMaterialGroupInstanceObject + return NodeObject - def AddComposite(self, Composite): - nCompositeCount = ctypes.c_uint64(len(Composite)) - pCompositeBuffer = (CompositeConstituent*len(Composite))(*Composite) - pPropertyID = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_addcomposite(self._handle, nCompositeCount, pCompositeBuffer, pPropertyID)) + def AddMatVecMultiplicationNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addmatvecmultiplicationnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pPropertyID.value + return NodeObject - def RemoveComposite(self, PropertyID): - nPropertyID = ctypes.c_uint32(PropertyID) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_removecomposite(self._handle, nPropertyID)) + def AddMinNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addminnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def GetComposite(self, PropertyID): - nPropertyID = ctypes.c_uint32(PropertyID) - nCompositeCount = ctypes.c_uint64(0) - nCompositeNeededCount = ctypes.c_uint64(0) - pCompositeBuffer = (CompositeConstituent*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_getcomposite(self._handle, nPropertyID, nCompositeCount, nCompositeNeededCount, pCompositeBuffer)) - nCompositeCount = ctypes.c_uint64(nCompositeNeededCount.value) - pCompositeBuffer = (CompositeConstituent * nCompositeNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_compositematerials_getcomposite(self._handle, nPropertyID, nCompositeCount, nCompositeNeededCount, pCompositeBuffer)) + def AddMaxNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addmaxnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pCompositeBuffer[i] for i in range(nCompositeNeededCount.value)] + return NodeObject - - -''' Class Implementation for MultiPropertyGroup -''' -class MultiPropertyGroup(Resource): - def __init__(self, handle, wrapper): - Resource.__init__(self, handle, wrapper) - def GetCount(self): - pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getcount(self._handle, pCount)) + def AddFmodNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addfmodnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pCount.value + return NodeObject - def GetAllPropertyIDs(self): - nPropertyIDsCount = ctypes.c_uint64(0) - nPropertyIDsNeededCount = ctypes.c_uint64(0) - pPropertyIDsBuffer = (ctypes.c_uint32*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) - nPropertyIDsCount = ctypes.c_uint64(nPropertyIDsNeededCount.value) - pPropertyIDsBuffer = (ctypes.c_uint32 * nPropertyIDsNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getallpropertyids(self._handle, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + def AddPowNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addpownode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pPropertyIDsBuffer[i] for i in range(nPropertyIDsNeededCount.value)] + return NodeObject - def AddMultiProperty(self, PropertyIDs): - nPropertyIDsCount = ctypes.c_uint64(len(PropertyIDs)) - pPropertyIDsBuffer = (ctypes.c_uint32*len(PropertyIDs))(*PropertyIDs) - pPropertyID = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_addmultiproperty(self._handle, nPropertyIDsCount, pPropertyIDsBuffer, pPropertyID)) + def AddSelectNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addselectnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pPropertyID.value + return NodeObject - def SetMultiProperty(self, PropertyID, PropertyIDs): - nPropertyID = ctypes.c_uint32(PropertyID) - nPropertyIDsCount = ctypes.c_uint64(len(PropertyIDs)) - pPropertyIDsBuffer = (ctypes.c_uint32*len(PropertyIDs))(*PropertyIDs) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_setmultiproperty(self._handle, nPropertyID, nPropertyIDsCount, pPropertyIDsBuffer)) + def AddClampNode(self, Identifier, Configuration, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addclampnode(self._handle, pIdentifier, Configuration, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def GetMultiProperty(self, PropertyID): - nPropertyID = ctypes.c_uint32(PropertyID) - nPropertyIDsCount = ctypes.c_uint64(0) - nPropertyIDsNeededCount = ctypes.c_uint64(0) - pPropertyIDsBuffer = (ctypes.c_uint32*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getmultiproperty(self._handle, nPropertyID, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) - nPropertyIDsCount = ctypes.c_uint64(nPropertyIDsNeededCount.value) - pPropertyIDsBuffer = (ctypes.c_uint32 * nPropertyIDsNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getmultiproperty(self._handle, nPropertyID, nPropertyIDsCount, nPropertyIDsNeededCount, pPropertyIDsBuffer)) + def AddComposeVectorNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addcomposevectornode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return [pPropertyIDsBuffer[i] for i in range(nPropertyIDsNeededCount.value)] + return NodeObject - def RemoveMultiProperty(self, PropertyID): - nPropertyID = ctypes.c_uint32(PropertyID) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_removemultiproperty(self._handle, nPropertyID)) + def AddVectorFromScalarNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addvectorfromscalarnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def GetLayerCount(self): - pCount = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getlayercount(self._handle, pCount)) + def AddDecomposeVectorNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_adddecomposevectornode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pCount.value + return NodeObject - def AddLayer(self, TheLayer): - pLayerIndex = ctypes.c_uint32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_addlayer(self._handle, TheLayer, pLayerIndex)) + def AddComposeMatrixNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addcomposematrixnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pLayerIndex.value + return NodeObject - def GetLayer(self, LayerIndex): - nLayerIndex = ctypes.c_uint32(LayerIndex) - pTheLayer = MultiPropertyLayer() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_getlayer(self._handle, nLayerIndex, pTheLayer)) + def AddMatrixFromRowsNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addmatrixfromrowsnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pTheLayer + return NodeObject - def RemoveLayer(self, LayerIndex): - nLayerIndex = ctypes.c_uint32(LayerIndex) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_multipropertygroup_removelayer(self._handle, nLayerIndex)) + def AddMatrixFromColumnsNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addmatrixfromcolumnsnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - - -''' Class Implementation for Attachment -''' -class Attachment(Base): - def __init__(self, handle, wrapper): - Base.__init__(self, handle, wrapper) - def GetPath(self): - nPathBufferSize = ctypes.c_uint64(0) - nPathNeededChars = ctypes.c_uint64(0) - pPathBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_getpath(self._handle, nPathBufferSize, nPathNeededChars, pPathBuffer)) - nPathBufferSize = ctypes.c_uint64(nPathNeededChars.value) - pPathBuffer = (ctypes.c_char * (nPathNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_getpath(self._handle, nPathBufferSize, nPathNeededChars, pPathBuffer)) + def AddConstantNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addconstantnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pPathBuffer.value.decode() + return NodeObject - def SetPath(self, Path): - pPath = ctypes.c_char_p(str.encode(Path)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_setpath(self._handle, pPath)) + def AddConstVecNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addconstvecnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def PackagePart(self): - PackagePartHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_packagepart(self._handle, PackagePartHandle)) - if PackagePartHandle: - PackagePartObject = self._wrapper._polymorphicFactory(PackagePartHandle) + def AddConstMatNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addconstmatnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return PackagePartObject + return NodeObject - def GetRelationShipType(self): - nPathBufferSize = ctypes.c_uint64(0) - nPathNeededChars = ctypes.c_uint64(0) - pPathBuffer = ctypes.c_char_p(None) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_getrelationshiptype(self._handle, nPathBufferSize, nPathNeededChars, pPathBuffer)) - nPathBufferSize = ctypes.c_uint64(nPathNeededChars.value) - pPathBuffer = (ctypes.c_char * (nPathNeededChars.value))() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_getrelationshiptype(self._handle, nPathBufferSize, nPathNeededChars, pPathBuffer)) + def AddMeshNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addmeshnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return pPathBuffer.value.decode() + return NodeObject - def SetRelationShipType(self, Path): - pPath = ctypes.c_char_p(str.encode(Path)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_setrelationshiptype(self._handle, pPath)) + def AddUnsignedMeshNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addunsignedmeshnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def WriteToFile(self, FileName): - pFileName = ctypes.c_char_p(str.encode(FileName)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_writetofile(self._handle, pFileName)) + def AddFunctionCallNode(self, Identifier, DisplayName, Tag): + pIdentifier = ctypes.c_char_p(str.encode(Identifier)) + pDisplayName = ctypes.c_char_p(str.encode(DisplayName)) + pTag = ctypes.c_char_p(str.encode(Tag)) + NodeHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addfunctioncallnode(self._handle, pIdentifier, pDisplayName, pTag, NodeHandle)) + if NodeHandle: + NodeObject = self._wrapper._polymorphicFactory(NodeHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return NodeObject - def ReadFromFile(self, FileName): - pFileName = ctypes.c_char_p(str.encode(FileName)) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_readfromfile(self._handle, pFileName)) + def GetNodes(self): + IteratorHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_getnodes(self._handle, IteratorHandle)) + if IteratorHandle: + IteratorObject = self._wrapper._polymorphicFactory(IteratorHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + return IteratorObject - def ReadFromCallback(self, TheReadCallbackFunc, StreamSize, TheSeekCallbackFunc, UserData): - nStreamSize = ctypes.c_uint64(StreamSize) - pUserData = ctypes.c_void_p(UserData) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_readfromcallback(self._handle, TheReadCallbackFunc, nStreamSize, TheSeekCallbackFunc, pUserData)) + def RemoveNode(self, NodeObject): + NodeHandle = None + if NodeObject: + NodeHandle = NodeObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_removenode(self._handle, NodeHandle)) - def GetStreamSize(self): - pStreamSize = ctypes.c_uint64() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_getstreamsize(self._handle, pStreamSize)) + def AddLink(self, SourceObject, TargetObject): + SourceHandle = None + if SourceObject: + SourceHandle = SourceObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + TargetHandle = None + if TargetObject: + TargetHandle = TargetObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addlink(self._handle, SourceHandle, TargetHandle)) - return pStreamSize.value - def WriteToBuffer(self): - nBufferCount = ctypes.c_uint64(0) - nBufferNeededCount = ctypes.c_uint64(0) - pBufferBuffer = (ctypes.c_uint8*0)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_writetobuffer(self._handle, nBufferCount, nBufferNeededCount, pBufferBuffer)) - nBufferCount = ctypes.c_uint64(nBufferNeededCount.value) - pBufferBuffer = (ctypes.c_uint8 * nBufferNeededCount.value)() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_writetobuffer(self._handle, nBufferCount, nBufferNeededCount, pBufferBuffer)) + def AddLinkByNames(self, Source, Target): + pSource = ctypes.c_char_p(str.encode(Source)) + pTarget = ctypes.c_char_p(str.encode(Target)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_addlinkbynames(self._handle, pSource, pTarget)) - return [pBufferBuffer[i] for i in range(nBufferNeededCount.value)] - def ReadFromBuffer(self, Buffer): - nBufferCount = ctypes.c_uint64(len(Buffer)) - pBufferBuffer = (ctypes.c_uint8*len(Buffer))(*Buffer) - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_attachment_readfrombuffer(self._handle, nBufferCount, pBufferBuffer)) + def Clear(self): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_clear(self._handle)) + + + def SortNodesTopologically(self): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_implicitfunction_sortnodestopologically(self._handle)) -''' Class Implementation for Texture2D +''' Class Implementation for FunctionFromImage3D ''' -class Texture2D(Resource): +class FunctionFromImage3D(Function): def __init__(self, handle, wrapper): - Resource.__init__(self, handle, wrapper) - def GetAttachment(self): - AttachmentHandle = ctypes.c_void_p() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_getattachment(self._handle, AttachmentHandle)) - if AttachmentHandle: - AttachmentObject = self._wrapper._polymorphicFactory(AttachmentHandle) + Function.__init__(self, handle, wrapper) + def GetImage3D(self): + Image3DHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionfromimage3d_getimage3d(self._handle, Image3DHandle)) + if Image3DHandle: + Image3DObject = self._wrapper._polymorphicFactory(Image3DHandle) else: raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') - return AttachmentObject + return Image3DObject - def SetAttachment(self, AttachmentObject): - AttachmentHandle = None - if AttachmentObject: - AttachmentHandle = AttachmentObject._handle + def SetImage3D(self, Image3DObject): + Image3DHandle = None + if Image3DObject: + Image3DHandle = Image3DObject._handle else: raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_setattachment(self._handle, AttachmentHandle)) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionfromimage3d_setimage3d(self._handle, Image3DHandle)) - def GetContentType(self): - pContentType = ctypes.c_int32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_getcontenttype(self._handle, pContentType)) + def SetFilter(self, Filter): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionfromimage3d_setfilter(self._handle, Filter)) - return TextureType(pContentType.value) - def SetContentType(self, ContentType): - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_setcontenttype(self._handle, ContentType)) + def GetFilter(self): + pFilter = ctypes.c_int32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionfromimage3d_getfilter(self._handle, pFilter)) + return TextureFilter(pFilter.value) - def GetTileStyleUV(self): + def SetTileStyles(self, TileStyleU, TileStyleV, TileStyleW): + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionfromimage3d_settilestyles(self._handle, TileStyleU, TileStyleV, TileStyleW)) + + + def GetTileStyles(self): pTileStyleU = ctypes.c_int32() pTileStyleV = ctypes.c_int32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_gettilestyleuv(self._handle, pTileStyleU, pTileStyleV)) + pTileStyleW = ctypes.c_int32() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionfromimage3d_gettilestyles(self._handle, pTileStyleU, pTileStyleV, pTileStyleW)) - return TextureTileStyle(pTileStyleU.value), TextureTileStyle(pTileStyleV.value) + return TextureTileStyle(pTileStyleU.value), TextureTileStyle(pTileStyleV.value), TextureTileStyle(pTileStyleW.value) - def SetTileStyleUV(self, TileStyleU, TileStyleV): - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_settilestyleuv(self._handle, TileStyleU, TileStyleV)) + def GetOffset(self): + pOffset = ctypes.c_double() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionfromimage3d_getoffset(self._handle, pOffset)) + return pOffset.value - def GetFilter(self): - pFilter = ctypes.c_int32() - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_getfilter(self._handle, pFilter)) + def SetOffset(self, Offset): + dOffset = ctypes.c_double(Offset) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionfromimage3d_setoffset(self._handle, dOffset)) - return TextureFilter(pFilter.value) - def SetFilter(self, Filter): - self._wrapper.checkError(self, self._wrapper.lib.lib3mf_texture2d_setfilter(self._handle, Filter)) + def GetScale(self): + pScale = ctypes.c_double() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionfromimage3d_getscale(self._handle, pScale)) + + return pScale.value + + def SetScale(self, Scale): + dScale = ctypes.c_double(Scale) + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_functionfromimage3d_setscale(self._handle, dScale)) @@ -6974,6 +12360,17 @@ def GetSliceStackByID(self, UniqueResourceID): return SliceStacInstanceObject + def GetLevelSetByID(self, UniqueResourceID): + nUniqueResourceID = ctypes.c_uint32(UniqueResourceID) + LevelSetObjectInstanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_getlevelsetbyid(self._handle, nUniqueResourceID, LevelSetObjectInstanceHandle)) + if LevelSetObjectInstanceHandle: + LevelSetObjectInstanceObject = self._wrapper._polymorphicFactory(LevelSetObjectInstanceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return LevelSetObjectInstanceObject + def GetBuildUUID(self): pHasUUID = ctypes.c_bool() nUUIDBufferSize = ctypes.c_uint64(0) @@ -7117,6 +12514,16 @@ def GetSliceStacks(self): return ResourceIteratorObject + def GetImage3Ds(self): + ResourceIteratorHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_getimage3ds(self._handle, ResourceIteratorHandle)) + if ResourceIteratorHandle: + ResourceIteratorObject = self._wrapper._polymorphicFactory(ResourceIteratorHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceIteratorObject + def MergeToModel(self): MergedModelInstanceHandle = ctypes.c_void_p() self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_mergetomodel(self._handle, MergedModelInstanceHandle)) @@ -7127,6 +12534,15 @@ def MergeToModel(self): return MergedModelInstanceObject + def MergeFromModel(self, ModelInstanceObject): + ModelInstanceHandle = None + if ModelInstanceObject: + ModelInstanceHandle = ModelInstanceObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_mergefrommodel(self._handle, ModelInstanceHandle)) + + def AddMeshObject(self): MeshObjectInstanceHandle = ctypes.c_void_p() self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_addmeshobject(self._handle, MeshObjectInstanceHandle)) @@ -7233,6 +12649,30 @@ def AddMultiPropertyGroup(self): return MultiPropertyGroupInstanceObject + def AddImageStack(self, ColumnCount, RowCount, SheetCount): + nColumnCount = ctypes.c_uint32(ColumnCount) + nRowCount = ctypes.c_uint32(RowCount) + nSheetCount = ctypes.c_uint32(SheetCount) + InstanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_addimagestack(self._handle, nColumnCount, nRowCount, nSheetCount, InstanceHandle)) + if InstanceHandle: + InstanceObject = self._wrapper._polymorphicFactory(InstanceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return InstanceObject + + def GetImageStackByID(self, UniqueResourceID): + nUniqueResourceID = ctypes.c_uint32(UniqueResourceID) + ImageStackInstanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_getimagestackbyid(self._handle, nUniqueResourceID, ImageStackInstanceHandle)) + if ImageStackInstanceHandle: + ImageStackInstanceObject = self._wrapper._polymorphicFactory(ImageStackInstanceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ImageStackInstanceObject + def AddBuildItem(self, ObjectObject, Transform): ObjectHandle = None if ObjectObject: @@ -7372,4 +12812,78 @@ def GetKeyStore(self): return KeyStoreObject + def GetFunctions(self): + TheResourceIteratorHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_getfunctions(self._handle, TheResourceIteratorHandle)) + if TheResourceIteratorHandle: + TheResourceIteratorObject = self._wrapper._polymorphicFactory(TheResourceIteratorHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return TheResourceIteratorObject + + def AddImplicitFunction(self): + FunctionInstanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_addimplicitfunction(self._handle, FunctionInstanceHandle)) + if FunctionInstanceHandle: + FunctionInstanceObject = self._wrapper._polymorphicFactory(FunctionInstanceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return FunctionInstanceObject + + def AddFunctionFromImage3D(self, Image3DInstanceObject): + Image3DInstanceHandle = None + if Image3DInstanceObject: + Image3DInstanceHandle = Image3DInstanceObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + FunctionInstanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_addfunctionfromimage3d(self._handle, Image3DInstanceHandle, FunctionInstanceHandle)) + if FunctionInstanceHandle: + FunctionInstanceObject = self._wrapper._polymorphicFactory(FunctionInstanceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return FunctionInstanceObject + + def AddVolumeData(self): + VolumeDataInstanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_addvolumedata(self._handle, VolumeDataInstanceHandle)) + if VolumeDataInstanceHandle: + VolumeDataInstanceObject = self._wrapper._polymorphicFactory(VolumeDataInstanceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return VolumeDataInstanceObject + + def AddLevelSet(self): + LevelSetInstanceHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_addlevelset(self._handle, LevelSetInstanceHandle)) + if LevelSetInstanceHandle: + LevelSetInstanceObject = self._wrapper._polymorphicFactory(LevelSetInstanceHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return LevelSetInstanceObject + + def GetLevelSets(self): + ResourceIteratorHandle = ctypes.c_void_p() + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_getlevelsets(self._handle, ResourceIteratorHandle)) + if ResourceIteratorHandle: + ResourceIteratorObject = self._wrapper._polymorphicFactory(ResourceIteratorHandle) + else: + raise ELib3MFException(ErrorCodes.INVALIDCAST, 'Invalid return/output value') + + return ResourceIteratorObject + + def RemoveResource(self, ResourceObject): + ResourceHandle = None + if ResourceObject: + ResourceHandle = ResourceObject._handle + else: + raise ELib3MFException(ErrorCodes.INVALIDPARAM, 'Invalid return/output value') + self._wrapper.checkError(self, self._wrapper.lib.lib3mf_model_removeresource(self._handle, ResourceHandle)) + + diff --git a/Autogenerated/Source/lib3mf_abi.hpp b/Autogenerated/Source/lib3mf_abi.hpp index 44b8273b8..f79071d19 100644 --- a/Autogenerated/Source/lib3mf_abi.hpp +++ b/Autogenerated/Source/lib3mf_abi.hpp @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++-Header file in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -575,6 +575,45 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerialsiterator_getcurrentcomposi */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup(Lib3MF_MultiPropertyGroupIterator pMultiPropertyGroupIterator, Lib3MF_MultiPropertyGroup * pResource); +/************************************************************************************************************************* + Class definition for Image3DIterator +**************************************************************************************************************************/ + +/** +* Returns the Image3D the iterator points at. +* +* @param[in] pImage3DIterator - Image3DIterator instance. +* @param[out] pResource - returns the Image3D instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3diterator_getcurrentimage3d(Lib3MF_Image3DIterator pImage3DIterator, Lib3MF_Image3D * pResource); + +/************************************************************************************************************************* + Class definition for FunctionIterator +**************************************************************************************************************************/ + +/** +* Returns the Function the iterator points at. +* +* @param[in] pFunctionIterator - FunctionIterator instance. +* @param[out] pResource - returns the Function instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functioniterator_getcurrentfunction(Lib3MF_FunctionIterator pFunctionIterator, Lib3MF_Function * pResource); + +/************************************************************************************************************************* + Class definition for LevelSetIterator +**************************************************************************************************************************/ + +/** +* Returns the LevelSet the iterator points at. +* +* @param[in] pLevelSetIterator - LevelSetIterator instance. +* @param[out] pResource - returns the MeshObject instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelsetiterator_getcurrentlevelset(Lib3MF_LevelSetIterator pLevelSetIterator, Lib3MF_LevelSet * pResource); + /************************************************************************************************************************* Class definition for MetaData **************************************************************************************************************************/ @@ -834,6 +873,15 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_object_ismeshobject(Lib3MF_Object pObject, b */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_object_iscomponentsobject(Lib3MF_Object pObject, bool * pIsComponentsObject); +/** +* Retrieves, if an object is a level set object +* +* @param[in] pObject - Object instance. +* @param[out] pIsLevelSetObject - returns, whether the object is a level set object +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_object_islevelsetobject(Lib3MF_Object pObject, bool * pIsLevelSetObject); + /** * Retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. * @@ -1166,6 +1214,174 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_ismanifoldandoriented(Lib3MF_Mesh */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_beamlattice(Lib3MF_MeshObject pMeshObject, Lib3MF_BeamLattice * pTheBeamLattice); +/** +* Retrieves the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[out] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_getvolumedata(Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this MeshObject. +* +* @param[in] pMeshObject - MeshObject instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshobject_setvolumedata(Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData pTheVolumeData); + +/************************************************************************************************************************* + Class definition for LevelSet +**************************************************************************************************************************/ + +/** +* Returns the function that is used as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getfunction(Lib3MF_LevelSet pLevelSet, Lib3MF_Function * pTheFunction); + +/** +* Sets the function to use as boundary shape. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheFunction - the function to use as boundary shape +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setfunction(Lib3MF_LevelSet pLevelSet, Lib3MF_Function pTheFunction); + +/** +* Returns the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTransform - the transformation matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_gettransform(Lib3MF_LevelSet pLevelSet, Lib3MF::sTransform * pTransform); + +/** +* Sets the transformation matrix into the coordinate system of the referenced Function. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_settransform(Lib3MF_LevelSet pLevelSet, const Lib3MF::sTransform * pTransform); + +/** +* Returns the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getchannelname(Lib3MF_LevelSet pLevelSet, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); + +/** +* Sets the name of the function output channel to use. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pChannelName - new name of the function output channel +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setchannelname(Lib3MF_LevelSet pLevelSet, const char * pChannelName); + +/** +* Sets the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setminfeaturesize(Lib3MF_LevelSet pLevelSet, Lib3MF_double dMinFeatureSize); + +/** +* Returns the minimal feature size as a hint for the function evaluator +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMinFeatureSize - minimal feature size +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getminfeaturesize(Lib3MF_LevelSet pLevelSet, Lib3MF_double * pMinFeatureSize); + +/** +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] dFallBackValue - fallback value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setfallbackvalue(Lib3MF_LevelSet pLevelSet, Lib3MF_double dFallBackValue); + +/** +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pFallBackValue - fallback value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getfallbackvalue(Lib3MF_LevelSet pLevelSet, Lib3MF_double * pFallBackValue); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] bMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setmeshbboxonly(Lib3MF_LevelSet pLevelSet, bool bMeshBBoxOnly); + +/** +* If set only the bounding box of the mesh is intersected with the boundary +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getmeshbboxonly(Lib3MF_LevelSet pLevelSet, bool * pMeshBBoxOnly); + +/** +* Sets the mesh to use as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setmesh(Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject pTheMesh); + +/** +* Returns the mesh that is used as evaluation domain +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheMesh - The mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getmesh(Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject * pTheMesh); + +/** +* Retrieves the VolumeData this Object. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[out] pTheVolumeData - the VolumeData of this Object +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_getvolumedata(Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData * pTheVolumeData); + +/** +* Sets the VolumeData of this LevelSet. +* +* @param[in] pLevelSet - LevelSet instance. +* @param[in] pTheVolumeData - the VolumeData of this MeshObject +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_levelset_setvolumedata(Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData pTheVolumeData); + /************************************************************************************************************************* Class definition for BeamLattice **************************************************************************************************************************/ @@ -1396,784 +1612,3179 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_addbeamset(Lib3MF_BeamLattice pB LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamlattice_getbeamset(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF_BeamSet * pBeamSet); /************************************************************************************************************************* - Class definition for Component + Class definition for FunctionReference **************************************************************************************************************************/ /** -* Returns the Resource Instance of the component. +* Returns the UniqueResourceID of the Function. Only functions with a 'pos'-input are allowed. * -* @param[in] pComponent - Component instance. -* @param[out] pObjectResource - filled with the Resource Instance. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getobjectresource(Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_getfunctionresourceid(Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 * pUniqueResourceID); /** -* Returns the UniqueResourceID of the component. +* Sets the UniqueResourceID to refer to. * -* @param[in] pComponent - Component instance. -* @param[out] pUniqueResourceID - returns the UniqueResourceID. +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nUniqueResourceID - UniqueResourceID of the function * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getobjectresourceid(Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_setfunctionresourceid(Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 nUniqueResourceID); /** -* returns, whether a component has a UUID and, if true, the component's UUID +* Returns the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[out] pHasUUID - flag whether the component has a UUID -* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) -* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pTransform - the transformation matrix * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getuuid(Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_gettransform(Lib3MF_FunctionReference pFunctionReference, Lib3MF::sTransform * pTransform); /** -* sets the component's UUID +* Sets the transformation matrix into the coordinate system of the referenced Function. * -* @param[in] pComponent - Component instance. -* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pTransform - new transformation matrix * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_setuuid(Lib3MF_Component pComponent, const char * pUUID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_settransform(Lib3MF_FunctionReference pFunctionReference, const Lib3MF::sTransform * pTransform); /** -* Returns, if the component has a different transformation than the identity matrix +* Returns the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] nChannelNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pChannelNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pChannelNameBuffer - buffer of the name of the function output channel, may be NULL * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_hastransform(Lib3MF_Component pComponent, bool * pHasTransform); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_getchannelname(Lib3MF_FunctionReference pFunctionReference, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer); /** -* Returns the transformation matrix of the component. +* Sets the name of the function output channel to use. * -* @param[in] pComponent - Component instance. -* @param[out] pTransform - filled with the component transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] pChannelName - new name of the function output channel * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_gettransform(Lib3MF_Component pComponent, Lib3MF::sTransform * pTransform); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_setchannelname(Lib3MF_FunctionReference pFunctionReference, const char * pChannelName); /** -* Sets the transformation matrix of the component. +* Sets the minimal feature size as a hint for the function evaluator * -* @param[in] pComponent - Component instance. -* @param[in] pTransform - new transformation matrix +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_settransform(Lib3MF_Component pComponent, const Lib3MF::sTransform * pTransform); - -/************************************************************************************************************************* - Class definition for ComponentsObject -**************************************************************************************************************************/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_setminfeaturesize(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dMinFeatureSize); /** -* Adds a new component to a components object. +* Returns the minimal feature size as a hint for the function evaluator * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] pObjectResource - object to add as component. Must not lead to circular references! -* @param[in] pTransform - optional transform matrix for the component. -* @param[out] pComponentInstance - new component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pMinFeatureSize - minimal feature size * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_addcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const Lib3MF::sTransform * pTransform, Lib3MF_Component * pComponentInstance); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_getminfeaturesize(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pMinFeatureSize); /** -* Retrieves a component from a component object. +* Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) -* @param[out] pComponentInstance - component instance +* @param[in] pFunctionReference - FunctionReference instance. +* @param[in] dFallBackValue - fallback value * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_getcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_setfallbackvalue(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dFallBackValue); /** -* Retrieves a component count of a component object. +* Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). * -* @param[in] pComponentsObject - ComponentsObject instance. -* @param[out] pCount - returns the component count +* @param[in] pFunctionReference - FunctionReference instance. +* @param[out] pFallBackValue - fallback value * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_getcomponentcount(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionreference_getfallbackvalue(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pFallBackValue); /************************************************************************************************************************* - Class definition for BeamSet + Class definition for VolumeDataColor **************************************************************************************************************************/ -/** -* Sets a beamset's name string -* -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pName - new name of the beamset. -* @return error code or 0 (success) -*/ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setname(Lib3MF_BeamSet pBeamSet, const char * pName); +/************************************************************************************************************************* + Class definition for MaterialMapping +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for VolumeDataComposite +**************************************************************************************************************************/ /** -* Retrieves a beamset's name string +* Returns the BaseMaterialGroup used within this volume data item * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pBaseMaterialGroupInstance - The BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getname(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_getbasematerialgroup(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); /** -* Sets a beamset's identifier string +* Sets the BaseMaterialGroup to use within this volume data item. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] pIdentifier - new name of the beamset. +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pBaseMaterialGroupInstance - The new BaseMaterialGroup instance of this VolumeDataComposite element * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setidentifier(Lib3MF_BeamSet pBeamSet, const char * pIdentifier); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_setbasematerialgroup(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance); /** -* Retrieves a beamset's identifier string +* Returns the number of material mappings of this VolumeDataComposite element * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) -* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[out] pCount - the number of material mappings. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getidentifier(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_getmaterialmappingcount(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 * pCount); /** -* Retrieves the reference count of a beamset +* Returns MaterialMappting with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the reference count +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - Index of the MaterialMapping in question. +* @param[out] pTheMaterialMapping - MaterialMapping used in this element * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_getmaterialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Sets the references of a beamset +* Adds a the MaterialMapping * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] pTransform - new transformation matrix +* @param[out] pTheMaterialMapping - The new MaterialMapping * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_addmaterialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, const Lib3MF::sTransform * pTransform, Lib3MF_MaterialMapping * pTheMaterialMapping); /** -* Retrieves the references of a beamset +* Removes the MaterialMapping with given index * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nReferencesBufferSize - Number of elements in buffer -* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @param[in] pVolumeDataComposite - VolumeDataComposite instance. +* @param[in] nIndex - The index of the MaterialMapping to be removed. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedatacomposite_removematerialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex); + +/************************************************************************************************************************* + Class definition for VolumeDataProperty +**************************************************************************************************************************/ /** -* Retrieves the ball reference count of a beamset +* Gets the qualified name of this property. * -* @param[in] pBeamSet - BeamSet instance. -* @param[out] pCount - returns the ball reference count +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] nPropertyNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pPropertyNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPropertyNameBuffer - buffer of The qualified name of this property., may be NULL * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getballreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataproperty_getname(Lib3MF_VolumeDataProperty pVolumeDataProperty, const Lib3MF_uint32 nPropertyNameBufferSize, Lib3MF_uint32* pPropertyNameNeededChars, char * pPropertyNameBuffer); /** -* Sets the ball references of a beamset +* Sets whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[in] bIsRequired - New value for whether this property is required to process this 3MF document instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setballreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataproperty_setisrequired(Lib3MF_VolumeDataProperty pVolumeDataProperty, bool bIsRequired); /** -* Retrieves the ball references of a beamset +* Returns whether this property is required to process this 3MF document instance. * -* @param[in] pBeamSet - BeamSet instance. -* @param[in] nBallReferencesBufferSize - Number of elements in buffer -* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @param[in] pVolumeDataProperty - VolumeDataProperty instance. +* @param[out] pIsRequired - Is this property required to process this 3MF document instance? * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getballreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedataproperty_isrequired(Lib3MF_VolumeDataProperty pVolumeDataProperty, bool * pIsRequired); /************************************************************************************************************************* - Class definition for BaseMaterialGroup + Class definition for VolumeData **************************************************************************************************************************/ /** -* Retrieves the count of base materials in the material group. +* Returns the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[out] pCount - returns the count of base materials. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - filled with the VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getcount(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getcomposite(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* returns all the PropertyIDs of all materials in this group +* Creates a new VolumeDataComposite for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheCompositeData - The new VolumeDataComposite of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getallpropertyids(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_createnewcomposite(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData); /** -* Adds a new material to the material group +* Removes the VolumeDataComposite of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] pName - new name of the base material. -* @param[in] pDisplayColor - Display color of the material -* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_addmaterial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const Lib3MF::sColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_removecomposite(Lib3MF_VolumeData pVolumeData); /** -* Removes a material from the material group. +* Returns the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pTheColorData - filled with the VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_removematerial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getcolor(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataColor * pTheColorData); /** -* Returns the base material's name +* Creates a new VolumeDataColor for this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] nNameBufferSize - size of the buffer (including trailing 0) -* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheColorData - The new VolumeDataColor of this VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_createnewcolor(Lib3MF_VolumeData pVolumeData, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataColor * pTheColorData); /** -* Sets a base material's name +* Removes the VolumeDataColor of this VolumeData instance * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pName - new name of the base material. +* @param[in] pVolumeData - VolumeData instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_setname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_removecolor(Lib3MF_VolumeData pVolumeData); /** -* Sets a base material's display color. +* Returns the number of VolumeDataProperty * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[in] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[out] pCount - the number of VolumeDataProperty-elements within this VolumdeData * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_setdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF::sColor * pTheColor); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getpropertycount(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 * pCount); /** -* Returns a base material's display color. +* Returns the VolumeDataProperty at a given Index * -* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. -* @param[in] nPropertyID - PropertyID of the material in the material group. -* @param[out] pTheColor - The base material's display color +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be returned. +* @param[out] pTheVolumeDataProperty - the VolumeDataProperty at the given index. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sColor * pTheColor); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_getproperty(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Adds a new VolumeDataProperty from a Function +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] pName - the qualified name (namespace+name) of the Property +* @param[in] pTheFunction - Function used in this element +* @param[out] pTheVolumeDataProperty - the newly created VolumeDataProperty. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_addpropertyfromfunction(Lib3MF_VolumeData pVolumeData, const char * pName, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty); + +/** +* Removes the VolumeDataProperty with a given index +* +* @param[in] pVolumeData - VolumeData instance. +* @param[in] nIndex - the index of the VolumeDataProperty to be removed. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_volumedata_removeproperty(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex); /************************************************************************************************************************* - Class definition for ColorGroup + Class definition for Component **************************************************************************************************************************/ /** -* Retrieves the count of base materials in this Color Group. +* Returns the Resource Instance of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[out] pCount - returns the count of colors within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pObjectResource - filled with the Resource Instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getcount(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getobjectresource(Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource); /** -* returns all the PropertyIDs of all colors within this group +* Returns the UniqueResourceID of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @param[in] pComponent - Component instance. +* @param[out] pUniqueResourceID - returns the UniqueResourceID. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getallpropertyids(Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getobjectresourceid(Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID); /** -* Adds a new value. +* returns, whether a component has a UUID and, if true, the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] pTheColor - The new color -* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @param[in] pComponent - Component instance. +* @param[out] pHasUUID - flag whether the component has a UUID +* @param[in] nUUIDBufferSize - size of the buffer (including trailing 0) +* @param[out] pUUIDNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pUUIDBuffer - buffer of the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', may be NULL * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_addcolor(Lib3MF_ColorGroup pColorGroup, const Lib3MF::sColor * pTheColor, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_getuuid(Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer); /** -* Removes a color from the color group. +* sets the component's UUID * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @param[in] pComponent - Component instance. +* @param[in] pUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_removecolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_setuuid(Lib3MF_Component pComponent, const char * pUUID); /** -* Sets a color value. +* Returns, if the component has a different transformation than the identity matrix * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[in] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pHasTransform - if true is returned, the transformation is not equal than the identity * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_setcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const Lib3MF::sColor * pTheColor); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_hastransform(Lib3MF_Component pComponent, bool * pHasTransform); /** -* Sets a color value. +* Returns the transformation matrix of the component. * -* @param[in] pColorGroup - ColorGroup instance. -* @param[in] nPropertyID - PropertyID of a color within this color group. -* @param[out] pTheColor - The color +* @param[in] pComponent - Component instance. +* @param[out] pTransform - filled with the component transformation matrix * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sColor * pTheColor); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_gettransform(Lib3MF_Component pComponent, Lib3MF::sTransform * pTransform); + +/** +* Sets the transformation matrix of the component. +* +* @param[in] pComponent - Component instance. +* @param[in] pTransform - new transformation matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_component_settransform(Lib3MF_Component pComponent, const Lib3MF::sTransform * pTransform); /************************************************************************************************************************* - Class definition for Texture2DGroup + Class definition for ComponentsObject **************************************************************************************************************************/ /** -* Retrieves the count of tex2coords in the Texture2DGroup. +* Adds a new component to a components object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pCount - returns the count of tex2coords. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] pObjectResource - object to add as component. Must not lead to circular references! +* @param[in] pTransform - optional transform matrix for the component. +* @param[out] pComponentInstance - new component instance * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_getcount(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_addcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const Lib3MF::sTransform * pTransform, Lib3MF_Component * pComponentInstance); /** -* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* Retrieves a component from a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) +* @param[out] pComponentInstance - component instance * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_getallpropertyids(Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_getcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance); /** -* Adds a new tex2coord to the Texture2DGroup +* Retrieves a component count of a component object. * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. -* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @param[in] pComponentsObject - ComponentsObject instance. +* @param[out] pCount - returns the component count * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_addtex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF::sTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_componentsobject_getcomponentcount(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount); + +/************************************************************************************************************************* + Class definition for BeamSet +**************************************************************************************************************************/ /** -* Obtains a tex2coord to the Texture2DGroup +* Sets a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. -* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pName - new name of the beamset. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_gettex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sTex2Coord * pUVCoordinate); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setname(Lib3MF_BeamSet pBeamSet, const char * pName); /** -* Removes a tex2coords from the Texture2DGroup. +* Retrieves a beamset's name string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the beamset., may be NULL * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_removetex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getname(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); /** -* Obtains the texture2D instance of this group. +* Sets a beamset's identifier string * -* @param[in] pTexture2DGroup - Texture2DGroup instance. -* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @param[in] pBeamSet - BeamSet instance. +* @param[in] pIdentifier - new name of the beamset. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_gettexture2d(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setidentifier(Lib3MF_BeamSet pBeamSet, const char * pIdentifier); + +/** +* Retrieves a beamset's identifier string +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of returns the identifier of the beamset., may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getidentifier(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Retrieves the reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the reference count +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[in] pReferencesBuffer - uint32 buffer of the new indices of all beams in this beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nReferencesBufferSize - Number of elements in buffer +* @param[out] pReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer); + +/** +* Retrieves the ball reference count of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[out] pCount - returns the ball reference count +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getballreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount); + +/** +* Sets the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[in] pBallReferencesBuffer - uint32 buffer of the new indices of all balls in this beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_setballreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer); + +/** +* Retrieves the ball references of a beamset +* +* @param[in] pBeamSet - BeamSet instance. +* @param[in] nBallReferencesBufferSize - Number of elements in buffer +* @param[out] pBallReferencesNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_beamset_getballreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer); /************************************************************************************************************************* - Class definition for CompositeMaterials + Class definition for BaseMaterialGroup **************************************************************************************************************************/ /** -* Retrieves the count of Composite-s in the CompositeMaterials. +* Retrieves the count of base materials in the material group. * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pCount - returns the count of Composite-s +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[out] pCount - returns the count of base materials. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getcount(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getcount(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount); /** -* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* returns all the PropertyIDs of all materials in this group * -* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getallpropertyids(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new material to the material group +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] pName - new name of the base material. +* @param[in] pDisplayColor - Display color of the material +* @param[out] pPropertyID - returns new PropertyID of the new material in the material group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_addmaterial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const Lib3MF::sColor * pDisplayColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a material from the material group. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_removematerial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID); + +/** +* Returns the base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of returns the name of the base material., may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* Sets a base material's name +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pName - new name of the base material. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_setname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName); + +/** +* Sets a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[in] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_setdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF::sColor * pTheColor); + +/** +* Returns a base material's display color. +* +* @param[in] pBaseMaterialGroup - BaseMaterialGroup instance. +* @param[in] nPropertyID - PropertyID of the material in the material group. +* @param[out] pTheColor - The base material's display color +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_basematerialgroup_getdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sColor * pTheColor); + +/************************************************************************************************************************* + Class definition for ColorGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of base materials in this Color Group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[out] pCount - returns the count of colors within this color group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getcount(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all colors within this group +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the color in the color group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getallpropertyids(Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] pTheColor - The new color +* @param[out] pPropertyID - PropertyID of the new color within this color group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_addcolor(Lib3MF_ColorGroup pColorGroup, const Lib3MF::sColor * pTheColor, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a color from the color group. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of the color to be removed from the color group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_removecolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[in] pTheColor - The color +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_setcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const Lib3MF::sColor * pTheColor); + +/** +* Sets a color value. +* +* @param[in] pColorGroup - ColorGroup instance. +* @param[in] nPropertyID - PropertyID of a color within this color group. +* @param[out] pTheColor - The color +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_colorgroup_getcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sColor * pTheColor); + +/************************************************************************************************************************* + Class definition for Texture2DGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of tex2coords in the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pCount - returns the count of tex2coords. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_getcount(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all tex2coords in this Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_getallpropertyids(Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @param[out] pPropertyID - returns new PropertyID of the new tex2coord in the Texture2DGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_addtex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF::sTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID); + +/** +* Obtains a tex2coord to the Texture2DGroup +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. +* @param[out] pUVCoordinate - The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_gettex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, Lib3MF::sTex2Coord * pUVCoordinate); + +/** +* Removes a tex2coords from the Texture2DGroup. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_removetex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID); + +/** +* Obtains the texture2D instance of this group. +* +* @param[in] pTexture2DGroup - Texture2DGroup instance. +* @param[out] pTexture2DInstance - the texture2D instance of this group. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2dgroup_gettexture2d(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance); + +/************************************************************************************************************************* + Class definition for CompositeMaterials +**************************************************************************************************************************/ + +/** +* Retrieves the count of Composite-s in the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pCount - returns the count of Composite-s +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getcount(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. * @param[in] nPropertyIDsBufferSize - Number of elements in buffer * @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. * @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the Composite-Mixing Values in the CompositeMaterials. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getallpropertyids(Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getallpropertyids(Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getbasematerialgroup(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); + +/** +* Adds a new Composite-Mixing Values to the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite +* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_addcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const Lib3MF::sCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_removecomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); + +/** +* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* +* @param[in] pCompositeMaterials - CompositeMaterials instance. +* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. +* @param[in] nCompositeBufferSize - Number of elements in buffer +* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, Lib3MF::sCompositeConstituent * pCompositeBuffer); + +/************************************************************************************************************************* + Class definition for MultiPropertyGroup +**************************************************************************************************************************/ + +/** +* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the count of MultiProperty-s +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getcount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getallpropertyids(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Adds a new MultiProperty to the MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. +* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_addmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); + +/** +* Sets the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_setmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Obtains the PropertyIDs of a MultiProperty. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. +* @param[in] nPropertyIDsBufferSize - Number of elements in buffer +* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); + +/** +* Removes a MultiProperty from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_removemultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); + +/** +* Retrieves the number of layers of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[out] pCount - returns the number of layers +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getlayercount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); + +/** +* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup +* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_addlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF::sMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); + +/** +* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried +* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, Lib3MF::sMultiPropertyLayer * pTheLayer); + +/** +* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* +* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. +* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_removelayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); + +/************************************************************************************************************************* + Class definition for Image3D +**************************************************************************************************************************/ + +/** +* returns the name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] nNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pNameBuffer - buffer of the name of this Image3D, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3d_getname(Lib3MF_Image3D pImage3D, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer); + +/** +* sets a new name of this Image3D +* +* @param[in] pImage3D - Image3D instance. +* @param[in] pName - the new name of this Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3d_setname(Lib3MF_Image3D pImage3D, const char * pName); + +/** +* Retrieves, if this Image3D is a ImageStack +* +* @param[in] pImage3D - Image3D instance. +* @param[out] pIsImageStack - returns, whether the Image3D is an ImageStack +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_image3d_isimagestack(Lib3MF_Image3D pImage3D, bool * pIsImageStack); + +/************************************************************************************************************************* + Class definition for ImageStack +**************************************************************************************************************************/ + +/** +* Retrieves the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pRowCount - number of rows +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getrowcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pRowCount); + +/** +* Sets the number of rows in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nRowCount - number of rows +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_setrowcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nRowCount); + +/** +* Retrieves the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pColumnCount - number of columns +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getcolumncount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pColumnCount); + +/** +* Sets the number of columns in each image of this image3d +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nColumnCount - number of columns +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_setcolumncount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nColumnCount); + +/** +* Retrieves the number of images in the stack. +* +* @param[in] pImageStack - ImageStack instance. +* @param[out] pSheetCount - number of images +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getsheetcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pSheetCount); + +/** +* Retrieves a sheet of the stack. Raises an error if sheet is not set. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_getsheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment * pSheet); + +/** +* Sets a sheet to an existing attachment. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_setsheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment pSheet); + +/** +* Creates a new sheet attachment with empty data. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_createemptysheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a memory buffer. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] nDataBufferSize - Number of elements in buffer +* @param[in] pDataBuffer - uint8 buffer of binary image data +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_createsheetfrombuffer(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_uint64 nDataBufferSize, const Lib3MF_uint8 * pDataBuffer, Lib3MF_Attachment * pSheet); + +/** +* Creates a new sheet attachment from a file on disk. +* +* @param[in] pImageStack - ImageStack instance. +* @param[in] nIndex - index of the image (0-based) +* @param[in] pPath - path of part in the package +* @param[in] pFileName - file name to read from +* @param[out] pSheet - attachment containing the image +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_imagestack_createsheetfromfile(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, const char * pFileName, Lib3MF_Attachment * pSheet); + +/************************************************************************************************************************* + Class definition for Attachment +**************************************************************************************************************************/ + +/** +* Retrieves an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getpath(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's package path. This function will be removed in a later release. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new path of the attachment. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_setpath(Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Returns the PackagePart that is this attachment. +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pPackagePart - The PackagePart of this attachment. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_packagepart(Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); + +/** +* Retrieves an attachment's relationship type +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nPathBufferSize - size of the buffer (including trailing 0) +* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getrelationshiptype(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); + +/** +* Sets an attachment's relationship type. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pPath - new relationship type string. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_setrelationshiptype(Lib3MF_Attachment pAttachment, const char * pPath); + +/** +* Writes out the attachment as file. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to write into. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_writetofile(Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pFileName - file to read from. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfromfile(Lib3MF_Attachment pAttachment, const char * pFileName); + +/** +* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* +* @param[in] pAttachment - Attachment instance. +* @param[in] pTheReadCallback - Callback to call for reading a data chunk +* @param[in] nStreamSize - number of bytes the callback returns +* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. +* @param[in] pUserData - Userdata that is passed to the callback function +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfromcallback(Lib3MF_Attachment pAttachment, Lib3MF::ReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MF::SeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); + +/** +* Retrieves the size of the attachment stream +* +* @param[in] pAttachment - Attachment instance. +* @param[out] pStreamSize - the stream size +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getstreamsize(Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); + +/** +* Writes out the attachment into a buffer +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. +* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_writetobuffer(Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); + +/** +* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* +* @param[in] pAttachment - Attachment instance. +* @param[in] nBufferBufferSize - Number of elements in buffer +* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfrombuffer(Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); + +/************************************************************************************************************************* + Class definition for Texture2D +**************************************************************************************************************************/ + +/** +* Retrieves the attachment located at the path of the texture. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); + +/** +* Sets the texture's package path to the path of the attachment. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] pAttachment - attachment that holds the texture's image information. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pContentType - returns content type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getcontenttype(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureType * pContentType); + +/** +* Retrieves a texture's content type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eContentType - new Content Type +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setcontenttype(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureType eContentType); + +/** +* Retrieves a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pTileStyleU - returns tilestyle type enum. +* @param[out] pTileStyleV - returns tilestyle type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_gettilestyleuv(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureTileStyle * pTileStyleU, Lib3MF::eTextureTileStyle * pTileStyleV); + +/** +* Sets a texture's tilestyle type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eTileStyleU - new tilestyle type enum. +* @param[in] eTileStyleV - new tilestyle type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_settilestyleuv(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureTileStyle eTileStyleU, Lib3MF::eTextureTileStyle eTileStyleV); + +/** +* Retrieves a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[out] pFilter - returns filter type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getfilter(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureFilter * pFilter); + +/** +* Sets a texture's filter type. +* +* @param[in] pTexture2D - Texture2D instance. +* @param[in] eFilter - sets new filter type enum. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setfilter(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureFilter eFilter); + +/************************************************************************************************************************* + Class definition for ImplicitPort +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_getidentifier(Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_setidentifier(Lib3MF_ImplicitPort pImplicitPort, const char * pIdentifier); + +/** +* Retrieves the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_getdisplayname(Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_setdisplayname(Lib3MF_ImplicitPort pImplicitPort, const char * pDisplayName); + +/** +* Sets the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] eImplicitPortType - the type +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_settype(Lib3MF_ImplicitPort pImplicitPort, Lib3MF::eImplicitPortType eImplicitPortType); + +/** +* Retrieves the type of the port +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[out] pImplicitPortType - the type +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_gettype(Lib3MF_ImplicitPort pImplicitPort, Lib3MF::eImplicitPortType * pImplicitPortType); + +/** +* Retrieves the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] nReferenceBufferSize - size of the buffer (including trailing 0) +* @param[out] pReferenceNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pReferenceBuffer - buffer of the reference, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_getreference(Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nReferenceBufferSize, Lib3MF_uint32* pReferenceNeededChars, char * pReferenceBuffer); + +/** +* Sets the reference of the port, only used for input ports +* +* @param[in] pImplicitPort - ImplicitPort instance. +* @param[in] pReference - the reference +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitport_setreference(Lib3MF_ImplicitPort pImplicitPort, const char * pReference); + +/************************************************************************************************************************* + Class definition for Iterator +**************************************************************************************************************************/ + +/** +* Iterates to the next item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasNext - Iterates to the next item in the list. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_iterator_movenext(Lib3MF_Iterator pIterator, bool * pHasNext); + +/** +* Iterates to the previous item in the list. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pHasPrevious - Iterates to the previous item in the list. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_iterator_moveprevious(Lib3MF_Iterator pIterator, bool * pHasPrevious); + +/** +* Returns the number of items the iterator captures. +* +* @param[in] pIterator - Iterator instance. +* @param[out] pCount - returns the number of items the iterator captures. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_iterator_count(Lib3MF_Iterator pIterator, Lib3MF_uint64 * pCount); + +/************************************************************************************************************************* + Class definition for ImplicitPortIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pImplicitPortIterator - ImplicitPortIterator instance. +* @param[out] pPort - The current element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitportiterator_getcurrent(Lib3MF_ImplicitPortIterator pImplicitPortIterator, Lib3MF_ImplicitPort * pPort); + +/************************************************************************************************************************* + Class definition for ImplicitNode +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getidentifier(Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_setidentifier(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier); + +/** +* Retrieves the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getdisplayname(Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_setdisplayname(Lib3MF_ImplicitNode pImplicitNode, const char * pDisplayName); + +/** +* Retrieves the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] nTagBufferSize - size of the buffer (including trailing 0) +* @param[out] pTagNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pTagBuffer - buffer of the tag, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_gettag(Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nTagBufferSize, Lib3MF_uint32* pTagNeededChars, char * pTagBuffer); + +/** +* Sets the tag of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pTag - the tag +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_settag(Lib3MF_ImplicitNode pImplicitNode, const char * pTag); + +/** +* Retrieves the type of the node +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pType - the type of the node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getnodetype(Lib3MF_ImplicitNode pImplicitNode, Lib3MF::eImplicitNodeType * pType); + +/** +* Add an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[out] pPort - +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_addinput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator for the inputs +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getinputs(Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Add an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[out] pPort - +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_addoutput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pIterator - the iterator the outputs +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_getoutputs(Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Retrieves an input +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_findinput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_findoutput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/** +* Checks if the types of the input and output ports are valid for the node type +* +* @param[in] pImplicitNode - ImplicitNode instance. +* @param[out] pValid - true, if the types are valid +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitnode_aretypesvalid(Lib3MF_ImplicitNode pImplicitNode, bool * pValid); + +/************************************************************************************************************************* + Class definition for OneInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pInput - the input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_oneinputnode_getinputa(Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves the output +* +* @param[in] pOneInputNode - OneInputNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_oneinputnode_getoutputresult(Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for SinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcSinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcCosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SinhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CoshNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TanhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for RoundNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CeilNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FloorNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SignNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FractNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for AbsNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ExpNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LogNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for Log10Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for LengthNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for TransposeNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for InverseNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SqrtNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ResourceIdNode +**************************************************************************************************************************/ + +/** +* Sets the Resource that the resourceid attribute of the node will point to +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[in] pResource - the resource +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_resourceidnode_setresource(Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource pResource); + +/** +* Retrieves the resource of the node +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pResource - the resource +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_resourceidnode_getresource(Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource * pResource); + +/** +* Retrieves the output +* +* @param[in] pResourceIdNode - ResourceIdNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_resourceidnode_getoutputvalue(Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for TwoInputNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pTwoInputNode - TwoInputNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_twoinputnode_getinputb(Lib3MF_TwoInputNode pTwoInputNode, Lib3MF_ImplicitPort * pB); + +/************************************************************************************************************************* + Class definition for AdditionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SubtractionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DivisionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DotNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for CrossNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ArcTan2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MatVecMultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for MaxNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for FmodNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for ModNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for PowNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for SelectNode +**************************************************************************************************************************/ + +/** +* Retrieves the second input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pB - the second input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_selectnode_getinputb(Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pB); + +/** +* Retrieves the third input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pC - the third input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_selectnode_getinputc(Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pC); + +/** +* Retrieves the fourth input +* +* @param[in] pSelectNode - SelectNode instance. +* @param[out] pD - the fourth input +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_selectnode_getinputd(Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pD); + +/************************************************************************************************************************* + Class definition for ClampNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the lower limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMin - the input for the lower limit +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_clampnode_getinputmin(Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMin); + +/** +* Retrieves the input for the upper limit +* +* @param[in] pClampNode - ClampNode instance. +* @param[out] pMax - the input for the upper limit +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_clampnode_getinputmax(Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMax); + +/************************************************************************************************************************* + Class definition for ComposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the x component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pX - the input for the x component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composevectornode_getinputx(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the input for the y component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pY - the input for the y component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composevectornode_getinputy(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the input for the z component +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pZ - the input for the z component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composevectornode_getinputz(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/** +* Retrieves the output +* +* @param[in] pComposeVectorNode - ComposeVectorNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composevectornode_getoutputresult(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for VectorFromScalarNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class definition for DecomposeVectorNode +**************************************************************************************************************************/ + +/** +* Retrieves the input +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pA - the input port for the vector to decompose +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_decomposevectornode_getinputa(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pA); + +/** +* Retrieves the output for the x component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pX - the output for the x component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_decomposevectornode_getoutputx(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pX); + +/** +* Retrieves the output for the y component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pY - the output for the y component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_decomposevectornode_getoutputy(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pY); + +/** +* Retrieves the output for the z component +* +* @param[in] pDecomposeVectorNode - DecomposeVectorNode instance. +* @param[out] pZ - the output for the z component +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_decomposevectornode_getoutputz(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pZ); + +/************************************************************************************************************************* + Class definition for ComposeMatrixNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the element 0 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM00 - the input for the m00 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm00(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM00); + +/** +* Retrieves the input for the element 0 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM01 - the input for the m01 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm01(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM01); + +/** +* Retrieves the input for the element 0 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM02 - the input for the m02 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm02(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM02); + +/** +* Retrieves the input for the element 0 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM03 - the input for the m03 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm03(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM03); + +/** +* Retrieves the input for the element 1 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM10 - the input for the m10 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm10(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM10); + +/** +* Retrieves the input for the element 1 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM11 - the input for the m11 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm11(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM11); + +/** +* Retrieves the input for the element 1 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM12 - the input for the m12 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm12(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM12); + +/** +* Retrieves the input for the element 1 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM13 - the input for the m3 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm13(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM13); + +/** +* Retrieves the input for the element 2 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM20 - the input for the m2 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm20(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM20); + +/** +* Retrieves the input for the element 2 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM21 - +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm21(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM21); + +/** +* Retrieves the input for the element 2 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM22 - the input for the m22 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm22(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM22); + +/** +* Retrieves the input for the element 2 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM23 - the input for the m23 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm23(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM23); + +/** +* Retrieves the input for the element 3 0 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM30 - the input for the m30 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm30(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM30); + +/** +* Retrieves the input for the element 3 1 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM31 - the input for the m31 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm31(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM31); + +/** +* Retrieves the input for the element 3 2 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM32 - the input for the m32 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm32(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM32); + +/** +* Retrieves the input for the element 3 3 +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pM33 - the input for the m33 element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getinputm33(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM33); + +/** +* Retrieves the output +* +* @param[in] pComposeMatrixNode - ComposeMatrixNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_composematrixnode_getoutputresult(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromRowsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow0 - the input for the first row +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getinputa(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow0); + +/** +* Retrieves the input for the second row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow1 - the input for the second row +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getinputb(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow1); + +/** +* Retrieves the input for the third row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow2 - the input for the third row +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getinputc(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow2); + +/** +* Retrieves the input for the fourth row +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pRow3 - the input for the fourth row +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getinputd(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromRowsNode - MatrixFromRowsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromrowsnode_getoutputresult(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for MatrixFromColumnsNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the first column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn0 - the input for the first column +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputa(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn0); + +/** +* Retrieves the input for the second column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn1 - the input for the second column +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputb(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn1); + +/** +* Retrieves the input for the third column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn2 - the input for the third column +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputc(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn2); + +/** +* Retrieves the input for the fourth column +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pColumn3 - the input for the fourth column +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputd(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn3); + +/** +* Retrieves the output +* +* @param[in] pMatrixFromColumnsNode - MatrixFromColumnsNode instance. +* @param[out] pResult - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_matrixfromcolumnsnode_getoutputresult(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pResult); + +/************************************************************************************************************************* + Class definition for ConstantNode +**************************************************************************************************************************/ + +/** +* Sets the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[in] dValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constantnode_setconstant(Lib3MF_ConstantNode pConstantNode, Lib3MF_double dValue); + +/** +* Retrieves the constant value of the node +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constantnode_getconstant(Lib3MF_ConstantNode pConstantNode, Lib3MF_double * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstantNode - ConstantNode instance. +* @param[out] pValue - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constantnode_getoutputvalue(Lib3MF_ConstantNode pConstantNode, Lib3MF_ImplicitPort * pValue); + +/************************************************************************************************************************* + Class definition for ConstVecNode +**************************************************************************************************************************/ + +/** +* Sets the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constvecnode_setvector(Lib3MF_ConstVecNode pConstVecNode, const Lib3MF::sVector * pValue); + +/** +* Retrieves the vector value of the node +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constvecnode_getvector(Lib3MF_ConstVecNode pConstVecNode, Lib3MF::sVector * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstVecNode - ConstVecNode instance. +* @param[out] pVector - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constvecnode_getoutputvector(Lib3MF_ConstVecNode pConstVecNode, Lib3MF_ImplicitPort * pVector); + +/************************************************************************************************************************* + Class definition for ConstMatNode +**************************************************************************************************************************/ + +/** +* Sets the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[in] pValue - the value +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constmatnode_setmatrix(Lib3MF_ConstMatNode pConstMatNode, const Lib3MF::sMatrix4x4 * pValue); + +/** +* Retrieves the matrix value of the node +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pValue - the matrix +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constmatnode_getmatrix(Lib3MF_ConstMatNode pConstMatNode, Lib3MF::sMatrix4x4 * pValue); + +/** +* Retrieves the output +* +* @param[in] pConstMatNode - ConstMatNode instance. +* @param[out] pMatrix - the output +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_constmatnode_getoutputmatrix(Lib3MF_ConstMatNode pConstMatNode, Lib3MF_ImplicitPort * pMatrix); + +/************************************************************************************************************************* + Class definition for MeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshnode_getinputmesh(Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshnode_getinputpos(Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pMeshNode - MeshNode instance. +* @param[out] pDistance - the output port for the signed distance to the mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_meshnode_getoutputdistance(Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for UnsignedMeshNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the model resource id of the mesh +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pMesh - the input port for the model resource id of the mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_unsignedmeshnode_getinputmesh(Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pMesh); + +/** +* Retrieves the input for the position +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pPos - the input port for the position +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_unsignedmeshnode_getinputpos(Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pPos); + +/** +* Retrieves the output +* +* @param[in] pUnsignedMeshNode - UnsignedMeshNode instance. +* @param[out] pDistance - the output port for the unsigned distance to the mesh +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_unsignedmeshnode_getoutputdistance(Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pDistance); + +/************************************************************************************************************************* + Class definition for FunctionCallNode +**************************************************************************************************************************/ + +/** +* Retrieves the input for the function id +* +* @param[in] pFunctionCallNode - FunctionCallNode instance. +* @param[out] pFunction - the input port for the function +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functioncallnode_getinputfunctionid(Lib3MF_FunctionCallNode pFunctionCallNode, Lib3MF_ImplicitPort * pFunction); + +/************************************************************************************************************************* + Class definition for NodeIterator +**************************************************************************************************************************/ + +/** +* Returns the current element +* +* @param[in] pNodeIterator - NodeIterator instance. +* @param[out] pNode - The current element +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_nodeiterator_getcurrent(Lib3MF_NodeIterator pNodeIterator, Lib3MF_ImplicitNode * pNode); + +/************************************************************************************************************************* + Class definition for Function +**************************************************************************************************************************/ + +/** +* Retrieves the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] nDisplayNameBufferSize - size of the buffer (including trailing 0) +* @param[out] pDisplayNameNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pDisplayNameBuffer - buffer of the display name, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_getdisplayname(Lib3MF_Function pFunction, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer); + +/** +* Sets the display name of the function +* +* @param[in] pFunction - Function instance. +* @param[in] pDisplayName - the display name +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_setdisplayname(Lib3MF_Function pFunction, const char * pDisplayName); + +/** +* Add an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[in] pDisplayName - the display name of the input +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_addinput(Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, Lib3MF::eImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the inputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the list of inputs +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_getinputs(Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an input +* +* @param[in] pFunction - Function instance. +* @param[in] pInput - The input to be removed +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_removeinput(Lib3MF_Function pFunction, Lib3MF_ImplicitPort pInput); + +/** +* Add an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[in] pDisplayName - the display name of the output +* @param[in] eType - the type of the input +* @param[out] pPort - The added input port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_addoutput(Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, Lib3MF::eImplicitPortType eType, Lib3MF_ImplicitPort * pPort); + +/** +* Retrieves the outputs +* +* @param[in] pFunction - Function instance. +* @param[out] pIterator - iterator for the outputs +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_getoutputs(Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator); + +/** +* Removes an output +* +* @param[in] pFunction - Function instance. +* @param[in] pOutput - The output to be removed +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_removeoutput(Lib3MF_Function pFunction, Lib3MF_ImplicitPort pOutput); + +/** +* Retrieves an input +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the input +* @param[out] pInput - the input port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_findinput(Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pInput); + +/** +* Retrieves an output +* +* @param[in] pFunction - Function instance. +* @param[in] pIdentifier - the identifier of the output +* @param[out] pOutput - the output port +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_function_findoutput(Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput); + +/************************************************************************************************************************* + Class definition for ImplicitFunction +**************************************************************************************************************************/ + +/** +* Retrieves the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] nIdentifierBufferSize - size of the buffer (including trailing 0) +* @param[out] pIdentifierNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pIdentifierBuffer - buffer of the identifier, may be NULL +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_getidentifier(Lib3MF_ImplicitFunction pImplicitFunction, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer); + +/** +* Sets the identifier of the function +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_setidentifier(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier); + +/** +* Add a node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] eNodeType - the type of the node +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addnode(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF::eImplicitNodeType eNodeType, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ImplicitNode * pNode); + +/** +* Add a SinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsinnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinNode * pNode); + +/** +* Add a CosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcosnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CosNode * pNode); + +/** +* Add a TanNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addtannode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanNode * pNode); + +/** +* Add a ArcSinNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addarcsinnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcSinNode * pNode); + +/** +* Add a ArcCosNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addarccosnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcCosNode * pNode); + +/** +* Add a ArcTan2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addarctan2node(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcTan2Node * pNode); + +/** +* Add a SinhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsinhnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinhNode * pNode); + +/** +* Add a CoshNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcoshnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CoshNode * pNode); + +/** +* Add a TanhNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addtanhnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanhNode * pNode); + +/** +* Add a RoundNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addroundnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_RoundNode * pNode); + +/** +* Add a CeilNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addceilnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CeilNode * pNode); + +/** +* Add a FloorNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addfloornode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FloorNode * pNode); + +/** +* Add a SignNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsignnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SignNode * pNode); + +/** +* Add a FractNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addfractnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FractNode * pNode); + +/** +* Add a AbsNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addabsnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AbsNode * pNode); + +/** +* Add a ExpNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addexpnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ExpNode * pNode); + +/** +* Add a LogNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlognode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_LogNode * pNode); + +/** +* Add a Log2Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlog2node(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log2Node * pNode); + +/** +* Add a Log10Node +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlog10node(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log10Node * pNode); + +/** +* Add a LengthNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlengthnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_LengthNode * pNode); + +/** +* Add a TransposeNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addtransposenode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TransposeNode * pNode); + +/** +* Add a InverseNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_inversenode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_InverseNode * pNode); + +/** +* Add a SqrtNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsqrtnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SqrtNode * pNode); + +/** +* Add a ResourceIdNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addresourceidnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ResourceIdNode * pNode); + +/** +* Add an AdditionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addadditionnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AdditionNode * pNode); + +/** +* Add a SubtractionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addsubtractionnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SubtractionNode * pNode); + +/** +* Add a MultiplicationNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmultiplicationnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MultiplicationNode * pNode); + +/** +* Add a DivisionNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_adddivisionnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_DivisionNode * pNode); + +/** +* Add a DotNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_adddotnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DotNode * pNode); + +/** +* Add a CrossNode +* +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcrossnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_CrossNode * pNode); /** -* Obtains the BaseMaterialGroup instance of this CompositeMaterials. +* Add a MatVecMultiplicationNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[out] pBaseMaterialGroupInstance - returns the BaseMaterialGroup instance of this CompositeMaterials +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getbasematerialgroup(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmatvecmultiplicationnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatVecMultiplicationNode * pNode); /** -* Adds a new Composite-Mixing Values to the CompositeMaterials. +* Add a MinNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[in] pCompositeBuffer - CompositeConstituent buffer of The Composite Constituents to be added as composite -* @param[out] pPropertyID - returns new PropertyID of the new Composite in the CompositeMaterials. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_addcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const Lib3MF::sCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addminnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MinNode * pNode); /** -* Removes a Composite-Maxing Ratio from the CompositeMaterials. +* Add a MaxNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_removecomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmaxnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MaxNode * pNode); /** -* Obtains a Composite-Maxing Ratio of this CompositeMaterials. +* Add a FmodNode * -* @param[in] pCompositeMaterials - CompositeMaterials instance. -* @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. -* @param[in] nCompositeBufferSize - Number of elements in buffer -* @param[out] pCompositeNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_compositematerials_getcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, Lib3MF::sCompositeConstituent * pCompositeBuffer); - -/************************************************************************************************************************* - Class definition for MultiPropertyGroup -**************************************************************************************************************************/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addfmodnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FmodNode * pNode); /** -* Retrieves the count of MultiProperty-s in the MultiPropertyGroup. +* Add a PowNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the count of MultiProperty-s +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getcount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addpownode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_PowNode * pNode); /** -* returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup +* Add a SelectNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getallpropertyids(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addselectnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SelectNode * pNode); /** -* Adds a new MultiProperty to the MultiPropertyGroup. +* Add a ClampNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the new MultiProperty. -* @param[out] pPropertyID - returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] eConfiguration - the configuration of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_addmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addclampnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, Lib3MF::eImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ClampNode * pNode); /** -* Sets the PropertyIDs of a MultiProperty. +* Add a ComposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[in] pPropertyIDsBuffer - uint32 buffer of The new PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_setmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcomposevectornode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeVectorNode * pNode); /** -* Obtains the PropertyIDs of a MultiProperty. +* Add a VectorFromScalar * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. -* @param[in] nPropertyIDsBufferSize - Number of elements in buffer -* @param[out] pPropertyIDsNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addvectorfromscalarnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_VectorFromScalarNode * pNode); /** -* Removes a MultiProperty from this MultiPropertyGroup. +* Add a DecomposeVectorNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_removemultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_adddecomposevectornode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DecomposeVectorNode * pNode); /** -* Retrieves the number of layers of this MultiPropertyGroup. +* Add a ComposeMatrixNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[out] pCount - returns the number of layers +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getlayercount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addcomposematrixnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeMatrixNode * pNode); /** -* Adds a MultiPropertyLayer to this MultiPropertyGroup. +* Add a MatrixFromRowsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] pTheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup -* @param[out] pLayerIndex - returns the index of this MultiPropertyLayer +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_addlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF::sMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmatrixfromrowsnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromRowsNode * pNode); /** -* Obtains a MultiPropertyLayer of this MultiPropertyGroup. +* Add a MatrixFromColumnsNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried -* @param[out] pTheLayer - The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_getlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, Lib3MF::sMultiPropertyLayer * pTheLayer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmatrixfromcolumnsnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromColumnsNode * pNode); /** -* Removes a MultiPropertyLayer from this MultiPropertyGroup. +* Add a ConstantNode * -* @param[in] pMultiPropertyGroup - MultiPropertyGroup instance. -* @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_multipropertygroup_removelayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex); - -/************************************************************************************************************************* - Class definition for Attachment -**************************************************************************************************************************/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addconstantnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstantNode * pNode); /** -* Retrieves an attachment's package path. This function will be removed in a later release. +* Add a ConstVecNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package path string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getpath(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addconstvecnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstVecNode * pNode); /** -* Sets an attachment's package path. This function will be removed in a later release. +* Add a ConstMatNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new path of the attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_setpath(Lib3MF_Attachment pAttachment, const char * pPath); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addconstmatnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstMatNode * pNode); /** -* Returns the PackagePart that is this attachment. +* Add a MeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[out] pPackagePart - The PackagePart of this attachment. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_packagepart(Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addmeshnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MeshNode * pNode); /** -* Retrieves an attachment's relationship type +* Add a UnsignedMeshNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] nPathBufferSize - size of the buffer (including trailing 0) -* @param[out] pPathNeededChars - will be filled with the count of the written bytes, or needed buffer size. -* @param[out] pPathBuffer - buffer of returns the attachment's package relationship type string, may be NULL +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getrelationshiptype(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addunsignedmeshnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_UnsignedMeshNode * pNode); /** -* Sets an attachment's relationship type. +* Add a FunctionCallNode * -* @param[in] pAttachment - Attachment instance. -* @param[in] pPath - new relationship type string. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pIdentifier - the identifier of the node +* @param[in] pDisplayName - the display name of the node +* @param[in] pTag - the tag of the node +* @param[out] pNode - the added node * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_setrelationshiptype(Lib3MF_Attachment pAttachment, const char * pPath); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addfunctioncallnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_FunctionCallNode * pNode); /** -* Writes out the attachment as file. +* Retrieves the nodes * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to write into. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[out] pIterator - iterator for the list of nodes * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_writetofile(Lib3MF_Attachment pAttachment, const char * pFileName); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_getnodes(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_NodeIterator * pIterator); /** -* Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Removes a node * -* @param[in] pAttachment - Attachment instance. -* @param[in] pFileName - file to read from. +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pNode - The node to be removed * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfromfile(Lib3MF_Attachment pAttachment, const char * pFileName); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_removenode(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitNode pNode); /** -* Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[in] pTheReadCallback - Callback to call for reading a data chunk -* @param[in] nStreamSize - number of bytes the callback returns -* @param[in] pTheSeekCallback - Callback to call for seeking in the stream. -* @param[in] pUserData - Userdata that is passed to the callback function +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - the source port +* @param[in] pTarget - the target port * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfromcallback(Lib3MF_Attachment pAttachment, Lib3MF::ReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MF::SeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlink(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitPort pSource, Lib3MF_ImplicitPort pTarget); /** -* Retrieves the size of the attachment stream +* Add a link * -* @param[in] pAttachment - Attachment instance. -* @param[out] pStreamSize - the stream size +* @param[in] pImplicitFunction - ImplicitFunction instance. +* @param[in] pSource - name of the source port in the format nodename.portname +* @param[in] pTarget - name of the target port in the format nodename.portname * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_getstreamsize(Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_addlinkbynames(Lib3MF_ImplicitFunction pImplicitFunction, const char * pSource, const char * pTarget); /** -* Writes out the attachment into a buffer +* Clears the function * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[out] pBufferNeededCount - will be filled with the count of the written elements, or needed buffer size. -* @param[out] pBufferBuffer - uint8 buffer of Buffer to write into +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_writetobuffer(Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_clear(Lib3MF_ImplicitFunction pImplicitFunction); /** -* Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). +* Sorts the nodes topologically * -* @param[in] pAttachment - Attachment instance. -* @param[in] nBufferBufferSize - Number of elements in buffer -* @param[in] pBufferBuffer - uint8 buffer of Buffer to read from +* @param[in] pImplicitFunction - ImplicitFunction instance. * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_attachment_readfrombuffer(Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_implicitfunction_sortnodestopologically(Lib3MF_ImplicitFunction pImplicitFunction); /************************************************************************************************************************* - Class definition for Texture2D + Class definition for FunctionFromImage3D **************************************************************************************************************************/ /** -* Retrieves the attachment located at the path of the texture. +* Returns the selected 3D image. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pImage3D - image instance * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_getimage3d(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D * pImage3D); /** -* Sets the texture's package path to the path of the attachment. +* Sets the 3D image of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] pAttachment - attachment that holds the texture's image information. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] pImage3D - image instance * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_setimage3d(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D pImage3D); /** -* Retrieves a texture's content type. +* Sets the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pContentType - returns content type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eFilter - texture filter * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getcontenttype(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureType * pContentType); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_setfilter(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF::eTextureFilter eFilter); /** -* Retrieves a texture's content type. +* Returns the texture filter of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eContentType - new Content Type +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pFilter - texture filter * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setcontenttype(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureType eContentType); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_getfilter(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF::eTextureFilter * pFilter); /** -* Retrieves a texture's tilestyle type. +* Sets the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pTileStyleU - returns tilestyle type enum. -* @param[out] pTileStyleV - returns tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] eTileStyleU - tile style in U +* @param[in] eTileStyleV - tile style in V +* @param[in] eTileStyleW - tile style in W * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_gettilestyleuv(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureTileStyle * pTileStyleU, Lib3MF::eTextureTileStyle * pTileStyleV); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_settilestyles(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF::eTextureTileStyle eTileStyleU, Lib3MF::eTextureTileStyle eTileStyleV, Lib3MF::eTextureTileStyle eTileStyleW); /** -* Sets a texture's tilestyle type. +* Retrieves the tile styles of the selector. * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eTileStyleU - new tilestyle type enum. -* @param[in] eTileStyleV - new tilestyle type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pTileStyleU - tile style in U +* @param[out] pTileStyleV - tile style in V +* @param[out] pTileStyleW - tile style in W * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_settilestyleuv(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureTileStyle eTileStyleU, Lib3MF::eTextureTileStyle eTileStyleV); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_gettilestyles(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF::eTextureTileStyle * pTileStyleU, Lib3MF::eTextureTileStyle * pTileStyleV, Lib3MF::eTextureTileStyle * pTileStyleW); /** -* Retrieves a texture's filter type. +* returns the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[out] pFilter - returns filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_getfilter(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureFilter * pFilter); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_getoffset(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pOffset); /** -* Sets a texture's filter type. +* Sets the offset value for the pixel values in the Image3D * -* @param[in] pTexture2D - Texture2D instance. -* @param[in] eFilter - sets new filter type enum. +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dOffset - the offset value for the pixel values in the Image3D * @return error code or 0 (success) */ -LIB3MF_DECLSPEC Lib3MFResult lib3mf_texture2d_setfilter(Lib3MF_Texture2D pTexture2D, Lib3MF::eTextureFilter eFilter); +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_setoffset(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dOffset); + +/** +* returns the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[out] pScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_getscale(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pScale); + +/** +* Sets the scale value for the pixel values in the Image3D +* +* @param[in] pFunctionFromImage3D - FunctionFromImage3D instance. +* @param[in] dScale - the scale value for the pixel values in the Image3D +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_functionfromimage3d_setscale(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dScale); /************************************************************************************************************************* Class definition for BuildItem @@ -3145,6 +5756,16 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getcolorgroupbyid(Lib3MF_Model pModel, */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getslicestackbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_SliceStack * pSliceStacInstance); +/** +* finds a level set object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pLevelSetObjectInstance - returns the level set object instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getlevelsetbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_LevelSet * pLevelSetObjectInstance); + /** * returns, whether a build has a UUID and, if true, the build's UUID * @@ -3283,6 +5904,15 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getmultipropertygroups(Lib3MF_Model pM */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getslicestacks(Lib3MF_Model pModel, Lib3MF_SliceStackIterator * pResourceIterator); +/** +* creates a resource iterator instance with all image3d resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getimage3ds(Lib3MF_Model pModel, Lib3MF_Image3DIterator * pResourceIterator); + /** * Merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. * @@ -3292,6 +5922,15 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getslicestacks(Lib3MF_Model pModel, Li */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_mergetomodel(Lib3MF_Model pModel, Lib3MF_Model * pMergedModelInstance); +/** +* Merges the given model into this model. +* +* @param[in] pModel - Model instance. +* @param[in] pModelInstance - model to be merged +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_mergefrommodel(Lib3MF_Model pModel, Lib3MF_Model pModelInstance); + /** * adds an empty mesh object to the model. * @@ -3377,6 +6016,28 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addcompositematerials(Lib3MF_Model pMo */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addmultipropertygroup(Lib3MF_Model pModel, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance); +/** +* creates a new 3D Image Resource +* +* @param[in] pModel - Model instance. +* @param[in] nColumnCount - the number of columns in each sheet. +* @param[in] nRowCount - the number of rows in each sheet. +* @param[in] nSheetCount - the number of sheets in the image stack. +* @param[out] pInstance - returns the new ImageStack instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addimagestack(Lib3MF_Model pModel, Lib3MF_uint32 nColumnCount, Lib3MF_uint32 nRowCount, Lib3MF_uint32 nSheetCount, Lib3MF_ImageStack * pInstance); + +/** +* finds an ImageStack object by its UniqueResourceID +* +* @param[in] pModel - Model instance. +* @param[in] nUniqueResourceID - UniqueResourceID +* @param[out] pImageStackInstance - returns the image stack instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getimagestackbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ImageStack * pImageStackInstance); + /** * adds a build item to the model. * @@ -3528,6 +6189,70 @@ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_setrandomnumbercallback(Lib3MF_Model p */ LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getkeystore(Lib3MF_Model pModel, Lib3MF_KeyStore * pKeyStore); +/** +* creates a resource iterator for all functions +* +* @param[in] pModel - Model instance. +* @param[out] pTheResourceIterator - returns the resource iterator +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getfunctions(Lib3MF_Model pModel, Lib3MF_FunctionIterator * pTheResourceIterator); + +/** +* adds a function described by nodes to the model +* +* @param[in] pModel - Model instance. +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addimplicitfunction(Lib3MF_Model pModel, Lib3MF_ImplicitFunction * pFunctionInstance); + +/** +* adds a function defined by an image3d to the model +* +* @param[in] pModel - Model instance. +* @param[in] pImage3DInstance - the Image3D-instance used for this function +* @param[out] pFunctionInstance - returns the function instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addfunctionfromimage3d(Lib3MF_Model pModel, Lib3MF_Image3D pImage3DInstance, Lib3MF_FunctionFromImage3D * pFunctionInstance); + +/** +* adds a volume data resource to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pVolumeDataInstance - returns the new volume data instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addvolumedata(Lib3MF_Model pModel, Lib3MF_VolumeData * pVolumeDataInstance); + +/** +* adds an empty boundary shape object to the model. +* +* @param[in] pModel - Model instance. +* @param[out] pLevelSetInstance - returns the mesh object instance +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_addlevelset(Lib3MF_Model pModel, Lib3MF_LevelSet * pLevelSetInstance); + +/** +* creates a resource iterator instance with all boundary shape resources. +* +* @param[in] pModel - Model instance. +* @param[out] pResourceIterator - returns the iterator instance. +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_getlevelsets(Lib3MF_Model pModel, Lib3MF_LevelSetIterator * pResourceIterator); + +/** +* Removes a resource from the model +* +* @param[in] pModel - Model instance. +* @param[in] pResource - The resource to remove +* @return error code or 0 (success) +*/ +LIB3MF_DECLSPEC Lib3MFResult lib3mf_model_removeresource(Lib3MF_Model pModel, Lib3MF_Resource pResource); + /************************************************************************************************************************* Global functions **************************************************************************************************************************/ diff --git a/Autogenerated/Source/lib3mf_interfaceexception.cpp b/Autogenerated/Source/lib3mf_interfaceexception.cpp index 5f10f6f2f..c93e0cf1c 100644 --- a/Autogenerated/Source/lib3mf_interfaceexception.cpp +++ b/Autogenerated/Source/lib3mf_interfaceexception.cpp @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++ Implementation file with the basic internal exception type in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ diff --git a/Autogenerated/Source/lib3mf_interfaceexception.hpp b/Autogenerated/Source/lib3mf_interfaceexception.hpp index 38891fe7e..f0f87b41c 100644 --- a/Autogenerated/Source/lib3mf_interfaceexception.hpp +++ b/Autogenerated/Source/lib3mf_interfaceexception.hpp @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++ Header file with the basic internal exception type in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ diff --git a/Autogenerated/Source/lib3mf_interfacejournal.cpp b/Autogenerated/Source/lib3mf_interfacejournal.cpp index 5a94fcddf..2da32518b 100644 --- a/Autogenerated/Source/lib3mf_interfacejournal.cpp +++ b/Autogenerated/Source/lib3mf_interfacejournal.cpp @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++ implementation file in order to allow easy development of the 3MF Library. It provides an automatic Journaling mechanism for the library implementation. -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -286,7 +286,7 @@ CLib3MFInterfaceJournal::CLib3MFInterfaceJournal (const std::string & sFileName) m_StartTime = std::chrono::high_resolution_clock::now(); m_Stream.open (sFileName, std::ios::out); m_Stream << "\n"; - m_Stream << "\n"; + m_Stream << "\n"; m_Stream << "\n"; } diff --git a/Autogenerated/Source/lib3mf_interfacejournal.hpp b/Autogenerated/Source/lib3mf_interfacejournal.hpp index 361b67bc0..b2ce46c29 100644 --- a/Autogenerated/Source/lib3mf_interfacejournal.hpp +++ b/Autogenerated/Source/lib3mf_interfacejournal.hpp @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++ header file in order to allow easy development of the 3MF Library. It provides an automatic Journaling mechanism for the library implementation. -Interface version: 2.3.2 +Interface version: 2.4.0 */ diff --git a/Autogenerated/Source/lib3mf_interfaces.hpp b/Autogenerated/Source/lib3mf_interfaces.hpp index 906ffae2d..dfda93cea 100644 --- a/Autogenerated/Source/lib3mf_interfaces.hpp +++ b/Autogenerated/Source/lib3mf_interfaces.hpp @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -30,7 +30,7 @@ Abstract: This is an autogenerated C++ header file in order to allow easy development of the 3MF Library. The implementer of the 3MF Library needs to derive concrete classes from the abstract classes in this header. -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -67,11 +67,21 @@ class IColorGroupIterator; class ITexture2DGroupIterator; class ICompositeMaterialsIterator; class IMultiPropertyGroupIterator; +class IImage3DIterator; +class IFunctionIterator; +class ILevelSetIterator; class IMetaData; class IMetaDataGroup; class IObject; class IMeshObject; +class ILevelSet; class IBeamLattice; +class IFunctionReference; +class IVolumeDataColor; +class IMaterialMapping; +class IVolumeDataComposite; +class IVolumeDataProperty; +class IVolumeData; class IComponent; class IComponentsObject; class IBeamSet; @@ -80,8 +90,71 @@ class IColorGroup; class ITexture2DGroup; class ICompositeMaterials; class IMultiPropertyGroup; +class IImage3D; +class IImageStack; class IAttachment; class ITexture2D; +class IImplicitPort; +class IIterator; +class IImplicitPortIterator; +class IImplicitNode; +class IOneInputNode; +class ISinNode; +class ICosNode; +class ITanNode; +class IArcSinNode; +class IArcCosNode; +class IArcTanNode; +class ISinhNode; +class ICoshNode; +class ITanhNode; +class IRoundNode; +class ICeilNode; +class IFloorNode; +class ISignNode; +class IFractNode; +class IAbsNode; +class IExpNode; +class ILogNode; +class ILog2Node; +class ILog10Node; +class ILengthNode; +class ITransposeNode; +class IInverseNode; +class ISqrtNode; +class IResourceIdNode; +class ITwoInputNode; +class IAdditionNode; +class ISubtractionNode; +class IMultiplicationNode; +class IDivisionNode; +class IDotNode; +class ICrossNode; +class IArcTan2Node; +class IMatVecMultiplicationNode; +class IMinNode; +class IMaxNode; +class IFmodNode; +class IModNode; +class IPowNode; +class ISelectNode; +class IClampNode; +class IComposeVectorNode; +class IVectorFromScalarNode; +class IDecomposeVectorNode; +class IComposeMatrixNode; +class IMatrixFromRowsNode; +class IMatrixFromColumnsNode; +class IConstantNode; +class IConstVecNode; +class IConstMatNode; +class IMeshNode; +class IUnsignedMeshNode; +class IFunctionCallNode; +class INodeIterator; +class IFunction; +class IImplicitFunction; +class IFunctionFromImage3D; class IBuildItem; class IBuildItemIterator; class ISlice; @@ -901,6 +974,84 @@ class IMultiPropertyGroupIterator : public virtual IResourceIterator { typedef IBaseSharedPtr PIMultiPropertyGroupIterator; +/************************************************************************************************************************* + Class interface for Image3DIterator +**************************************************************************************************************************/ + +class IImage3DIterator : public virtual IResourceIterator { +public: + /** + * IImage3DIterator::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xC4B8EC00A82BF336UL; // First 64 bits of SHA1 of a string: "Lib3MF::Image3DIterator" + } + + /** + * IImage3DIterator::GetCurrentImage3D - Returns the Image3D the iterator points at. + * @return returns the Image3D instance. + */ + virtual IImage3D * GetCurrentImage3D() = 0; + +}; + +typedef IBaseSharedPtr PIImage3DIterator; + + +/************************************************************************************************************************* + Class interface for FunctionIterator +**************************************************************************************************************************/ + +class IFunctionIterator : public virtual IResourceIterator { +public: + /** + * IFunctionIterator::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x40E9035363ACE65EUL; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionIterator" + } + + /** + * IFunctionIterator::GetCurrentFunction - Returns the Function the iterator points at. + * @return returns the Function instance. + */ + virtual IFunction * GetCurrentFunction() = 0; + +}; + +typedef IBaseSharedPtr PIFunctionIterator; + + +/************************************************************************************************************************* + Class interface for LevelSetIterator +**************************************************************************************************************************/ + +class ILevelSetIterator : public virtual IResourceIterator { +public: + /** + * ILevelSetIterator::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xA0C005C035D5371DUL; // First 64 bits of SHA1 of a string: "Lib3MF::LevelSetIterator" + } + + /** + * ILevelSetIterator::GetCurrentLevelSet - Returns the LevelSet the iterator points at. + * @return returns the MeshObject instance. + */ + virtual ILevelSet * GetCurrentLevelSet() = 0; + +}; + +typedef IBaseSharedPtr PILevelSetIterator; + + /************************************************************************************************************************* Class interface for MetaData **************************************************************************************************************************/ @@ -1114,6 +1265,12 @@ class IObject : public virtual IResource { */ virtual bool IsComponentsObject() = 0; + /** + * IObject::IsLevelSetObject - Retrieves, if an object is a level set object + * @return returns, whether the object is a level set object + */ + virtual bool IsLevelSetObject() = 0; + /** * IObject::IsValid - Retrieves, if the object is valid according to the core spec. For mesh objects, we distinguish between the type attribute of the object:In case of object type other, this always means false.In case of object type model or solidsupport, this means, if the mesh suffices all requirements of the core spec chapter 4.1.In case of object type support or surface, this always means true.A component objects is valid if and only if it contains at least one component and all child components are valid objects. * @return returns whether the object is a valid object description @@ -1358,11 +1515,139 @@ class IMeshObject : public virtual IObject { */ virtual IBeamLattice * BeamLattice() = 0; + /** + * IMeshObject::GetVolumeData - Retrieves the VolumeData of this MeshObject. + * @return the VolumeData of this MeshObject + */ + virtual IVolumeData * GetVolumeData() = 0; + + /** + * IMeshObject::SetVolumeData - Sets the VolumeData of this MeshObject. + * @param[in] pTheVolumeData - the VolumeData of this MeshObject + */ + virtual void SetVolumeData(IVolumeData* pTheVolumeData) = 0; + }; typedef IBaseSharedPtr PIMeshObject; +/************************************************************************************************************************* + Class interface for LevelSet +**************************************************************************************************************************/ + +class ILevelSet : public virtual IObject { +public: + /** + * ILevelSet::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xE8A7D9C192EFD0E2UL; // First 64 bits of SHA1 of a string: "Lib3MF::LevelSet" + } + + /** + * ILevelSet::GetFunction - Returns the function that is used as boundary shape. + * @return the function to use as boundary shape + */ + virtual IFunction * GetFunction() = 0; + + /** + * ILevelSet::SetFunction - Sets the function to use as boundary shape. + * @param[in] pTheFunction - the function to use as boundary shape + */ + virtual void SetFunction(IFunction* pTheFunction) = 0; + + /** + * ILevelSet::GetTransform - Returns the transformation matrix into the coordinate system of the referenced Function. + * @return the transformation matrix + */ + virtual Lib3MF::sTransform GetTransform() = 0; + + /** + * ILevelSet::SetTransform - Sets the transformation matrix into the coordinate system of the referenced Function. + * @param[in] Transform - new transformation matrix + */ + virtual void SetTransform(const Lib3MF::sTransform Transform) = 0; + + /** + * ILevelSet::GetChannelName - Returns the name of the function output channel to use. + * @return the name of the function output channel + */ + virtual std::string GetChannelName() = 0; + + /** + * ILevelSet::SetChannelName - Sets the name of the function output channel to use. + * @param[in] sChannelName - new name of the function output channel + */ + virtual void SetChannelName(const std::string & sChannelName) = 0; + + /** + * ILevelSet::SetMinFeatureSize - Sets the minimal feature size as a hint for the function evaluator + * @param[in] dMinFeatureSize - minimal feature size + */ + virtual void SetMinFeatureSize(const Lib3MF_double dMinFeatureSize) = 0; + + /** + * ILevelSet::GetMinFeatureSize - Returns the minimal feature size as a hint for the function evaluator + * @return minimal feature size + */ + virtual Lib3MF_double GetMinFeatureSize() = 0; + + /** + * ILevelSet::SetFallBackValue - Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @param[in] dFallBackValue - fallback value + */ + virtual void SetFallBackValue(const Lib3MF_double dFallBackValue) = 0; + + /** + * ILevelSet::GetFallBackValue - Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @return fallback value + */ + virtual Lib3MF_double GetFallBackValue() = 0; + + /** + * ILevelSet::SetMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + * @param[in] bMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + */ + virtual void SetMeshBBoxOnly(const bool bMeshBBoxOnly) = 0; + + /** + * ILevelSet::GetMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + * @return If set only the bounding box of the mesh is intersected with the boundary + */ + virtual bool GetMeshBBoxOnly() = 0; + + /** + * ILevelSet::SetMesh - Sets the mesh to use as evaluation domain + * @param[in] pTheMesh - The mesh + */ + virtual void SetMesh(IMeshObject* pTheMesh) = 0; + + /** + * ILevelSet::GetMesh - Returns the mesh that is used as evaluation domain + * @return The mesh + */ + virtual IMeshObject * GetMesh() = 0; + + /** + * ILevelSet::GetVolumeData - Retrieves the VolumeData this Object. + * @return the VolumeData of this Object + */ + virtual IVolumeData * GetVolumeData() = 0; + + /** + * ILevelSet::SetVolumeData - Sets the VolumeData of this LevelSet. + * @param[in] pTheVolumeData - the VolumeData of this MeshObject + */ + virtual void SetVolumeData(IVolumeData* pTheVolumeData) = 0; + +}; + +typedef IBaseSharedPtr PILevelSet; + + /************************************************************************************************************************* Class interface for BeamLattice **************************************************************************************************************************/ @@ -1540,189 +1825,487 @@ typedef IBaseSharedPtr PIBeamLattice; /************************************************************************************************************************* - Class interface for Component + Class interface for FunctionReference **************************************************************************************************************************/ -class IComponent : public virtual IBase { +class IFunctionReference : public virtual IBase { public: /** - * IComponent::ClassTypeId - Get Class Type Id + * IFunctionReference::ClassTypeId - Get Class Type Id * @return Class type as a 64 bits integer */ Lib3MF_uint64 ClassTypeId() override { - return 0x4ECDB6A6F69F2BEBUL; // First 64 bits of SHA1 of a string: "Lib3MF::Component" + return 0x4DF17E76926221C2UL; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionReference" } /** - * IComponent::GetObjectResource - Returns the Resource Instance of the component. - * @return filled with the Resource Instance. + * IFunctionReference::GetFunctionResourceID - Returns the UniqueResourceID of the Function. Only functions with a 'pos'-input are allowed. + * @return returns the UniqueResourceID. */ - virtual IObject * GetObjectResource() = 0; + virtual Lib3MF_uint32 GetFunctionResourceID() = 0; /** - * IComponent::GetObjectResourceID - Returns the UniqueResourceID of the component. - * @return returns the UniqueResourceID. + * IFunctionReference::SetFunctionResourceID - Sets the UniqueResourceID to refer to. + * @param[in] nUniqueResourceID - UniqueResourceID of the function */ - virtual Lib3MF_uint32 GetObjectResourceID() = 0; + virtual void SetFunctionResourceID(const Lib3MF_uint32 nUniqueResourceID) = 0; /** - * IComponent::GetUUID - returns, whether a component has a UUID and, if true, the component's UUID - * @param[out] bHasUUID - flag whether the component has a UUID - * @return the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + * IFunctionReference::GetTransform - Returns the transformation matrix into the coordinate system of the referenced Function. + * @return the transformation matrix */ - virtual std::string GetUUID(bool & bHasUUID) = 0; + virtual Lib3MF::sTransform GetTransform() = 0; /** - * IComponent::SetUUID - sets the component's UUID - * @param[in] sUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + * IFunctionReference::SetTransform - Sets the transformation matrix into the coordinate system of the referenced Function. + * @param[in] Transform - new transformation matrix */ - virtual void SetUUID(const std::string & sUUID) = 0; + virtual void SetTransform(const Lib3MF::sTransform Transform) = 0; /** - * IComponent::HasTransform - Returns, if the component has a different transformation than the identity matrix - * @return if true is returned, the transformation is not equal than the identity + * IFunctionReference::GetChannelName - Returns the name of the function output channel to use. + * @return the name of the function output channel */ - virtual bool HasTransform() = 0; + virtual std::string GetChannelName() = 0; /** - * IComponent::GetTransform - Returns the transformation matrix of the component. - * @return filled with the component transformation matrix + * IFunctionReference::SetChannelName - Sets the name of the function output channel to use. + * @param[in] sChannelName - new name of the function output channel */ - virtual Lib3MF::sTransform GetTransform() = 0; + virtual void SetChannelName(const std::string & sChannelName) = 0; /** - * IComponent::SetTransform - Sets the transformation matrix of the component. - * @param[in] Transform - new transformation matrix + * IFunctionReference::SetMinFeatureSize - Sets the minimal feature size as a hint for the function evaluator + * @param[in] dMinFeatureSize - minimal feature size */ - virtual void SetTransform(const Lib3MF::sTransform Transform) = 0; + virtual void SetMinFeatureSize(const Lib3MF_double dMinFeatureSize) = 0; + + /** + * IFunctionReference::GetMinFeatureSize - Returns the minimal feature size as a hint for the function evaluator + * @return minimal feature size + */ + virtual Lib3MF_double GetMinFeatureSize() = 0; + + /** + * IFunctionReference::SetFallBackValue - Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @param[in] dFallBackValue - fallback value + */ + virtual void SetFallBackValue(const Lib3MF_double dFallBackValue) = 0; + + /** + * IFunctionReference::GetFallBackValue - Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @return fallback value + */ + virtual Lib3MF_double GetFallBackValue() = 0; }; -typedef IBaseSharedPtr PIComponent; +typedef IBaseSharedPtr PIFunctionReference; /************************************************************************************************************************* - Class interface for ComponentsObject + Class interface for VolumeDataColor **************************************************************************************************************************/ -class IComponentsObject : public virtual IObject { +class IVolumeDataColor : public virtual IFunctionReference { public: /** - * IComponentsObject::ClassTypeId - Get Class Type Id + * IVolumeDataColor::ClassTypeId - Get Class Type Id * @return Class type as a 64 bits integer */ Lib3MF_uint64 ClassTypeId() override { - return 0x6522CF04EB283FEDUL; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObject" + return 0xD85B5B6143E787E3UL; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataColor" } - /** - * IComponentsObject::AddComponent - Adds a new component to a components object. - * @param[in] pObjectResource - object to add as component. Must not lead to circular references! - * @param[in] Transform - optional transform matrix for the component. - * @return new component instance - */ - virtual IComponent * AddComponent(IObject* pObjectResource, const Lib3MF::sTransform Transform) = 0; +}; - /** - * IComponentsObject::GetComponent - Retrieves a component from a component object. - * @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) - * @return component instance - */ - virtual IComponent * GetComponent(const Lib3MF_uint32 nIndex) = 0; +typedef IBaseSharedPtr PIVolumeDataColor; + + +/************************************************************************************************************************* + Class interface for MaterialMapping +**************************************************************************************************************************/ +class IMaterialMapping : public virtual IFunctionReference { +public: /** - * IComponentsObject::GetComponentCount - Retrieves a component count of a component object. - * @return returns the component count + * IMaterialMapping::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer */ - virtual Lib3MF_uint32 GetComponentCount() = 0; + Lib3MF_uint64 ClassTypeId() override + { + return 0x241FE6B4817C3FE4UL; // First 64 bits of SHA1 of a string: "Lib3MF::MaterialMapping" + } }; -typedef IBaseSharedPtr PIComponentsObject; +typedef IBaseSharedPtr PIMaterialMapping; /************************************************************************************************************************* - Class interface for BeamSet + Class interface for VolumeDataComposite **************************************************************************************************************************/ -class IBeamSet : public virtual IBase { +class IVolumeDataComposite : public virtual IBase { public: /** - * IBeamSet::ClassTypeId - Get Class Type Id + * IVolumeDataComposite::ClassTypeId - Get Class Type Id * @return Class type as a 64 bits integer */ Lib3MF_uint64 ClassTypeId() override { - return 0x30CCDBE90E00B55BUL; // First 64 bits of SHA1 of a string: "Lib3MF::BeamSet" + return 0x46F1DAC40581B304UL; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataComposite" } /** - * IBeamSet::SetName - Sets a beamset's name string - * @param[in] sName - new name of the beamset. + * IVolumeDataComposite::GetBaseMaterialGroup - Returns the BaseMaterialGroup used within this volume data item + * @return The BaseMaterialGroup instance of this VolumeDataComposite element */ - virtual void SetName(const std::string & sName) = 0; + virtual IBaseMaterialGroup * GetBaseMaterialGroup() = 0; /** - * IBeamSet::GetName - Retrieves a beamset's name string - * @return returns the name of the beamset. + * IVolumeDataComposite::SetBaseMaterialGroup - Sets the BaseMaterialGroup to use within this volume data item. + * @param[in] pBaseMaterialGroupInstance - The new BaseMaterialGroup instance of this VolumeDataComposite element */ - virtual std::string GetName() = 0; + virtual void SetBaseMaterialGroup(IBaseMaterialGroup* pBaseMaterialGroupInstance) = 0; /** - * IBeamSet::SetIdentifier - Sets a beamset's identifier string - * @param[in] sIdentifier - new name of the beamset. + * IVolumeDataComposite::GetMaterialMappingCount - Returns the number of material mappings of this VolumeDataComposite element + * @return the number of material mappings. */ - virtual void SetIdentifier(const std::string & sIdentifier) = 0; + virtual Lib3MF_uint32 GetMaterialMappingCount() = 0; /** - * IBeamSet::GetIdentifier - Retrieves a beamset's identifier string - * @return returns the identifier of the beamset. + * IVolumeDataComposite::GetMaterialMapping - Returns MaterialMappting with given index + * @param[in] nIndex - Index of the MaterialMapping in question. + * @return MaterialMapping used in this element */ - virtual std::string GetIdentifier() = 0; + virtual IMaterialMapping * GetMaterialMapping(const Lib3MF_uint32 nIndex) = 0; /** - * IBeamSet::GetReferenceCount - Retrieves the reference count of a beamset - * @return returns the reference count + * IVolumeDataComposite::AddMaterialMapping - Adds a the MaterialMapping + * @param[in] Transform - new transformation matrix + * @return The new MaterialMapping */ - virtual Lib3MF_uint32 GetReferenceCount() = 0; + virtual IMaterialMapping * AddMaterialMapping(const Lib3MF::sTransform Transform) = 0; /** - * IBeamSet::SetReferences - Sets the references of a beamset - * @param[in] nReferencesBufferSize - Number of elements in buffer - * @param[in] pReferencesBuffer - the new indices of all beams in this beamset + * IVolumeDataComposite::RemoveMaterialMapping - Removes the MaterialMapping with given index + * @param[in] nIndex - The index of the MaterialMapping to be removed. */ - virtual void SetReferences(const Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer) = 0; + virtual void RemoveMaterialMapping(const Lib3MF_uint32 nIndex) = 0; + +}; + +typedef IBaseSharedPtr PIVolumeDataComposite; + + +/************************************************************************************************************************* + Class interface for VolumeDataProperty +**************************************************************************************************************************/ +class IVolumeDataProperty : public virtual IFunctionReference { +public: /** - * IBeamSet::GetReferences - Retrieves the references of a beamset - * @param[in] nReferencesBufferSize - Number of elements in buffer - * @param[out] pReferencesNeededCount - will be filled with the count of the written structs, or needed buffer size. - * @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset + * IVolumeDataProperty::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer */ - virtual void GetReferences(Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer) = 0; + Lib3MF_uint64 ClassTypeId() override + { + return 0xFC368AA44ACE42DAUL; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeDataProperty" + } /** - * IBeamSet::GetBallReferenceCount - Retrieves the ball reference count of a beamset - * @return returns the ball reference count + * IVolumeDataProperty::GetName - Gets the qualified name of this property. + * @return The qualified name of this property. */ - virtual Lib3MF_uint32 GetBallReferenceCount() = 0; + virtual std::string GetName() = 0; /** - * IBeamSet::SetBallReferences - Sets the ball references of a beamset - * @param[in] nBallReferencesBufferSize - Number of elements in buffer - * @param[in] pBallReferencesBuffer - the new indices of all balls in this beamset + * IVolumeDataProperty::SetIsRequired - Sets whether this property is required to process this 3MF document instance. + * @param[in] bIsRequired - New value for whether this property is required to process this 3MF document instance. */ - virtual void SetBallReferences(const Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer) = 0; + virtual void SetIsRequired(const bool bIsRequired) = 0; /** - * IBeamSet::GetBallReferences - Retrieves the ball references of a beamset - * @param[in] nBallReferencesBufferSize - Number of elements in buffer - * @param[out] pBallReferencesNeededCount - will be filled with the count of the written structs, or needed buffer size. - * @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset + * IVolumeDataProperty::IsRequired - Returns whether this property is required to process this 3MF document instance. + * @return Is this property required to process this 3MF document instance? */ - virtual void GetBallReferences(Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer) = 0; + virtual bool IsRequired() = 0; + +}; + +typedef IBaseSharedPtr PIVolumeDataProperty; + + +/************************************************************************************************************************* + Class interface for VolumeData +**************************************************************************************************************************/ + +class IVolumeData : public virtual IResource { +public: + /** + * IVolumeData::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x9200586FB91587A7UL; // First 64 bits of SHA1 of a string: "Lib3MF::VolumeData" + } + + /** + * IVolumeData::GetComposite - Returns the VolumeDataComposite of this VolumeData instance + * @return filled with the VolumeDataComposite of this VolumeData instance. + */ + virtual IVolumeDataComposite * GetComposite() = 0; + + /** + * IVolumeData::CreateNewComposite - Creates a new VolumeDataComposite for this VolumeData instance + * @return The new VolumeDataComposite of this VolumeData instance. + */ + virtual IVolumeDataComposite * CreateNewComposite() = 0; + + /** + * IVolumeData::RemoveComposite - Removes the VolumeDataComposite of this VolumeData instance + */ + virtual void RemoveComposite() = 0; + + /** + * IVolumeData::GetColor - Returns the VolumeDataColor of this VolumeData instance + * @return filled with the VolumeDataColor of this VolumeData instance. + */ + virtual IVolumeDataColor * GetColor() = 0; + + /** + * IVolumeData::CreateNewColor - Creates a new VolumeDataColor for this VolumeData instance + * @param[in] pTheFunction - Function used in this element + * @return The new VolumeDataColor of this VolumeData instance. + */ + virtual IVolumeDataColor * CreateNewColor(IFunction* pTheFunction) = 0; + + /** + * IVolumeData::RemoveColor - Removes the VolumeDataColor of this VolumeData instance + */ + virtual void RemoveColor() = 0; + + /** + * IVolumeData::GetPropertyCount - Returns the number of VolumeDataProperty + * @return the number of VolumeDataProperty-elements within this VolumdeData + */ + virtual Lib3MF_uint32 GetPropertyCount() = 0; + + /** + * IVolumeData::GetProperty - Returns the VolumeDataProperty at a given Index + * @param[in] nIndex - the index of the VolumeDataProperty to be returned. + * @return the VolumeDataProperty at the given index. + */ + virtual IVolumeDataProperty * GetProperty(const Lib3MF_uint32 nIndex) = 0; + + /** + * IVolumeData::AddPropertyFromFunction - Adds a new VolumeDataProperty from a Function + * @param[in] sName - the qualified name (namespace+name) of the Property + * @param[in] pTheFunction - Function used in this element + * @return the newly created VolumeDataProperty. + */ + virtual IVolumeDataProperty * AddPropertyFromFunction(const std::string & sName, IFunction* pTheFunction) = 0; + + /** + * IVolumeData::RemoveProperty - Removes the VolumeDataProperty with a given index + * @param[in] nIndex - the index of the VolumeDataProperty to be removed. + */ + virtual void RemoveProperty(const Lib3MF_uint32 nIndex) = 0; + +}; + +typedef IBaseSharedPtr PIVolumeData; + + +/************************************************************************************************************************* + Class interface for Component +**************************************************************************************************************************/ + +class IComponent : public virtual IBase { +public: + /** + * IComponent::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x4ECDB6A6F69F2BEBUL; // First 64 bits of SHA1 of a string: "Lib3MF::Component" + } + + /** + * IComponent::GetObjectResource - Returns the Resource Instance of the component. + * @return filled with the Resource Instance. + */ + virtual IObject * GetObjectResource() = 0; + + /** + * IComponent::GetObjectResourceID - Returns the UniqueResourceID of the component. + * @return returns the UniqueResourceID. + */ + virtual Lib3MF_uint32 GetObjectResourceID() = 0; + + /** + * IComponent::GetUUID - returns, whether a component has a UUID and, if true, the component's UUID + * @param[out] bHasUUID - flag whether the component has a UUID + * @return the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + */ + virtual std::string GetUUID(bool & bHasUUID) = 0; + + /** + * IComponent::SetUUID - sets the component's UUID + * @param[in] sUUID - the UUID as string of the form 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' + */ + virtual void SetUUID(const std::string & sUUID) = 0; + + /** + * IComponent::HasTransform - Returns, if the component has a different transformation than the identity matrix + * @return if true is returned, the transformation is not equal than the identity + */ + virtual bool HasTransform() = 0; + + /** + * IComponent::GetTransform - Returns the transformation matrix of the component. + * @return filled with the component transformation matrix + */ + virtual Lib3MF::sTransform GetTransform() = 0; + + /** + * IComponent::SetTransform - Sets the transformation matrix of the component. + * @param[in] Transform - new transformation matrix + */ + virtual void SetTransform(const Lib3MF::sTransform Transform) = 0; + +}; + +typedef IBaseSharedPtr PIComponent; + + +/************************************************************************************************************************* + Class interface for ComponentsObject +**************************************************************************************************************************/ + +class IComponentsObject : public virtual IObject { +public: + /** + * IComponentsObject::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x6522CF04EB283FEDUL; // First 64 bits of SHA1 of a string: "Lib3MF::ComponentsObject" + } + + /** + * IComponentsObject::AddComponent - Adds a new component to a components object. + * @param[in] pObjectResource - object to add as component. Must not lead to circular references! + * @param[in] Transform - optional transform matrix for the component. + * @return new component instance + */ + virtual IComponent * AddComponent(IObject* pObjectResource, const Lib3MF::sTransform Transform) = 0; + + /** + * IComponentsObject::GetComponent - Retrieves a component from a component object. + * @param[in] nIndex - index of the component to retrieve (0 to componentcount - 1) + * @return component instance + */ + virtual IComponent * GetComponent(const Lib3MF_uint32 nIndex) = 0; + + /** + * IComponentsObject::GetComponentCount - Retrieves a component count of a component object. + * @return returns the component count + */ + virtual Lib3MF_uint32 GetComponentCount() = 0; + +}; + +typedef IBaseSharedPtr PIComponentsObject; + + +/************************************************************************************************************************* + Class interface for BeamSet +**************************************************************************************************************************/ + +class IBeamSet : public virtual IBase { +public: + /** + * IBeamSet::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x30CCDBE90E00B55BUL; // First 64 bits of SHA1 of a string: "Lib3MF::BeamSet" + } + + /** + * IBeamSet::SetName - Sets a beamset's name string + * @param[in] sName - new name of the beamset. + */ + virtual void SetName(const std::string & sName) = 0; + + /** + * IBeamSet::GetName - Retrieves a beamset's name string + * @return returns the name of the beamset. + */ + virtual std::string GetName() = 0; + + /** + * IBeamSet::SetIdentifier - Sets a beamset's identifier string + * @param[in] sIdentifier - new name of the beamset. + */ + virtual void SetIdentifier(const std::string & sIdentifier) = 0; + + /** + * IBeamSet::GetIdentifier - Retrieves a beamset's identifier string + * @return returns the identifier of the beamset. + */ + virtual std::string GetIdentifier() = 0; + + /** + * IBeamSet::GetReferenceCount - Retrieves the reference count of a beamset + * @return returns the reference count + */ + virtual Lib3MF_uint32 GetReferenceCount() = 0; + + /** + * IBeamSet::SetReferences - Sets the references of a beamset + * @param[in] nReferencesBufferSize - Number of elements in buffer + * @param[in] pReferencesBuffer - the new indices of all beams in this beamset + */ + virtual void SetReferences(const Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer) = 0; + + /** + * IBeamSet::GetReferences - Retrieves the references of a beamset + * @param[in] nReferencesBufferSize - Number of elements in buffer + * @param[out] pReferencesNeededCount - will be filled with the count of the written structs, or needed buffer size. + * @param[out] pReferencesBuffer - uint32 buffer of retrieves the indices of all beams in this beamset + */ + virtual void GetReferences(Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer) = 0; + + /** + * IBeamSet::GetBallReferenceCount - Retrieves the ball reference count of a beamset + * @return returns the ball reference count + */ + virtual Lib3MF_uint32 GetBallReferenceCount() = 0; + + /** + * IBeamSet::SetBallReferences - Sets the ball references of a beamset + * @param[in] nBallReferencesBufferSize - Number of elements in buffer + * @param[in] pBallReferencesBuffer - the new indices of all balls in this beamset + */ + virtual void SetBallReferences(const Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer) = 0; + + /** + * IBeamSet::GetBallReferences - Retrieves the ball references of a beamset + * @param[in] nBallReferencesBufferSize - Number of elements in buffer + * @param[out] pBallReferencesNeededCount - will be filled with the count of the written structs, or needed buffer size. + * @param[out] pBallReferencesBuffer - uint32 buffer of retrieves the indices of all balls in this beamset + */ + virtual void GetBallReferences(Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer) = 0; }; @@ -1907,339 +2490,2891 @@ class ITexture2DGroup : public virtual IResource { * @param[in] nPropertyID - the PropertyID of the tex2coord in the Texture2DGroup. * @return The u/v-coordinate within the texture, horizontally right/vertically up from the origin in the lower left of the texture. */ - virtual Lib3MF::sTex2Coord GetTex2Coord(const Lib3MF_uint32 nPropertyID) = 0; + virtual Lib3MF::sTex2Coord GetTex2Coord(const Lib3MF_uint32 nPropertyID) = 0; + + /** + * ITexture2DGroup::RemoveTex2Coord - Removes a tex2coords from the Texture2DGroup. + * @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. + */ + virtual void RemoveTex2Coord(const Lib3MF_uint32 nPropertyID) = 0; + + /** + * ITexture2DGroup::GetTexture2D - Obtains the texture2D instance of this group. + * @return the texture2D instance of this group. + */ + virtual ITexture2D * GetTexture2D() = 0; + +}; + +typedef IBaseSharedPtr PITexture2DGroup; + + +/************************************************************************************************************************* + Class interface for CompositeMaterials +**************************************************************************************************************************/ + +class ICompositeMaterials : public virtual IResource { +public: + /** + * ICompositeMaterials::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xCE16224D688B86F2UL; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterials" + } + + /** + * ICompositeMaterials::GetCount - Retrieves the count of Composite-s in the CompositeMaterials. + * @return returns the count of Composite-s + */ + virtual Lib3MF_uint32 GetCount() = 0; + + /** + * ICompositeMaterials::GetAllPropertyIDs - returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials + * @param[in] nPropertyIDsBufferSize - Number of elements in buffer + * @param[out] pPropertyIDsNeededCount - will be filled with the count of the written structs, or needed buffer size. + * @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the Composite-Mixing Values in the CompositeMaterials. + */ + virtual void GetAllPropertyIDs(Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) = 0; + + /** + * ICompositeMaterials::GetBaseMaterialGroup - Obtains the BaseMaterialGroup instance of this CompositeMaterials. + * @return returns the BaseMaterialGroup instance of this CompositeMaterials + */ + virtual IBaseMaterialGroup * GetBaseMaterialGroup() = 0; + + /** + * ICompositeMaterials::AddComposite - Adds a new Composite-Mixing Values to the CompositeMaterials. + * @param[in] nCompositeBufferSize - Number of elements in buffer + * @param[in] pCompositeBuffer - The Composite Constituents to be added as composite + * @return returns new PropertyID of the new Composite in the CompositeMaterials. + */ + virtual Lib3MF_uint32 AddComposite(const Lib3MF_uint64 nCompositeBufferSize, const Lib3MF::sCompositeConstituent * pCompositeBuffer) = 0; + + /** + * ICompositeMaterials::RemoveComposite - Removes a Composite-Maxing Ratio from the CompositeMaterials. + * @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. + */ + virtual void RemoveComposite(const Lib3MF_uint32 nPropertyID) = 0; + + /** + * ICompositeMaterials::GetComposite - Obtains a Composite-Maxing Ratio of this CompositeMaterials. + * @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. + * @param[in] nCompositeBufferSize - Number of elements in buffer + * @param[out] pCompositeNeededCount - will be filled with the count of the written structs, or needed buffer size. + * @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID + */ + virtual void GetComposite(const Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, Lib3MF::sCompositeConstituent * pCompositeBuffer) = 0; + +}; + +typedef IBaseSharedPtr PICompositeMaterials; + + +/************************************************************************************************************************* + Class interface for MultiPropertyGroup +**************************************************************************************************************************/ + +class IMultiPropertyGroup : public virtual IResource { +public: + /** + * IMultiPropertyGroup::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xB989E02E43158FE6UL; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroup" + } + + /** + * IMultiPropertyGroup::GetCount - Retrieves the count of MultiProperty-s in the MultiPropertyGroup. + * @return returns the count of MultiProperty-s + */ + virtual Lib3MF_uint32 GetCount() = 0; + + /** + * IMultiPropertyGroup::GetAllPropertyIDs - returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup + * @param[in] nPropertyIDsBufferSize - Number of elements in buffer + * @param[out] pPropertyIDsNeededCount - will be filled with the count of the written structs, or needed buffer size. + * @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. + */ + virtual void GetAllPropertyIDs(Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) = 0; + + /** + * IMultiPropertyGroup::AddMultiProperty - Adds a new MultiProperty to the MultiPropertyGroup. + * @param[in] nPropertyIDsBufferSize - Number of elements in buffer + * @param[in] pPropertyIDsBuffer - The PropertyIDs of the new MultiProperty. + * @return returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. + */ + virtual Lib3MF_uint32 AddMultiProperty(const Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer) = 0; + + /** + * IMultiPropertyGroup::SetMultiProperty - Sets the PropertyIDs of a MultiProperty. + * @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. + * @param[in] nPropertyIDsBufferSize - Number of elements in buffer + * @param[in] pPropertyIDsBuffer - The new PropertyIDs of the MultiProperty + */ + virtual void SetMultiProperty(const Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer) = 0; + + /** + * IMultiPropertyGroup::GetMultiProperty - Obtains the PropertyIDs of a MultiProperty. + * @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. + * @param[in] nPropertyIDsBufferSize - Number of elements in buffer + * @param[out] pPropertyIDsNeededCount - will be filled with the count of the written structs, or needed buffer size. + * @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty + */ + virtual void GetMultiProperty(const Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) = 0; + + /** + * IMultiPropertyGroup::RemoveMultiProperty - Removes a MultiProperty from this MultiPropertyGroup. + * @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. + */ + virtual void RemoveMultiProperty(const Lib3MF_uint32 nPropertyID) = 0; + + /** + * IMultiPropertyGroup::GetLayerCount - Retrieves the number of layers of this MultiPropertyGroup. + * @return returns the number of layers + */ + virtual Lib3MF_uint32 GetLayerCount() = 0; + + /** + * IMultiPropertyGroup::AddLayer - Adds a MultiPropertyLayer to this MultiPropertyGroup. + * @param[in] TheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup + * @return returns the index of this MultiPropertyLayer + */ + virtual Lib3MF_uint32 AddLayer(const Lib3MF::sMultiPropertyLayer TheLayer) = 0; + + /** + * IMultiPropertyGroup::GetLayer - Obtains a MultiPropertyLayer of this MultiPropertyGroup. + * @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried + * @return The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup + */ + virtual Lib3MF::sMultiPropertyLayer GetLayer(const Lib3MF_uint32 nLayerIndex) = 0; + + /** + * IMultiPropertyGroup::RemoveLayer - Removes a MultiPropertyLayer from this MultiPropertyGroup. + * @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed + */ + virtual void RemoveLayer(const Lib3MF_uint32 nLayerIndex) = 0; + +}; + +typedef IBaseSharedPtr PIMultiPropertyGroup; + + +/************************************************************************************************************************* + Class interface for Image3D +**************************************************************************************************************************/ + +class IImage3D : public virtual IResource { +public: + /** + * IImage3D::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xBD938FF2D2663D61UL; // First 64 bits of SHA1 of a string: "Lib3MF::Image3D" + } + + /** + * IImage3D::GetName - returns the name of this Image3D + * @return the name of this Image3D + */ + virtual std::string GetName() = 0; + + /** + * IImage3D::SetName - sets a new name of this Image3D + * @param[in] sName - the new name of this Image3D + */ + virtual void SetName(const std::string & sName) = 0; + + /** + * IImage3D::IsImageStack - Retrieves, if this Image3D is a ImageStack + * @return returns, whether the Image3D is an ImageStack + */ + virtual bool IsImageStack() = 0; + +}; + +typedef IBaseSharedPtr PIImage3D; + + +/************************************************************************************************************************* + Class interface for ImageStack +**************************************************************************************************************************/ + +class IImageStack : public virtual IImage3D { +public: + /** + * IImageStack::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x13A2561F0CFB712AUL; // First 64 bits of SHA1 of a string: "Lib3MF::ImageStack" + } + + /** + * IImageStack::GetRowCount - Retrieves the number of rows in each image of this image3d + * @return number of rows + */ + virtual Lib3MF_uint32 GetRowCount() = 0; + + /** + * IImageStack::SetRowCount - Sets the number of rows in each image of this image3d + * @param[in] nRowCount - number of rows + */ + virtual void SetRowCount(const Lib3MF_uint32 nRowCount) = 0; + + /** + * IImageStack::GetColumnCount - Retrieves the number of columns in each image of this image3d + * @return number of columns + */ + virtual Lib3MF_uint32 GetColumnCount() = 0; + + /** + * IImageStack::SetColumnCount - Sets the number of columns in each image of this image3d + * @param[in] nColumnCount - number of columns + */ + virtual void SetColumnCount(const Lib3MF_uint32 nColumnCount) = 0; + + /** + * IImageStack::GetSheetCount - Retrieves the number of images in the stack. + * @return number of images + */ + virtual Lib3MF_uint32 GetSheetCount() = 0; + + /** + * IImageStack::GetSheet - Retrieves a sheet of the stack. Raises an error if sheet is not set. + * @param[in] nIndex - index of the image (0-based) + * @return attachment containing the image + */ + virtual IAttachment * GetSheet(const Lib3MF_uint32 nIndex) = 0; + + /** + * IImageStack::SetSheet - Sets a sheet to an existing attachment. + * @param[in] nIndex - index of the image (0-based) + * @param[in] pSheet - attachment containing the image + */ + virtual void SetSheet(const Lib3MF_uint32 nIndex, IAttachment* pSheet) = 0; + + /** + * IImageStack::CreateEmptySheet - Creates a new sheet attachment with empty data. + * @param[in] nIndex - index of the image (0-based) + * @param[in] sPath - path of part in the package + * @return attachment containing the image + */ + virtual IAttachment * CreateEmptySheet(const Lib3MF_uint32 nIndex, const std::string & sPath) = 0; + + /** + * IImageStack::CreateSheetFromBuffer - Creates a new sheet attachment from a memory buffer. + * @param[in] nIndex - index of the image (0-based) + * @param[in] sPath - path of part in the package + * @param[in] nDataBufferSize - Number of elements in buffer + * @param[in] pDataBuffer - binary image data + * @return attachment containing the image + */ + virtual IAttachment * CreateSheetFromBuffer(const Lib3MF_uint32 nIndex, const std::string & sPath, const Lib3MF_uint64 nDataBufferSize, const Lib3MF_uint8 * pDataBuffer) = 0; + + /** + * IImageStack::CreateSheetFromFile - Creates a new sheet attachment from a file on disk. + * @param[in] nIndex - index of the image (0-based) + * @param[in] sPath - path of part in the package + * @param[in] sFileName - file name to read from + * @return attachment containing the image + */ + virtual IAttachment * CreateSheetFromFile(const Lib3MF_uint32 nIndex, const std::string & sPath, const std::string & sFileName) = 0; + +}; + +typedef IBaseSharedPtr PIImageStack; + + +/************************************************************************************************************************* + Class interface for Attachment +**************************************************************************************************************************/ + +class IAttachment : public virtual IBase { +public: + /** + * IAttachment::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x8CE7A1191A63A35DUL; // First 64 bits of SHA1 of a string: "Lib3MF::Attachment" + } + + /** + * IAttachment::GetPath - Retrieves an attachment's package path. This function will be removed in a later release. + * @return returns the attachment's package path string + */ + virtual std::string GetPath() = 0; + + /** + * IAttachment::SetPath - Sets an attachment's package path. This function will be removed in a later release. + * @param[in] sPath - new path of the attachment. + */ + virtual void SetPath(const std::string & sPath) = 0; + + /** + * IAttachment::PackagePart - Returns the PackagePart that is this attachment. + * @return The PackagePart of this attachment. + */ + virtual IPackagePart * PackagePart() = 0; + + /** + * IAttachment::GetRelationShipType - Retrieves an attachment's relationship type + * @return returns the attachment's package relationship type string + */ + virtual std::string GetRelationShipType() = 0; + + /** + * IAttachment::SetRelationShipType - Sets an attachment's relationship type. + * @param[in] sPath - new relationship type string. + */ + virtual void SetRelationShipType(const std::string & sPath) = 0; + + /** + * IAttachment::WriteToFile - Writes out the attachment as file. + * @param[in] sFileName - file to write into. + */ + virtual void WriteToFile(const std::string & sFileName) = 0; + + /** + * IAttachment::ReadFromFile - Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. + * @param[in] sFileName - file to read from. + */ + virtual void ReadFromFile(const std::string & sFileName) = 0; + + /** + * IAttachment::ReadFromCallback - Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. + * @param[in] pTheReadCallback - callback function + * @param[in] nStreamSize - number of bytes the callback returns + * @param[in] pTheSeekCallback - callback function + * @param[in] nUserData - Userdata that is passed to the callback function + */ + virtual void ReadFromCallback(const Lib3MF::ReadCallback pTheReadCallback, const Lib3MF_uint64 nStreamSize, const Lib3MF::SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) = 0; + + /** + * IAttachment::GetStreamSize - Retrieves the size of the attachment stream + * @return the stream size + */ + virtual Lib3MF_uint64 GetStreamSize() = 0; + + /** + * IAttachment::WriteToBuffer - Writes out the attachment into a buffer + * @param[in] nBufferBufferSize - Number of elements in buffer + * @param[out] pBufferNeededCount - will be filled with the count of the written structs, or needed buffer size. + * @param[out] pBufferBuffer - uint8 buffer of Buffer to write into + */ + virtual void WriteToBuffer(Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer) = 0; + + /** + * IAttachment::ReadFromBuffer - Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). + * @param[in] nBufferBufferSize - Number of elements in buffer + * @param[in] pBufferBuffer - Buffer to read from + */ + virtual void ReadFromBuffer(const Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer) = 0; + +}; + +typedef IBaseSharedPtr PIAttachment; + + +/************************************************************************************************************************* + Class interface for Texture2D +**************************************************************************************************************************/ + +class ITexture2D : public virtual IResource { +public: + /** + * ITexture2D::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xE0441CF976B36319UL; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2D" + } + + /** + * ITexture2D::GetAttachment - Retrieves the attachment located at the path of the texture. + * @return attachment that holds the texture's image information. + */ + virtual IAttachment * GetAttachment() = 0; + + /** + * ITexture2D::SetAttachment - Sets the texture's package path to the path of the attachment. + * @param[in] pAttachment - attachment that holds the texture's image information. + */ + virtual void SetAttachment(IAttachment* pAttachment) = 0; + + /** + * ITexture2D::GetContentType - Retrieves a texture's content type. + * @return returns content type enum. + */ + virtual Lib3MF::eTextureType GetContentType() = 0; + + /** + * ITexture2D::SetContentType - Retrieves a texture's content type. + * @param[in] eContentType - new Content Type + */ + virtual void SetContentType(const Lib3MF::eTextureType eContentType) = 0; + + /** + * ITexture2D::GetTileStyleUV - Retrieves a texture's tilestyle type. + * @param[out] eTileStyleU - returns tilestyle type enum. + * @param[out] eTileStyleV - returns tilestyle type enum. + */ + virtual void GetTileStyleUV(Lib3MF::eTextureTileStyle & eTileStyleU, Lib3MF::eTextureTileStyle & eTileStyleV) = 0; + + /** + * ITexture2D::SetTileStyleUV - Sets a texture's tilestyle type. + * @param[in] eTileStyleU - new tilestyle type enum. + * @param[in] eTileStyleV - new tilestyle type enum. + */ + virtual void SetTileStyleUV(const Lib3MF::eTextureTileStyle eTileStyleU, const Lib3MF::eTextureTileStyle eTileStyleV) = 0; + + /** + * ITexture2D::GetFilter - Retrieves a texture's filter type. + * @return returns filter type enum. + */ + virtual Lib3MF::eTextureFilter GetFilter() = 0; + + /** + * ITexture2D::SetFilter - Sets a texture's filter type. + * @param[in] eFilter - sets new filter type enum. + */ + virtual void SetFilter(const Lib3MF::eTextureFilter eFilter) = 0; + +}; + +typedef IBaseSharedPtr PITexture2D; + + +/************************************************************************************************************************* + Class interface for ImplicitPort +**************************************************************************************************************************/ + +class IImplicitPort : public virtual IBase { +public: + /** + * IImplicitPort::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xD5C49B04AF1963CDUL; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitPort" + } + + /** + * IImplicitPort::GetIdentifier - Retrieves the identifier of the port + * @return the identifier + */ + virtual std::string GetIdentifier() = 0; + + /** + * IImplicitPort::SetIdentifier - Sets the identifier of the port + * @param[in] sIdentifier - the identifier + */ + virtual void SetIdentifier(const std::string & sIdentifier) = 0; + + /** + * IImplicitPort::GetDisplayName - Retrieves the display name of the port + * @return the display name + */ + virtual std::string GetDisplayName() = 0; + + /** + * IImplicitPort::SetDisplayName - Sets the display name of the port + * @param[in] sDisplayName - the display name + */ + virtual void SetDisplayName(const std::string & sDisplayName) = 0; + + /** + * IImplicitPort::SetType - Sets the type of the port + * @param[in] eImplicitPortType - the type + */ + virtual void SetType(const Lib3MF::eImplicitPortType eImplicitPortType) = 0; + + /** + * IImplicitPort::GetType - Retrieves the type of the port + * @return the type + */ + virtual Lib3MF::eImplicitPortType GetType() = 0; + + /** + * IImplicitPort::GetReference - Retrieves the reference of the port, only used for input ports + * @return the reference + */ + virtual std::string GetReference() = 0; + + /** + * IImplicitPort::SetReference - Sets the reference of the port, only used for input ports + * @param[in] sReference - the reference + */ + virtual void SetReference(const std::string & sReference) = 0; + +}; + +typedef IBaseSharedPtr PIImplicitPort; + + +/************************************************************************************************************************* + Class interface for Iterator +**************************************************************************************************************************/ + +class IIterator : public virtual IBase { +public: + /** + * IIterator::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x52F06268CD098EFEUL; // First 64 bits of SHA1 of a string: "Lib3MF::Iterator" + } + + /** + * IIterator::MoveNext - Iterates to the next item in the list. + * @return Iterates to the next item in the list. + */ + virtual bool MoveNext() = 0; + + /** + * IIterator::MovePrevious - Iterates to the previous item in the list. + * @return Iterates to the previous item in the list. + */ + virtual bool MovePrevious() = 0; + + /** + * IIterator::Count - Returns the number of items the iterator captures. + * @return returns the number of items the iterator captures. + */ + virtual Lib3MF_uint64 Count() = 0; + +}; + +typedef IBaseSharedPtr PIIterator; + + +/************************************************************************************************************************* + Class interface for ImplicitPortIterator +**************************************************************************************************************************/ + +class IImplicitPortIterator : public virtual IIterator { +public: + /** + * IImplicitPortIterator::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xC62268F2D7C7012CUL; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitPortIterator" + } + + /** + * IImplicitPortIterator::GetCurrent - Returns the current element + * @return The current element + */ + virtual IImplicitPort * GetCurrent() = 0; + +}; + +typedef IBaseSharedPtr PIImplicitPortIterator; + + +/************************************************************************************************************************* + Class interface for ImplicitNode +**************************************************************************************************************************/ + +class IImplicitNode : public virtual IBase { +public: + /** + * IImplicitNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xE72592A7725AB29BUL; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitNode" + } + + /** + * IImplicitNode::GetIdentifier - Retrieves the identifier of the node + * @return the identifier + */ + virtual std::string GetIdentifier() = 0; + + /** + * IImplicitNode::SetIdentifier - Sets the identifier of the node + * @param[in] sIdentifier - the identifier + */ + virtual void SetIdentifier(const std::string & sIdentifier) = 0; + + /** + * IImplicitNode::GetDisplayName - Retrieves the display name of the node + * @return the display name + */ + virtual std::string GetDisplayName() = 0; + + /** + * IImplicitNode::SetDisplayName - Sets the display name of the node + * @param[in] sDisplayName - the display name + */ + virtual void SetDisplayName(const std::string & sDisplayName) = 0; + + /** + * IImplicitNode::GetTag - Retrieves the tag of the node + * @return the tag + */ + virtual std::string GetTag() = 0; + + /** + * IImplicitNode::SetTag - Sets the tag of the node + * @param[in] sTag - the tag + */ + virtual void SetTag(const std::string & sTag) = 0; + + /** + * IImplicitNode::GetNodeType - Retrieves the type of the node + * @return the type of the node + */ + virtual Lib3MF::eImplicitNodeType GetNodeType() = 0; + + /** + * IImplicitNode::AddInput - Add an input + * @param[in] sIdentifier - the identifier of the input + * @param[in] sDisplayName - the display name of the input + * @return + */ + virtual IImplicitPort * AddInput(const std::string & sIdentifier, const std::string & sDisplayName) = 0; + + /** + * IImplicitNode::GetInputs - Retrieves the inputs + * @return the iterator for the inputs + */ + virtual IImplicitPortIterator * GetInputs() = 0; + + /** + * IImplicitNode::AddOutput - Add an output + * @param[in] sIdentifier - the identifier of the output + * @param[in] sDisplayName - the display name of the output + * @return + */ + virtual IImplicitPort * AddOutput(const std::string & sIdentifier, const std::string & sDisplayName) = 0; + + /** + * IImplicitNode::GetOutputs - Retrieves the outputs + * @return the iterator the outputs + */ + virtual IImplicitPortIterator * GetOutputs() = 0; + + /** + * IImplicitNode::FindInput - Retrieves an input + * @param[in] sIdentifier - the identifier of the input + * @return the input port + */ + virtual IImplicitPort * FindInput(const std::string & sIdentifier) = 0; + + /** + * IImplicitNode::FindOutput - Retrieves an output + * @param[in] sIdentifier - the identifier of the output + * @return the output port + */ + virtual IImplicitPort * FindOutput(const std::string & sIdentifier) = 0; + + /** + * IImplicitNode::AreTypesValid - Checks if the types of the input and output ports are valid for the node type + * @return true, if the types are valid + */ + virtual bool AreTypesValid() = 0; + +}; + +typedef IBaseSharedPtr PIImplicitNode; + + +/************************************************************************************************************************* + Class interface for OneInputNode +**************************************************************************************************************************/ + +class IOneInputNode : public virtual IImplicitNode { +public: + /** + * IOneInputNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xB19B9FDA94B0A5E7UL; // First 64 bits of SHA1 of a string: "Lib3MF::OneInputNode" + } + + /** + * IOneInputNode::GetInputA - Retrieves the input + * @return the input + */ + virtual IImplicitPort * GetInputA() = 0; + + /** + * IOneInputNode::GetOutputResult - Retrieves the output + * @return the output + */ + virtual IImplicitPort * GetOutputResult() = 0; + +}; + +typedef IBaseSharedPtr PIOneInputNode; + + +/************************************************************************************************************************* + Class interface for SinNode +**************************************************************************************************************************/ + +class ISinNode : public virtual IOneInputNode { +public: + /** + * ISinNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xD5AEA50A56306722UL; // First 64 bits of SHA1 of a string: "Lib3MF::SinNode" + } + +}; + +typedef IBaseSharedPtr PISinNode; + + +/************************************************************************************************************************* + Class interface for CosNode +**************************************************************************************************************************/ + +class ICosNode : public virtual IOneInputNode { +public: + /** + * ICosNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x59BC328F6FB5C5FFUL; // First 64 bits of SHA1 of a string: "Lib3MF::CosNode" + } + +}; + +typedef IBaseSharedPtr PICosNode; + + +/************************************************************************************************************************* + Class interface for TanNode +**************************************************************************************************************************/ + +class ITanNode : public virtual IOneInputNode { +public: + /** + * ITanNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x2614CC572AF350B7UL; // First 64 bits of SHA1 of a string: "Lib3MF::TanNode" + } + +}; + +typedef IBaseSharedPtr PITanNode; + + +/************************************************************************************************************************* + Class interface for ArcSinNode +**************************************************************************************************************************/ + +class IArcSinNode : public virtual IOneInputNode { +public: + /** + * IArcSinNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xE554C8A7E72AAF4DUL; // First 64 bits of SHA1 of a string: "Lib3MF::ArcSinNode" + } + +}; + +typedef IBaseSharedPtr PIArcSinNode; + + +/************************************************************************************************************************* + Class interface for ArcCosNode +**************************************************************************************************************************/ + +class IArcCosNode : public virtual IOneInputNode { +public: + /** + * IArcCosNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x943AF6AE0EFD2B8AUL; // First 64 bits of SHA1 of a string: "Lib3MF::ArcCosNode" + } + +}; + +typedef IBaseSharedPtr PIArcCosNode; + + +/************************************************************************************************************************* + Class interface for ArcTanNode +**************************************************************************************************************************/ + +class IArcTanNode : public virtual IOneInputNode { +public: + /** + * IArcTanNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xE47D547615816BADUL; // First 64 bits of SHA1 of a string: "Lib3MF::ArcTanNode" + } + +}; + +typedef IBaseSharedPtr PIArcTanNode; + + +/************************************************************************************************************************* + Class interface for SinhNode +**************************************************************************************************************************/ + +class ISinhNode : public virtual IOneInputNode { +public: + /** + * ISinhNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x3C7756A456F2D089UL; // First 64 bits of SHA1 of a string: "Lib3MF::SinhNode" + } + +}; + +typedef IBaseSharedPtr PISinhNode; + + +/************************************************************************************************************************* + Class interface for CoshNode +**************************************************************************************************************************/ + +class ICoshNode : public virtual IOneInputNode { +public: + /** + * ICoshNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x4A993F91E1DE256DUL; // First 64 bits of SHA1 of a string: "Lib3MF::CoshNode" + } + +}; + +typedef IBaseSharedPtr PICoshNode; + + +/************************************************************************************************************************* + Class interface for TanhNode +**************************************************************************************************************************/ + +class ITanhNode : public virtual IOneInputNode { +public: + /** + * ITanhNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xCF077B19B0B78E9DUL; // First 64 bits of SHA1 of a string: "Lib3MF::TanhNode" + } + +}; + +typedef IBaseSharedPtr PITanhNode; + + +/************************************************************************************************************************* + Class interface for RoundNode +**************************************************************************************************************************/ + +class IRoundNode : public virtual IOneInputNode { +public: + /** + * IRoundNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xD9F5A53C657765AEUL; // First 64 bits of SHA1 of a string: "Lib3MF::RoundNode" + } + +}; + +typedef IBaseSharedPtr PIRoundNode; + + +/************************************************************************************************************************* + Class interface for CeilNode +**************************************************************************************************************************/ + +class ICeilNode : public virtual IOneInputNode { +public: + /** + * ICeilNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x627E211653E11D93UL; // First 64 bits of SHA1 of a string: "Lib3MF::CeilNode" + } + +}; + +typedef IBaseSharedPtr PICeilNode; + + +/************************************************************************************************************************* + Class interface for FloorNode +**************************************************************************************************************************/ + +class IFloorNode : public virtual IOneInputNode { +public: + /** + * IFloorNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x392A0F4C041D249CUL; // First 64 bits of SHA1 of a string: "Lib3MF::FloorNode" + } + +}; + +typedef IBaseSharedPtr PIFloorNode; + + +/************************************************************************************************************************* + Class interface for SignNode +**************************************************************************************************************************/ + +class ISignNode : public virtual IOneInputNode { +public: + /** + * ISignNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x8A45165E6C9646D7UL; // First 64 bits of SHA1 of a string: "Lib3MF::SignNode" + } + +}; + +typedef IBaseSharedPtr PISignNode; + + +/************************************************************************************************************************* + Class interface for FractNode +**************************************************************************************************************************/ + +class IFractNode : public virtual IOneInputNode { +public: + /** + * IFractNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x53E62FD67F4D9A65UL; // First 64 bits of SHA1 of a string: "Lib3MF::FractNode" + } + +}; + +typedef IBaseSharedPtr PIFractNode; + + +/************************************************************************************************************************* + Class interface for AbsNode +**************************************************************************************************************************/ + +class IAbsNode : public virtual IOneInputNode { +public: + /** + * IAbsNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x6B641C7060040BE3UL; // First 64 bits of SHA1 of a string: "Lib3MF::AbsNode" + } + +}; + +typedef IBaseSharedPtr PIAbsNode; + + +/************************************************************************************************************************* + Class interface for ExpNode +**************************************************************************************************************************/ + +class IExpNode : public virtual IOneInputNode { +public: + /** + * IExpNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x3390243A8E2410F3UL; // First 64 bits of SHA1 of a string: "Lib3MF::ExpNode" + } + +}; + +typedef IBaseSharedPtr PIExpNode; + + +/************************************************************************************************************************* + Class interface for LogNode +**************************************************************************************************************************/ + +class ILogNode : public virtual IOneInputNode { +public: + /** + * ILogNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x70021D73AA89FDUL; // First 64 bits of SHA1 of a string: "Lib3MF::LogNode" + } + +}; + +typedef IBaseSharedPtr PILogNode; + + +/************************************************************************************************************************* + Class interface for Log2Node +**************************************************************************************************************************/ + +class ILog2Node : public virtual IOneInputNode { +public: + /** + * ILog2Node::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xE8C0ABF7C5DC7068UL; // First 64 bits of SHA1 of a string: "Lib3MF::Log2Node" + } + +}; + +typedef IBaseSharedPtr PILog2Node; + + +/************************************************************************************************************************* + Class interface for Log10Node +**************************************************************************************************************************/ + +class ILog10Node : public virtual IOneInputNode { +public: + /** + * ILog10Node::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x87740AD53454E0DFUL; // First 64 bits of SHA1 of a string: "Lib3MF::Log10Node" + } + +}; + +typedef IBaseSharedPtr PILog10Node; + + +/************************************************************************************************************************* + Class interface for LengthNode +**************************************************************************************************************************/ + +class ILengthNode : public virtual IOneInputNode { +public: + /** + * ILengthNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xD85889E2739A74B1UL; // First 64 bits of SHA1 of a string: "Lib3MF::LengthNode" + } + +}; + +typedef IBaseSharedPtr PILengthNode; + + +/************************************************************************************************************************* + Class interface for TransposeNode +**************************************************************************************************************************/ + +class ITransposeNode : public virtual IOneInputNode { +public: + /** + * ITransposeNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xA808B7599C158CE6UL; // First 64 bits of SHA1 of a string: "Lib3MF::TransposeNode" + } + +}; + +typedef IBaseSharedPtr PITransposeNode; + + +/************************************************************************************************************************* + Class interface for InverseNode +**************************************************************************************************************************/ + +class IInverseNode : public virtual IOneInputNode { +public: + /** + * IInverseNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xE8601F66A23A0540UL; // First 64 bits of SHA1 of a string: "Lib3MF::InverseNode" + } + +}; + +typedef IBaseSharedPtr PIInverseNode; + + +/************************************************************************************************************************* + Class interface for SqrtNode +**************************************************************************************************************************/ + +class ISqrtNode : public virtual IOneInputNode { +public: + /** + * ISqrtNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x9F831944A3DE31DAUL; // First 64 bits of SHA1 of a string: "Lib3MF::SqrtNode" + } + +}; + +typedef IBaseSharedPtr PISqrtNode; + + +/************************************************************************************************************************* + Class interface for ResourceIdNode +**************************************************************************************************************************/ + +class IResourceIdNode : public virtual IImplicitNode { +public: + /** + * IResourceIdNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xCA86A77C71CD3FAEUL; // First 64 bits of SHA1 of a string: "Lib3MF::ResourceIdNode" + } + + /** + * IResourceIdNode::SetResource - Sets the Resource that the resourceid attribute of the node will point to + * @param[in] pResource - the resource + */ + virtual void SetResource(IResource* pResource) = 0; + + /** + * IResourceIdNode::GetResource - Retrieves the resource of the node + * @return the resource + */ + virtual IResource * GetResource() = 0; + + /** + * IResourceIdNode::GetOutputValue - Retrieves the output + * @return the output + */ + virtual IImplicitPort * GetOutputValue() = 0; + +}; + +typedef IBaseSharedPtr PIResourceIdNode; + + +/************************************************************************************************************************* + Class interface for TwoInputNode +**************************************************************************************************************************/ + +class ITwoInputNode : public virtual IOneInputNode { +public: + /** + * ITwoInputNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x7DE3951BA4C1064CUL; // First 64 bits of SHA1 of a string: "Lib3MF::TwoInputNode" + } + + /** + * ITwoInputNode::GetInputB - Retrieves the second input + * @return the second input + */ + virtual IImplicitPort * GetInputB() = 0; + +}; + +typedef IBaseSharedPtr PITwoInputNode; + + +/************************************************************************************************************************* + Class interface for AdditionNode +**************************************************************************************************************************/ + +class IAdditionNode : public virtual ITwoInputNode { +public: + /** + * IAdditionNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x57A2236998DF5248UL; // First 64 bits of SHA1 of a string: "Lib3MF::AdditionNode" + } + +}; + +typedef IBaseSharedPtr PIAdditionNode; + + +/************************************************************************************************************************* + Class interface for SubtractionNode +**************************************************************************************************************************/ + +class ISubtractionNode : public virtual ITwoInputNode { +public: + /** + * ISubtractionNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x6079B12FFF345D02UL; // First 64 bits of SHA1 of a string: "Lib3MF::SubtractionNode" + } + +}; + +typedef IBaseSharedPtr PISubtractionNode; + + +/************************************************************************************************************************* + Class interface for MultiplicationNode +**************************************************************************************************************************/ + +class IMultiplicationNode : public virtual ITwoInputNode { +public: + /** + * IMultiplicationNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xA3C27CF54C2AA76CUL; // First 64 bits of SHA1 of a string: "Lib3MF::MultiplicationNode" + } + +}; + +typedef IBaseSharedPtr PIMultiplicationNode; + + +/************************************************************************************************************************* + Class interface for DivisionNode +**************************************************************************************************************************/ + +class IDivisionNode : public virtual ITwoInputNode { +public: + /** + * IDivisionNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xB896B6413C08CF39UL; // First 64 bits of SHA1 of a string: "Lib3MF::DivisionNode" + } + +}; + +typedef IBaseSharedPtr PIDivisionNode; + + +/************************************************************************************************************************* + Class interface for DotNode +**************************************************************************************************************************/ + +class IDotNode : public virtual ITwoInputNode { +public: + /** + * IDotNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xFE60932A66375FADUL; // First 64 bits of SHA1 of a string: "Lib3MF::DotNode" + } + +}; + +typedef IBaseSharedPtr PIDotNode; + + +/************************************************************************************************************************* + Class interface for CrossNode +**************************************************************************************************************************/ + +class ICrossNode : public virtual ITwoInputNode { +public: + /** + * ICrossNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x106182D38CA5CFE3UL; // First 64 bits of SHA1 of a string: "Lib3MF::CrossNode" + } + +}; + +typedef IBaseSharedPtr PICrossNode; + + +/************************************************************************************************************************* + Class interface for ArcTan2Node +**************************************************************************************************************************/ + +class IArcTan2Node : public virtual ITwoInputNode { +public: + /** + * IArcTan2Node::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xB6153EF5DE7E5E11UL; // First 64 bits of SHA1 of a string: "Lib3MF::ArcTan2Node" + } + +}; + +typedef IBaseSharedPtr PIArcTan2Node; + + +/************************************************************************************************************************* + Class interface for MatVecMultiplicationNode +**************************************************************************************************************************/ + +class IMatVecMultiplicationNode : public virtual ITwoInputNode { +public: + /** + * IMatVecMultiplicationNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x7570C43B9721D0C0UL; // First 64 bits of SHA1 of a string: "Lib3MF::MatVecMultiplicationNode" + } + +}; + +typedef IBaseSharedPtr PIMatVecMultiplicationNode; + + +/************************************************************************************************************************* + Class interface for MinNode +**************************************************************************************************************************/ + +class IMinNode : public virtual ITwoInputNode { +public: + /** + * IMinNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x846AFDE9A091E997UL; // First 64 bits of SHA1 of a string: "Lib3MF::MinNode" + } + +}; + +typedef IBaseSharedPtr PIMinNode; + + +/************************************************************************************************************************* + Class interface for MaxNode +**************************************************************************************************************************/ + +class IMaxNode : public virtual ITwoInputNode { +public: + /** + * IMaxNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x73F910381BF250DUL; // First 64 bits of SHA1 of a string: "Lib3MF::MaxNode" + } + +}; + +typedef IBaseSharedPtr PIMaxNode; + + +/************************************************************************************************************************* + Class interface for FmodNode +**************************************************************************************************************************/ + +class IFmodNode : public virtual ITwoInputNode { +public: + /** + * IFmodNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x1EF703D298223F2AUL; // First 64 bits of SHA1 of a string: "Lib3MF::FmodNode" + } + +}; + +typedef IBaseSharedPtr PIFmodNode; + + +/************************************************************************************************************************* + Class interface for ModNode +**************************************************************************************************************************/ + +class IModNode : public virtual ITwoInputNode { +public: + /** + * IModNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xEA57335849379F22UL; // First 64 bits of SHA1 of a string: "Lib3MF::ModNode" + } + +}; + +typedef IBaseSharedPtr PIModNode; + + +/************************************************************************************************************************* + Class interface for PowNode +**************************************************************************************************************************/ + +class IPowNode : public virtual ITwoInputNode { +public: + /** + * IPowNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x7700AA17CA1AC0F8UL; // First 64 bits of SHA1 of a string: "Lib3MF::PowNode" + } + +}; + +typedef IBaseSharedPtr PIPowNode; + + +/************************************************************************************************************************* + Class interface for SelectNode +**************************************************************************************************************************/ + +class ISelectNode : public virtual IOneInputNode { +public: + /** + * ISelectNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x1127ED71E05A9BD4UL; // First 64 bits of SHA1 of a string: "Lib3MF::SelectNode" + } + + /** + * ISelectNode::GetInputB - Retrieves the second input + * @return the second input + */ + virtual IImplicitPort * GetInputB() = 0; + + /** + * ISelectNode::GetInputC - Retrieves the third input + * @return the third input + */ + virtual IImplicitPort * GetInputC() = 0; + + /** + * ISelectNode::GetInputD - Retrieves the fourth input + * @return the fourth input + */ + virtual IImplicitPort * GetInputD() = 0; + +}; + +typedef IBaseSharedPtr PISelectNode; + + +/************************************************************************************************************************* + Class interface for ClampNode +**************************************************************************************************************************/ + +class IClampNode : public virtual IOneInputNode { +public: + /** + * IClampNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x77AF68C971B1485FUL; // First 64 bits of SHA1 of a string: "Lib3MF::ClampNode" + } + + /** + * IClampNode::GetInputMin - Retrieves the input for the lower limit + * @return the input for the lower limit + */ + virtual IImplicitPort * GetInputMin() = 0; + + /** + * IClampNode::GetInputMax - Retrieves the input for the upper limit + * @return the input for the upper limit + */ + virtual IImplicitPort * GetInputMax() = 0; + +}; + +typedef IBaseSharedPtr PIClampNode; + + +/************************************************************************************************************************* + Class interface for ComposeVectorNode +**************************************************************************************************************************/ + +class IComposeVectorNode : public virtual IImplicitNode { +public: + /** + * IComposeVectorNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x49C24B8840C01F7EUL; // First 64 bits of SHA1 of a string: "Lib3MF::ComposeVectorNode" + } + + /** + * IComposeVectorNode::GetInputX - Retrieves the input for the x component + * @return the input for the x component + */ + virtual IImplicitPort * GetInputX() = 0; + + /** + * IComposeVectorNode::GetInputY - Retrieves the input for the y component + * @return the input for the y component + */ + virtual IImplicitPort * GetInputY() = 0; + + /** + * IComposeVectorNode::GetInputZ - Retrieves the input for the z component + * @return the input for the z component + */ + virtual IImplicitPort * GetInputZ() = 0; + + /** + * IComposeVectorNode::GetOutputResult - Retrieves the output + * @return the output + */ + virtual IImplicitPort * GetOutputResult() = 0; + +}; + +typedef IBaseSharedPtr PIComposeVectorNode; + + +/************************************************************************************************************************* + Class interface for VectorFromScalarNode +**************************************************************************************************************************/ + +class IVectorFromScalarNode : public virtual IOneInputNode { +public: + /** + * IVectorFromScalarNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x2E417B93351375E2UL; // First 64 bits of SHA1 of a string: "Lib3MF::VectorFromScalarNode" + } + +}; + +typedef IBaseSharedPtr PIVectorFromScalarNode; + + +/************************************************************************************************************************* + Class interface for DecomposeVectorNode +**************************************************************************************************************************/ + +class IDecomposeVectorNode : public virtual IImplicitNode { +public: + /** + * IDecomposeVectorNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xCC4F8D561CCE35D4UL; // First 64 bits of SHA1 of a string: "Lib3MF::DecomposeVectorNode" + } + + /** + * IDecomposeVectorNode::GetInputA - Retrieves the input + * @return the input port for the vector to decompose + */ + virtual IImplicitPort * GetInputA() = 0; + + /** + * IDecomposeVectorNode::GetOutputX - Retrieves the output for the x component + * @return the output for the x component + */ + virtual IImplicitPort * GetOutputX() = 0; + + /** + * IDecomposeVectorNode::GetOutputY - Retrieves the output for the y component + * @return the output for the y component + */ + virtual IImplicitPort * GetOutputY() = 0; + + /** + * IDecomposeVectorNode::GetOutputZ - Retrieves the output for the z component + * @return the output for the z component + */ + virtual IImplicitPort * GetOutputZ() = 0; + +}; + +typedef IBaseSharedPtr PIDecomposeVectorNode; + + +/************************************************************************************************************************* + Class interface for ComposeMatrixNode +**************************************************************************************************************************/ + +class IComposeMatrixNode : public virtual IImplicitNode { +public: + /** + * IComposeMatrixNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x9EF9EB54A53AA40DUL; // First 64 bits of SHA1 of a string: "Lib3MF::ComposeMatrixNode" + } + + /** + * IComposeMatrixNode::GetInputM00 - Retrieves the input for the element 0 0 + * @return the input for the m00 element + */ + virtual IImplicitPort * GetInputM00() = 0; + + /** + * IComposeMatrixNode::GetInputM01 - Retrieves the input for the element 0 1 + * @return the input for the m01 element + */ + virtual IImplicitPort * GetInputM01() = 0; + + /** + * IComposeMatrixNode::GetInputM02 - Retrieves the input for the element 0 2 + * @return the input for the m02 element + */ + virtual IImplicitPort * GetInputM02() = 0; + + /** + * IComposeMatrixNode::GetInputM03 - Retrieves the input for the element 0 3 + * @return the input for the m03 element + */ + virtual IImplicitPort * GetInputM03() = 0; + + /** + * IComposeMatrixNode::GetInputM10 - Retrieves the input for the element 1 0 + * @return the input for the m10 element + */ + virtual IImplicitPort * GetInputM10() = 0; + + /** + * IComposeMatrixNode::GetInputM11 - Retrieves the input for the element 1 1 + * @return the input for the m11 element + */ + virtual IImplicitPort * GetInputM11() = 0; + + /** + * IComposeMatrixNode::GetInputM12 - Retrieves the input for the element 1 2 + * @return the input for the m12 element + */ + virtual IImplicitPort * GetInputM12() = 0; + + /** + * IComposeMatrixNode::GetInputM13 - Retrieves the input for the element 1 3 + * @return the input for the m3 element + */ + virtual IImplicitPort * GetInputM13() = 0; + + /** + * IComposeMatrixNode::GetInputM20 - Retrieves the input for the element 2 0 + * @return the input for the m2 element + */ + virtual IImplicitPort * GetInputM20() = 0; + + /** + * IComposeMatrixNode::GetInputM21 - Retrieves the input for the element 2 1 + * @return + */ + virtual IImplicitPort * GetInputM21() = 0; + + /** + * IComposeMatrixNode::GetInputM22 - Retrieves the input for the element 2 2 + * @return the input for the m22 element + */ + virtual IImplicitPort * GetInputM22() = 0; + + /** + * IComposeMatrixNode::GetInputM23 - Retrieves the input for the element 2 3 + * @return the input for the m23 element + */ + virtual IImplicitPort * GetInputM23() = 0; + + /** + * IComposeMatrixNode::GetInputM30 - Retrieves the input for the element 3 0 + * @return the input for the m30 element + */ + virtual IImplicitPort * GetInputM30() = 0; + + /** + * IComposeMatrixNode::GetInputM31 - Retrieves the input for the element 3 1 + * @return the input for the m31 element + */ + virtual IImplicitPort * GetInputM31() = 0; + + /** + * IComposeMatrixNode::GetInputM32 - Retrieves the input for the element 3 2 + * @return the input for the m32 element + */ + virtual IImplicitPort * GetInputM32() = 0; + + /** + * IComposeMatrixNode::GetInputM33 - Retrieves the input for the element 3 3 + * @return the input for the m33 element + */ + virtual IImplicitPort * GetInputM33() = 0; + + /** + * IComposeMatrixNode::GetOutputResult - Retrieves the output + * @return the output + */ + virtual IImplicitPort * GetOutputResult() = 0; + +}; + +typedef IBaseSharedPtr PIComposeMatrixNode; + + +/************************************************************************************************************************* + Class interface for MatrixFromRowsNode +**************************************************************************************************************************/ + +class IMatrixFromRowsNode : public virtual IImplicitNode { +public: + /** + * IMatrixFromRowsNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xD6DFD0A7EB64AC33UL; // First 64 bits of SHA1 of a string: "Lib3MF::MatrixFromRowsNode" + } + + /** + * IMatrixFromRowsNode::GetInputA - Retrieves the input for the first row + * @return the input for the first row + */ + virtual IImplicitPort * GetInputA() = 0; + + /** + * IMatrixFromRowsNode::GetInputB - Retrieves the input for the second row + * @return the input for the second row + */ + virtual IImplicitPort * GetInputB() = 0; + + /** + * IMatrixFromRowsNode::GetInputC - Retrieves the input for the third row + * @return the input for the third row + */ + virtual IImplicitPort * GetInputC() = 0; + + /** + * IMatrixFromRowsNode::GetInputD - Retrieves the input for the fourth row + * @return the input for the fourth row + */ + virtual IImplicitPort * GetInputD() = 0; + + /** + * IMatrixFromRowsNode::GetOutputResult - Retrieves the output + * @return the output + */ + virtual IImplicitPort * GetOutputResult() = 0; + +}; + +typedef IBaseSharedPtr PIMatrixFromRowsNode; + + +/************************************************************************************************************************* + Class interface for MatrixFromColumnsNode +**************************************************************************************************************************/ + +class IMatrixFromColumnsNode : public virtual IImplicitNode { +public: + /** + * IMatrixFromColumnsNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xDCBEAFCF83F3AACUL; // First 64 bits of SHA1 of a string: "Lib3MF::MatrixFromColumnsNode" + } + + /** + * IMatrixFromColumnsNode::GetInputA - Retrieves the input for the first column + * @return the input for the first column + */ + virtual IImplicitPort * GetInputA() = 0; + + /** + * IMatrixFromColumnsNode::GetInputB - Retrieves the input for the second column + * @return the input for the second column + */ + virtual IImplicitPort * GetInputB() = 0; + + /** + * IMatrixFromColumnsNode::GetInputC - Retrieves the input for the third column + * @return the input for the third column + */ + virtual IImplicitPort * GetInputC() = 0; + + /** + * IMatrixFromColumnsNode::GetInputD - Retrieves the input for the fourth column + * @return the input for the fourth column + */ + virtual IImplicitPort * GetInputD() = 0; + + /** + * IMatrixFromColumnsNode::GetOutputResult - Retrieves the output + * @return the output + */ + virtual IImplicitPort * GetOutputResult() = 0; + +}; + +typedef IBaseSharedPtr PIMatrixFromColumnsNode; + + +/************************************************************************************************************************* + Class interface for ConstantNode +**************************************************************************************************************************/ + +class IConstantNode : public virtual IImplicitNode { +public: + /** + * IConstantNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x3F8E5D082F966B1BUL; // First 64 bits of SHA1 of a string: "Lib3MF::ConstantNode" + } + + /** + * IConstantNode::SetConstant - Sets the constant value of the node + * @param[in] dValue - the value + */ + virtual void SetConstant(const Lib3MF_double dValue) = 0; + + /** + * IConstantNode::GetConstant - Retrieves the constant value of the node + * @return the value + */ + virtual Lib3MF_double GetConstant() = 0; + + /** + * IConstantNode::GetOutputValue - Retrieves the output + * @return the output + */ + virtual IImplicitPort * GetOutputValue() = 0; + +}; + +typedef IBaseSharedPtr PIConstantNode; + + +/************************************************************************************************************************* + Class interface for ConstVecNode +**************************************************************************************************************************/ + +class IConstVecNode : public virtual IImplicitNode { +public: + /** + * IConstVecNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x9C9363B3F708D556UL; // First 64 bits of SHA1 of a string: "Lib3MF::ConstVecNode" + } + + /** + * IConstVecNode::SetVector - Sets the vector value of the node + * @param[in] Value - the value + */ + virtual void SetVector(const Lib3MF::sVector Value) = 0; + + /** + * IConstVecNode::GetVector - Retrieves the vector value of the node + * @return the value + */ + virtual Lib3MF::sVector GetVector() = 0; + + /** + * IConstVecNode::GetOutputVector - Retrieves the output + * @return the output + */ + virtual IImplicitPort * GetOutputVector() = 0; + +}; + +typedef IBaseSharedPtr PIConstVecNode; + + +/************************************************************************************************************************* + Class interface for ConstMatNode +**************************************************************************************************************************/ + +class IConstMatNode : public virtual IImplicitNode { +public: + /** + * IConstMatNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xF85C90EDCE6F90A4UL; // First 64 bits of SHA1 of a string: "Lib3MF::ConstMatNode" + } + + /** + * IConstMatNode::SetMatrix - Sets the matrix value of the node + * @param[in] Value - the value + */ + virtual void SetMatrix(const Lib3MF::sMatrix4x4 Value) = 0; + + /** + * IConstMatNode::GetMatrix - Retrieves the matrix value of the node + * @return the matrix + */ + virtual Lib3MF::sMatrix4x4 GetMatrix() = 0; + + /** + * IConstMatNode::GetOutputMatrix - Retrieves the output + * @return the output + */ + virtual IImplicitPort * GetOutputMatrix() = 0; + +}; + +typedef IBaseSharedPtr PIConstMatNode; + + +/************************************************************************************************************************* + Class interface for MeshNode +**************************************************************************************************************************/ + +class IMeshNode : public virtual IImplicitNode { +public: + /** + * IMeshNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x53601FD432E3DEF4UL; // First 64 bits of SHA1 of a string: "Lib3MF::MeshNode" + } + + /** + * IMeshNode::GetInputMesh - Retrieves the input for the model resource id of the mesh + * @return the input port for the model resource id of the mesh + */ + virtual IImplicitPort * GetInputMesh() = 0; + + /** + * IMeshNode::GetInputPos - Retrieves the input for the position + * @return the input port for the position + */ + virtual IImplicitPort * GetInputPos() = 0; + + /** + * IMeshNode::GetOutputDistance - Retrieves the output + * @return the output port for the signed distance to the mesh + */ + virtual IImplicitPort * GetOutputDistance() = 0; + +}; + +typedef IBaseSharedPtr PIMeshNode; + + +/************************************************************************************************************************* + Class interface for UnsignedMeshNode +**************************************************************************************************************************/ + +class IUnsignedMeshNode : public virtual IImplicitNode { +public: + /** + * IUnsignedMeshNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x29985A628251A9CDUL; // First 64 bits of SHA1 of a string: "Lib3MF::UnsignedMeshNode" + } + + /** + * IUnsignedMeshNode::GetInputMesh - Retrieves the input for the model resource id of the mesh + * @return the input port for the model resource id of the mesh + */ + virtual IImplicitPort * GetInputMesh() = 0; + + /** + * IUnsignedMeshNode::GetInputPos - Retrieves the input for the position + * @return the input port for the position + */ + virtual IImplicitPort * GetInputPos() = 0; + + /** + * IUnsignedMeshNode::GetOutputDistance - Retrieves the output + * @return the output port for the unsigned distance to the mesh + */ + virtual IImplicitPort * GetOutputDistance() = 0; + +}; + +typedef IBaseSharedPtr PIUnsignedMeshNode; + + +/************************************************************************************************************************* + Class interface for FunctionCallNode +**************************************************************************************************************************/ + +class IFunctionCallNode : public virtual IImplicitNode { +public: + /** + * IFunctionCallNode::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x765C17C952F24E3UL; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionCallNode" + } + + /** + * IFunctionCallNode::GetInputFunctionID - Retrieves the input for the function id + * @return the input port for the function + */ + virtual IImplicitPort * GetInputFunctionID() = 0; + +}; + +typedef IBaseSharedPtr PIFunctionCallNode; + + +/************************************************************************************************************************* + Class interface for NodeIterator +**************************************************************************************************************************/ + +class INodeIterator : public virtual IIterator { +public: + /** + * INodeIterator::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0xFC006BC888CAB4D0UL; // First 64 bits of SHA1 of a string: "Lib3MF::NodeIterator" + } + + /** + * INodeIterator::GetCurrent - Returns the current element + * @return The current element + */ + virtual IImplicitNode * GetCurrent() = 0; + +}; + +typedef IBaseSharedPtr PINodeIterator; + + +/************************************************************************************************************************* + Class interface for Function +**************************************************************************************************************************/ + +class IFunction : public virtual IResource { +public: + /** + * IFunction::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x9EFB2757CA1A5231UL; // First 64 bits of SHA1 of a string: "Lib3MF::Function" + } + + /** + * IFunction::GetDisplayName - Retrieves the display name of the function + * @return the display name + */ + virtual std::string GetDisplayName() = 0; + + /** + * IFunction::SetDisplayName - Sets the display name of the function + * @param[in] sDisplayName - the display name + */ + virtual void SetDisplayName(const std::string & sDisplayName) = 0; + + /** + * IFunction::AddInput - Add an input + * @param[in] sIdentifier - the identifier of the input + * @param[in] sDisplayName - the display name of the input + * @param[in] eType - the type of the input + * @return The added input port + */ + virtual IImplicitPort * AddInput(const std::string & sIdentifier, const std::string & sDisplayName, const Lib3MF::eImplicitPortType eType) = 0; + + /** + * IFunction::GetInputs - Retrieves the inputs + * @return iterator for the list of inputs + */ + virtual IImplicitPortIterator * GetInputs() = 0; + + /** + * IFunction::RemoveInput - Removes an input + * @param[in] pInput - The input to be removed + */ + virtual void RemoveInput(IImplicitPort* pInput) = 0; + + /** + * IFunction::AddOutput - Add an output + * @param[in] sIdentifier - the identifier of the output + * @param[in] sDisplayName - the display name of the output + * @param[in] eType - the type of the input + * @return The added input port + */ + virtual IImplicitPort * AddOutput(const std::string & sIdentifier, const std::string & sDisplayName, const Lib3MF::eImplicitPortType eType) = 0; + + /** + * IFunction::GetOutputs - Retrieves the outputs + * @return iterator for the outputs + */ + virtual IImplicitPortIterator * GetOutputs() = 0; + + /** + * IFunction::RemoveOutput - Removes an output + * @param[in] pOutput - The output to be removed + */ + virtual void RemoveOutput(IImplicitPort* pOutput) = 0; + + /** + * IFunction::FindInput - Retrieves an input + * @param[in] sIdentifier - the identifier of the input + * @return the input port + */ + virtual IImplicitPort * FindInput(const std::string & sIdentifier) = 0; + + /** + * IFunction::FindOutput - Retrieves an output + * @param[in] sIdentifier - the identifier of the output + * @return the output port + */ + virtual IImplicitPort * FindOutput(const std::string & sIdentifier) = 0; + +}; + +typedef IBaseSharedPtr PIFunction; + + +/************************************************************************************************************************* + Class interface for ImplicitFunction +**************************************************************************************************************************/ + +class IImplicitFunction : public virtual IFunction { +public: + /** + * IImplicitFunction::ClassTypeId - Get Class Type Id + * @return Class type as a 64 bits integer + */ + Lib3MF_uint64 ClassTypeId() override + { + return 0x6CE54469EEA83BC1UL; // First 64 bits of SHA1 of a string: "Lib3MF::ImplicitFunction" + } + + /** + * IImplicitFunction::GetIdentifier - Retrieves the identifier of the function + * @return the identifier + */ + virtual std::string GetIdentifier() = 0; + + /** + * IImplicitFunction::SetIdentifier - Sets the identifier of the function + * @param[in] sIdentifier - the identifier + */ + virtual void SetIdentifier(const std::string & sIdentifier) = 0; + + /** + * IImplicitFunction::AddNode - Add a node + * @param[in] eNodeType - the type of the node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IImplicitNode * AddNode(const Lib3MF::eImplicitNodeType eNodeType, const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; + + /** + * IImplicitFunction::AddSinNode - Add a SinNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual ISinNode * AddSinNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; + + /** + * IImplicitFunction::AddCosNode - Add a CosNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual ICosNode * AddCosNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; + + /** + * IImplicitFunction::AddTanNode - Add a TanNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual ITanNode * AddTanNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; + + /** + * IImplicitFunction::AddArcSinNode - Add a ArcSinNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IArcSinNode * AddArcSinNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; + + /** + * IImplicitFunction::AddArcCosNode - Add a ArcCosNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IArcCosNode * AddArcCosNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; + + /** + * IImplicitFunction::AddArcTan2Node - Add a ArcTan2Node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IArcTan2Node * AddArcTan2Node(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; + + /** + * IImplicitFunction::AddSinhNode - Add a SinhNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual ISinhNode * AddSinhNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; + + /** + * IImplicitFunction::AddCoshNode - Add a CoshNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual ICoshNode * AddCoshNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; + + /** + * IImplicitFunction::AddTanhNode - Add a TanhNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual ITanhNode * AddTanhNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; + + /** + * IImplicitFunction::AddRoundNode - Add a RoundNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IRoundNode * AddRoundNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; + + /** + * IImplicitFunction::AddCeilNode - Add a CeilNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual ICeilNode * AddCeilNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * ITexture2DGroup::RemoveTex2Coord - Removes a tex2coords from the Texture2DGroup. - * @param[in] nPropertyID - PropertyID of the tex2coords in the Texture2DGroup. + * IImplicitFunction::AddFloorNode - Add a FloorNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual void RemoveTex2Coord(const Lib3MF_uint32 nPropertyID) = 0; + virtual IFloorNode * AddFloorNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * ITexture2DGroup::GetTexture2D - Obtains the texture2D instance of this group. - * @return the texture2D instance of this group. + * IImplicitFunction::AddSignNode - Add a SignNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual ITexture2D * GetTexture2D() = 0; + virtual ISignNode * AddSignNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; -}; + /** + * IImplicitFunction::AddFractNode - Add a FractNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IFractNode * AddFractNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; -typedef IBaseSharedPtr PITexture2DGroup; + /** + * IImplicitFunction::AddAbsNode - Add a AbsNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IAbsNode * AddAbsNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; + /** + * IImplicitFunction::AddExpNode - Add a ExpNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IExpNode * AddExpNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; -/************************************************************************************************************************* - Class interface for CompositeMaterials -**************************************************************************************************************************/ + /** + * IImplicitFunction::AddLogNode - Add a LogNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual ILogNode * AddLogNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; -class ICompositeMaterials : public virtual IResource { -public: /** - * ICompositeMaterials::ClassTypeId - Get Class Type Id - * @return Class type as a 64 bits integer + * IImplicitFunction::AddLog2Node - Add a Log2Node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint64 ClassTypeId() override - { - return 0xCE16224D688B86F2UL; // First 64 bits of SHA1 of a string: "Lib3MF::CompositeMaterials" - } + virtual ILog2Node * AddLog2Node(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * ICompositeMaterials::GetCount - Retrieves the count of Composite-s in the CompositeMaterials. - * @return returns the count of Composite-s + * IImplicitFunction::AddLog10Node - Add a Log10Node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual Lib3MF_uint32 GetCount() = 0; + virtual ILog10Node * AddLog10Node(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * ICompositeMaterials::GetAllPropertyIDs - returns all the PropertyIDs of all Composite-Mixing Values in this CompositeMaterials - * @param[in] nPropertyIDsBufferSize - Number of elements in buffer - * @param[out] pPropertyIDsNeededCount - will be filled with the count of the written structs, or needed buffer size. - * @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the Composite-Mixing Values in the CompositeMaterials. + * IImplicitFunction::AddLengthNode - Add a LengthNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual void GetAllPropertyIDs(Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) = 0; + virtual ILengthNode * AddLengthNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * ICompositeMaterials::GetBaseMaterialGroup - Obtains the BaseMaterialGroup instance of this CompositeMaterials. - * @return returns the BaseMaterialGroup instance of this CompositeMaterials + * IImplicitFunction::AddTransposeNode - Add a TransposeNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual IBaseMaterialGroup * GetBaseMaterialGroup() = 0; + virtual ITransposeNode * AddTransposeNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * ICompositeMaterials::AddComposite - Adds a new Composite-Mixing Values to the CompositeMaterials. - * @param[in] nCompositeBufferSize - Number of elements in buffer - * @param[in] pCompositeBuffer - The Composite Constituents to be added as composite - * @return returns new PropertyID of the new Composite in the CompositeMaterials. + * IImplicitFunction::InverseNode - Add a InverseNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual Lib3MF_uint32 AddComposite(const Lib3MF_uint64 nCompositeBufferSize, const Lib3MF::sCompositeConstituent * pCompositeBuffer) = 0; + virtual IInverseNode * InverseNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * ICompositeMaterials::RemoveComposite - Removes a Composite-Maxing Ratio from the CompositeMaterials. - * @param[in] nPropertyID - PropertyID of the Composite-Mixing Values in the CompositeMaterials to be removed. + * IImplicitFunction::AddSqrtNode - Add a SqrtNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual void RemoveComposite(const Lib3MF_uint32 nPropertyID) = 0; + virtual ISqrtNode * AddSqrtNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * ICompositeMaterials::GetComposite - Obtains a Composite-Maxing Ratio of this CompositeMaterials. - * @param[in] nPropertyID - the PropertyID of the Composite-Maxing Ratio in the CompositeMaterials. - * @param[in] nCompositeBufferSize - Number of elements in buffer - * @param[out] pCompositeNeededCount - will be filled with the count of the written structs, or needed buffer size. - * @param[out] pCompositeBuffer - CompositeConstituent buffer of The Composite-Mixing Values with the given PropertyID + * IImplicitFunction::AddResourceIdNode - Add a ResourceIdNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual void GetComposite(const Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, Lib3MF::sCompositeConstituent * pCompositeBuffer) = 0; + virtual IResourceIdNode * AddResourceIdNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; -}; + /** + * IImplicitFunction::AddAdditionNode - Add an AdditionNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IAdditionNode * AddAdditionNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; -typedef IBaseSharedPtr PICompositeMaterials; + /** + * IImplicitFunction::AddSubtractionNode - Add a SubtractionNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual ISubtractionNode * AddSubtractionNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; + /** + * IImplicitFunction::AddMultiplicationNode - Add a MultiplicationNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IMultiplicationNode * AddMultiplicationNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; -/************************************************************************************************************************* - Class interface for MultiPropertyGroup -**************************************************************************************************************************/ + /** + * IImplicitFunction::AddDivisionNode - Add a DivisionNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IDivisionNode * AddDivisionNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; -class IMultiPropertyGroup : public virtual IResource { -public: /** - * IMultiPropertyGroup::ClassTypeId - Get Class Type Id - * @return Class type as a 64 bits integer + * IImplicitFunction::AddDotNode - Add a DotNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint64 ClassTypeId() override - { - return 0xB989E02E43158FE6UL; // First 64 bits of SHA1 of a string: "Lib3MF::MultiPropertyGroup" - } + virtual IDotNode * AddDotNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IMultiPropertyGroup::GetCount - Retrieves the count of MultiProperty-s in the MultiPropertyGroup. - * @return returns the count of MultiProperty-s + * IImplicitFunction::AddCrossNode - Add a CrossNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual Lib3MF_uint32 GetCount() = 0; + virtual ICrossNode * AddCrossNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IMultiPropertyGroup::GetAllPropertyIDs - returns all the PropertyIDs of all MultiProperty-s in this MultiPropertyGroup - * @param[in] nPropertyIDsBufferSize - Number of elements in buffer - * @param[out] pPropertyIDsNeededCount - will be filled with the count of the written structs, or needed buffer size. - * @param[out] pPropertyIDsBuffer - uint32 buffer of PropertyID of the MultiProperty-s in the MultiPropertyGroup. + * IImplicitFunction::AddMatVecMultiplicationNode - Add a MatVecMultiplicationNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual void GetAllPropertyIDs(Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) = 0; + virtual IMatVecMultiplicationNode * AddMatVecMultiplicationNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IMultiPropertyGroup::AddMultiProperty - Adds a new MultiProperty to the MultiPropertyGroup. - * @param[in] nPropertyIDsBufferSize - Number of elements in buffer - * @param[in] pPropertyIDsBuffer - The PropertyIDs of the new MultiProperty. - * @return returns the PropertyID of the new MultiProperty in the MultiPropertyGroup. + * IImplicitFunction::AddMinNode - Add a MinNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual Lib3MF_uint32 AddMultiProperty(const Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer) = 0; + virtual IMinNode * AddMinNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IMultiPropertyGroup::SetMultiProperty - Sets the PropertyIDs of a MultiProperty. - * @param[in] nPropertyID - the PropertyID of the MultiProperty to be changed. - * @param[in] nPropertyIDsBufferSize - Number of elements in buffer - * @param[in] pPropertyIDsBuffer - The new PropertyIDs of the MultiProperty + * IImplicitFunction::AddMaxNode - Add a MaxNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual void SetMultiProperty(const Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer) = 0; + virtual IMaxNode * AddMaxNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IMultiPropertyGroup::GetMultiProperty - Obtains the PropertyIDs of a MultiProperty. - * @param[in] nPropertyID - the PropertyID of the MultiProperty to be queried. - * @param[in] nPropertyIDsBufferSize - Number of elements in buffer - * @param[out] pPropertyIDsNeededCount - will be filled with the count of the written structs, or needed buffer size. - * @param[out] pPropertyIDsBuffer - uint32 buffer of The PropertyIDs of the MultiProperty + * IImplicitFunction::AddFmodNode - Add a FmodNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual void GetMultiProperty(const Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) = 0; + virtual IFmodNode * AddFmodNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IMultiPropertyGroup::RemoveMultiProperty - Removes a MultiProperty from this MultiPropertyGroup. - * @param[in] nPropertyID - the PropertyID of the MultiProperty to be removed. + * IImplicitFunction::AddPowNode - Add a PowNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual void RemoveMultiProperty(const Lib3MF_uint32 nPropertyID) = 0; + virtual IPowNode * AddPowNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IMultiPropertyGroup::GetLayerCount - Retrieves the number of layers of this MultiPropertyGroup. - * @return returns the number of layers + * IImplicitFunction::AddSelectNode - Add a SelectNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual Lib3MF_uint32 GetLayerCount() = 0; + virtual ISelectNode * AddSelectNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IMultiPropertyGroup::AddLayer - Adds a MultiPropertyLayer to this MultiPropertyGroup. - * @param[in] TheLayer - The MultiPropertyLayer to add to this MultiPropertyGroup - * @return returns the index of this MultiPropertyLayer + * IImplicitFunction::AddClampNode - Add a ClampNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual Lib3MF_uint32 AddLayer(const Lib3MF::sMultiPropertyLayer TheLayer) = 0; + virtual IClampNode * AddClampNode(const std::string & sIdentifier, const Lib3MF::eImplicitNodeConfiguration eConfiguration, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IMultiPropertyGroup::GetLayer - Obtains a MultiPropertyLayer of this MultiPropertyGroup. - * @param[in] nLayerIndex - The Index of the MultiPropertyLayer queried - * @return The MultiPropertyLayer with index LayerIndex within MultiPropertyGroup + * IImplicitFunction::AddComposeVectorNode - Add a ComposeVectorNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual Lib3MF::sMultiPropertyLayer GetLayer(const Lib3MF_uint32 nLayerIndex) = 0; + virtual IComposeVectorNode * AddComposeVectorNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IMultiPropertyGroup::RemoveLayer - Removes a MultiPropertyLayer from this MultiPropertyGroup. - * @param[in] nLayerIndex - The Index of the MultiPropertyLayer to be removed + * IImplicitFunction::AddVectorFromScalarNode - Add a VectorFromScalar + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual void RemoveLayer(const Lib3MF_uint32 nLayerIndex) = 0; + virtual IVectorFromScalarNode * AddVectorFromScalarNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; -}; + /** + * IImplicitFunction::AddDecomposeVectorNode - Add a DecomposeVectorNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IDecomposeVectorNode * AddDecomposeVectorNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; -typedef IBaseSharedPtr PIMultiPropertyGroup; + /** + * IImplicitFunction::AddComposeMatrixNode - Add a ComposeMatrixNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IComposeMatrixNode * AddComposeMatrixNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; + /** + * IImplicitFunction::AddMatrixFromRowsNode - Add a MatrixFromRowsNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IMatrixFromRowsNode * AddMatrixFromRowsNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; -/************************************************************************************************************************* - Class interface for Attachment -**************************************************************************************************************************/ + /** + * IImplicitFunction::AddMatrixFromColumnsNode - Add a MatrixFromColumnsNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + virtual IMatrixFromColumnsNode * AddMatrixFromColumnsNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; -class IAttachment : public virtual IBase { -public: /** - * IAttachment::ClassTypeId - Get Class Type Id - * @return Class type as a 64 bits integer + * IImplicitFunction::AddConstantNode - Add a ConstantNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - Lib3MF_uint64 ClassTypeId() override - { - return 0x8CE7A1191A63A35DUL; // First 64 bits of SHA1 of a string: "Lib3MF::Attachment" - } + virtual IConstantNode * AddConstantNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IAttachment::GetPath - Retrieves an attachment's package path. This function will be removed in a later release. - * @return returns the attachment's package path string + * IImplicitFunction::AddConstVecNode - Add a ConstVecNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual std::string GetPath() = 0; + virtual IConstVecNode * AddConstVecNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IAttachment::SetPath - Sets an attachment's package path. This function will be removed in a later release. - * @param[in] sPath - new path of the attachment. + * IImplicitFunction::AddConstMatNode - Add a ConstMatNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual void SetPath(const std::string & sPath) = 0; + virtual IConstMatNode * AddConstMatNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IAttachment::PackagePart - Returns the PackagePart that is this attachment. - * @return The PackagePart of this attachment. + * IImplicitFunction::AddMeshNode - Add a MeshNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual IPackagePart * PackagePart() = 0; + virtual IMeshNode * AddMeshNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IAttachment::GetRelationShipType - Retrieves an attachment's relationship type - * @return returns the attachment's package relationship type string + * IImplicitFunction::AddUnsignedMeshNode - Add a UnsignedMeshNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual std::string GetRelationShipType() = 0; + virtual IUnsignedMeshNode * AddUnsignedMeshNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IAttachment::SetRelationShipType - Sets an attachment's relationship type. - * @param[in] sPath - new relationship type string. + * IImplicitFunction::AddFunctionCallNode - Add a FunctionCallNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node */ - virtual void SetRelationShipType(const std::string & sPath) = 0; + virtual IFunctionCallNode * AddFunctionCallNode(const std::string & sIdentifier, const std::string & sDisplayName, const std::string & sTag) = 0; /** - * IAttachment::WriteToFile - Writes out the attachment as file. - * @param[in] sFileName - file to write into. + * IImplicitFunction::GetNodes - Retrieves the nodes + * @return iterator for the list of nodes */ - virtual void WriteToFile(const std::string & sFileName) = 0; + virtual INodeIterator * GetNodes() = 0; /** - * IAttachment::ReadFromFile - Reads an attachment from a file. The path of this file is only read when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. - * @param[in] sFileName - file to read from. + * IImplicitFunction::RemoveNode - Removes a node + * @param[in] pNode - The node to be removed */ - virtual void ReadFromFile(const std::string & sFileName) = 0; + virtual void RemoveNode(IImplicitNode* pNode) = 0; /** - * IAttachment::ReadFromCallback - Reads an attachment from the data provided by a callback function. This callback function is only invoked when this attachment is being written as part of the 3MF package, or via the WriteToFile or WriteToBuffer-methods. - * @param[in] pTheReadCallback - callback function - * @param[in] nStreamSize - number of bytes the callback returns - * @param[in] pTheSeekCallback - callback function - * @param[in] nUserData - Userdata that is passed to the callback function + * IImplicitFunction::AddLink - Add a link + * @param[in] pSource - the source port + * @param[in] pTarget - the target port */ - virtual void ReadFromCallback(const Lib3MF::ReadCallback pTheReadCallback, const Lib3MF_uint64 nStreamSize, const Lib3MF::SeekCallback pTheSeekCallback, const Lib3MF_pvoid pUserData) = 0; + virtual void AddLink(IImplicitPort* pSource, IImplicitPort* pTarget) = 0; /** - * IAttachment::GetStreamSize - Retrieves the size of the attachment stream - * @return the stream size + * IImplicitFunction::AddLinkByNames - Add a link + * @param[in] sSource - name of the source port in the format nodename.portname + * @param[in] sTarget - name of the target port in the format nodename.portname */ - virtual Lib3MF_uint64 GetStreamSize() = 0; + virtual void AddLinkByNames(const std::string & sSource, const std::string & sTarget) = 0; /** - * IAttachment::WriteToBuffer - Writes out the attachment into a buffer - * @param[in] nBufferBufferSize - Number of elements in buffer - * @param[out] pBufferNeededCount - will be filled with the count of the written structs, or needed buffer size. - * @param[out] pBufferBuffer - uint8 buffer of Buffer to write into + * IImplicitFunction::Clear - Clears the function */ - virtual void WriteToBuffer(Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer) = 0; + virtual void Clear() = 0; /** - * IAttachment::ReadFromBuffer - Reads an attachment from a memory buffer. This buffer is immediatly read (in contrast to the ReadFromCallback and ReadFromFile-methods). - * @param[in] nBufferBufferSize - Number of elements in buffer - * @param[in] pBufferBuffer - Buffer to read from + * IImplicitFunction::SortNodesTopologically - Sorts the nodes topologically */ - virtual void ReadFromBuffer(const Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer) = 0; + virtual void SortNodesTopologically() = 0; }; -typedef IBaseSharedPtr PIAttachment; +typedef IBaseSharedPtr PIImplicitFunction; /************************************************************************************************************************* - Class interface for Texture2D + Class interface for FunctionFromImage3D **************************************************************************************************************************/ -class ITexture2D : public virtual IResource { +class IFunctionFromImage3D : public virtual IFunction { public: /** - * ITexture2D::ClassTypeId - Get Class Type Id + * IFunctionFromImage3D::ClassTypeId - Get Class Type Id * @return Class type as a 64 bits integer */ Lib3MF_uint64 ClassTypeId() override { - return 0xE0441CF976B36319UL; // First 64 bits of SHA1 of a string: "Lib3MF::Texture2D" + return 0x9BD7D3C2026B8CE8UL; // First 64 bits of SHA1 of a string: "Lib3MF::FunctionFromImage3D" } /** - * ITexture2D::GetAttachment - Retrieves the attachment located at the path of the texture. - * @return attachment that holds the texture's image information. + * IFunctionFromImage3D::GetImage3D - Returns the selected 3D image. + * @return image instance */ - virtual IAttachment * GetAttachment() = 0; + virtual IImage3D * GetImage3D() = 0; /** - * ITexture2D::SetAttachment - Sets the texture's package path to the path of the attachment. - * @param[in] pAttachment - attachment that holds the texture's image information. + * IFunctionFromImage3D::SetImage3D - Sets the 3D image of the selector. + * @param[in] pImage3D - image instance */ - virtual void SetAttachment(IAttachment* pAttachment) = 0; + virtual void SetImage3D(IImage3D* pImage3D) = 0; /** - * ITexture2D::GetContentType - Retrieves a texture's content type. - * @return returns content type enum. + * IFunctionFromImage3D::SetFilter - Sets the texture filter of the selector. + * @param[in] eFilter - texture filter */ - virtual Lib3MF::eTextureType GetContentType() = 0; + virtual void SetFilter(const Lib3MF::eTextureFilter eFilter) = 0; /** - * ITexture2D::SetContentType - Retrieves a texture's content type. - * @param[in] eContentType - new Content Type + * IFunctionFromImage3D::GetFilter - Returns the texture filter of the selector. + * @return texture filter */ - virtual void SetContentType(const Lib3MF::eTextureType eContentType) = 0; + virtual Lib3MF::eTextureFilter GetFilter() = 0; /** - * ITexture2D::GetTileStyleUV - Retrieves a texture's tilestyle type. - * @param[out] eTileStyleU - returns tilestyle type enum. - * @param[out] eTileStyleV - returns tilestyle type enum. + * IFunctionFromImage3D::SetTileStyles - Sets the tile styles of the selector. + * @param[in] eTileStyleU - tile style in U + * @param[in] eTileStyleV - tile style in V + * @param[in] eTileStyleW - tile style in W */ - virtual void GetTileStyleUV(Lib3MF::eTextureTileStyle & eTileStyleU, Lib3MF::eTextureTileStyle & eTileStyleV) = 0; + virtual void SetTileStyles(const Lib3MF::eTextureTileStyle eTileStyleU, const Lib3MF::eTextureTileStyle eTileStyleV, const Lib3MF::eTextureTileStyle eTileStyleW) = 0; /** - * ITexture2D::SetTileStyleUV - Sets a texture's tilestyle type. - * @param[in] eTileStyleU - new tilestyle type enum. - * @param[in] eTileStyleV - new tilestyle type enum. + * IFunctionFromImage3D::GetTileStyles - Retrieves the tile styles of the selector. + * @param[out] eTileStyleU - tile style in U + * @param[out] eTileStyleV - tile style in V + * @param[out] eTileStyleW - tile style in W */ - virtual void SetTileStyleUV(const Lib3MF::eTextureTileStyle eTileStyleU, const Lib3MF::eTextureTileStyle eTileStyleV) = 0; + virtual void GetTileStyles(Lib3MF::eTextureTileStyle & eTileStyleU, Lib3MF::eTextureTileStyle & eTileStyleV, Lib3MF::eTextureTileStyle & eTileStyleW) = 0; /** - * ITexture2D::GetFilter - Retrieves a texture's filter type. - * @return returns filter type enum. + * IFunctionFromImage3D::GetOffset - returns the offset value for the pixel values in the Image3D + * @return the offset value for the pixel values in the Image3D */ - virtual Lib3MF::eTextureFilter GetFilter() = 0; + virtual Lib3MF_double GetOffset() = 0; /** - * ITexture2D::SetFilter - Sets a texture's filter type. - * @param[in] eFilter - sets new filter type enum. + * IFunctionFromImage3D::SetOffset - Sets the offset value for the pixel values in the Image3D + * @param[in] dOffset - the offset value for the pixel values in the Image3D */ - virtual void SetFilter(const Lib3MF::eTextureFilter eFilter) = 0; + virtual void SetOffset(const Lib3MF_double dOffset) = 0; + + /** + * IFunctionFromImage3D::GetScale - returns the scale value for the pixel values in the Image3D + * @return the scale value for the pixel values in the Image3D + */ + virtual Lib3MF_double GetScale() = 0; + + /** + * IFunctionFromImage3D::SetScale - Sets the scale value for the pixel values in the Image3D + * @param[in] dScale - the scale value for the pixel values in the Image3D + */ + virtual void SetScale(const Lib3MF_double dScale) = 0; }; -typedef IBaseSharedPtr PITexture2D; +typedef IBaseSharedPtr PIFunctionFromImage3D; /************************************************************************************************************************* @@ -3081,6 +6216,13 @@ class IModel : public virtual IBase { */ virtual ISliceStack * GetSliceStackByID(const Lib3MF_uint32 nUniqueResourceID) = 0; + /** + * IModel::GetLevelSetByID - finds a level set object by its UniqueResourceID + * @param[in] nUniqueResourceID - UniqueResourceID + * @return returns the level set object instance + */ + virtual ILevelSet * GetLevelSetByID(const Lib3MF_uint32 nUniqueResourceID) = 0; + /** * IModel::GetBuildUUID - returns, whether a build has a UUID and, if true, the build's UUID * @param[out] bHasUUID - flag whether the build has a UUID @@ -3172,12 +6314,24 @@ class IModel : public virtual IBase { */ virtual ISliceStackIterator * GetSliceStacks() = 0; + /** + * IModel::GetImage3Ds - creates a resource iterator instance with all image3d resources. + * @return returns the iterator instance. + */ + virtual IImage3DIterator * GetImage3Ds() = 0; + /** * IModel::MergeToModel - Merges all components and objects which are referenced by a build item into a mesh. The memory is duplicated and a new model is created. * @return returns the merged model instance */ virtual IModel * MergeToModel() = 0; + /** + * IModel::MergeFromModel - Merges the given model into this model. + * @param[in] pModelInstance - model to be merged + */ + virtual void MergeFromModel(IModel* pModelInstance) = 0; + /** * IModel::AddMeshObject - adds an empty mesh object to the model. * @return returns the mesh object instance @@ -3236,6 +6390,22 @@ class IModel : public virtual IBase { */ virtual IMultiPropertyGroup * AddMultiPropertyGroup() = 0; + /** + * IModel::AddImageStack - creates a new 3D Image Resource + * @param[in] nColumnCount - the number of columns in each sheet. + * @param[in] nRowCount - the number of rows in each sheet. + * @param[in] nSheetCount - the number of sheets in the image stack. + * @return returns the new ImageStack instance + */ + virtual IImageStack * AddImageStack(const Lib3MF_uint32 nColumnCount, const Lib3MF_uint32 nRowCount, const Lib3MF_uint32 nSheetCount) = 0; + + /** + * IModel::GetImageStackByID - finds an ImageStack object by its UniqueResourceID + * @param[in] nUniqueResourceID - UniqueResourceID + * @return returns the image stack instance + */ + virtual IImageStack * GetImageStackByID(const Lib3MF_uint32 nUniqueResourceID) = 0; + /** * IModel::AddBuildItem - adds a build item to the model. * @param[in] pObject - Object instance. @@ -3339,6 +6509,49 @@ class IModel : public virtual IBase { */ virtual IKeyStore * GetKeyStore() = 0; + /** + * IModel::GetFunctions - creates a resource iterator for all functions + * @return returns the resource iterator + */ + virtual IFunctionIterator * GetFunctions() = 0; + + /** + * IModel::AddImplicitFunction - adds a function described by nodes to the model + * @return returns the function instance + */ + virtual IImplicitFunction * AddImplicitFunction() = 0; + + /** + * IModel::AddFunctionFromImage3D - adds a function defined by an image3d to the model + * @param[in] pImage3DInstance - the Image3D-instance used for this function + * @return returns the function instance + */ + virtual IFunctionFromImage3D * AddFunctionFromImage3D(IImage3D* pImage3DInstance) = 0; + + /** + * IModel::AddVolumeData - adds a volume data resource to the model. + * @return returns the new volume data instance. + */ + virtual IVolumeData * AddVolumeData() = 0; + + /** + * IModel::AddLevelSet - adds an empty boundary shape object to the model. + * @return returns the mesh object instance + */ + virtual ILevelSet * AddLevelSet() = 0; + + /** + * IModel::GetLevelSets - creates a resource iterator instance with all boundary shape resources. + * @return returns the iterator instance. + */ + virtual ILevelSetIterator * GetLevelSets() = 0; + + /** + * IModel::RemoveResource - Removes a resource from the model + * @param[in] pResource - The resource to remove + */ + virtual void RemoveResource(IResource* pResource) = 0; + }; typedef IBaseSharedPtr PIModel; diff --git a/Autogenerated/Source/lib3mf_interfacewrapper.cpp b/Autogenerated/Source/lib3mf_interfacewrapper.cpp index 92633dbbd..c4e50c07e 100644 --- a/Autogenerated/Source/lib3mf_interfacewrapper.cpp +++ b/Autogenerated/Source/lib3mf_interfacewrapper.cpp @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++ implementation file in order to allow easy development of the 3MF Library. The functions in this file need to be implemented. It needs to be generated only once. -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -1874,6 +1874,126 @@ Lib3MFResult lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup(Lib3 } +/************************************************************************************************************************* + Class implementation for Image3DIterator +**************************************************************************************************************************/ +Lib3MFResult lib3mf_image3diterator_getcurrentimage3d(Lib3MF_Image3DIterator pImage3DIterator, Lib3MF_Image3D * pResource) +{ + IBase* pIBaseClass = (IBase *)pImage3DIterator; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImage3DIterator, "Image3DIterator", "GetCurrentImage3D"); + } + if (pResource == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseResource(nullptr); + IImage3DIterator* pIImage3DIterator = dynamic_cast(pIBaseClass); + if (!pIImage3DIterator) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseResource = pIImage3DIterator->GetCurrentImage3D(); + + *pResource = (IBase*)(pBaseResource); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Resource", *pResource); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for FunctionIterator +**************************************************************************************************************************/ +Lib3MFResult lib3mf_functioniterator_getcurrentfunction(Lib3MF_FunctionIterator pFunctionIterator, Lib3MF_Function * pResource) +{ + IBase* pIBaseClass = (IBase *)pFunctionIterator; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionIterator, "FunctionIterator", "GetCurrentFunction"); + } + if (pResource == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseResource(nullptr); + IFunctionIterator* pIFunctionIterator = dynamic_cast(pIBaseClass); + if (!pIFunctionIterator) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseResource = pIFunctionIterator->GetCurrentFunction(); + + *pResource = (IBase*)(pBaseResource); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Resource", *pResource); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for LevelSetIterator +**************************************************************************************************************************/ +Lib3MFResult lib3mf_levelsetiterator_getcurrentlevelset(Lib3MF_LevelSetIterator pLevelSetIterator, Lib3MF_LevelSet * pResource) +{ + IBase* pIBaseClass = (IBase *)pLevelSetIterator; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSetIterator, "LevelSetIterator", "GetCurrentLevelSet"); + } + if (pResource == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseResource(nullptr); + ILevelSetIterator* pILevelSetIterator = dynamic_cast(pIBaseClass); + if (!pILevelSetIterator) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseResource = pILevelSetIterator->GetCurrentLevelSet(); + + *pResource = (IBase*)(pBaseResource); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Resource", *pResource); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + /************************************************************************************************************************* Class implementation for MetaData **************************************************************************************************************************/ @@ -2924,6 +3044,40 @@ Lib3MFResult lib3mf_object_iscomponentsobject(Lib3MF_Object pObject, bool * pIsC } } +Lib3MFResult lib3mf_object_islevelsetobject(Lib3MF_Object pObject, bool * pIsLevelSetObject) +{ + IBase* pIBaseClass = (IBase *)pObject; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pObject, "Object", "IsLevelSetObject"); + } + if (pIsLevelSetObject == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IObject* pIObject = dynamic_cast(pIBaseClass); + if (!pIObject) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pIsLevelSetObject = pIObject->IsLevelSetObject(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addBooleanResult("IsLevelSetObject", *pIsLevelSetObject); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + Lib3MFResult lib3mf_object_isvalid(Lib3MF_Object pObject, bool * pIsValid) { IBase* pIBaseClass = (IBase *)pObject; @@ -4109,29 +4263,27 @@ Lib3MFResult lib3mf_meshobject_beamlattice(Lib3MF_MeshObject pMeshObject, Lib3MF } } - -/************************************************************************************************************************* - Class implementation for BeamLattice -**************************************************************************************************************************/ -Lib3MFResult lib3mf_beamlattice_getminlength(Lib3MF_BeamLattice pBeamLattice, Lib3MF_double * pMinLength) +Lib3MFResult lib3mf_meshobject_getvolumedata(Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData * pTheVolumeData) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pMeshObject; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetMinLength"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pMeshObject, "MeshObject", "GetVolumeData"); } - if (pMinLength == nullptr) + if (pTheVolumeData == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + IBase* pBaseTheVolumeData(nullptr); + IMeshObject* pIMeshObject = dynamic_cast(pIBaseClass); + if (!pIMeshObject) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pMinLength = pIBeamLattice->GetMinLength(); + pBaseTheVolumeData = pIMeshObject->GetVolumeData(); + *pTheVolumeData = (IBase*)(pBaseTheVolumeData); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addDoubleResult("MinLength", *pMinLength); + pJournalEntry->addHandleResult("TheVolumeData", *pTheVolumeData); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4147,21 +4299,26 @@ Lib3MFResult lib3mf_beamlattice_getminlength(Lib3MF_BeamLattice pBeamLattice, Li } } -Lib3MFResult lib3mf_beamlattice_setminlength(Lib3MF_BeamLattice pBeamLattice, Lib3MF_double dMinLength) +Lib3MFResult lib3mf_meshobject_setvolumedata(Lib3MF_MeshObject pMeshObject, Lib3MF_VolumeData pTheVolumeData) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pMeshObject; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetMinLength"); - pJournalEntry->addDoubleParameter("MinLength", dMinLength); + pJournalEntry = m_GlobalJournal->beginClassMethod(pMeshObject, "MeshObject", "SetVolumeData"); + pJournalEntry->addHandleParameter("TheVolumeData", pTheVolumeData); } - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + IBase* pIBaseClassTheVolumeData = (IBase *)pTheVolumeData; + IVolumeData* pITheVolumeData = dynamic_cast(pIBaseClassTheVolumeData); + if (!pITheVolumeData) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IMeshObject* pIMeshObject = dynamic_cast(pIBaseClass); + if (!pIMeshObject) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamLattice->SetMinLength(dMinLength); + pIMeshObject->SetVolumeData(pITheVolumeData); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -4179,28 +4336,31 @@ Lib3MFResult lib3mf_beamlattice_setminlength(Lib3MF_BeamLattice pBeamLattice, Li } } -Lib3MFResult lib3mf_beamlattice_getclipping(Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeClipMode * pClipMode, Lib3MF_uint32 * pUniqueResourceID) + +/************************************************************************************************************************* + Class implementation for LevelSet +**************************************************************************************************************************/ +Lib3MFResult lib3mf_levelset_getfunction(Lib3MF_LevelSet pLevelSet, Lib3MF_Function * pTheFunction) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetClipping"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "GetFunction"); } - if (!pClipMode) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - if (!pUniqueResourceID) + if (pTheFunction == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + IBase* pBaseTheFunction(nullptr); + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamLattice->GetClipping(*pClipMode, *pUniqueResourceID); + pBaseTheFunction = pILevelSet->GetFunction(); + *pTheFunction = (IBase*)(pBaseTheFunction); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addEnumResult("ClipMode", "BeamLatticeClipMode", (Lib3MF_int32)(*pClipMode)); - pJournalEntry->addUInt32Result("UniqueResourceID", *pUniqueResourceID); + pJournalEntry->addHandleResult("TheFunction", *pTheFunction); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4216,22 +4376,26 @@ Lib3MFResult lib3mf_beamlattice_getclipping(Lib3MF_BeamLattice pBeamLattice, eLi } } -Lib3MFResult lib3mf_beamlattice_setclipping(Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeClipMode eClipMode, Lib3MF_uint32 nUniqueResourceID) +Lib3MFResult lib3mf_levelset_setfunction(Lib3MF_LevelSet pLevelSet, Lib3MF_Function pTheFunction) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetClipping"); - pJournalEntry->addEnumParameter("ClipMode", "BeamLatticeClipMode", (Lib3MF_int32)(eClipMode)); - pJournalEntry->addUInt32Parameter("UniqueResourceID", nUniqueResourceID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "SetFunction"); + pJournalEntry->addHandleParameter("TheFunction", pTheFunction); } - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + IBase* pIBaseClassTheFunction = (IBase *)pTheFunction; + IFunction* pITheFunction = dynamic_cast(pIBaseClassTheFunction); + if (!pITheFunction) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamLattice->SetClipping(eClipMode, nUniqueResourceID); + pILevelSet->SetFunction(pITheFunction); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -4249,28 +4413,24 @@ Lib3MFResult lib3mf_beamlattice_setclipping(Lib3MF_BeamLattice pBeamLattice, eLi } } -Lib3MFResult lib3mf_beamlattice_getrepresentation(Lib3MF_BeamLattice pBeamLattice, bool * pHasRepresentation, Lib3MF_uint32 * pUniqueResourceID) +Lib3MFResult lib3mf_levelset_gettransform(Lib3MF_LevelSet pLevelSet, sLib3MFTransform * pTransform) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetRepresentation"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "GetTransform"); } - if (pHasRepresentation == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - if (!pUniqueResourceID) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + if (pTransform == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pHasRepresentation = pIBeamLattice->GetRepresentation(*pUniqueResourceID); + *pTransform = pILevelSet->GetTransform(); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addBooleanResult("HasRepresentation", *pHasRepresentation); - pJournalEntry->addUInt32Result("UniqueResourceID", *pUniqueResourceID); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4286,21 +4446,20 @@ Lib3MFResult lib3mf_beamlattice_getrepresentation(Lib3MF_BeamLattice pBeamLattic } } -Lib3MFResult lib3mf_beamlattice_setrepresentation(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nUniqueResourceID) +Lib3MFResult lib3mf_levelset_settransform(Lib3MF_LevelSet pLevelSet, const sLib3MFTransform * pTransform) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetRepresentation"); - pJournalEntry->addUInt32Parameter("UniqueResourceID", nUniqueResourceID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "SetTransform"); } - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamLattice->SetRepresentation(nUniqueResourceID); + pILevelSet->SetTransform(*pTransform); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -4318,28 +4477,47 @@ Lib3MFResult lib3mf_beamlattice_setrepresentation(Lib3MF_BeamLattice pBeamLattic } } -Lib3MFResult lib3mf_beamlattice_getballoptions(Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeBallMode * pBallMode, Lib3MF_double * pBallRadius) +Lib3MFResult lib3mf_levelset_getchannelname(Lib3MF_LevelSet pLevelSet, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBallOptions"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "GetChannelName"); } - if (!pBallMode) + if ( (!pChannelNameBuffer) && !(pChannelNameNeededChars) ) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - if (!pBallRadius) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + std::string sChannelName(""); + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamLattice->GetBallOptions(*pBallMode, *pBallRadius); + bool isCacheCall = (pChannelNameBuffer == nullptr); + if (isCacheCall) { + sChannelName = pILevelSet->GetChannelName(); + pILevelSet->_setCache (new ParameterCache_1 (sChannelName)); + } + else { + auto cache = dynamic_cast*> (pILevelSet->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sChannelName); + pILevelSet->_setCache (nullptr); + } + + if (pChannelNameNeededChars) + *pChannelNameNeededChars = (Lib3MF_uint32) (sChannelName.size()+1); + if (pChannelNameBuffer) { + if (sChannelName.size() >= nChannelNameBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iChannelName = 0; iChannelName < sChannelName.size(); iChannelName++) + pChannelNameBuffer[iChannelName] = sChannelName[iChannelName]; + pChannelNameBuffer[sChannelName.size()] = 0; + } if (pJournalEntry.get() != nullptr) { - pJournalEntry->addEnumResult("BallMode", "BeamLatticeBallMode", (Lib3MF_int32)(*pBallMode)); - pJournalEntry->addDoubleResult("BallRadius", *pBallRadius); + pJournalEntry->addStringResult("ChannelName", sChannelName.c_str()); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4355,22 +4533,24 @@ Lib3MFResult lib3mf_beamlattice_getballoptions(Lib3MF_BeamLattice pBeamLattice, } } -Lib3MFResult lib3mf_beamlattice_setballoptions(Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeBallMode eBallMode, Lib3MF_double dBallRadius) +Lib3MFResult lib3mf_levelset_setchannelname(Lib3MF_LevelSet pLevelSet, const char * pChannelName) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetBallOptions"); - pJournalEntry->addEnumParameter("BallMode", "BeamLatticeBallMode", (Lib3MF_int32)(eBallMode)); - pJournalEntry->addDoubleParameter("BallRadius", dBallRadius); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "SetChannelName"); + pJournalEntry->addStringParameter("ChannelName", pChannelName); } - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + if (pChannelName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sChannelName(pChannelName); + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamLattice->SetBallOptions(eBallMode, dBallRadius); + pILevelSet->SetChannelName(sChannelName); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -4388,25 +4568,23 @@ Lib3MFResult lib3mf_beamlattice_setballoptions(Lib3MF_BeamLattice pBeamLattice, } } -Lib3MFResult lib3mf_beamlattice_getbeamcount(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount) +Lib3MFResult lib3mf_levelset_setminfeaturesize(Lib3MF_LevelSet pLevelSet, Lib3MF_double dMinFeatureSize) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBeamCount"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "SetMinFeatureSize"); + pJournalEntry->addDoubleParameter("MinFeatureSize", dMinFeatureSize); } - if (pCount == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pCount = pIBeamLattice->GetBeamCount(); + pILevelSet->SetMinFeatureSize(dMinFeatureSize); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Count", *pCount); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4422,25 +4600,25 @@ Lib3MFResult lib3mf_beamlattice_getbeamcount(Lib3MF_BeamLattice pBeamLattice, Li } } -Lib3MFResult lib3mf_beamlattice_getbeam(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, sLib3MFBeam * pBeamInfo) +Lib3MFResult lib3mf_levelset_getminfeaturesize(Lib3MF_LevelSet pLevelSet, Lib3MF_double * pMinFeatureSize) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBeam"); - pJournalEntry->addUInt32Parameter("Index", nIndex); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "GetMinFeatureSize"); } - if (pBeamInfo == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + if (pMinFeatureSize == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pBeamInfo = pIBeamLattice->GetBeam(nIndex); + *pMinFeatureSize = pILevelSet->GetMinFeatureSize(); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addDoubleResult("MinFeatureSize", *pMinFeatureSize); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4456,25 +4634,23 @@ Lib3MFResult lib3mf_beamlattice_getbeam(Lib3MF_BeamLattice pBeamLattice, Lib3MF_ } } -Lib3MFResult lib3mf_beamlattice_addbeam(Lib3MF_BeamLattice pBeamLattice, const sLib3MFBeam * pBeamInfo, Lib3MF_uint32 * pIndex) +Lib3MFResult lib3mf_levelset_setfallbackvalue(Lib3MF_LevelSet pLevelSet, Lib3MF_double dFallBackValue) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "AddBeam"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "SetFallBackValue"); + pJournalEntry->addDoubleParameter("FallBackValue", dFallBackValue); } - if (pIndex == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pIndex = pIBeamLattice->AddBeam(*pBeamInfo); + pILevelSet->SetFallBackValue(dFallBackValue); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Index", *pIndex); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4490,23 +4666,25 @@ Lib3MFResult lib3mf_beamlattice_addbeam(Lib3MF_BeamLattice pBeamLattice, const s } } -Lib3MFResult lib3mf_beamlattice_setbeam(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, const sLib3MFBeam * pBeamInfo) +Lib3MFResult lib3mf_levelset_getfallbackvalue(Lib3MF_LevelSet pLevelSet, Lib3MF_double * pFallBackValue) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetBeam"); - pJournalEntry->addUInt32Parameter("Index", nIndex); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "GetFallBackValue"); } - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + if (pFallBackValue == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamLattice->SetBeam(nIndex, *pBeamInfo); + *pFallBackValue = pILevelSet->GetFallBackValue(); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addDoubleResult("FallBackValue", *pFallBackValue); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4522,22 +4700,21 @@ Lib3MFResult lib3mf_beamlattice_setbeam(Lib3MF_BeamLattice pBeamLattice, Lib3MF_ } } -Lib3MFResult lib3mf_beamlattice_setbeams(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint64 nBeamInfoBufferSize, const sLib3MFBeam * pBeamInfoBuffer) +Lib3MFResult lib3mf_levelset_setmeshbboxonly(Lib3MF_LevelSet pLevelSet, bool bMeshBBoxOnly) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetBeams"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "SetMeshBBoxOnly"); + pJournalEntry->addBooleanParameter("MeshBBoxOnly", bMeshBBoxOnly); } - if ( (!pBeamInfoBuffer) && (nBeamInfoBufferSize>0)) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamLattice->SetBeams(nBeamInfoBufferSize, pBeamInfoBuffer); + pILevelSet->SetMeshBBoxOnly(bMeshBBoxOnly); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -4555,24 +4732,25 @@ Lib3MFResult lib3mf_beamlattice_setbeams(Lib3MF_BeamLattice pBeamLattice, Lib3MF } } -Lib3MFResult lib3mf_beamlattice_getbeams(Lib3MF_BeamLattice pBeamLattice, const Lib3MF_uint64 nBeamInfoBufferSize, Lib3MF_uint64* pBeamInfoNeededCount, sLib3MFBeam * pBeamInfoBuffer) +Lib3MFResult lib3mf_levelset_getmeshbboxonly(Lib3MF_LevelSet pLevelSet, bool * pMeshBBoxOnly) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBeams"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "GetMeshBBoxOnly"); } - if ((!pBeamInfoBuffer) && !(pBeamInfoNeededCount)) + if (pMeshBBoxOnly == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamLattice->GetBeams(nBeamInfoBufferSize, pBeamInfoNeededCount, pBeamInfoBuffer); + *pMeshBBoxOnly = pILevelSet->GetMeshBBoxOnly(); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addBooleanResult("MeshBBoxOnly", *pMeshBBoxOnly); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4588,25 +4766,28 @@ Lib3MFResult lib3mf_beamlattice_getbeams(Lib3MF_BeamLattice pBeamLattice, const } } -Lib3MFResult lib3mf_beamlattice_getballcount(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount) +Lib3MFResult lib3mf_levelset_setmesh(Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject pTheMesh) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBallCount"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "SetMesh"); + pJournalEntry->addHandleParameter("TheMesh", pTheMesh); } - if (pCount == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + IBase* pIBaseClassTheMesh = (IBase *)pTheMesh; + IMeshObject* pITheMesh = dynamic_cast(pIBaseClassTheMesh); + if (!pITheMesh) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pCount = pIBeamLattice->GetBallCount(); + pILevelSet->SetMesh(pITheMesh); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Count", *pCount); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4622,25 +4803,27 @@ Lib3MFResult lib3mf_beamlattice_getballcount(Lib3MF_BeamLattice pBeamLattice, Li } } -Lib3MFResult lib3mf_beamlattice_getball(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, sLib3MFBall * pBallInfo) +Lib3MFResult lib3mf_levelset_getmesh(Lib3MF_LevelSet pLevelSet, Lib3MF_MeshObject * pTheMesh) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBall"); - pJournalEntry->addUInt32Parameter("Index", nIndex); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "GetMesh"); } - if (pBallInfo == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + if (pTheMesh == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseTheMesh(nullptr); + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pBallInfo = pIBeamLattice->GetBall(nIndex); + pBaseTheMesh = pILevelSet->GetMesh(); + *pTheMesh = (IBase*)(pBaseTheMesh); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("TheMesh", *pTheMesh); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4656,25 +4839,27 @@ Lib3MFResult lib3mf_beamlattice_getball(Lib3MF_BeamLattice pBeamLattice, Lib3MF_ } } -Lib3MFResult lib3mf_beamlattice_addball(Lib3MF_BeamLattice pBeamLattice, const sLib3MFBall * pBallInfo, Lib3MF_uint32 * pIndex) +Lib3MFResult lib3mf_levelset_getvolumedata(Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData * pTheVolumeData) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "AddBall"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "GetVolumeData"); } - if (pIndex == nullptr) + if (pTheVolumeData == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + IBase* pBaseTheVolumeData(nullptr); + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pIndex = pIBeamLattice->AddBall(*pBallInfo); + pBaseTheVolumeData = pILevelSet->GetVolumeData(); + *pTheVolumeData = (IBase*)(pBaseTheVolumeData); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Index", *pIndex); + pJournalEntry->addHandleResult("TheVolumeData", *pTheVolumeData); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4690,21 +4875,26 @@ Lib3MFResult lib3mf_beamlattice_addball(Lib3MF_BeamLattice pBeamLattice, const s } } -Lib3MFResult lib3mf_beamlattice_setball(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, const sLib3MFBall * pBallInfo) +Lib3MFResult lib3mf_levelset_setvolumedata(Lib3MF_LevelSet pLevelSet, Lib3MF_VolumeData pTheVolumeData) { - IBase* pIBaseClass = (IBase *)pBeamLattice; + IBase* pIBaseClass = (IBase *)pLevelSet; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetBall"); - pJournalEntry->addUInt32Parameter("Index", nIndex); + pJournalEntry = m_GlobalJournal->beginClassMethod(pLevelSet, "LevelSet", "SetVolumeData"); + pJournalEntry->addHandleParameter("TheVolumeData", pTheVolumeData); } - IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); - if (!pIBeamLattice) + IBase* pIBaseClassTheVolumeData = (IBase *)pTheVolumeData; + IVolumeData* pITheVolumeData = dynamic_cast(pIBaseClassTheVolumeData); + if (!pITheVolumeData) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + ILevelSet* pILevelSet = dynamic_cast(pIBaseClass); + if (!pILevelSet) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamLattice->SetBall(nIndex, *pBallInfo); + pILevelSet->SetVolumeData(pITheVolumeData); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -4722,24 +4912,29 @@ Lib3MFResult lib3mf_beamlattice_setball(Lib3MF_BeamLattice pBeamLattice, Lib3MF_ } } -Lib3MFResult lib3mf_beamlattice_setballs(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint64 nBallInfoBufferSize, const sLib3MFBall * pBallInfoBuffer) + +/************************************************************************************************************************* + Class implementation for BeamLattice +**************************************************************************************************************************/ +Lib3MFResult lib3mf_beamlattice_getminlength(Lib3MF_BeamLattice pBeamLattice, Lib3MF_double * pMinLength) { IBase* pIBaseClass = (IBase *)pBeamLattice; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetBalls"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetMinLength"); } - if ( (!pBallInfoBuffer) && (nBallInfoBufferSize>0)) + if (pMinLength == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); if (!pIBeamLattice) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamLattice->SetBalls(nBallInfoBufferSize, pBallInfoBuffer); + *pMinLength = pIBeamLattice->GetMinLength(); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addDoubleResult("MinLength", *pMinLength); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4755,22 +4950,21 @@ Lib3MFResult lib3mf_beamlattice_setballs(Lib3MF_BeamLattice pBeamLattice, Lib3MF } } -Lib3MFResult lib3mf_beamlattice_getballs(Lib3MF_BeamLattice pBeamLattice, const Lib3MF_uint64 nBallInfoBufferSize, Lib3MF_uint64* pBallInfoNeededCount, sLib3MFBall * pBallInfoBuffer) +Lib3MFResult lib3mf_beamlattice_setminlength(Lib3MF_BeamLattice pBeamLattice, Lib3MF_double dMinLength) { IBase* pIBaseClass = (IBase *)pBeamLattice; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBalls"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetMinLength"); + pJournalEntry->addDoubleParameter("MinLength", dMinLength); } - if ((!pBallInfoBuffer) && !(pBallInfoNeededCount)) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); if (!pIBeamLattice) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamLattice->GetBalls(nBallInfoBufferSize, pBallInfoNeededCount, pBallInfoBuffer); + pIBeamLattice->SetMinLength(dMinLength); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -4788,25 +4982,28 @@ Lib3MFResult lib3mf_beamlattice_getballs(Lib3MF_BeamLattice pBeamLattice, const } } -Lib3MFResult lib3mf_beamlattice_getbeamsetcount(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount) +Lib3MFResult lib3mf_beamlattice_getclipping(Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeClipMode * pClipMode, Lib3MF_uint32 * pUniqueResourceID) { IBase* pIBaseClass = (IBase *)pBeamLattice; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBeamSetCount"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetClipping"); } - if (pCount == nullptr) + if (!pClipMode) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (!pUniqueResourceID) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); if (!pIBeamLattice) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pCount = pIBeamLattice->GetBeamSetCount(); + pIBeamLattice->GetClipping(*pClipMode, *pUniqueResourceID); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->addEnumResult("ClipMode", "BeamLatticeClipMode", (Lib3MF_int32)(*pClipMode)); + pJournalEntry->addUInt32Result("UniqueResourceID", *pUniqueResourceID); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4822,27 +5019,24 @@ Lib3MFResult lib3mf_beamlattice_getbeamsetcount(Lib3MF_BeamLattice pBeamLattice, } } -Lib3MFResult lib3mf_beamlattice_addbeamset(Lib3MF_BeamLattice pBeamLattice, Lib3MF_BeamSet * pBeamSet) +Lib3MFResult lib3mf_beamlattice_setclipping(Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeClipMode eClipMode, Lib3MF_uint32 nUniqueResourceID) { IBase* pIBaseClass = (IBase *)pBeamLattice; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "AddBeamSet"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetClipping"); + pJournalEntry->addEnumParameter("ClipMode", "BeamLatticeClipMode", (Lib3MF_int32)(eClipMode)); + pJournalEntry->addUInt32Parameter("UniqueResourceID", nUniqueResourceID); } - if (pBeamSet == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBase* pBaseBeamSet(nullptr); IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); if (!pIBeamLattice) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pBaseBeamSet = pIBeamLattice->AddBeamSet(); + pIBeamLattice->SetClipping(eClipMode, nUniqueResourceID); - *pBeamSet = (IBase*)(pBaseBeamSet); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addHandleResult("BeamSet", *pBeamSet); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4858,28 +5052,28 @@ Lib3MFResult lib3mf_beamlattice_addbeamset(Lib3MF_BeamLattice pBeamLattice, Lib3 } } -Lib3MFResult lib3mf_beamlattice_getbeamset(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF_BeamSet * pBeamSet) +Lib3MFResult lib3mf_beamlattice_getrepresentation(Lib3MF_BeamLattice pBeamLattice, bool * pHasRepresentation, Lib3MF_uint32 * pUniqueResourceID) { IBase* pIBaseClass = (IBase *)pBeamLattice; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBeamSet"); - pJournalEntry->addUInt32Parameter("Index", nIndex); + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetRepresentation"); } - if (pBeamSet == nullptr) + if (pHasRepresentation == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (!pUniqueResourceID) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBase* pBaseBeamSet(nullptr); IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); if (!pIBeamLattice) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pBaseBeamSet = pIBeamLattice->GetBeamSet(nIndex); + *pHasRepresentation = pIBeamLattice->GetRepresentation(*pUniqueResourceID); - *pBeamSet = (IBase*)(pBaseBeamSet); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addHandleResult("BeamSet", *pBeamSet); + pJournalEntry->addBooleanResult("HasRepresentation", *pHasRepresentation); + pJournalEntry->addUInt32Result("UniqueResourceID", *pUniqueResourceID); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4895,31 +5089,23 @@ Lib3MFResult lib3mf_beamlattice_getbeamset(Lib3MF_BeamLattice pBeamLattice, Lib3 } } - -/************************************************************************************************************************* - Class implementation for Component -**************************************************************************************************************************/ -Lib3MFResult lib3mf_component_getobjectresource(Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource) +Lib3MFResult lib3mf_beamlattice_setrepresentation(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nUniqueResourceID) { - IBase* pIBaseClass = (IBase *)pComponent; + IBase* pIBaseClass = (IBase *)pBeamLattice; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "GetObjectResource"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetRepresentation"); + pJournalEntry->addUInt32Parameter("UniqueResourceID", nUniqueResourceID); } - if (pObjectResource == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBase* pBaseObjectResource(nullptr); - IComponent* pIComponent = dynamic_cast(pIBaseClass); - if (!pIComponent) + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pBaseObjectResource = pIComponent->GetObjectResource(); + pIBeamLattice->SetRepresentation(nUniqueResourceID); - *pObjectResource = (IBase*)(pBaseObjectResource); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addHandleResult("ObjectResource", *pObjectResource); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4935,25 +5121,28 @@ Lib3MFResult lib3mf_component_getobjectresource(Lib3MF_Component pComponent, Lib } } -Lib3MFResult lib3mf_component_getobjectresourceid(Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID) +Lib3MFResult lib3mf_beamlattice_getballoptions(Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeBallMode * pBallMode, Lib3MF_double * pBallRadius) { - IBase* pIBaseClass = (IBase *)pComponent; + IBase* pIBaseClass = (IBase *)pBeamLattice; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "GetObjectResourceID"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBallOptions"); } - if (pUniqueResourceID == nullptr) + if (!pBallMode) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IComponent* pIComponent = dynamic_cast(pIBaseClass); - if (!pIComponent) + if (!pBallRadius) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pUniqueResourceID = pIComponent->GetObjectResourceID(); + pIBeamLattice->GetBallOptions(*pBallMode, *pBallRadius); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("UniqueResourceID", *pUniqueResourceID); + pJournalEntry->addEnumResult("BallMode", "BeamLatticeBallMode", (Lib3MF_int32)(*pBallMode)); + pJournalEntry->addDoubleResult("BallRadius", *pBallRadius); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -4969,50 +5158,24 @@ Lib3MFResult lib3mf_component_getobjectresourceid(Lib3MF_Component pComponent, L } } -Lib3MFResult lib3mf_component_getuuid(Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) +Lib3MFResult lib3mf_beamlattice_setballoptions(Lib3MF_BeamLattice pBeamLattice, eLib3MFBeamLatticeBallMode eBallMode, Lib3MF_double dBallRadius) { - IBase* pIBaseClass = (IBase *)pComponent; + IBase* pIBaseClass = (IBase *)pBeamLattice; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "GetUUID"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetBallOptions"); + pJournalEntry->addEnumParameter("BallMode", "BeamLatticeBallMode", (Lib3MF_int32)(eBallMode)); + pJournalEntry->addDoubleParameter("BallRadius", dBallRadius); } - if (!pHasUUID) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - if ( (!pUUIDBuffer) && !(pUUIDNeededChars) ) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sUUID(""); - IComponent* pIComponent = dynamic_cast(pIBaseClass); - if (!pIComponent) + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - bool isCacheCall = (pUUIDBuffer == nullptr); - if (isCacheCall) { - sUUID = pIComponent->GetUUID(*pHasUUID); + pIBeamLattice->SetBallOptions(eBallMode, dBallRadius); - pIComponent->_setCache (new ParameterCache_2 (*pHasUUID, sUUID)); - } - else { - auto cache = dynamic_cast*> (pIComponent->_getCache ()); - if (cache == nullptr) - throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - cache->retrieveData (*pHasUUID, sUUID); - pIComponent->_setCache (nullptr); - } - - if (pUUIDNeededChars) - *pUUIDNeededChars = (Lib3MF_uint32) (sUUID.size()+1); - if (pUUIDBuffer) { - if (sUUID.size() >= nUUIDBufferSize) - throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); - for (size_t iUUID = 0; iUUID < sUUID.size(); iUUID++) - pUUIDBuffer[iUUID] = sUUID[iUUID]; - pUUIDBuffer[sUUID.size()] = 0; - } if (pJournalEntry.get() != nullptr) { - pJournalEntry->addBooleanResult("HasUUID", *pHasUUID); - pJournalEntry->addStringResult("UUID", sUUID.c_str()); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5028,26 +5191,25 @@ Lib3MFResult lib3mf_component_getuuid(Lib3MF_Component pComponent, bool * pHasUU } } -Lib3MFResult lib3mf_component_setuuid(Lib3MF_Component pComponent, const char * pUUID) +Lib3MFResult lib3mf_beamlattice_getbeamcount(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount) { - IBase* pIBaseClass = (IBase *)pComponent; + IBase* pIBaseClass = (IBase *)pBeamLattice; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "SetUUID"); - pJournalEntry->addStringParameter("UUID", pUUID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBeamCount"); } - if (pUUID == nullptr) + if (pCount == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sUUID(pUUID); - IComponent* pIComponent = dynamic_cast(pIBaseClass); - if (!pIComponent) + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIComponent->SetUUID(sUUID); + *pCount = pIBeamLattice->GetBeamCount(); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5063,25 +5225,25 @@ Lib3MFResult lib3mf_component_setuuid(Lib3MF_Component pComponent, const char * } } -Lib3MFResult lib3mf_component_hastransform(Lib3MF_Component pComponent, bool * pHasTransform) +Lib3MFResult lib3mf_beamlattice_getbeam(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, sLib3MFBeam * pBeamInfo) { - IBase* pIBaseClass = (IBase *)pComponent; + IBase* pIBaseClass = (IBase *)pBeamLattice; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "HasTransform"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBeam"); + pJournalEntry->addUInt32Parameter("Index", nIndex); } - if (pHasTransform == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IComponent* pIComponent = dynamic_cast(pIBaseClass); - if (!pIComponent) + if (pBeamInfo == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pHasTransform = pIComponent->HasTransform(); + *pBeamInfo = pIBeamLattice->GetBeam(nIndex); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addBooleanResult("HasTransform", *pHasTransform); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5097,21 +5259,1734 @@ Lib3MFResult lib3mf_component_hastransform(Lib3MF_Component pComponent, bool * p } } -Lib3MFResult lib3mf_component_gettransform(Lib3MF_Component pComponent, sLib3MFTransform * pTransform) +Lib3MFResult lib3mf_beamlattice_addbeam(Lib3MF_BeamLattice pBeamLattice, const sLib3MFBeam * pBeamInfo, Lib3MF_uint32 * pIndex) { - IBase* pIBaseClass = (IBase *)pComponent; + IBase* pIBaseClass = (IBase *)pBeamLattice; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "GetTransform"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "AddBeam"); } - if (pTransform == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IComponent* pIComponent = dynamic_cast(pIBaseClass); - if (!pIComponent) - throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - + if (pIndex == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pIndex = pIBeamLattice->AddBeam(*pBeamInfo); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Index", *pIndex); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamlattice_setbeam(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, const sLib3MFBeam * pBeamInfo) +{ + IBase* pIBaseClass = (IBase *)pBeamLattice; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetBeam"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + } + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBeamLattice->SetBeam(nIndex, *pBeamInfo); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamlattice_setbeams(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint64 nBeamInfoBufferSize, const sLib3MFBeam * pBeamInfoBuffer) +{ + IBase* pIBaseClass = (IBase *)pBeamLattice; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetBeams"); + } + if ( (!pBeamInfoBuffer) && (nBeamInfoBufferSize>0)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBeamLattice->SetBeams(nBeamInfoBufferSize, pBeamInfoBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamlattice_getbeams(Lib3MF_BeamLattice pBeamLattice, const Lib3MF_uint64 nBeamInfoBufferSize, Lib3MF_uint64* pBeamInfoNeededCount, sLib3MFBeam * pBeamInfoBuffer) +{ + IBase* pIBaseClass = (IBase *)pBeamLattice; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBeams"); + } + if ((!pBeamInfoBuffer) && !(pBeamInfoNeededCount)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBeamLattice->GetBeams(nBeamInfoBufferSize, pBeamInfoNeededCount, pBeamInfoBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamlattice_getballcount(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount) +{ + IBase* pIBaseClass = (IBase *)pBeamLattice; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBallCount"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pIBeamLattice->GetBallCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamlattice_getball(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, sLib3MFBall * pBallInfo) +{ + IBase* pIBaseClass = (IBase *)pBeamLattice; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBall"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + } + if (pBallInfo == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pBallInfo = pIBeamLattice->GetBall(nIndex); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamlattice_addball(Lib3MF_BeamLattice pBeamLattice, const sLib3MFBall * pBallInfo, Lib3MF_uint32 * pIndex) +{ + IBase* pIBaseClass = (IBase *)pBeamLattice; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "AddBall"); + } + if (pIndex == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pIndex = pIBeamLattice->AddBall(*pBallInfo); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Index", *pIndex); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamlattice_setball(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, const sLib3MFBall * pBallInfo) +{ + IBase* pIBaseClass = (IBase *)pBeamLattice; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetBall"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + } + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBeamLattice->SetBall(nIndex, *pBallInfo); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamlattice_setballs(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint64 nBallInfoBufferSize, const sLib3MFBall * pBallInfoBuffer) +{ + IBase* pIBaseClass = (IBase *)pBeamLattice; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "SetBalls"); + } + if ( (!pBallInfoBuffer) && (nBallInfoBufferSize>0)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBeamLattice->SetBalls(nBallInfoBufferSize, pBallInfoBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamlattice_getballs(Lib3MF_BeamLattice pBeamLattice, const Lib3MF_uint64 nBallInfoBufferSize, Lib3MF_uint64* pBallInfoNeededCount, sLib3MFBall * pBallInfoBuffer) +{ + IBase* pIBaseClass = (IBase *)pBeamLattice; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBalls"); + } + if ((!pBallInfoBuffer) && !(pBallInfoNeededCount)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBeamLattice->GetBalls(nBallInfoBufferSize, pBallInfoNeededCount, pBallInfoBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamlattice_getbeamsetcount(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 * pCount) +{ + IBase* pIBaseClass = (IBase *)pBeamLattice; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBeamSetCount"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pIBeamLattice->GetBeamSetCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamlattice_addbeamset(Lib3MF_BeamLattice pBeamLattice, Lib3MF_BeamSet * pBeamSet) +{ + IBase* pIBaseClass = (IBase *)pBeamLattice; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "AddBeamSet"); + } + if (pBeamSet == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseBeamSet(nullptr); + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseBeamSet = pIBeamLattice->AddBeamSet(); + + *pBeamSet = (IBase*)(pBaseBeamSet); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("BeamSet", *pBeamSet); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamlattice_getbeamset(Lib3MF_BeamLattice pBeamLattice, Lib3MF_uint32 nIndex, Lib3MF_BeamSet * pBeamSet) +{ + IBase* pIBaseClass = (IBase *)pBeamLattice; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamLattice, "BeamLattice", "GetBeamSet"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + } + if (pBeamSet == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseBeamSet(nullptr); + IBeamLattice* pIBeamLattice = dynamic_cast(pIBaseClass); + if (!pIBeamLattice) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseBeamSet = pIBeamLattice->GetBeamSet(nIndex); + + *pBeamSet = (IBase*)(pBaseBeamSet); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("BeamSet", *pBeamSet); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for FunctionReference +**************************************************************************************************************************/ +Lib3MFResult lib3mf_functionreference_getfunctionresourceid(Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 * pUniqueResourceID) +{ + IBase* pIBaseClass = (IBase *)pFunctionReference; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionReference, "FunctionReference", "GetFunctionResourceID"); + } + if (pUniqueResourceID == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IFunctionReference* pIFunctionReference = dynamic_cast(pIBaseClass); + if (!pIFunctionReference) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pUniqueResourceID = pIFunctionReference->GetFunctionResourceID(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("UniqueResourceID", *pUniqueResourceID); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_functionreference_setfunctionresourceid(Lib3MF_FunctionReference pFunctionReference, Lib3MF_uint32 nUniqueResourceID) +{ + IBase* pIBaseClass = (IBase *)pFunctionReference; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionReference, "FunctionReference", "SetFunctionResourceID"); + pJournalEntry->addUInt32Parameter("UniqueResourceID", nUniqueResourceID); + } + IFunctionReference* pIFunctionReference = dynamic_cast(pIBaseClass); + if (!pIFunctionReference) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIFunctionReference->SetFunctionResourceID(nUniqueResourceID); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_functionreference_gettransform(Lib3MF_FunctionReference pFunctionReference, sLib3MFTransform * pTransform) +{ + IBase* pIBaseClass = (IBase *)pFunctionReference; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionReference, "FunctionReference", "GetTransform"); + } + if (pTransform == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IFunctionReference* pIFunctionReference = dynamic_cast(pIBaseClass); + if (!pIFunctionReference) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pTransform = pIFunctionReference->GetTransform(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_functionreference_settransform(Lib3MF_FunctionReference pFunctionReference, const sLib3MFTransform * pTransform) +{ + IBase* pIBaseClass = (IBase *)pFunctionReference; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionReference, "FunctionReference", "SetTransform"); + } + IFunctionReference* pIFunctionReference = dynamic_cast(pIBaseClass); + if (!pIFunctionReference) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIFunctionReference->SetTransform(*pTransform); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_functionreference_getchannelname(Lib3MF_FunctionReference pFunctionReference, const Lib3MF_uint32 nChannelNameBufferSize, Lib3MF_uint32* pChannelNameNeededChars, char * pChannelNameBuffer) +{ + IBase* pIBaseClass = (IBase *)pFunctionReference; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionReference, "FunctionReference", "GetChannelName"); + } + if ( (!pChannelNameBuffer) && !(pChannelNameNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sChannelName(""); + IFunctionReference* pIFunctionReference = dynamic_cast(pIBaseClass); + if (!pIFunctionReference) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pChannelNameBuffer == nullptr); + if (isCacheCall) { + sChannelName = pIFunctionReference->GetChannelName(); + + pIFunctionReference->_setCache (new ParameterCache_1 (sChannelName)); + } + else { + auto cache = dynamic_cast*> (pIFunctionReference->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sChannelName); + pIFunctionReference->_setCache (nullptr); + } + + if (pChannelNameNeededChars) + *pChannelNameNeededChars = (Lib3MF_uint32) (sChannelName.size()+1); + if (pChannelNameBuffer) { + if (sChannelName.size() >= nChannelNameBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iChannelName = 0; iChannelName < sChannelName.size(); iChannelName++) + pChannelNameBuffer[iChannelName] = sChannelName[iChannelName]; + pChannelNameBuffer[sChannelName.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("ChannelName", sChannelName.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_functionreference_setchannelname(Lib3MF_FunctionReference pFunctionReference, const char * pChannelName) +{ + IBase* pIBaseClass = (IBase *)pFunctionReference; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionReference, "FunctionReference", "SetChannelName"); + pJournalEntry->addStringParameter("ChannelName", pChannelName); + } + if (pChannelName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sChannelName(pChannelName); + IFunctionReference* pIFunctionReference = dynamic_cast(pIBaseClass); + if (!pIFunctionReference) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIFunctionReference->SetChannelName(sChannelName); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_functionreference_setminfeaturesize(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dMinFeatureSize) +{ + IBase* pIBaseClass = (IBase *)pFunctionReference; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionReference, "FunctionReference", "SetMinFeatureSize"); + pJournalEntry->addDoubleParameter("MinFeatureSize", dMinFeatureSize); + } + IFunctionReference* pIFunctionReference = dynamic_cast(pIBaseClass); + if (!pIFunctionReference) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIFunctionReference->SetMinFeatureSize(dMinFeatureSize); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_functionreference_getminfeaturesize(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pMinFeatureSize) +{ + IBase* pIBaseClass = (IBase *)pFunctionReference; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionReference, "FunctionReference", "GetMinFeatureSize"); + } + if (pMinFeatureSize == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IFunctionReference* pIFunctionReference = dynamic_cast(pIBaseClass); + if (!pIFunctionReference) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pMinFeatureSize = pIFunctionReference->GetMinFeatureSize(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addDoubleResult("MinFeatureSize", *pMinFeatureSize); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_functionreference_setfallbackvalue(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double dFallBackValue) +{ + IBase* pIBaseClass = (IBase *)pFunctionReference; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionReference, "FunctionReference", "SetFallBackValue"); + pJournalEntry->addDoubleParameter("FallBackValue", dFallBackValue); + } + IFunctionReference* pIFunctionReference = dynamic_cast(pIBaseClass); + if (!pIFunctionReference) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIFunctionReference->SetFallBackValue(dFallBackValue); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_functionreference_getfallbackvalue(Lib3MF_FunctionReference pFunctionReference, Lib3MF_double * pFallBackValue) +{ + IBase* pIBaseClass = (IBase *)pFunctionReference; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionReference, "FunctionReference", "GetFallBackValue"); + } + if (pFallBackValue == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IFunctionReference* pIFunctionReference = dynamic_cast(pIBaseClass); + if (!pIFunctionReference) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pFallBackValue = pIFunctionReference->GetFallBackValue(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addDoubleResult("FallBackValue", *pFallBackValue); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for VolumeDataColor +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for MaterialMapping +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for VolumeDataComposite +**************************************************************************************************************************/ +Lib3MFResult lib3mf_volumedatacomposite_getbasematerialgroup(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance) +{ + IBase* pIBaseClass = (IBase *)pVolumeDataComposite; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeDataComposite, "VolumeDataComposite", "GetBaseMaterialGroup"); + } + if (pBaseMaterialGroupInstance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseBaseMaterialGroupInstance(nullptr); + IVolumeDataComposite* pIVolumeDataComposite = dynamic_cast(pIBaseClass); + if (!pIVolumeDataComposite) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseBaseMaterialGroupInstance = pIVolumeDataComposite->GetBaseMaterialGroup(); + + *pBaseMaterialGroupInstance = (IBase*)(pBaseBaseMaterialGroupInstance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("BaseMaterialGroupInstance", *pBaseMaterialGroupInstance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedatacomposite_setbasematerialgroup(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance) +{ + IBase* pIBaseClass = (IBase *)pVolumeDataComposite; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeDataComposite, "VolumeDataComposite", "SetBaseMaterialGroup"); + pJournalEntry->addHandleParameter("BaseMaterialGroupInstance", pBaseMaterialGroupInstance); + } + IBase* pIBaseClassBaseMaterialGroupInstance = (IBase *)pBaseMaterialGroupInstance; + IBaseMaterialGroup* pIBaseMaterialGroupInstance = dynamic_cast(pIBaseClassBaseMaterialGroupInstance); + if (!pIBaseMaterialGroupInstance) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IVolumeDataComposite* pIVolumeDataComposite = dynamic_cast(pIBaseClass); + if (!pIVolumeDataComposite) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIVolumeDataComposite->SetBaseMaterialGroup(pIBaseMaterialGroupInstance); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedatacomposite_getmaterialmappingcount(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 * pCount) +{ + IBase* pIBaseClass = (IBase *)pVolumeDataComposite; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeDataComposite, "VolumeDataComposite", "GetMaterialMappingCount"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IVolumeDataComposite* pIVolumeDataComposite = dynamic_cast(pIBaseClass); + if (!pIVolumeDataComposite) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pIVolumeDataComposite->GetMaterialMappingCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedatacomposite_getmaterialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex, Lib3MF_MaterialMapping * pTheMaterialMapping) +{ + IBase* pIBaseClass = (IBase *)pVolumeDataComposite; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeDataComposite, "VolumeDataComposite", "GetMaterialMapping"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + } + if (pTheMaterialMapping == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseTheMaterialMapping(nullptr); + IVolumeDataComposite* pIVolumeDataComposite = dynamic_cast(pIBaseClass); + if (!pIVolumeDataComposite) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseTheMaterialMapping = pIVolumeDataComposite->GetMaterialMapping(nIndex); + + *pTheMaterialMapping = (IBase*)(pBaseTheMaterialMapping); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("TheMaterialMapping", *pTheMaterialMapping); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedatacomposite_addmaterialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, const sLib3MFTransform * pTransform, Lib3MF_MaterialMapping * pTheMaterialMapping) +{ + IBase* pIBaseClass = (IBase *)pVolumeDataComposite; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeDataComposite, "VolumeDataComposite", "AddMaterialMapping"); + } + if (pTheMaterialMapping == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseTheMaterialMapping(nullptr); + IVolumeDataComposite* pIVolumeDataComposite = dynamic_cast(pIBaseClass); + if (!pIVolumeDataComposite) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseTheMaterialMapping = pIVolumeDataComposite->AddMaterialMapping(*pTransform); + + *pTheMaterialMapping = (IBase*)(pBaseTheMaterialMapping); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("TheMaterialMapping", *pTheMaterialMapping); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedatacomposite_removematerialmapping(Lib3MF_VolumeDataComposite pVolumeDataComposite, Lib3MF_uint32 nIndex) +{ + IBase* pIBaseClass = (IBase *)pVolumeDataComposite; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeDataComposite, "VolumeDataComposite", "RemoveMaterialMapping"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + } + IVolumeDataComposite* pIVolumeDataComposite = dynamic_cast(pIBaseClass); + if (!pIVolumeDataComposite) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIVolumeDataComposite->RemoveMaterialMapping(nIndex); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for VolumeDataProperty +**************************************************************************************************************************/ +Lib3MFResult lib3mf_volumedataproperty_getname(Lib3MF_VolumeDataProperty pVolumeDataProperty, const Lib3MF_uint32 nPropertyNameBufferSize, Lib3MF_uint32* pPropertyNameNeededChars, char * pPropertyNameBuffer) +{ + IBase* pIBaseClass = (IBase *)pVolumeDataProperty; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeDataProperty, "VolumeDataProperty", "GetName"); + } + if ( (!pPropertyNameBuffer) && !(pPropertyNameNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sPropertyName(""); + IVolumeDataProperty* pIVolumeDataProperty = dynamic_cast(pIBaseClass); + if (!pIVolumeDataProperty) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pPropertyNameBuffer == nullptr); + if (isCacheCall) { + sPropertyName = pIVolumeDataProperty->GetName(); + + pIVolumeDataProperty->_setCache (new ParameterCache_1 (sPropertyName)); + } + else { + auto cache = dynamic_cast*> (pIVolumeDataProperty->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sPropertyName); + pIVolumeDataProperty->_setCache (nullptr); + } + + if (pPropertyNameNeededChars) + *pPropertyNameNeededChars = (Lib3MF_uint32) (sPropertyName.size()+1); + if (pPropertyNameBuffer) { + if (sPropertyName.size() >= nPropertyNameBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iPropertyName = 0; iPropertyName < sPropertyName.size(); iPropertyName++) + pPropertyNameBuffer[iPropertyName] = sPropertyName[iPropertyName]; + pPropertyNameBuffer[sPropertyName.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("PropertyName", sPropertyName.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedataproperty_setisrequired(Lib3MF_VolumeDataProperty pVolumeDataProperty, bool bIsRequired) +{ + IBase* pIBaseClass = (IBase *)pVolumeDataProperty; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeDataProperty, "VolumeDataProperty", "SetIsRequired"); + pJournalEntry->addBooleanParameter("IsRequired", bIsRequired); + } + IVolumeDataProperty* pIVolumeDataProperty = dynamic_cast(pIBaseClass); + if (!pIVolumeDataProperty) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIVolumeDataProperty->SetIsRequired(bIsRequired); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedataproperty_isrequired(Lib3MF_VolumeDataProperty pVolumeDataProperty, bool * pIsRequired) +{ + IBase* pIBaseClass = (IBase *)pVolumeDataProperty; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeDataProperty, "VolumeDataProperty", "IsRequired"); + } + if (pIsRequired == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IVolumeDataProperty* pIVolumeDataProperty = dynamic_cast(pIBaseClass); + if (!pIVolumeDataProperty) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pIsRequired = pIVolumeDataProperty->IsRequired(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addBooleanResult("IsRequired", *pIsRequired); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for VolumeData +**************************************************************************************************************************/ +Lib3MFResult lib3mf_volumedata_getcomposite(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData) +{ + IBase* pIBaseClass = (IBase *)pVolumeData; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeData, "VolumeData", "GetComposite"); + } + if (pTheCompositeData == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseTheCompositeData(nullptr); + IVolumeData* pIVolumeData = dynamic_cast(pIBaseClass); + if (!pIVolumeData) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseTheCompositeData = pIVolumeData->GetComposite(); + + *pTheCompositeData = (IBase*)(pBaseTheCompositeData); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("TheCompositeData", *pTheCompositeData); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedata_createnewcomposite(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataComposite * pTheCompositeData) +{ + IBase* pIBaseClass = (IBase *)pVolumeData; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeData, "VolumeData", "CreateNewComposite"); + } + if (pTheCompositeData == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseTheCompositeData(nullptr); + IVolumeData* pIVolumeData = dynamic_cast(pIBaseClass); + if (!pIVolumeData) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseTheCompositeData = pIVolumeData->CreateNewComposite(); + + *pTheCompositeData = (IBase*)(pBaseTheCompositeData); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("TheCompositeData", *pTheCompositeData); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedata_removecomposite(Lib3MF_VolumeData pVolumeData) +{ + IBase* pIBaseClass = (IBase *)pVolumeData; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeData, "VolumeData", "RemoveComposite"); + } + IVolumeData* pIVolumeData = dynamic_cast(pIBaseClass); + if (!pIVolumeData) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIVolumeData->RemoveComposite(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedata_getcolor(Lib3MF_VolumeData pVolumeData, Lib3MF_VolumeDataColor * pTheColorData) +{ + IBase* pIBaseClass = (IBase *)pVolumeData; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeData, "VolumeData", "GetColor"); + } + if (pTheColorData == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseTheColorData(nullptr); + IVolumeData* pIVolumeData = dynamic_cast(pIBaseClass); + if (!pIVolumeData) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseTheColorData = pIVolumeData->GetColor(); + + *pTheColorData = (IBase*)(pBaseTheColorData); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("TheColorData", *pTheColorData); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedata_createnewcolor(Lib3MF_VolumeData pVolumeData, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataColor * pTheColorData) +{ + IBase* pIBaseClass = (IBase *)pVolumeData; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeData, "VolumeData", "CreateNewColor"); + pJournalEntry->addHandleParameter("TheFunction", pTheFunction); + } + if (pTheColorData == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pIBaseClassTheFunction = (IBase *)pTheFunction; + IFunction* pITheFunction = dynamic_cast(pIBaseClassTheFunction); + if (!pITheFunction) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IBase* pBaseTheColorData(nullptr); + IVolumeData* pIVolumeData = dynamic_cast(pIBaseClass); + if (!pIVolumeData) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseTheColorData = pIVolumeData->CreateNewColor(pITheFunction); + + *pTheColorData = (IBase*)(pBaseTheColorData); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("TheColorData", *pTheColorData); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedata_removecolor(Lib3MF_VolumeData pVolumeData) +{ + IBase* pIBaseClass = (IBase *)pVolumeData; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeData, "VolumeData", "RemoveColor"); + } + IVolumeData* pIVolumeData = dynamic_cast(pIBaseClass); + if (!pIVolumeData) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIVolumeData->RemoveColor(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedata_getpropertycount(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 * pCount) +{ + IBase* pIBaseClass = (IBase *)pVolumeData; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeData, "VolumeData", "GetPropertyCount"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IVolumeData* pIVolumeData = dynamic_cast(pIBaseClass); + if (!pIVolumeData) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pIVolumeData->GetPropertyCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedata_getproperty(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty) +{ + IBase* pIBaseClass = (IBase *)pVolumeData; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeData, "VolumeData", "GetProperty"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + } + if (pTheVolumeDataProperty == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseTheVolumeDataProperty(nullptr); + IVolumeData* pIVolumeData = dynamic_cast(pIBaseClass); + if (!pIVolumeData) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseTheVolumeDataProperty = pIVolumeData->GetProperty(nIndex); + + *pTheVolumeDataProperty = (IBase*)(pBaseTheVolumeDataProperty); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("TheVolumeDataProperty", *pTheVolumeDataProperty); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedata_addpropertyfromfunction(Lib3MF_VolumeData pVolumeData, const char * pName, Lib3MF_Function pTheFunction, Lib3MF_VolumeDataProperty * pTheVolumeDataProperty) +{ + IBase* pIBaseClass = (IBase *)pVolumeData; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeData, "VolumeData", "AddPropertyFromFunction"); + pJournalEntry->addStringParameter("Name", pName); + pJournalEntry->addHandleParameter("TheFunction", pTheFunction); + } + if (pName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTheVolumeDataProperty == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sName(pName); + IBase* pIBaseClassTheFunction = (IBase *)pTheFunction; + IFunction* pITheFunction = dynamic_cast(pIBaseClassTheFunction); + if (!pITheFunction) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IBase* pBaseTheVolumeDataProperty(nullptr); + IVolumeData* pIVolumeData = dynamic_cast(pIBaseClass); + if (!pIVolumeData) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseTheVolumeDataProperty = pIVolumeData->AddPropertyFromFunction(sName, pITheFunction); + + *pTheVolumeDataProperty = (IBase*)(pBaseTheVolumeDataProperty); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("TheVolumeDataProperty", *pTheVolumeDataProperty); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_volumedata_removeproperty(Lib3MF_VolumeData pVolumeData, Lib3MF_uint32 nIndex) +{ + IBase* pIBaseClass = (IBase *)pVolumeData; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pVolumeData, "VolumeData", "RemoveProperty"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + } + IVolumeData* pIVolumeData = dynamic_cast(pIBaseClass); + if (!pIVolumeData) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIVolumeData->RemoveProperty(nIndex); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for Component +**************************************************************************************************************************/ +Lib3MFResult lib3mf_component_getobjectresource(Lib3MF_Component pComponent, Lib3MF_Object * pObjectResource) +{ + IBase* pIBaseClass = (IBase *)pComponent; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "GetObjectResource"); + } + if (pObjectResource == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseObjectResource(nullptr); + IComponent* pIComponent = dynamic_cast(pIBaseClass); + if (!pIComponent) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseObjectResource = pIComponent->GetObjectResource(); + + *pObjectResource = (IBase*)(pBaseObjectResource); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("ObjectResource", *pObjectResource); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_component_getobjectresourceid(Lib3MF_Component pComponent, Lib3MF_uint32 * pUniqueResourceID) +{ + IBase* pIBaseClass = (IBase *)pComponent; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "GetObjectResourceID"); + } + if (pUniqueResourceID == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IComponent* pIComponent = dynamic_cast(pIBaseClass); + if (!pIComponent) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pUniqueResourceID = pIComponent->GetObjectResourceID(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("UniqueResourceID", *pUniqueResourceID); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_component_getuuid(Lib3MF_Component pComponent, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) +{ + IBase* pIBaseClass = (IBase *)pComponent; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "GetUUID"); + } + if (!pHasUUID) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if ( (!pUUIDBuffer) && !(pUUIDNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sUUID(""); + IComponent* pIComponent = dynamic_cast(pIBaseClass); + if (!pIComponent) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pUUIDBuffer == nullptr); + if (isCacheCall) { + sUUID = pIComponent->GetUUID(*pHasUUID); + + pIComponent->_setCache (new ParameterCache_2 (*pHasUUID, sUUID)); + } + else { + auto cache = dynamic_cast*> (pIComponent->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (*pHasUUID, sUUID); + pIComponent->_setCache (nullptr); + } + + if (pUUIDNeededChars) + *pUUIDNeededChars = (Lib3MF_uint32) (sUUID.size()+1); + if (pUUIDBuffer) { + if (sUUID.size() >= nUUIDBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iUUID = 0; iUUID < sUUID.size(); iUUID++) + pUUIDBuffer[iUUID] = sUUID[iUUID]; + pUUIDBuffer[sUUID.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addBooleanResult("HasUUID", *pHasUUID); + pJournalEntry->addStringResult("UUID", sUUID.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_component_setuuid(Lib3MF_Component pComponent, const char * pUUID) +{ + IBase* pIBaseClass = (IBase *)pComponent; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "SetUUID"); + pJournalEntry->addStringParameter("UUID", pUUID); + } + if (pUUID == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sUUID(pUUID); + IComponent* pIComponent = dynamic_cast(pIBaseClass); + if (!pIComponent) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIComponent->SetUUID(sUUID); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_component_hastransform(Lib3MF_Component pComponent, bool * pHasTransform) +{ + IBase* pIBaseClass = (IBase *)pComponent; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "HasTransform"); + } + if (pHasTransform == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IComponent* pIComponent = dynamic_cast(pIBaseClass); + if (!pIComponent) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pHasTransform = pIComponent->HasTransform(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addBooleanResult("HasTransform", *pHasTransform); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_component_gettransform(Lib3MF_Component pComponent, sLib3MFTransform * pTransform) +{ + IBase* pIBaseClass = (IBase *)pComponent; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "GetTransform"); + } + if (pTransform == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IComponent* pIComponent = dynamic_cast(pIBaseClass); + if (!pIComponent) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + *pTransform = pIComponent->GetTransform(); if (pJournalEntry.get() != nullptr) { @@ -5130,22 +7005,6940 @@ Lib3MFResult lib3mf_component_gettransform(Lib3MF_Component pComponent, sLib3MFT } } -Lib3MFResult lib3mf_component_settransform(Lib3MF_Component pComponent, const sLib3MFTransform * pTransform) +Lib3MFResult lib3mf_component_settransform(Lib3MF_Component pComponent, const sLib3MFTransform * pTransform) +{ + IBase* pIBaseClass = (IBase *)pComponent; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "SetTransform"); + } + IComponent* pIComponent = dynamic_cast(pIBaseClass); + if (!pIComponent) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIComponent->SetTransform(*pTransform); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for ComponentsObject +**************************************************************************************************************************/ +Lib3MFResult lib3mf_componentsobject_addcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const sLib3MFTransform * pTransform, Lib3MF_Component * pComponentInstance) +{ + IBase* pIBaseClass = (IBase *)pComponentsObject; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComponentsObject, "ComponentsObject", "AddComponent"); + pJournalEntry->addHandleParameter("ObjectResource", pObjectResource); + } + if (pComponentInstance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pIBaseClassObjectResource = (IBase *)pObjectResource; + IObject* pIObjectResource = dynamic_cast(pIBaseClassObjectResource); + if (!pIObjectResource) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IBase* pBaseComponentInstance(nullptr); + IComponentsObject* pIComponentsObject = dynamic_cast(pIBaseClass); + if (!pIComponentsObject) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseComponentInstance = pIComponentsObject->AddComponent(pIObjectResource, *pTransform); + + *pComponentInstance = (IBase*)(pBaseComponentInstance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("ComponentInstance", *pComponentInstance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_componentsobject_getcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance) +{ + IBase* pIBaseClass = (IBase *)pComponentsObject; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComponentsObject, "ComponentsObject", "GetComponent"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + } + if (pComponentInstance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseComponentInstance(nullptr); + IComponentsObject* pIComponentsObject = dynamic_cast(pIBaseClass); + if (!pIComponentsObject) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseComponentInstance = pIComponentsObject->GetComponent(nIndex); + + *pComponentInstance = (IBase*)(pBaseComponentInstance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("ComponentInstance", *pComponentInstance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_componentsobject_getcomponentcount(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount) +{ + IBase* pIBaseClass = (IBase *)pComponentsObject; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComponentsObject, "ComponentsObject", "GetComponentCount"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IComponentsObject* pIComponentsObject = dynamic_cast(pIBaseClass); + if (!pIComponentsObject) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pIComponentsObject->GetComponentCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for BeamSet +**************************************************************************************************************************/ +Lib3MFResult lib3mf_beamset_setname(Lib3MF_BeamSet pBeamSet, const char * pName) +{ + IBase* pIBaseClass = (IBase *)pBeamSet; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "SetName"); + pJournalEntry->addStringParameter("Name", pName); + } + if (pName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sName(pName); + IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); + if (!pIBeamSet) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBeamSet->SetName(sName); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamset_getname(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer) +{ + IBase* pIBaseClass = (IBase *)pBeamSet; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "GetName"); + } + if ( (!pNameBuffer) && !(pNameNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sName(""); + IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); + if (!pIBeamSet) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pNameBuffer == nullptr); + if (isCacheCall) { + sName = pIBeamSet->GetName(); + + pIBeamSet->_setCache (new ParameterCache_1 (sName)); + } + else { + auto cache = dynamic_cast*> (pIBeamSet->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sName); + pIBeamSet->_setCache (nullptr); + } + + if (pNameNeededChars) + *pNameNeededChars = (Lib3MF_uint32) (sName.size()+1); + if (pNameBuffer) { + if (sName.size() >= nNameBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iName = 0; iName < sName.size(); iName++) + pNameBuffer[iName] = sName[iName]; + pNameBuffer[sName.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("Name", sName.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamset_setidentifier(Lib3MF_BeamSet pBeamSet, const char * pIdentifier) +{ + IBase* pIBaseClass = (IBase *)pBeamSet; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "SetIdentifier"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + } + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); + if (!pIBeamSet) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBeamSet->SetIdentifier(sIdentifier); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamset_getidentifier(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer) +{ + IBase* pIBaseClass = (IBase *)pBeamSet; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "GetIdentifier"); + } + if ( (!pIdentifierBuffer) && !(pIdentifierNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(""); + IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); + if (!pIBeamSet) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pIdentifierBuffer == nullptr); + if (isCacheCall) { + sIdentifier = pIBeamSet->GetIdentifier(); + + pIBeamSet->_setCache (new ParameterCache_1 (sIdentifier)); + } + else { + auto cache = dynamic_cast*> (pIBeamSet->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sIdentifier); + pIBeamSet->_setCache (nullptr); + } + + if (pIdentifierNeededChars) + *pIdentifierNeededChars = (Lib3MF_uint32) (sIdentifier.size()+1); + if (pIdentifierBuffer) { + if (sIdentifier.size() >= nIdentifierBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iIdentifier = 0; iIdentifier < sIdentifier.size(); iIdentifier++) + pIdentifierBuffer[iIdentifier] = sIdentifier[iIdentifier]; + pIdentifierBuffer[sIdentifier.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("Identifier", sIdentifier.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamset_getreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount) +{ + IBase* pIBaseClass = (IBase *)pBeamSet; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "GetReferenceCount"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); + if (!pIBeamSet) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pIBeamSet->GetReferenceCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamset_setreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer) +{ + IBase* pIBaseClass = (IBase *)pBeamSet; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "SetReferences"); + } + if ( (!pReferencesBuffer) && (nReferencesBufferSize>0)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); + if (!pIBeamSet) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBeamSet->SetReferences(nReferencesBufferSize, pReferencesBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamset_getreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer) +{ + IBase* pIBaseClass = (IBase *)pBeamSet; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "GetReferences"); + } + if ((!pReferencesBuffer) && !(pReferencesNeededCount)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); + if (!pIBeamSet) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBeamSet->GetReferences(nReferencesBufferSize, pReferencesNeededCount, pReferencesBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamset_getballreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount) +{ + IBase* pIBaseClass = (IBase *)pBeamSet; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "GetBallReferenceCount"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); + if (!pIBeamSet) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pIBeamSet->GetBallReferenceCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamset_setballreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer) +{ + IBase* pIBaseClass = (IBase *)pBeamSet; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "SetBallReferences"); + } + if ( (!pBallReferencesBuffer) && (nBallReferencesBufferSize>0)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); + if (!pIBeamSet) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBeamSet->SetBallReferences(nBallReferencesBufferSize, pBallReferencesBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_beamset_getballreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer) +{ + IBase* pIBaseClass = (IBase *)pBeamSet; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "GetBallReferences"); + } + if ((!pBallReferencesBuffer) && !(pBallReferencesNeededCount)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); + if (!pIBeamSet) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBeamSet->GetBallReferences(nBallReferencesBufferSize, pBallReferencesNeededCount, pBallReferencesBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for BaseMaterialGroup +**************************************************************************************************************************/ +Lib3MFResult lib3mf_basematerialgroup_getcount(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount) +{ + IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "GetCount"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); + if (!pIBaseMaterialGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pIBaseMaterialGroup->GetCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_basematerialgroup_getallpropertyids(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +{ + IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "GetAllPropertyIDs"); + } + if ((!pPropertyIDsBuffer) && !(pPropertyIDsNeededCount)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); + if (!pIBaseMaterialGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBaseMaterialGroup->GetAllPropertyIDs(nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_basematerialgroup_addmaterial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const sLib3MFColor * pDisplayColor, Lib3MF_uint32 * pPropertyID) +{ + IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "AddMaterial"); + pJournalEntry->addStringParameter("Name", pName); + } + if (pName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pPropertyID == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sName(pName); + IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); + if (!pIBaseMaterialGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pPropertyID = pIBaseMaterialGroup->AddMaterial(sName, *pDisplayColor); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("PropertyID", *pPropertyID); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_basematerialgroup_removematerial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID) +{ + IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "RemoveMaterial"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); + if (!pIBaseMaterialGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBaseMaterialGroup->RemoveMaterial(nPropertyID); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_basematerialgroup_getname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer) +{ + IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "GetName"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + if ( (!pNameBuffer) && !(pNameNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sName(""); + IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); + if (!pIBaseMaterialGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pNameBuffer == nullptr); + if (isCacheCall) { + sName = pIBaseMaterialGroup->GetName(nPropertyID); + + pIBaseMaterialGroup->_setCache (new ParameterCache_1 (sName)); + } + else { + auto cache = dynamic_cast*> (pIBaseMaterialGroup->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sName); + pIBaseMaterialGroup->_setCache (nullptr); + } + + if (pNameNeededChars) + *pNameNeededChars = (Lib3MF_uint32) (sName.size()+1); + if (pNameBuffer) { + if (sName.size() >= nNameBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iName = 0; iName < sName.size(); iName++) + pNameBuffer[iName] = sName[iName]; + pNameBuffer[sName.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("Name", sName.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_basematerialgroup_setname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName) +{ + IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "SetName"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry->addStringParameter("Name", pName); + } + if (pName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sName(pName); + IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); + if (!pIBaseMaterialGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBaseMaterialGroup->SetName(nPropertyID, sName); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_basematerialgroup_setdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor) +{ + IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "SetDisplayColor"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); + if (!pIBaseMaterialGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIBaseMaterialGroup->SetDisplayColor(nPropertyID, *pTheColor); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_basematerialgroup_getdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor) +{ + IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "GetDisplayColor"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + if (pTheColor == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); + if (!pIBaseMaterialGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pTheColor = pIBaseMaterialGroup->GetDisplayColor(nPropertyID); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for ColorGroup +**************************************************************************************************************************/ +Lib3MFResult lib3mf_colorgroup_getcount(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount) +{ + IBase* pIBaseClass = (IBase *)pColorGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pColorGroup, "ColorGroup", "GetCount"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IColorGroup* pIColorGroup = dynamic_cast(pIBaseClass); + if (!pIColorGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pIColorGroup->GetCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_colorgroup_getallpropertyids(Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +{ + IBase* pIBaseClass = (IBase *)pColorGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pColorGroup, "ColorGroup", "GetAllPropertyIDs"); + } + if ((!pPropertyIDsBuffer) && !(pPropertyIDsNeededCount)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IColorGroup* pIColorGroup = dynamic_cast(pIBaseClass); + if (!pIColorGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIColorGroup->GetAllPropertyIDs(nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_colorgroup_addcolor(Lib3MF_ColorGroup pColorGroup, const sLib3MFColor * pTheColor, Lib3MF_uint32 * pPropertyID) +{ + IBase* pIBaseClass = (IBase *)pColorGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pColorGroup, "ColorGroup", "AddColor"); + } + if (pPropertyID == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IColorGroup* pIColorGroup = dynamic_cast(pIBaseClass); + if (!pIColorGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pPropertyID = pIColorGroup->AddColor(*pTheColor); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("PropertyID", *pPropertyID); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_colorgroup_removecolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID) +{ + IBase* pIBaseClass = (IBase *)pColorGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pColorGroup, "ColorGroup", "RemoveColor"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + IColorGroup* pIColorGroup = dynamic_cast(pIBaseClass); + if (!pIColorGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIColorGroup->RemoveColor(nPropertyID); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_colorgroup_setcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor) +{ + IBase* pIBaseClass = (IBase *)pColorGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pColorGroup, "ColorGroup", "SetColor"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + IColorGroup* pIColorGroup = dynamic_cast(pIBaseClass); + if (!pIColorGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIColorGroup->SetColor(nPropertyID, *pTheColor); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_colorgroup_getcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor) +{ + IBase* pIBaseClass = (IBase *)pColorGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pColorGroup, "ColorGroup", "GetColor"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + if (pTheColor == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IColorGroup* pIColorGroup = dynamic_cast(pIBaseClass); + if (!pIColorGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pTheColor = pIColorGroup->GetColor(nPropertyID); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for Texture2DGroup +**************************************************************************************************************************/ +Lib3MFResult lib3mf_texture2dgroup_getcount(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount) +{ + IBase* pIBaseClass = (IBase *)pTexture2DGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2DGroup, "Texture2DGroup", "GetCount"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ITexture2DGroup* pITexture2DGroup = dynamic_cast(pIBaseClass); + if (!pITexture2DGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pITexture2DGroup->GetCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_texture2dgroup_getallpropertyids(Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +{ + IBase* pIBaseClass = (IBase *)pTexture2DGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2DGroup, "Texture2DGroup", "GetAllPropertyIDs"); + } + if ((!pPropertyIDsBuffer) && !(pPropertyIDsNeededCount)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ITexture2DGroup* pITexture2DGroup = dynamic_cast(pIBaseClass); + if (!pITexture2DGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pITexture2DGroup->GetAllPropertyIDs(nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_texture2dgroup_addtex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, const sLib3MFTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID) +{ + IBase* pIBaseClass = (IBase *)pTexture2DGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2DGroup, "Texture2DGroup", "AddTex2Coord"); + } + if (pPropertyID == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ITexture2DGroup* pITexture2DGroup = dynamic_cast(pIBaseClass); + if (!pITexture2DGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pPropertyID = pITexture2DGroup->AddTex2Coord(*pUVCoordinate); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("PropertyID", *pPropertyID); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_texture2dgroup_gettex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, sLib3MFTex2Coord * pUVCoordinate) +{ + IBase* pIBaseClass = (IBase *)pTexture2DGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2DGroup, "Texture2DGroup", "GetTex2Coord"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + if (pUVCoordinate == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ITexture2DGroup* pITexture2DGroup = dynamic_cast(pIBaseClass); + if (!pITexture2DGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pUVCoordinate = pITexture2DGroup->GetTex2Coord(nPropertyID); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_texture2dgroup_removetex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID) +{ + IBase* pIBaseClass = (IBase *)pTexture2DGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2DGroup, "Texture2DGroup", "RemoveTex2Coord"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + ITexture2DGroup* pITexture2DGroup = dynamic_cast(pIBaseClass); + if (!pITexture2DGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pITexture2DGroup->RemoveTex2Coord(nPropertyID); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_texture2dgroup_gettexture2d(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance) +{ + IBase* pIBaseClass = (IBase *)pTexture2DGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2DGroup, "Texture2DGroup", "GetTexture2D"); + } + if (pTexture2DInstance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseTexture2DInstance(nullptr); + ITexture2DGroup* pITexture2DGroup = dynamic_cast(pIBaseClass); + if (!pITexture2DGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseTexture2DInstance = pITexture2DGroup->GetTexture2D(); + + *pTexture2DInstance = (IBase*)(pBaseTexture2DInstance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Texture2DInstance", *pTexture2DInstance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for CompositeMaterials +**************************************************************************************************************************/ +Lib3MFResult lib3mf_compositematerials_getcount(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount) +{ + IBase* pIBaseClass = (IBase *)pCompositeMaterials; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pCompositeMaterials, "CompositeMaterials", "GetCount"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ICompositeMaterials* pICompositeMaterials = dynamic_cast(pIBaseClass); + if (!pICompositeMaterials) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pICompositeMaterials->GetCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_compositematerials_getallpropertyids(Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +{ + IBase* pIBaseClass = (IBase *)pCompositeMaterials; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pCompositeMaterials, "CompositeMaterials", "GetAllPropertyIDs"); + } + if ((!pPropertyIDsBuffer) && !(pPropertyIDsNeededCount)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ICompositeMaterials* pICompositeMaterials = dynamic_cast(pIBaseClass); + if (!pICompositeMaterials) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pICompositeMaterials->GetAllPropertyIDs(nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_compositematerials_getbasematerialgroup(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance) +{ + IBase* pIBaseClass = (IBase *)pCompositeMaterials; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pCompositeMaterials, "CompositeMaterials", "GetBaseMaterialGroup"); + } + if (pBaseMaterialGroupInstance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseBaseMaterialGroupInstance(nullptr); + ICompositeMaterials* pICompositeMaterials = dynamic_cast(pIBaseClass); + if (!pICompositeMaterials) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseBaseMaterialGroupInstance = pICompositeMaterials->GetBaseMaterialGroup(); + + *pBaseMaterialGroupInstance = (IBase*)(pBaseBaseMaterialGroupInstance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("BaseMaterialGroupInstance", *pBaseMaterialGroupInstance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_compositematerials_addcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const sLib3MFCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID) +{ + IBase* pIBaseClass = (IBase *)pCompositeMaterials; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pCompositeMaterials, "CompositeMaterials", "AddComposite"); + } + if ( (!pCompositeBuffer) && (nCompositeBufferSize>0)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pPropertyID == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ICompositeMaterials* pICompositeMaterials = dynamic_cast(pIBaseClass); + if (!pICompositeMaterials) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pPropertyID = pICompositeMaterials->AddComposite(nCompositeBufferSize, pCompositeBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("PropertyID", *pPropertyID); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_compositematerials_removecomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID) +{ + IBase* pIBaseClass = (IBase *)pCompositeMaterials; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pCompositeMaterials, "CompositeMaterials", "RemoveComposite"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + ICompositeMaterials* pICompositeMaterials = dynamic_cast(pIBaseClass); + if (!pICompositeMaterials) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pICompositeMaterials->RemoveComposite(nPropertyID); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_compositematerials_getcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, sLib3MFCompositeConstituent * pCompositeBuffer) +{ + IBase* pIBaseClass = (IBase *)pCompositeMaterials; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pCompositeMaterials, "CompositeMaterials", "GetComposite"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + if ((!pCompositeBuffer) && !(pCompositeNeededCount)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ICompositeMaterials* pICompositeMaterials = dynamic_cast(pIBaseClass); + if (!pICompositeMaterials) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pICompositeMaterials->GetComposite(nPropertyID, nCompositeBufferSize, pCompositeNeededCount, pCompositeBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for MultiPropertyGroup +**************************************************************************************************************************/ +Lib3MFResult lib3mf_multipropertygroup_getcount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount) +{ + IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "GetCount"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); + if (!pIMultiPropertyGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pIMultiPropertyGroup->GetCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_multipropertygroup_getallpropertyids(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +{ + IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "GetAllPropertyIDs"); + } + if ((!pPropertyIDsBuffer) && !(pPropertyIDsNeededCount)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); + if (!pIMultiPropertyGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIMultiPropertyGroup->GetAllPropertyIDs(nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_multipropertygroup_addmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID) +{ + IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "AddMultiProperty"); + } + if ( (!pPropertyIDsBuffer) && (nPropertyIDsBufferSize>0)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pPropertyID == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); + if (!pIMultiPropertyGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pPropertyID = pIMultiPropertyGroup->AddMultiProperty(nPropertyIDsBufferSize, pPropertyIDsBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("PropertyID", *pPropertyID); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_multipropertygroup_setmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer) +{ + IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "SetMultiProperty"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + if ( (!pPropertyIDsBuffer) && (nPropertyIDsBufferSize>0)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); + if (!pIMultiPropertyGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIMultiPropertyGroup->SetMultiProperty(nPropertyID, nPropertyIDsBufferSize, pPropertyIDsBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_multipropertygroup_getmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +{ + IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "GetMultiProperty"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + if ((!pPropertyIDsBuffer) && !(pPropertyIDsNeededCount)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); + if (!pIMultiPropertyGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIMultiPropertyGroup->GetMultiProperty(nPropertyID, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_multipropertygroup_removemultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID) +{ + IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "RemoveMultiProperty"); + pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + } + IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); + if (!pIMultiPropertyGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIMultiPropertyGroup->RemoveMultiProperty(nPropertyID); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_multipropertygroup_getlayercount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount) +{ + IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "GetLayerCount"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); + if (!pIMultiPropertyGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pIMultiPropertyGroup->GetLayerCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_multipropertygroup_addlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const sLib3MFMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex) +{ + IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "AddLayer"); + } + if (pLayerIndex == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); + if (!pIMultiPropertyGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pLayerIndex = pIMultiPropertyGroup->AddLayer(*pTheLayer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("LayerIndex", *pLayerIndex); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_multipropertygroup_getlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, sLib3MFMultiPropertyLayer * pTheLayer) +{ + IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "GetLayer"); + pJournalEntry->addUInt32Parameter("LayerIndex", nLayerIndex); + } + if (pTheLayer == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); + if (!pIMultiPropertyGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pTheLayer = pIMultiPropertyGroup->GetLayer(nLayerIndex); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_multipropertygroup_removelayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex) +{ + IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "RemoveLayer"); + pJournalEntry->addUInt32Parameter("LayerIndex", nLayerIndex); + } + IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); + if (!pIMultiPropertyGroup) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIMultiPropertyGroup->RemoveLayer(nLayerIndex); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for Image3D +**************************************************************************************************************************/ +Lib3MFResult lib3mf_image3d_getname(Lib3MF_Image3D pImage3D, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer) +{ + IBase* pIBaseClass = (IBase *)pImage3D; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImage3D, "Image3D", "GetName"); + } + if ( (!pNameBuffer) && !(pNameNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sName(""); + IImage3D* pIImage3D = dynamic_cast(pIBaseClass); + if (!pIImage3D) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pNameBuffer == nullptr); + if (isCacheCall) { + sName = pIImage3D->GetName(); + + pIImage3D->_setCache (new ParameterCache_1 (sName)); + } + else { + auto cache = dynamic_cast*> (pIImage3D->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sName); + pIImage3D->_setCache (nullptr); + } + + if (pNameNeededChars) + *pNameNeededChars = (Lib3MF_uint32) (sName.size()+1); + if (pNameBuffer) { + if (sName.size() >= nNameBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iName = 0; iName < sName.size(); iName++) + pNameBuffer[iName] = sName[iName]; + pNameBuffer[sName.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("Name", sName.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_image3d_setname(Lib3MF_Image3D pImage3D, const char * pName) +{ + IBase* pIBaseClass = (IBase *)pImage3D; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImage3D, "Image3D", "SetName"); + pJournalEntry->addStringParameter("Name", pName); + } + if (pName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sName(pName); + IImage3D* pIImage3D = dynamic_cast(pIBaseClass); + if (!pIImage3D) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIImage3D->SetName(sName); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_image3d_isimagestack(Lib3MF_Image3D pImage3D, bool * pIsImageStack) +{ + IBase* pIBaseClass = (IBase *)pImage3D; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImage3D, "Image3D", "IsImageStack"); + } + if (pIsImageStack == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IImage3D* pIImage3D = dynamic_cast(pIBaseClass); + if (!pIImage3D) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pIsImageStack = pIImage3D->IsImageStack(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addBooleanResult("IsImageStack", *pIsImageStack); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for ImageStack +**************************************************************************************************************************/ +Lib3MFResult lib3mf_imagestack_getrowcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pRowCount) +{ + IBase* pIBaseClass = (IBase *)pImageStack; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImageStack, "ImageStack", "GetRowCount"); + } + if (pRowCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IImageStack* pIImageStack = dynamic_cast(pIBaseClass); + if (!pIImageStack) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pRowCount = pIImageStack->GetRowCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("RowCount", *pRowCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_imagestack_setrowcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nRowCount) +{ + IBase* pIBaseClass = (IBase *)pImageStack; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImageStack, "ImageStack", "SetRowCount"); + pJournalEntry->addUInt32Parameter("RowCount", nRowCount); + } + IImageStack* pIImageStack = dynamic_cast(pIBaseClass); + if (!pIImageStack) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIImageStack->SetRowCount(nRowCount); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_imagestack_getcolumncount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pColumnCount) +{ + IBase* pIBaseClass = (IBase *)pImageStack; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImageStack, "ImageStack", "GetColumnCount"); + } + if (pColumnCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IImageStack* pIImageStack = dynamic_cast(pIBaseClass); + if (!pIImageStack) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pColumnCount = pIImageStack->GetColumnCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("ColumnCount", *pColumnCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_imagestack_setcolumncount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nColumnCount) +{ + IBase* pIBaseClass = (IBase *)pImageStack; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImageStack, "ImageStack", "SetColumnCount"); + pJournalEntry->addUInt32Parameter("ColumnCount", nColumnCount); + } + IImageStack* pIImageStack = dynamic_cast(pIBaseClass); + if (!pIImageStack) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIImageStack->SetColumnCount(nColumnCount); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_imagestack_getsheetcount(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 * pSheetCount) +{ + IBase* pIBaseClass = (IBase *)pImageStack; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImageStack, "ImageStack", "GetSheetCount"); + } + if (pSheetCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IImageStack* pIImageStack = dynamic_cast(pIBaseClass); + if (!pIImageStack) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pSheetCount = pIImageStack->GetSheetCount(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt32Result("SheetCount", *pSheetCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_imagestack_getsheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment * pSheet) +{ + IBase* pIBaseClass = (IBase *)pImageStack; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImageStack, "ImageStack", "GetSheet"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + } + if (pSheet == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseSheet(nullptr); + IImageStack* pIImageStack = dynamic_cast(pIBaseClass); + if (!pIImageStack) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseSheet = pIImageStack->GetSheet(nIndex); + + *pSheet = (IBase*)(pBaseSheet); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Sheet", *pSheet); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_imagestack_setsheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, Lib3MF_Attachment pSheet) +{ + IBase* pIBaseClass = (IBase *)pImageStack; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImageStack, "ImageStack", "SetSheet"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + pJournalEntry->addHandleParameter("Sheet", pSheet); + } + IBase* pIBaseClassSheet = (IBase *)pSheet; + IAttachment* pISheet = dynamic_cast(pIBaseClassSheet); + if (!pISheet) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IImageStack* pIImageStack = dynamic_cast(pIBaseClass); + if (!pIImageStack) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIImageStack->SetSheet(nIndex, pISheet); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_imagestack_createemptysheet(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_Attachment * pSheet) +{ + IBase* pIBaseClass = (IBase *)pImageStack; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImageStack, "ImageStack", "CreateEmptySheet"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + pJournalEntry->addStringParameter("Path", pPath); + } + if (pPath == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pSheet == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sPath(pPath); + IBase* pBaseSheet(nullptr); + IImageStack* pIImageStack = dynamic_cast(pIBaseClass); + if (!pIImageStack) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseSheet = pIImageStack->CreateEmptySheet(nIndex, sPath); + + *pSheet = (IBase*)(pBaseSheet); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Sheet", *pSheet); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_imagestack_createsheetfrombuffer(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, Lib3MF_uint64 nDataBufferSize, const Lib3MF_uint8 * pDataBuffer, Lib3MF_Attachment * pSheet) +{ + IBase* pIBaseClass = (IBase *)pImageStack; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImageStack, "ImageStack", "CreateSheetFromBuffer"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + pJournalEntry->addStringParameter("Path", pPath); + } + if (pPath == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if ( (!pDataBuffer) && (nDataBufferSize>0)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pSheet == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sPath(pPath); + IBase* pBaseSheet(nullptr); + IImageStack* pIImageStack = dynamic_cast(pIBaseClass); + if (!pIImageStack) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseSheet = pIImageStack->CreateSheetFromBuffer(nIndex, sPath, nDataBufferSize, pDataBuffer); + + *pSheet = (IBase*)(pBaseSheet); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Sheet", *pSheet); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_imagestack_createsheetfromfile(Lib3MF_ImageStack pImageStack, Lib3MF_uint32 nIndex, const char * pPath, const char * pFileName, Lib3MF_Attachment * pSheet) +{ + IBase* pIBaseClass = (IBase *)pImageStack; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImageStack, "ImageStack", "CreateSheetFromFile"); + pJournalEntry->addUInt32Parameter("Index", nIndex); + pJournalEntry->addStringParameter("Path", pPath); + pJournalEntry->addStringParameter("FileName", pFileName); + } + if (pPath == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pFileName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pSheet == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sPath(pPath); + std::string sFileName(pFileName); + IBase* pBaseSheet(nullptr); + IImageStack* pIImageStack = dynamic_cast(pIBaseClass); + if (!pIImageStack) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseSheet = pIImageStack->CreateSheetFromFile(nIndex, sPath, sFileName); + + *pSheet = (IBase*)(pBaseSheet); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Sheet", *pSheet); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for Attachment +**************************************************************************************************************************/ +Lib3MFResult lib3mf_attachment_getpath(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer) +{ + IBase* pIBaseClass = (IBase *)pAttachment; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "GetPath"); + } + if ( (!pPathBuffer) && !(pPathNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sPath(""); + IAttachment* pIAttachment = dynamic_cast(pIBaseClass); + if (!pIAttachment) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pPathBuffer == nullptr); + if (isCacheCall) { + sPath = pIAttachment->GetPath(); + + pIAttachment->_setCache (new ParameterCache_1 (sPath)); + } + else { + auto cache = dynamic_cast*> (pIAttachment->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sPath); + pIAttachment->_setCache (nullptr); + } + + if (pPathNeededChars) + *pPathNeededChars = (Lib3MF_uint32) (sPath.size()+1); + if (pPathBuffer) { + if (sPath.size() >= nPathBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iPath = 0; iPath < sPath.size(); iPath++) + pPathBuffer[iPath] = sPath[iPath]; + pPathBuffer[sPath.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("Path", sPath.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_attachment_setpath(Lib3MF_Attachment pAttachment, const char * pPath) +{ + IBase* pIBaseClass = (IBase *)pAttachment; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "SetPath"); + pJournalEntry->addStringParameter("Path", pPath); + } + if (pPath == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sPath(pPath); + IAttachment* pIAttachment = dynamic_cast(pIBaseClass); + if (!pIAttachment) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIAttachment->SetPath(sPath); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_attachment_packagepart(Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart) +{ + IBase* pIBaseClass = (IBase *)pAttachment; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "PackagePart"); + } + if (pPackagePart == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBasePackagePart(nullptr); + IAttachment* pIAttachment = dynamic_cast(pIBaseClass); + if (!pIAttachment) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBasePackagePart = pIAttachment->PackagePart(); + + *pPackagePart = (IBase*)(pBasePackagePart); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("PackagePart", *pPackagePart); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_attachment_getrelationshiptype(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer) +{ + IBase* pIBaseClass = (IBase *)pAttachment; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "GetRelationShipType"); + } + if ( (!pPathBuffer) && !(pPathNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sPath(""); + IAttachment* pIAttachment = dynamic_cast(pIBaseClass); + if (!pIAttachment) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pPathBuffer == nullptr); + if (isCacheCall) { + sPath = pIAttachment->GetRelationShipType(); + + pIAttachment->_setCache (new ParameterCache_1 (sPath)); + } + else { + auto cache = dynamic_cast*> (pIAttachment->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sPath); + pIAttachment->_setCache (nullptr); + } + + if (pPathNeededChars) + *pPathNeededChars = (Lib3MF_uint32) (sPath.size()+1); + if (pPathBuffer) { + if (sPath.size() >= nPathBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iPath = 0; iPath < sPath.size(); iPath++) + pPathBuffer[iPath] = sPath[iPath]; + pPathBuffer[sPath.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("Path", sPath.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_attachment_setrelationshiptype(Lib3MF_Attachment pAttachment, const char * pPath) +{ + IBase* pIBaseClass = (IBase *)pAttachment; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "SetRelationShipType"); + pJournalEntry->addStringParameter("Path", pPath); + } + if (pPath == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sPath(pPath); + IAttachment* pIAttachment = dynamic_cast(pIBaseClass); + if (!pIAttachment) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIAttachment->SetRelationShipType(sPath); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_attachment_writetofile(Lib3MF_Attachment pAttachment, const char * pFileName) +{ + IBase* pIBaseClass = (IBase *)pAttachment; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "WriteToFile"); + pJournalEntry->addStringParameter("FileName", pFileName); + } + if (pFileName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sFileName(pFileName); + IAttachment* pIAttachment = dynamic_cast(pIBaseClass); + if (!pIAttachment) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIAttachment->WriteToFile(sFileName); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_attachment_readfromfile(Lib3MF_Attachment pAttachment, const char * pFileName) +{ + IBase* pIBaseClass = (IBase *)pAttachment; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "ReadFromFile"); + pJournalEntry->addStringParameter("FileName", pFileName); + } + if (pFileName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sFileName(pFileName); + IAttachment* pIAttachment = dynamic_cast(pIBaseClass); + if (!pIAttachment) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIAttachment->ReadFromFile(sFileName); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_attachment_readfromcallback(Lib3MF_Attachment pAttachment, Lib3MFReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MFSeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData) +{ + IBase* pIBaseClass = (IBase *)pAttachment; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "ReadFromCallback"); + pJournalEntry->addUInt64Parameter("StreamSize", nStreamSize); + pJournalEntry->addPointerParameter("UserData", pUserData); + } + IAttachment* pIAttachment = dynamic_cast(pIBaseClass); + if (!pIAttachment) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIAttachment->ReadFromCallback(pTheReadCallback, nStreamSize, pTheSeekCallback, pUserData); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_attachment_getstreamsize(Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize) +{ + IBase* pIBaseClass = (IBase *)pAttachment; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "GetStreamSize"); + } + if (pStreamSize == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IAttachment* pIAttachment = dynamic_cast(pIBaseClass); + if (!pIAttachment) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pStreamSize = pIAttachment->GetStreamSize(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt64Result("StreamSize", *pStreamSize); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_attachment_writetobuffer(Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer) +{ + IBase* pIBaseClass = (IBase *)pAttachment; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "WriteToBuffer"); + } + if ((!pBufferBuffer) && !(pBufferNeededCount)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IAttachment* pIAttachment = dynamic_cast(pIBaseClass); + if (!pIAttachment) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIAttachment->WriteToBuffer(nBufferBufferSize, pBufferNeededCount, pBufferBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_attachment_readfrombuffer(Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer) +{ + IBase* pIBaseClass = (IBase *)pAttachment; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "ReadFromBuffer"); + } + if ( (!pBufferBuffer) && (nBufferBufferSize>0)) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IAttachment* pIAttachment = dynamic_cast(pIBaseClass); + if (!pIAttachment) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIAttachment->ReadFromBuffer(nBufferBufferSize, pBufferBuffer); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for Texture2D +**************************************************************************************************************************/ +Lib3MFResult lib3mf_texture2d_getattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment) +{ + IBase* pIBaseClass = (IBase *)pTexture2D; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "GetAttachment"); + } + if (pAttachment == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseAttachment(nullptr); + ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); + if (!pITexture2D) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseAttachment = pITexture2D->GetAttachment(); + + *pAttachment = (IBase*)(pBaseAttachment); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Attachment", *pAttachment); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_texture2d_setattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment) +{ + IBase* pIBaseClass = (IBase *)pTexture2D; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "SetAttachment"); + pJournalEntry->addHandleParameter("Attachment", pAttachment); + } + IBase* pIBaseClassAttachment = (IBase *)pAttachment; + IAttachment* pIAttachment = dynamic_cast(pIBaseClassAttachment); + if (!pIAttachment) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); + if (!pITexture2D) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pITexture2D->SetAttachment(pIAttachment); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_texture2d_getcontenttype(Lib3MF_Texture2D pTexture2D, eLib3MFTextureType * pContentType) +{ + IBase* pIBaseClass = (IBase *)pTexture2D; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "GetContentType"); + } + if (pContentType == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); + if (!pITexture2D) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pContentType = pITexture2D->GetContentType(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addEnumResult("ContentType", "TextureType", (Lib3MF_int32)(*pContentType)); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_texture2d_setcontenttype(Lib3MF_Texture2D pTexture2D, eLib3MFTextureType eContentType) +{ + IBase* pIBaseClass = (IBase *)pTexture2D; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "SetContentType"); + pJournalEntry->addEnumParameter("ContentType", "TextureType", (Lib3MF_int32)(eContentType)); + } + ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); + if (!pITexture2D) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pITexture2D->SetContentType(eContentType); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_texture2d_gettilestyleuv(Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV) +{ + IBase* pIBaseClass = (IBase *)pTexture2D; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "GetTileStyleUV"); + } + if (!pTileStyleU) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (!pTileStyleV) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); + if (!pITexture2D) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pITexture2D->GetTileStyleUV(*pTileStyleU, *pTileStyleV); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addEnumResult("TileStyleU", "TextureTileStyle", (Lib3MF_int32)(*pTileStyleU)); + pJournalEntry->addEnumResult("TileStyleV", "TextureTileStyle", (Lib3MF_int32)(*pTileStyleV)); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_texture2d_settilestyleuv(Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV) +{ + IBase* pIBaseClass = (IBase *)pTexture2D; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "SetTileStyleUV"); + pJournalEntry->addEnumParameter("TileStyleU", "TextureTileStyle", (Lib3MF_int32)(eTileStyleU)); + pJournalEntry->addEnumParameter("TileStyleV", "TextureTileStyle", (Lib3MF_int32)(eTileStyleV)); + } + ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); + if (!pITexture2D) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pITexture2D->SetTileStyleUV(eTileStyleU, eTileStyleV); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_texture2d_getfilter(Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter * pFilter) +{ + IBase* pIBaseClass = (IBase *)pTexture2D; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "GetFilter"); + } + if (pFilter == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); + if (!pITexture2D) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pFilter = pITexture2D->GetFilter(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addEnumResult("Filter", "TextureFilter", (Lib3MF_int32)(*pFilter)); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_texture2d_setfilter(Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter eFilter) +{ + IBase* pIBaseClass = (IBase *)pTexture2D; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "SetFilter"); + pJournalEntry->addEnumParameter("Filter", "TextureFilter", (Lib3MF_int32)(eFilter)); + } + ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); + if (!pITexture2D) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pITexture2D->SetFilter(eFilter); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for ImplicitPort +**************************************************************************************************************************/ +Lib3MFResult lib3mf_implicitport_getidentifier(Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer) +{ + IBase* pIBaseClass = (IBase *)pImplicitPort; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitPort, "ImplicitPort", "GetIdentifier"); + } + if ( (!pIdentifierBuffer) && !(pIdentifierNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(""); + IImplicitPort* pIImplicitPort = dynamic_cast(pIBaseClass); + if (!pIImplicitPort) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pIdentifierBuffer == nullptr); + if (isCacheCall) { + sIdentifier = pIImplicitPort->GetIdentifier(); + + pIImplicitPort->_setCache (new ParameterCache_1 (sIdentifier)); + } + else { + auto cache = dynamic_cast*> (pIImplicitPort->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sIdentifier); + pIImplicitPort->_setCache (nullptr); + } + + if (pIdentifierNeededChars) + *pIdentifierNeededChars = (Lib3MF_uint32) (sIdentifier.size()+1); + if (pIdentifierBuffer) { + if (sIdentifier.size() >= nIdentifierBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iIdentifier = 0; iIdentifier < sIdentifier.size(); iIdentifier++) + pIdentifierBuffer[iIdentifier] = sIdentifier[iIdentifier]; + pIdentifierBuffer[sIdentifier.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("Identifier", sIdentifier.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitport_setidentifier(Lib3MF_ImplicitPort pImplicitPort, const char * pIdentifier) +{ + IBase* pIBaseClass = (IBase *)pImplicitPort; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitPort, "ImplicitPort", "SetIdentifier"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + } + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + IImplicitPort* pIImplicitPort = dynamic_cast(pIBaseClass); + if (!pIImplicitPort) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIImplicitPort->SetIdentifier(sIdentifier); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitport_getdisplayname(Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer) +{ + IBase* pIBaseClass = (IBase *)pImplicitPort; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitPort, "ImplicitPort", "GetDisplayName"); + } + if ( (!pDisplayNameBuffer) && !(pDisplayNameNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sDisplayName(""); + IImplicitPort* pIImplicitPort = dynamic_cast(pIBaseClass); + if (!pIImplicitPort) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pDisplayNameBuffer == nullptr); + if (isCacheCall) { + sDisplayName = pIImplicitPort->GetDisplayName(); + + pIImplicitPort->_setCache (new ParameterCache_1 (sDisplayName)); + } + else { + auto cache = dynamic_cast*> (pIImplicitPort->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sDisplayName); + pIImplicitPort->_setCache (nullptr); + } + + if (pDisplayNameNeededChars) + *pDisplayNameNeededChars = (Lib3MF_uint32) (sDisplayName.size()+1); + if (pDisplayNameBuffer) { + if (sDisplayName.size() >= nDisplayNameBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iDisplayName = 0; iDisplayName < sDisplayName.size(); iDisplayName++) + pDisplayNameBuffer[iDisplayName] = sDisplayName[iDisplayName]; + pDisplayNameBuffer[sDisplayName.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("DisplayName", sDisplayName.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitport_setdisplayname(Lib3MF_ImplicitPort pImplicitPort, const char * pDisplayName) +{ + IBase* pIBaseClass = (IBase *)pImplicitPort; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitPort, "ImplicitPort", "SetDisplayName"); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + } + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sDisplayName(pDisplayName); + IImplicitPort* pIImplicitPort = dynamic_cast(pIBaseClass); + if (!pIImplicitPort) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIImplicitPort->SetDisplayName(sDisplayName); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitport_settype(Lib3MF_ImplicitPort pImplicitPort, eLib3MFImplicitPortType eImplicitPortType) +{ + IBase* pIBaseClass = (IBase *)pImplicitPort; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitPort, "ImplicitPort", "SetType"); + pJournalEntry->addEnumParameter("ImplicitPortType", "ImplicitPortType", (Lib3MF_int32)(eImplicitPortType)); + } + IImplicitPort* pIImplicitPort = dynamic_cast(pIBaseClass); + if (!pIImplicitPort) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIImplicitPort->SetType(eImplicitPortType); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitport_gettype(Lib3MF_ImplicitPort pImplicitPort, eLib3MFImplicitPortType * pImplicitPortType) +{ + IBase* pIBaseClass = (IBase *)pImplicitPort; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitPort, "ImplicitPort", "GetType"); + } + if (pImplicitPortType == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IImplicitPort* pIImplicitPort = dynamic_cast(pIBaseClass); + if (!pIImplicitPort) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pImplicitPortType = pIImplicitPort->GetType(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addEnumResult("ImplicitPortType", "ImplicitPortType", (Lib3MF_int32)(*pImplicitPortType)); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitport_getreference(Lib3MF_ImplicitPort pImplicitPort, const Lib3MF_uint32 nReferenceBufferSize, Lib3MF_uint32* pReferenceNeededChars, char * pReferenceBuffer) +{ + IBase* pIBaseClass = (IBase *)pImplicitPort; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitPort, "ImplicitPort", "GetReference"); + } + if ( (!pReferenceBuffer) && !(pReferenceNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sReference(""); + IImplicitPort* pIImplicitPort = dynamic_cast(pIBaseClass); + if (!pIImplicitPort) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pReferenceBuffer == nullptr); + if (isCacheCall) { + sReference = pIImplicitPort->GetReference(); + + pIImplicitPort->_setCache (new ParameterCache_1 (sReference)); + } + else { + auto cache = dynamic_cast*> (pIImplicitPort->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sReference); + pIImplicitPort->_setCache (nullptr); + } + + if (pReferenceNeededChars) + *pReferenceNeededChars = (Lib3MF_uint32) (sReference.size()+1); + if (pReferenceBuffer) { + if (sReference.size() >= nReferenceBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iReference = 0; iReference < sReference.size(); iReference++) + pReferenceBuffer[iReference] = sReference[iReference]; + pReferenceBuffer[sReference.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("Reference", sReference.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitport_setreference(Lib3MF_ImplicitPort pImplicitPort, const char * pReference) +{ + IBase* pIBaseClass = (IBase *)pImplicitPort; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitPort, "ImplicitPort", "SetReference"); + pJournalEntry->addStringParameter("Reference", pReference); + } + if (pReference == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sReference(pReference); + IImplicitPort* pIImplicitPort = dynamic_cast(pIBaseClass); + if (!pIImplicitPort) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIImplicitPort->SetReference(sReference); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for Iterator +**************************************************************************************************************************/ +Lib3MFResult lib3mf_iterator_movenext(Lib3MF_Iterator pIterator, bool * pHasNext) +{ + IBase* pIBaseClass = (IBase *)pIterator; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pIterator, "Iterator", "MoveNext"); + } + if (pHasNext == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IIterator* pIIterator = dynamic_cast(pIBaseClass); + if (!pIIterator) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pHasNext = pIIterator->MoveNext(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addBooleanResult("HasNext", *pHasNext); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_iterator_moveprevious(Lib3MF_Iterator pIterator, bool * pHasPrevious) +{ + IBase* pIBaseClass = (IBase *)pIterator; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pIterator, "Iterator", "MovePrevious"); + } + if (pHasPrevious == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IIterator* pIIterator = dynamic_cast(pIBaseClass); + if (!pIIterator) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pHasPrevious = pIIterator->MovePrevious(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addBooleanResult("HasPrevious", *pHasPrevious); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_iterator_count(Lib3MF_Iterator pIterator, Lib3MF_uint64 * pCount) +{ + IBase* pIBaseClass = (IBase *)pIterator; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pIterator, "Iterator", "Count"); + } + if (pCount == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IIterator* pIIterator = dynamic_cast(pIBaseClass); + if (!pIIterator) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pCount = pIIterator->Count(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addUInt64Result("Count", *pCount); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for ImplicitPortIterator +**************************************************************************************************************************/ +Lib3MFResult lib3mf_implicitportiterator_getcurrent(Lib3MF_ImplicitPortIterator pImplicitPortIterator, Lib3MF_ImplicitPort * pPort) +{ + IBase* pIBaseClass = (IBase *)pImplicitPortIterator; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitPortIterator, "ImplicitPortIterator", "GetCurrent"); + } + if (pPort == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBasePort(nullptr); + IImplicitPortIterator* pIImplicitPortIterator = dynamic_cast(pIBaseClass); + if (!pIImplicitPortIterator) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBasePort = pIImplicitPortIterator->GetCurrent(); + + *pPort = (IBase*)(pBasePort); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Port", *pPort); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for ImplicitNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_implicitnode_getidentifier(Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "GetIdentifier"); + } + if ( (!pIdentifierBuffer) && !(pIdentifierNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(""); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pIdentifierBuffer == nullptr); + if (isCacheCall) { + sIdentifier = pIImplicitNode->GetIdentifier(); + + pIImplicitNode->_setCache (new ParameterCache_1 (sIdentifier)); + } + else { + auto cache = dynamic_cast*> (pIImplicitNode->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sIdentifier); + pIImplicitNode->_setCache (nullptr); + } + + if (pIdentifierNeededChars) + *pIdentifierNeededChars = (Lib3MF_uint32) (sIdentifier.size()+1); + if (pIdentifierBuffer) { + if (sIdentifier.size() >= nIdentifierBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iIdentifier = 0; iIdentifier < sIdentifier.size(); iIdentifier++) + pIdentifierBuffer[iIdentifier] = sIdentifier[iIdentifier]; + pIdentifierBuffer[sIdentifier.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("Identifier", sIdentifier.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitnode_setidentifier(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "SetIdentifier"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + } + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIImplicitNode->SetIdentifier(sIdentifier); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitnode_getdisplayname(Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "GetDisplayName"); + } + if ( (!pDisplayNameBuffer) && !(pDisplayNameNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sDisplayName(""); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pDisplayNameBuffer == nullptr); + if (isCacheCall) { + sDisplayName = pIImplicitNode->GetDisplayName(); + + pIImplicitNode->_setCache (new ParameterCache_1 (sDisplayName)); + } + else { + auto cache = dynamic_cast*> (pIImplicitNode->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sDisplayName); + pIImplicitNode->_setCache (nullptr); + } + + if (pDisplayNameNeededChars) + *pDisplayNameNeededChars = (Lib3MF_uint32) (sDisplayName.size()+1); + if (pDisplayNameBuffer) { + if (sDisplayName.size() >= nDisplayNameBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iDisplayName = 0; iDisplayName < sDisplayName.size(); iDisplayName++) + pDisplayNameBuffer[iDisplayName] = sDisplayName[iDisplayName]; + pDisplayNameBuffer[sDisplayName.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("DisplayName", sDisplayName.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitnode_setdisplayname(Lib3MF_ImplicitNode pImplicitNode, const char * pDisplayName) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "SetDisplayName"); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + } + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sDisplayName(pDisplayName); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIImplicitNode->SetDisplayName(sDisplayName); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitnode_gettag(Lib3MF_ImplicitNode pImplicitNode, const Lib3MF_uint32 nTagBufferSize, Lib3MF_uint32* pTagNeededChars, char * pTagBuffer) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "GetTag"); + } + if ( (!pTagBuffer) && !(pTagNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sTag(""); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pTagBuffer == nullptr); + if (isCacheCall) { + sTag = pIImplicitNode->GetTag(); + + pIImplicitNode->_setCache (new ParameterCache_1 (sTag)); + } + else { + auto cache = dynamic_cast*> (pIImplicitNode->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sTag); + pIImplicitNode->_setCache (nullptr); + } + + if (pTagNeededChars) + *pTagNeededChars = (Lib3MF_uint32) (sTag.size()+1); + if (pTagBuffer) { + if (sTag.size() >= nTagBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iTag = 0; iTag < sTag.size(); iTag++) + pTagBuffer[iTag] = sTag[iTag]; + pTagBuffer[sTag.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("Tag", sTag.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitnode_settag(Lib3MF_ImplicitNode pImplicitNode, const char * pTag) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "SetTag"); + pJournalEntry->addStringParameter("Tag", pTag); + } + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sTag(pTag); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIImplicitNode->SetTag(sTag); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitnode_getnodetype(Lib3MF_ImplicitNode pImplicitNode, eLib3MFImplicitNodeType * pType) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "GetNodeType"); + } + if (pType == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pType = pIImplicitNode->GetNodeType(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addEnumResult("Type", "ImplicitNodeType", (Lib3MF_int32)(*pType)); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitnode_addinput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "AddInput"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + } + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pPort == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + IBase* pBasePort(nullptr); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBasePort = pIImplicitNode->AddInput(sIdentifier, sDisplayName); + + *pPort = (IBase*)(pBasePort); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Port", *pPort); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitnode_getinputs(Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "GetInputs"); + } + if (pIterator == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseIterator(nullptr); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseIterator = pIImplicitNode->GetInputs(); + + *pIterator = (IBase*)(pBaseIterator); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Iterator", *pIterator); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitnode_addoutput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, const char * pDisplayName, Lib3MF_ImplicitPort * pPort) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "AddOutput"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + } + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pPort == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + IBase* pBasePort(nullptr); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBasePort = pIImplicitNode->AddOutput(sIdentifier, sDisplayName); + + *pPort = (IBase*)(pBasePort); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Port", *pPort); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitnode_getoutputs(Lib3MF_ImplicitNode pImplicitNode, Lib3MF_ImplicitPortIterator * pIterator) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "GetOutputs"); + } + if (pIterator == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseIterator(nullptr); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseIterator = pIImplicitNode->GetOutputs(); + + *pIterator = (IBase*)(pBaseIterator); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Iterator", *pIterator); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitnode_findinput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pInput) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "FindInput"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + } + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pInput == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + IBase* pBaseInput(nullptr); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseInput = pIImplicitNode->FindInput(sIdentifier); + + *pInput = (IBase*)(pBaseInput); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Input", *pInput); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitnode_findoutput(Lib3MF_ImplicitNode pImplicitNode, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "FindOutput"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + } + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pOutput == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + IBase* pBaseOutput(nullptr); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseOutput = pIImplicitNode->FindOutput(sIdentifier); + + *pOutput = (IBase*)(pBaseOutput); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Output", *pOutput); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_implicitnode_aretypesvalid(Lib3MF_ImplicitNode pImplicitNode, bool * pValid) +{ + IBase* pIBaseClass = (IBase *)pImplicitNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitNode, "ImplicitNode", "AreTypesValid"); + } + if (pValid == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IImplicitNode* pIImplicitNode = dynamic_cast(pIBaseClass); + if (!pIImplicitNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pValid = pIImplicitNode->AreTypesValid(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addBooleanResult("Valid", *pValid); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for OneInputNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_oneinputnode_getinputa(Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pInput) +{ + IBase* pIBaseClass = (IBase *)pOneInputNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pOneInputNode, "OneInputNode", "GetInputA"); + } + if (pInput == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseInput(nullptr); + IOneInputNode* pIOneInputNode = dynamic_cast(pIBaseClass); + if (!pIOneInputNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseInput = pIOneInputNode->GetInputA(); + + *pInput = (IBase*)(pBaseInput); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Input", *pInput); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_oneinputnode_getoutputresult(Lib3MF_OneInputNode pOneInputNode, Lib3MF_ImplicitPort * pResult) +{ + IBase* pIBaseClass = (IBase *)pOneInputNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pOneInputNode, "OneInputNode", "GetOutputResult"); + } + if (pResult == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseResult(nullptr); + IOneInputNode* pIOneInputNode = dynamic_cast(pIBaseClass); + if (!pIOneInputNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseResult = pIOneInputNode->GetOutputResult(); + + *pResult = (IBase*)(pBaseResult); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Result", *pResult); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for SinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for CosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for TanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for ArcSinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for ArcCosNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for ArcTanNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for SinhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for CoshNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for TanhNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for RoundNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for CeilNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for FloorNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for SignNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for FractNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for AbsNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for ExpNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for LogNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for Log2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for Log10Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for LengthNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for TransposeNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for InverseNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for SqrtNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for ResourceIdNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_resourceidnode_setresource(Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource pResource) +{ + IBase* pIBaseClass = (IBase *)pResourceIdNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pResourceIdNode, "ResourceIdNode", "SetResource"); + pJournalEntry->addHandleParameter("Resource", pResource); + } + IBase* pIBaseClassResource = (IBase *)pResource; + IResource* pIResource = dynamic_cast(pIBaseClassResource); + if (!pIResource) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IResourceIdNode* pIResourceIdNode = dynamic_cast(pIBaseClass); + if (!pIResourceIdNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIResourceIdNode->SetResource(pIResource); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_resourceidnode_getresource(Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_Resource * pResource) +{ + IBase* pIBaseClass = (IBase *)pResourceIdNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pResourceIdNode, "ResourceIdNode", "GetResource"); + } + if (pResource == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseResource(nullptr); + IResourceIdNode* pIResourceIdNode = dynamic_cast(pIBaseClass); + if (!pIResourceIdNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseResource = pIResourceIdNode->GetResource(); + + *pResource = (IBase*)(pBaseResource); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Resource", *pResource); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_resourceidnode_getoutputvalue(Lib3MF_ResourceIdNode pResourceIdNode, Lib3MF_ImplicitPort * pValue) +{ + IBase* pIBaseClass = (IBase *)pResourceIdNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pResourceIdNode, "ResourceIdNode", "GetOutputValue"); + } + if (pValue == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseValue(nullptr); + IResourceIdNode* pIResourceIdNode = dynamic_cast(pIBaseClass); + if (!pIResourceIdNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseValue = pIResourceIdNode->GetOutputValue(); + + *pValue = (IBase*)(pBaseValue); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Value", *pValue); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for TwoInputNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_twoinputnode_getinputb(Lib3MF_TwoInputNode pTwoInputNode, Lib3MF_ImplicitPort * pB) +{ + IBase* pIBaseClass = (IBase *)pTwoInputNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pTwoInputNode, "TwoInputNode", "GetInputB"); + } + if (pB == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseB(nullptr); + ITwoInputNode* pITwoInputNode = dynamic_cast(pIBaseClass); + if (!pITwoInputNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseB = pITwoInputNode->GetInputB(); + + *pB = (IBase*)(pBaseB); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("B", *pB); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for AdditionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for SubtractionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for MultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for DivisionNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for DotNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for CrossNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for ArcTan2Node +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for MatVecMultiplicationNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for MinNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for MaxNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for FmodNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for ModNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for PowNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for SelectNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_selectnode_getinputb(Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pB) +{ + IBase* pIBaseClass = (IBase *)pSelectNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pSelectNode, "SelectNode", "GetInputB"); + } + if (pB == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseB(nullptr); + ISelectNode* pISelectNode = dynamic_cast(pIBaseClass); + if (!pISelectNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseB = pISelectNode->GetInputB(); + + *pB = (IBase*)(pBaseB); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("B", *pB); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_selectnode_getinputc(Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pC) +{ + IBase* pIBaseClass = (IBase *)pSelectNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pSelectNode, "SelectNode", "GetInputC"); + } + if (pC == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseC(nullptr); + ISelectNode* pISelectNode = dynamic_cast(pIBaseClass); + if (!pISelectNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseC = pISelectNode->GetInputC(); + + *pC = (IBase*)(pBaseC); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("C", *pC); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_selectnode_getinputd(Lib3MF_SelectNode pSelectNode, Lib3MF_ImplicitPort * pD) +{ + IBase* pIBaseClass = (IBase *)pSelectNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pSelectNode, "SelectNode", "GetInputD"); + } + if (pD == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseD(nullptr); + ISelectNode* pISelectNode = dynamic_cast(pIBaseClass); + if (!pISelectNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseD = pISelectNode->GetInputD(); + + *pD = (IBase*)(pBaseD); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("D", *pD); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for ClampNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_clampnode_getinputmin(Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMin) +{ + IBase* pIBaseClass = (IBase *)pClampNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pClampNode, "ClampNode", "GetInputMin"); + } + if (pMin == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseMin(nullptr); + IClampNode* pIClampNode = dynamic_cast(pIBaseClass); + if (!pIClampNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseMin = pIClampNode->GetInputMin(); + + *pMin = (IBase*)(pBaseMin); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Min", *pMin); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_clampnode_getinputmax(Lib3MF_ClampNode pClampNode, Lib3MF_ImplicitPort * pMax) +{ + IBase* pIBaseClass = (IBase *)pClampNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pClampNode, "ClampNode", "GetInputMax"); + } + if (pMax == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseMax(nullptr); + IClampNode* pIClampNode = dynamic_cast(pIBaseClass); + if (!pIClampNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseMax = pIClampNode->GetInputMax(); + + *pMax = (IBase*)(pBaseMax); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Max", *pMax); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for ComposeVectorNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_composevectornode_getinputx(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pX) +{ + IBase* pIBaseClass = (IBase *)pComposeVectorNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeVectorNode, "ComposeVectorNode", "GetInputX"); + } + if (pX == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseX(nullptr); + IComposeVectorNode* pIComposeVectorNode = dynamic_cast(pIBaseClass); + if (!pIComposeVectorNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseX = pIComposeVectorNode->GetInputX(); + + *pX = (IBase*)(pBaseX); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("X", *pX); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composevectornode_getinputy(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pY) +{ + IBase* pIBaseClass = (IBase *)pComposeVectorNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeVectorNode, "ComposeVectorNode", "GetInputY"); + } + if (pY == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseY(nullptr); + IComposeVectorNode* pIComposeVectorNode = dynamic_cast(pIBaseClass); + if (!pIComposeVectorNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseY = pIComposeVectorNode->GetInputY(); + + *pY = (IBase*)(pBaseY); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Y", *pY); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composevectornode_getinputz(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pZ) +{ + IBase* pIBaseClass = (IBase *)pComposeVectorNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeVectorNode, "ComposeVectorNode", "GetInputZ"); + } + if (pZ == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseZ(nullptr); + IComposeVectorNode* pIComposeVectorNode = dynamic_cast(pIBaseClass); + if (!pIComposeVectorNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseZ = pIComposeVectorNode->GetInputZ(); + + *pZ = (IBase*)(pBaseZ); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Z", *pZ); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composevectornode_getoutputresult(Lib3MF_ComposeVectorNode pComposeVectorNode, Lib3MF_ImplicitPort * pResult) +{ + IBase* pIBaseClass = (IBase *)pComposeVectorNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeVectorNode, "ComposeVectorNode", "GetOutputResult"); + } + if (pResult == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseResult(nullptr); + IComposeVectorNode* pIComposeVectorNode = dynamic_cast(pIBaseClass); + if (!pIComposeVectorNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseResult = pIComposeVectorNode->GetOutputResult(); + + *pResult = (IBase*)(pBaseResult); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Result", *pResult); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for VectorFromScalarNode +**************************************************************************************************************************/ + +/************************************************************************************************************************* + Class implementation for DecomposeVectorNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_decomposevectornode_getinputa(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pA) +{ + IBase* pIBaseClass = (IBase *)pDecomposeVectorNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pDecomposeVectorNode, "DecomposeVectorNode", "GetInputA"); + } + if (pA == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseA(nullptr); + IDecomposeVectorNode* pIDecomposeVectorNode = dynamic_cast(pIBaseClass); + if (!pIDecomposeVectorNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseA = pIDecomposeVectorNode->GetInputA(); + + *pA = (IBase*)(pBaseA); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("A", *pA); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_decomposevectornode_getoutputx(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pX) +{ + IBase* pIBaseClass = (IBase *)pDecomposeVectorNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pDecomposeVectorNode, "DecomposeVectorNode", "GetOutputX"); + } + if (pX == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseX(nullptr); + IDecomposeVectorNode* pIDecomposeVectorNode = dynamic_cast(pIBaseClass); + if (!pIDecomposeVectorNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseX = pIDecomposeVectorNode->GetOutputX(); + + *pX = (IBase*)(pBaseX); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("X", *pX); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_decomposevectornode_getoutputy(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pY) +{ + IBase* pIBaseClass = (IBase *)pDecomposeVectorNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pDecomposeVectorNode, "DecomposeVectorNode", "GetOutputY"); + } + if (pY == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseY(nullptr); + IDecomposeVectorNode* pIDecomposeVectorNode = dynamic_cast(pIBaseClass); + if (!pIDecomposeVectorNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseY = pIDecomposeVectorNode->GetOutputY(); + + *pY = (IBase*)(pBaseY); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Y", *pY); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_decomposevectornode_getoutputz(Lib3MF_DecomposeVectorNode pDecomposeVectorNode, Lib3MF_ImplicitPort * pZ) +{ + IBase* pIBaseClass = (IBase *)pDecomposeVectorNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pDecomposeVectorNode, "DecomposeVectorNode", "GetOutputZ"); + } + if (pZ == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseZ(nullptr); + IDecomposeVectorNode* pIDecomposeVectorNode = dynamic_cast(pIBaseClass); + if (!pIDecomposeVectorNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseZ = pIDecomposeVectorNode->GetOutputZ(); + + *pZ = (IBase*)(pBaseZ); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Z", *pZ); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for ComposeMatrixNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_composematrixnode_getinputm00(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM00) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM00"); + } + if (pM00 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM00(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM00 = pIComposeMatrixNode->GetInputM00(); + + *pM00 = (IBase*)(pBaseM00); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M00", *pM00); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm01(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM01) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM01"); + } + if (pM01 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM01(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM01 = pIComposeMatrixNode->GetInputM01(); + + *pM01 = (IBase*)(pBaseM01); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M01", *pM01); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm02(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM02) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM02"); + } + if (pM02 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM02(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM02 = pIComposeMatrixNode->GetInputM02(); + + *pM02 = (IBase*)(pBaseM02); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M02", *pM02); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm03(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM03) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM03"); + } + if (pM03 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM03(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM03 = pIComposeMatrixNode->GetInputM03(); + + *pM03 = (IBase*)(pBaseM03); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M03", *pM03); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm10(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM10) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM10"); + } + if (pM10 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM10(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM10 = pIComposeMatrixNode->GetInputM10(); + + *pM10 = (IBase*)(pBaseM10); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M10", *pM10); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm11(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM11) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM11"); + } + if (pM11 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM11(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM11 = pIComposeMatrixNode->GetInputM11(); + + *pM11 = (IBase*)(pBaseM11); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M11", *pM11); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm12(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM12) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM12"); + } + if (pM12 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM12(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM12 = pIComposeMatrixNode->GetInputM12(); + + *pM12 = (IBase*)(pBaseM12); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M12", *pM12); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm13(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM13) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM13"); + } + if (pM13 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM13(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM13 = pIComposeMatrixNode->GetInputM13(); + + *pM13 = (IBase*)(pBaseM13); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M13", *pM13); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm20(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM20) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM20"); + } + if (pM20 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM20(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM20 = pIComposeMatrixNode->GetInputM20(); + + *pM20 = (IBase*)(pBaseM20); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M20", *pM20); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm21(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM21) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM21"); + } + if (pM21 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM21(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM21 = pIComposeMatrixNode->GetInputM21(); + + *pM21 = (IBase*)(pBaseM21); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M21", *pM21); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm22(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM22) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM22"); + } + if (pM22 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM22(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM22 = pIComposeMatrixNode->GetInputM22(); + + *pM22 = (IBase*)(pBaseM22); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M22", *pM22); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm23(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM23) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM23"); + } + if (pM23 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM23(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM23 = pIComposeMatrixNode->GetInputM23(); + + *pM23 = (IBase*)(pBaseM23); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M23", *pM23); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm30(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM30) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM30"); + } + if (pM30 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM30(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM30 = pIComposeMatrixNode->GetInputM30(); + + *pM30 = (IBase*)(pBaseM30); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M30", *pM30); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm31(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM31) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM31"); + } + if (pM31 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM31(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM31 = pIComposeMatrixNode->GetInputM31(); + + *pM31 = (IBase*)(pBaseM31); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M31", *pM31); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm32(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM32) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM32"); + } + if (pM32 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM32(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM32 = pIComposeMatrixNode->GetInputM32(); + + *pM32 = (IBase*)(pBaseM32); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M32", *pM32); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getinputm33(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pM33) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetInputM33"); + } + if (pM33 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseM33(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseM33 = pIComposeMatrixNode->GetInputM33(); + + *pM33 = (IBase*)(pBaseM33); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("M33", *pM33); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_composematrixnode_getoutputresult(Lib3MF_ComposeMatrixNode pComposeMatrixNode, Lib3MF_ImplicitPort * pResult) +{ + IBase* pIBaseClass = (IBase *)pComposeMatrixNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pComposeMatrixNode, "ComposeMatrixNode", "GetOutputResult"); + } + if (pResult == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseResult(nullptr); + IComposeMatrixNode* pIComposeMatrixNode = dynamic_cast(pIBaseClass); + if (!pIComposeMatrixNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseResult = pIComposeMatrixNode->GetOutputResult(); + + *pResult = (IBase*)(pBaseResult); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Result", *pResult); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for MatrixFromRowsNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_matrixfromrowsnode_getinputa(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow0) +{ + IBase* pIBaseClass = (IBase *)pMatrixFromRowsNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMatrixFromRowsNode, "MatrixFromRowsNode", "GetInputA"); + } + if (pRow0 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseRow0(nullptr); + IMatrixFromRowsNode* pIMatrixFromRowsNode = dynamic_cast(pIBaseClass); + if (!pIMatrixFromRowsNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseRow0 = pIMatrixFromRowsNode->GetInputA(); + + *pRow0 = (IBase*)(pBaseRow0); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Row0", *pRow0); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_matrixfromrowsnode_getinputb(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow1) +{ + IBase* pIBaseClass = (IBase *)pMatrixFromRowsNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMatrixFromRowsNode, "MatrixFromRowsNode", "GetInputB"); + } + if (pRow1 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseRow1(nullptr); + IMatrixFromRowsNode* pIMatrixFromRowsNode = dynamic_cast(pIBaseClass); + if (!pIMatrixFromRowsNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseRow1 = pIMatrixFromRowsNode->GetInputB(); + + *pRow1 = (IBase*)(pBaseRow1); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Row1", *pRow1); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_matrixfromrowsnode_getinputc(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow2) +{ + IBase* pIBaseClass = (IBase *)pMatrixFromRowsNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMatrixFromRowsNode, "MatrixFromRowsNode", "GetInputC"); + } + if (pRow2 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseRow2(nullptr); + IMatrixFromRowsNode* pIMatrixFromRowsNode = dynamic_cast(pIBaseClass); + if (!pIMatrixFromRowsNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseRow2 = pIMatrixFromRowsNode->GetInputC(); + + *pRow2 = (IBase*)(pBaseRow2); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Row2", *pRow2); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_matrixfromrowsnode_getinputd(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pRow3) +{ + IBase* pIBaseClass = (IBase *)pMatrixFromRowsNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMatrixFromRowsNode, "MatrixFromRowsNode", "GetInputD"); + } + if (pRow3 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseRow3(nullptr); + IMatrixFromRowsNode* pIMatrixFromRowsNode = dynamic_cast(pIBaseClass); + if (!pIMatrixFromRowsNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseRow3 = pIMatrixFromRowsNode->GetInputD(); + + *pRow3 = (IBase*)(pBaseRow3); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Row3", *pRow3); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_matrixfromrowsnode_getoutputresult(Lib3MF_MatrixFromRowsNode pMatrixFromRowsNode, Lib3MF_ImplicitPort * pResult) +{ + IBase* pIBaseClass = (IBase *)pMatrixFromRowsNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMatrixFromRowsNode, "MatrixFromRowsNode", "GetOutputResult"); + } + if (pResult == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseResult(nullptr); + IMatrixFromRowsNode* pIMatrixFromRowsNode = dynamic_cast(pIBaseClass); + if (!pIMatrixFromRowsNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseResult = pIMatrixFromRowsNode->GetOutputResult(); + + *pResult = (IBase*)(pBaseResult); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Result", *pResult); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for MatrixFromColumnsNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputa(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn0) +{ + IBase* pIBaseClass = (IBase *)pMatrixFromColumnsNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMatrixFromColumnsNode, "MatrixFromColumnsNode", "GetInputA"); + } + if (pColumn0 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseColumn0(nullptr); + IMatrixFromColumnsNode* pIMatrixFromColumnsNode = dynamic_cast(pIBaseClass); + if (!pIMatrixFromColumnsNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseColumn0 = pIMatrixFromColumnsNode->GetInputA(); + + *pColumn0 = (IBase*)(pBaseColumn0); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Column0", *pColumn0); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputb(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn1) +{ + IBase* pIBaseClass = (IBase *)pMatrixFromColumnsNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMatrixFromColumnsNode, "MatrixFromColumnsNode", "GetInputB"); + } + if (pColumn1 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseColumn1(nullptr); + IMatrixFromColumnsNode* pIMatrixFromColumnsNode = dynamic_cast(pIBaseClass); + if (!pIMatrixFromColumnsNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseColumn1 = pIMatrixFromColumnsNode->GetInputB(); + + *pColumn1 = (IBase*)(pBaseColumn1); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Column1", *pColumn1); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputc(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn2) +{ + IBase* pIBaseClass = (IBase *)pMatrixFromColumnsNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMatrixFromColumnsNode, "MatrixFromColumnsNode", "GetInputC"); + } + if (pColumn2 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseColumn2(nullptr); + IMatrixFromColumnsNode* pIMatrixFromColumnsNode = dynamic_cast(pIBaseClass); + if (!pIMatrixFromColumnsNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseColumn2 = pIMatrixFromColumnsNode->GetInputC(); + + *pColumn2 = (IBase*)(pBaseColumn2); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Column2", *pColumn2); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_matrixfromcolumnsnode_getinputd(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pColumn3) +{ + IBase* pIBaseClass = (IBase *)pMatrixFromColumnsNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMatrixFromColumnsNode, "MatrixFromColumnsNode", "GetInputD"); + } + if (pColumn3 == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseColumn3(nullptr); + IMatrixFromColumnsNode* pIMatrixFromColumnsNode = dynamic_cast(pIBaseClass); + if (!pIMatrixFromColumnsNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseColumn3 = pIMatrixFromColumnsNode->GetInputD(); + + *pColumn3 = (IBase*)(pBaseColumn3); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Column3", *pColumn3); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_matrixfromcolumnsnode_getoutputresult(Lib3MF_MatrixFromColumnsNode pMatrixFromColumnsNode, Lib3MF_ImplicitPort * pResult) +{ + IBase* pIBaseClass = (IBase *)pMatrixFromColumnsNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMatrixFromColumnsNode, "MatrixFromColumnsNode", "GetOutputResult"); + } + if (pResult == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseResult(nullptr); + IMatrixFromColumnsNode* pIMatrixFromColumnsNode = dynamic_cast(pIBaseClass); + if (!pIMatrixFromColumnsNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseResult = pIMatrixFromColumnsNode->GetOutputResult(); + + *pResult = (IBase*)(pBaseResult); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Result", *pResult); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for ConstantNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_constantnode_setconstant(Lib3MF_ConstantNode pConstantNode, Lib3MF_double dValue) +{ + IBase* pIBaseClass = (IBase *)pConstantNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pConstantNode, "ConstantNode", "SetConstant"); + pJournalEntry->addDoubleParameter("Value", dValue); + } + IConstantNode* pIConstantNode = dynamic_cast(pIBaseClass); + if (!pIConstantNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIConstantNode->SetConstant(dValue); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_constantnode_getconstant(Lib3MF_ConstantNode pConstantNode, Lib3MF_double * pValue) +{ + IBase* pIBaseClass = (IBase *)pConstantNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pConstantNode, "ConstantNode", "GetConstant"); + } + if (pValue == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IConstantNode* pIConstantNode = dynamic_cast(pIBaseClass); + if (!pIConstantNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pValue = pIConstantNode->GetConstant(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addDoubleResult("Value", *pValue); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_constantnode_getoutputvalue(Lib3MF_ConstantNode pConstantNode, Lib3MF_ImplicitPort * pValue) +{ + IBase* pIBaseClass = (IBase *)pConstantNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pConstantNode, "ConstantNode", "GetOutputValue"); + } + if (pValue == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseValue(nullptr); + IConstantNode* pIConstantNode = dynamic_cast(pIBaseClass); + if (!pIConstantNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseValue = pIConstantNode->GetOutputValue(); + + *pValue = (IBase*)(pBaseValue); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Value", *pValue); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for ConstVecNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_constvecnode_setvector(Lib3MF_ConstVecNode pConstVecNode, const sLib3MFVector * pValue) +{ + IBase* pIBaseClass = (IBase *)pConstVecNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pConstVecNode, "ConstVecNode", "SetVector"); + } + IConstVecNode* pIConstVecNode = dynamic_cast(pIBaseClass); + if (!pIConstVecNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIConstVecNode->SetVector(*pValue); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_constvecnode_getvector(Lib3MF_ConstVecNode pConstVecNode, sLib3MFVector * pValue) +{ + IBase* pIBaseClass = (IBase *)pConstVecNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pConstVecNode, "ConstVecNode", "GetVector"); + } + if (pValue == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IConstVecNode* pIConstVecNode = dynamic_cast(pIBaseClass); + if (!pIConstVecNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pValue = pIConstVecNode->GetVector(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_constvecnode_getoutputvector(Lib3MF_ConstVecNode pConstVecNode, Lib3MF_ImplicitPort * pVector) +{ + IBase* pIBaseClass = (IBase *)pConstVecNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pConstVecNode, "ConstVecNode", "GetOutputVector"); + } + if (pVector == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseVector(nullptr); + IConstVecNode* pIConstVecNode = dynamic_cast(pIBaseClass); + if (!pIConstVecNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseVector = pIConstVecNode->GetOutputVector(); + + *pVector = (IBase*)(pBaseVector); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Vector", *pVector); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for ConstMatNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_constmatnode_setmatrix(Lib3MF_ConstMatNode pConstMatNode, const sLib3MFMatrix4x4 * pValue) +{ + IBase* pIBaseClass = (IBase *)pConstMatNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pConstMatNode, "ConstMatNode", "SetMatrix"); + } + IConstMatNode* pIConstMatNode = dynamic_cast(pIBaseClass); + if (!pIConstMatNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIConstMatNode->SetMatrix(*pValue); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_constmatnode_getmatrix(Lib3MF_ConstMatNode pConstMatNode, sLib3MFMatrix4x4 * pValue) +{ + IBase* pIBaseClass = (IBase *)pConstMatNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pConstMatNode, "ConstMatNode", "GetMatrix"); + } + if (pValue == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IConstMatNode* pIConstMatNode = dynamic_cast(pIBaseClass); + if (!pIConstMatNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + *pValue = pIConstMatNode->GetMatrix(); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_constmatnode_getoutputmatrix(Lib3MF_ConstMatNode pConstMatNode, Lib3MF_ImplicitPort * pMatrix) +{ + IBase* pIBaseClass = (IBase *)pConstMatNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pConstMatNode, "ConstMatNode", "GetOutputMatrix"); + } + if (pMatrix == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseMatrix(nullptr); + IConstMatNode* pIConstMatNode = dynamic_cast(pIBaseClass); + if (!pIConstMatNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseMatrix = pIConstMatNode->GetOutputMatrix(); + + *pMatrix = (IBase*)(pBaseMatrix); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Matrix", *pMatrix); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for MeshNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_meshnode_getinputmesh(Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pMesh) +{ + IBase* pIBaseClass = (IBase *)pMeshNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMeshNode, "MeshNode", "GetInputMesh"); + } + if (pMesh == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseMesh(nullptr); + IMeshNode* pIMeshNode = dynamic_cast(pIBaseClass); + if (!pIMeshNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseMesh = pIMeshNode->GetInputMesh(); + + *pMesh = (IBase*)(pBaseMesh); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Mesh", *pMesh); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_meshnode_getinputpos(Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pPos) +{ + IBase* pIBaseClass = (IBase *)pMeshNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMeshNode, "MeshNode", "GetInputPos"); + } + if (pPos == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBasePos(nullptr); + IMeshNode* pIMeshNode = dynamic_cast(pIBaseClass); + if (!pIMeshNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBasePos = pIMeshNode->GetInputPos(); + + *pPos = (IBase*)(pBasePos); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Pos", *pPos); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_meshnode_getoutputdistance(Lib3MF_MeshNode pMeshNode, Lib3MF_ImplicitPort * pDistance) +{ + IBase* pIBaseClass = (IBase *)pMeshNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pMeshNode, "MeshNode", "GetOutputDistance"); + } + if (pDistance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseDistance(nullptr); + IMeshNode* pIMeshNode = dynamic_cast(pIBaseClass); + if (!pIMeshNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseDistance = pIMeshNode->GetOutputDistance(); + + *pDistance = (IBase*)(pBaseDistance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Distance", *pDistance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for UnsignedMeshNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_unsignedmeshnode_getinputmesh(Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pMesh) +{ + IBase* pIBaseClass = (IBase *)pUnsignedMeshNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pUnsignedMeshNode, "UnsignedMeshNode", "GetInputMesh"); + } + if (pMesh == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseMesh(nullptr); + IUnsignedMeshNode* pIUnsignedMeshNode = dynamic_cast(pIBaseClass); + if (!pIUnsignedMeshNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseMesh = pIUnsignedMeshNode->GetInputMesh(); + + *pMesh = (IBase*)(pBaseMesh); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Mesh", *pMesh); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_unsignedmeshnode_getinputpos(Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pPos) +{ + IBase* pIBaseClass = (IBase *)pUnsignedMeshNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pUnsignedMeshNode, "UnsignedMeshNode", "GetInputPos"); + } + if (pPos == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBasePos(nullptr); + IUnsignedMeshNode* pIUnsignedMeshNode = dynamic_cast(pIBaseClass); + if (!pIUnsignedMeshNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBasePos = pIUnsignedMeshNode->GetInputPos(); + + *pPos = (IBase*)(pBasePos); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Pos", *pPos); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_unsignedmeshnode_getoutputdistance(Lib3MF_UnsignedMeshNode pUnsignedMeshNode, Lib3MF_ImplicitPort * pDistance) +{ + IBase* pIBaseClass = (IBase *)pUnsignedMeshNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pUnsignedMeshNode, "UnsignedMeshNode", "GetOutputDistance"); + } + if (pDistance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseDistance(nullptr); + IUnsignedMeshNode* pIUnsignedMeshNode = dynamic_cast(pIBaseClass); + if (!pIUnsignedMeshNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseDistance = pIUnsignedMeshNode->GetOutputDistance(); + + *pDistance = (IBase*)(pBaseDistance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Distance", *pDistance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for FunctionCallNode +**************************************************************************************************************************/ +Lib3MFResult lib3mf_functioncallnode_getinputfunctionid(Lib3MF_FunctionCallNode pFunctionCallNode, Lib3MF_ImplicitPort * pFunction) +{ + IBase* pIBaseClass = (IBase *)pFunctionCallNode; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionCallNode, "FunctionCallNode", "GetInputFunctionID"); + } + if (pFunction == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseFunction(nullptr); + IFunctionCallNode* pIFunctionCallNode = dynamic_cast(pIBaseClass); + if (!pIFunctionCallNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseFunction = pIFunctionCallNode->GetInputFunctionID(); + + *pFunction = (IBase*)(pBaseFunction); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Function", *pFunction); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for NodeIterator +**************************************************************************************************************************/ +Lib3MFResult lib3mf_nodeiterator_getcurrent(Lib3MF_NodeIterator pNodeIterator, Lib3MF_ImplicitNode * pNode) +{ + IBase* pIBaseClass = (IBase *)pNodeIterator; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pNodeIterator, "NodeIterator", "GetCurrent"); + } + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseNode(nullptr); + INodeIterator* pINodeIterator = dynamic_cast(pIBaseClass); + if (!pINodeIterator) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseNode = pINodeIterator->GetCurrent(); + + *pNode = (IBase*)(pBaseNode); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + + +/************************************************************************************************************************* + Class implementation for Function +**************************************************************************************************************************/ +Lib3MFResult lib3mf_function_getdisplayname(Lib3MF_Function pFunction, const Lib3MF_uint32 nDisplayNameBufferSize, Lib3MF_uint32* pDisplayNameNeededChars, char * pDisplayNameBuffer) +{ + IBase* pIBaseClass = (IBase *)pFunction; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunction, "Function", "GetDisplayName"); + } + if ( (!pDisplayNameBuffer) && !(pDisplayNameNeededChars) ) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sDisplayName(""); + IFunction* pIFunction = dynamic_cast(pIBaseClass); + if (!pIFunction) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + bool isCacheCall = (pDisplayNameBuffer == nullptr); + if (isCacheCall) { + sDisplayName = pIFunction->GetDisplayName(); + + pIFunction->_setCache (new ParameterCache_1 (sDisplayName)); + } + else { + auto cache = dynamic_cast*> (pIFunction->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sDisplayName); + pIFunction->_setCache (nullptr); + } + + if (pDisplayNameNeededChars) + *pDisplayNameNeededChars = (Lib3MF_uint32) (sDisplayName.size()+1); + if (pDisplayNameBuffer) { + if (sDisplayName.size() >= nDisplayNameBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iDisplayName = 0; iDisplayName < sDisplayName.size(); iDisplayName++) + pDisplayNameBuffer[iDisplayName] = sDisplayName[iDisplayName]; + pDisplayNameBuffer[sDisplayName.size()] = 0; + } + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addStringResult("DisplayName", sDisplayName.c_str()); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_function_setdisplayname(Lib3MF_Function pFunction, const char * pDisplayName) +{ + IBase* pIBaseClass = (IBase *)pFunction; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunction, "Function", "SetDisplayName"); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + } + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sDisplayName(pDisplayName); + IFunction* pIFunction = dynamic_cast(pIBaseClass); + if (!pIFunction) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIFunction->SetDisplayName(sDisplayName); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_function_addinput(Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, eLib3MFImplicitPortType eType, Lib3MF_ImplicitPort * pPort) +{ + IBase* pIBaseClass = (IBase *)pFunction; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunction, "Function", "AddInput"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addEnumParameter("Type", "ImplicitPortType", (Lib3MF_int32)(eType)); + } + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pPort == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + IBase* pBasePort(nullptr); + IFunction* pIFunction = dynamic_cast(pIBaseClass); + if (!pIFunction) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBasePort = pIFunction->AddInput(sIdentifier, sDisplayName, eType); + + *pPort = (IBase*)(pBasePort); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Port", *pPort); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_function_getinputs(Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator) +{ + IBase* pIBaseClass = (IBase *)pFunction; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunction, "Function", "GetInputs"); + } + if (pIterator == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseIterator(nullptr); + IFunction* pIFunction = dynamic_cast(pIBaseClass); + if (!pIFunction) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseIterator = pIFunction->GetInputs(); + + *pIterator = (IBase*)(pBaseIterator); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Iterator", *pIterator); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_function_removeinput(Lib3MF_Function pFunction, Lib3MF_ImplicitPort pInput) +{ + IBase* pIBaseClass = (IBase *)pFunction; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunction, "Function", "RemoveInput"); + pJournalEntry->addHandleParameter("Input", pInput); + } + IBase* pIBaseClassInput = (IBase *)pInput; + IImplicitPort* pIInput = dynamic_cast(pIBaseClassInput); + if (!pIInput) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IFunction* pIFunction = dynamic_cast(pIBaseClass); + if (!pIFunction) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIFunction->RemoveInput(pIInput); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_function_addoutput(Lib3MF_Function pFunction, const char * pIdentifier, const char * pDisplayName, eLib3MFImplicitPortType eType, Lib3MF_ImplicitPort * pPort) +{ + IBase* pIBaseClass = (IBase *)pFunction; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunction, "Function", "AddOutput"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addEnumParameter("Type", "ImplicitPortType", (Lib3MF_int32)(eType)); + } + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pPort == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + IBase* pBasePort(nullptr); + IFunction* pIFunction = dynamic_cast(pIBaseClass); + if (!pIFunction) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBasePort = pIFunction->AddOutput(sIdentifier, sDisplayName, eType); + + *pPort = (IBase*)(pBasePort); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Port", *pPort); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_function_getoutputs(Lib3MF_Function pFunction, Lib3MF_ImplicitPortIterator * pIterator) +{ + IBase* pIBaseClass = (IBase *)pFunction; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunction, "Function", "GetOutputs"); + } + if (pIterator == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseIterator(nullptr); + IFunction* pIFunction = dynamic_cast(pIBaseClass); + if (!pIFunction) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseIterator = pIFunction->GetOutputs(); + + *pIterator = (IBase*)(pBaseIterator); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Iterator", *pIterator); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_function_removeoutput(Lib3MF_Function pFunction, Lib3MF_ImplicitPort pOutput) +{ + IBase* pIBaseClass = (IBase *)pFunction; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunction, "Function", "RemoveOutput"); + pJournalEntry->addHandleParameter("Output", pOutput); + } + IBase* pIBaseClassOutput = (IBase *)pOutput; + IImplicitPort* pIOutput = dynamic_cast(pIBaseClassOutput); + if (!pIOutput) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IFunction* pIFunction = dynamic_cast(pIBaseClass); + if (!pIFunction) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIFunction->RemoveOutput(pIOutput); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_function_findinput(Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pInput) +{ + IBase* pIBaseClass = (IBase *)pFunction; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunction, "Function", "FindInput"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + } + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pInput == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + IBase* pBaseInput(nullptr); + IFunction* pIFunction = dynamic_cast(pIBaseClass); + if (!pIFunction) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseInput = pIFunction->FindInput(sIdentifier); + + *pInput = (IBase*)(pBaseInput); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Input", *pInput); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_function_findoutput(Lib3MF_Function pFunction, const char * pIdentifier, Lib3MF_ImplicitPort * pOutput) { - IBase* pIBaseClass = (IBase *)pComponent; + IBase* pIBaseClass = (IBase *)pFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pComponent, "Component", "SetTransform"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunction, "Function", "FindOutput"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); } - IComponent* pIComponent = dynamic_cast(pIBaseClass); - if (!pIComponent) + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pOutput == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + IBase* pBaseOutput(nullptr); + IFunction* pIFunction = dynamic_cast(pIBaseClass); + if (!pIFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIComponent->SetTransform(*pTransform); + pBaseOutput = pIFunction->FindOutput(sIdentifier); + *pOutput = (IBase*)(pBaseOutput); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Output", *pOutput); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5163,35 +13956,49 @@ Lib3MFResult lib3mf_component_settransform(Lib3MF_Component pComponent, const sL /************************************************************************************************************************* - Class implementation for ComponentsObject + Class implementation for ImplicitFunction **************************************************************************************************************************/ -Lib3MFResult lib3mf_componentsobject_addcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_Object pObjectResource, const sLib3MFTransform * pTransform, Lib3MF_Component * pComponentInstance) +Lib3MFResult lib3mf_implicitfunction_getidentifier(Lib3MF_ImplicitFunction pImplicitFunction, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer) { - IBase* pIBaseClass = (IBase *)pComponentsObject; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pComponentsObject, "ComponentsObject", "AddComponent"); - pJournalEntry->addHandleParameter("ObjectResource", pObjectResource); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "GetIdentifier"); } - if (pComponentInstance == nullptr) + if ( (!pIdentifierBuffer) && !(pIdentifierNeededChars) ) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBase* pIBaseClassObjectResource = (IBase *)pObjectResource; - IObject* pIObjectResource = dynamic_cast(pIBaseClassObjectResource); - if (!pIObjectResource) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); - - IBase* pBaseComponentInstance(nullptr); - IComponentsObject* pIComponentsObject = dynamic_cast(pIBaseClass); - if (!pIComponentsObject) + std::string sIdentifier(""); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pBaseComponentInstance = pIComponentsObject->AddComponent(pIObjectResource, *pTransform); + bool isCacheCall = (pIdentifierBuffer == nullptr); + if (isCacheCall) { + sIdentifier = pIImplicitFunction->GetIdentifier(); - *pComponentInstance = (IBase*)(pBaseComponentInstance); + pIImplicitFunction->_setCache (new ParameterCache_1 (sIdentifier)); + } + else { + auto cache = dynamic_cast*> (pIImplicitFunction->_getCache ()); + if (cache == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + cache->retrieveData (sIdentifier); + pIImplicitFunction->_setCache (nullptr); + } + + if (pIdentifierNeededChars) + *pIdentifierNeededChars = (Lib3MF_uint32) (sIdentifier.size()+1); + if (pIdentifierBuffer) { + if (sIdentifier.size() >= nIdentifierBufferSize) + throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); + for (size_t iIdentifier = 0; iIdentifier < sIdentifier.size(); iIdentifier++) + pIdentifierBuffer[iIdentifier] = sIdentifier[iIdentifier]; + pIdentifierBuffer[sIdentifier.size()] = 0; + } if (pJournalEntry.get() != nullptr) { - pJournalEntry->addHandleResult("ComponentInstance", *pComponentInstance); + pJournalEntry->addStringResult("Identifier", sIdentifier.c_str()); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5207,28 +14014,26 @@ Lib3MFResult lib3mf_componentsobject_addcomponent(Lib3MF_ComponentsObject pCompo } } -Lib3MFResult lib3mf_componentsobject_getcomponent(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 nIndex, Lib3MF_Component * pComponentInstance) +Lib3MFResult lib3mf_implicitfunction_setidentifier(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier) { - IBase* pIBaseClass = (IBase *)pComponentsObject; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pComponentsObject, "ComponentsObject", "GetComponent"); - pJournalEntry->addUInt32Parameter("Index", nIndex); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "SetIdentifier"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); } - if (pComponentInstance == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBase* pBaseComponentInstance(nullptr); - IComponentsObject* pIComponentsObject = dynamic_cast(pIBaseClass); - if (!pIComponentsObject) + std::string sIdentifier(pIdentifier); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pBaseComponentInstance = pIComponentsObject->GetComponent(nIndex); + pIImplicitFunction->SetIdentifier(sIdentifier); - *pComponentInstance = (IBase*)(pBaseComponentInstance); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addHandleResult("ComponentInstance", *pComponentInstance); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5244,25 +14049,41 @@ Lib3MFResult lib3mf_componentsobject_getcomponent(Lib3MF_ComponentsObject pCompo } } -Lib3MFResult lib3mf_componentsobject_getcomponentcount(Lib3MF_ComponentsObject pComponentsObject, Lib3MF_uint32 * pCount) +Lib3MFResult lib3mf_implicitfunction_addnode(Lib3MF_ImplicitFunction pImplicitFunction, eLib3MFImplicitNodeType eNodeType, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ImplicitNode * pNode) { - IBase* pIBaseClass = (IBase *)pComponentsObject; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pComponentsObject, "ComponentsObject", "GetComponentCount"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddNode"); + pJournalEntry->addEnumParameter("NodeType", "ImplicitNodeType", (Lib3MF_int32)(eNodeType)); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pCount == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IComponentsObject* pIComponentsObject = dynamic_cast(pIBaseClass); - if (!pIComponentsObject) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pCount = pIComponentsObject->GetComponentCount(); + pBaseNode = pIImplicitFunction->AddNode(eNodeType, sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5278,30 +14099,40 @@ Lib3MFResult lib3mf_componentsobject_getcomponentcount(Lib3MF_ComponentsObject p } } - -/************************************************************************************************************************* - Class implementation for BeamSet -**************************************************************************************************************************/ -Lib3MFResult lib3mf_beamset_setname(Lib3MF_BeamSet pBeamSet, const char * pName) +Lib3MFResult lib3mf_implicitfunction_addsinnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinNode * pNode) { - IBase* pIBaseClass = (IBase *)pBeamSet; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "SetName"); - pJournalEntry->addStringParameter("Name", pName); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddSinNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pName == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sName(pName); - IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); - if (!pIBeamSet) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamSet->SetName(sName); + pBaseNode = pIImplicitFunction->AddSinNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5317,47 +14148,40 @@ Lib3MFResult lib3mf_beamset_setname(Lib3MF_BeamSet pBeamSet, const char * pName) } } -Lib3MFResult lib3mf_beamset_getname(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer) +Lib3MFResult lib3mf_implicitfunction_addcosnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CosNode * pNode) { - IBase* pIBaseClass = (IBase *)pBeamSet; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "GetName"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddCosNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ( (!pNameBuffer) && !(pNameNeededChars) ) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sName(""); - IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); - if (!pIBeamSet) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - bool isCacheCall = (pNameBuffer == nullptr); - if (isCacheCall) { - sName = pIBeamSet->GetName(); + pBaseNode = pIImplicitFunction->AddCosNode(sIdentifier, eConfiguration, sDisplayName, sTag); - pIBeamSet->_setCache (new ParameterCache_1 (sName)); - } - else { - auto cache = dynamic_cast*> (pIBeamSet->_getCache ()); - if (cache == nullptr) - throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - cache->retrieveData (sName); - pIBeamSet->_setCache (nullptr); - } - - if (pNameNeededChars) - *pNameNeededChars = (Lib3MF_uint32) (sName.size()+1); - if (pNameBuffer) { - if (sName.size() >= nNameBufferSize) - throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); - for (size_t iName = 0; iName < sName.size(); iName++) - pNameBuffer[iName] = sName[iName]; - pNameBuffer[sName.size()] = 0; - } + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addStringResult("Name", sName.c_str()); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5373,26 +14197,40 @@ Lib3MFResult lib3mf_beamset_getname(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 } } -Lib3MFResult lib3mf_beamset_setidentifier(Lib3MF_BeamSet pBeamSet, const char * pIdentifier) +Lib3MFResult lib3mf_implicitfunction_addtannode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanNode * pNode) { - IBase* pIBaseClass = (IBase *)pBeamSet; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "SetIdentifier"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddTanNode"); pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); std::string sIdentifier(pIdentifier); - IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); - if (!pIBeamSet) + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamSet->SetIdentifier(sIdentifier); + pBaseNode = pIImplicitFunction->AddTanNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5408,47 +14246,40 @@ Lib3MFResult lib3mf_beamset_setidentifier(Lib3MF_BeamSet pBeamSet, const char * } } -Lib3MFResult lib3mf_beamset_getidentifier(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint32 nIdentifierBufferSize, Lib3MF_uint32* pIdentifierNeededChars, char * pIdentifierBuffer) +Lib3MFResult lib3mf_implicitfunction_addarcsinnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcSinNode * pNode) { - IBase* pIBaseClass = (IBase *)pBeamSet; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "GetIdentifier"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddArcSinNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ( (!pIdentifierBuffer) && !(pIdentifierNeededChars) ) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sIdentifier(""); - IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); - if (!pIBeamSet) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - bool isCacheCall = (pIdentifierBuffer == nullptr); - if (isCacheCall) { - sIdentifier = pIBeamSet->GetIdentifier(); + pBaseNode = pIImplicitFunction->AddArcSinNode(sIdentifier, eConfiguration, sDisplayName, sTag); - pIBeamSet->_setCache (new ParameterCache_1 (sIdentifier)); - } - else { - auto cache = dynamic_cast*> (pIBeamSet->_getCache ()); - if (cache == nullptr) - throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - cache->retrieveData (sIdentifier); - pIBeamSet->_setCache (nullptr); - } - - if (pIdentifierNeededChars) - *pIdentifierNeededChars = (Lib3MF_uint32) (sIdentifier.size()+1); - if (pIdentifierBuffer) { - if (sIdentifier.size() >= nIdentifierBufferSize) - throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); - for (size_t iIdentifier = 0; iIdentifier < sIdentifier.size(); iIdentifier++) - pIdentifierBuffer[iIdentifier] = sIdentifier[iIdentifier]; - pIdentifierBuffer[sIdentifier.size()] = 0; - } + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addStringResult("Identifier", sIdentifier.c_str()); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5464,25 +14295,40 @@ Lib3MFResult lib3mf_beamset_getidentifier(Lib3MF_BeamSet pBeamSet, const Lib3MF_ } } -Lib3MFResult lib3mf_beamset_getreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount) +Lib3MFResult lib3mf_implicitfunction_addarccosnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcCosNode * pNode) { - IBase* pIBaseClass = (IBase *)pBeamSet; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "GetReferenceCount"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddArcCosNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pCount == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); - if (!pIBeamSet) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pCount = pIBeamSet->GetReferenceCount(); + pBaseNode = pIImplicitFunction->AddArcCosNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5498,24 +14344,40 @@ Lib3MFResult lib3mf_beamset_getreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_ui } } -Lib3MFResult lib3mf_beamset_setreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nReferencesBufferSize, const Lib3MF_uint32 * pReferencesBuffer) +Lib3MFResult lib3mf_implicitfunction_addarctan2node(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ArcTan2Node * pNode) { - IBase* pIBaseClass = (IBase *)pBeamSet; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "SetReferences"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddArcTan2Node"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ( (!pReferencesBuffer) && (nReferencesBufferSize>0)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); - if (!pIBeamSet) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamSet->SetReferences(nReferencesBufferSize, pReferencesBuffer); + pBaseNode = pIImplicitFunction->AddArcTan2Node(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5531,24 +14393,40 @@ Lib3MFResult lib3mf_beamset_setreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 } } -Lib3MFResult lib3mf_beamset_getreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nReferencesBufferSize, Lib3MF_uint64* pReferencesNeededCount, Lib3MF_uint32 * pReferencesBuffer) +Lib3MFResult lib3mf_implicitfunction_addsinhnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SinhNode * pNode) { - IBase* pIBaseClass = (IBase *)pBeamSet; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "GetReferences"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddSinhNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ((!pReferencesBuffer) && !(pReferencesNeededCount)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); - if (!pIBeamSet) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamSet->GetReferences(nReferencesBufferSize, pReferencesNeededCount, pReferencesBuffer); + pBaseNode = pIImplicitFunction->AddSinhNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5564,25 +14442,40 @@ Lib3MFResult lib3mf_beamset_getreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_ } } -Lib3MFResult lib3mf_beamset_getballreferencecount(Lib3MF_BeamSet pBeamSet, Lib3MF_uint32 * pCount) +Lib3MFResult lib3mf_implicitfunction_addcoshnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CoshNode * pNode) { - IBase* pIBaseClass = (IBase *)pBeamSet; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "GetBallReferenceCount"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddCoshNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pCount == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); - if (!pIBeamSet) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pCount = pIBeamSet->GetBallReferenceCount(); + pBaseNode = pIImplicitFunction->AddCoshNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5598,24 +14491,40 @@ Lib3MFResult lib3mf_beamset_getballreferencecount(Lib3MF_BeamSet pBeamSet, Lib3M } } -Lib3MFResult lib3mf_beamset_setballreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_uint64 nBallReferencesBufferSize, const Lib3MF_uint32 * pBallReferencesBuffer) +Lib3MFResult lib3mf_implicitfunction_addtanhnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TanhNode * pNode) { - IBase* pIBaseClass = (IBase *)pBeamSet; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "SetBallReferences"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddTanhNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ( (!pBallReferencesBuffer) && (nBallReferencesBufferSize>0)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); - if (!pIBeamSet) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamSet->SetBallReferences(nBallReferencesBufferSize, pBallReferencesBuffer); + pBaseNode = pIImplicitFunction->AddTanhNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5631,24 +14540,40 @@ Lib3MFResult lib3mf_beamset_setballreferences(Lib3MF_BeamSet pBeamSet, Lib3MF_ui } } -Lib3MFResult lib3mf_beamset_getballreferences(Lib3MF_BeamSet pBeamSet, const Lib3MF_uint64 nBallReferencesBufferSize, Lib3MF_uint64* pBallReferencesNeededCount, Lib3MF_uint32 * pBallReferencesBuffer) +Lib3MFResult lib3mf_implicitfunction_addroundnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_RoundNode * pNode) { - IBase* pIBaseClass = (IBase *)pBeamSet; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBeamSet, "BeamSet", "GetBallReferences"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddRoundNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ((!pBallReferencesBuffer) && !(pBallReferencesNeededCount)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBeamSet* pIBeamSet = dynamic_cast(pIBaseClass); - if (!pIBeamSet) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBeamSet->GetBallReferences(nBallReferencesBufferSize, pBallReferencesNeededCount, pBallReferencesBuffer); + pBaseNode = pIImplicitFunction->AddRoundNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5664,29 +14589,40 @@ Lib3MFResult lib3mf_beamset_getballreferences(Lib3MF_BeamSet pBeamSet, const Lib } } - -/************************************************************************************************************************* - Class implementation for BaseMaterialGroup -**************************************************************************************************************************/ -Lib3MFResult lib3mf_basematerialgroup_getcount(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 * pCount) +Lib3MFResult lib3mf_implicitfunction_addceilnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_CeilNode * pNode) { - IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "GetCount"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddCeilNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pCount == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); - if (!pIBaseMaterialGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pCount = pIBaseMaterialGroup->GetCount(); + pBaseNode = pIImplicitFunction->AddCeilNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5702,24 +14638,40 @@ Lib3MFResult lib3mf_basematerialgroup_getcount(Lib3MF_BaseMaterialGroup pBaseMat } } -Lib3MFResult lib3mf_basematerialgroup_getallpropertyids(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult lib3mf_implicitfunction_addfloornode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FloorNode * pNode) { - IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "GetAllPropertyIDs"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddFloorNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ((!pPropertyIDsBuffer) && !(pPropertyIDsNeededCount)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); - if (!pIBaseMaterialGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBaseMaterialGroup->GetAllPropertyIDs(nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + pBaseNode = pIImplicitFunction->AddFloorNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5735,29 +14687,40 @@ Lib3MFResult lib3mf_basematerialgroup_getallpropertyids(Lib3MF_BaseMaterialGroup } } -Lib3MFResult lib3mf_basematerialgroup_addmaterial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, const char * pName, const sLib3MFColor * pDisplayColor, Lib3MF_uint32 * pPropertyID) +Lib3MFResult lib3mf_implicitfunction_addsignnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SignNode * pNode) { - IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "AddMaterial"); - pJournalEntry->addStringParameter("Name", pName); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddSignNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pName == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - if (pPropertyID == nullptr) + if (pDisplayName == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sName(pName); - IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); - if (!pIBaseMaterialGroup) + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pPropertyID = pIBaseMaterialGroup->AddMaterial(sName, *pDisplayColor); + pBaseNode = pIImplicitFunction->AddSignNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("PropertyID", *pPropertyID); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5773,23 +14736,40 @@ Lib3MFResult lib3mf_basematerialgroup_addmaterial(Lib3MF_BaseMaterialGroup pBase } } -Lib3MFResult lib3mf_basematerialgroup_removematerial(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID) +Lib3MFResult lib3mf_implicitfunction_addfractnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FractNode * pNode) { - IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "RemoveMaterial"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddFractNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); - if (!pIBaseMaterialGroup) + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBaseMaterialGroup->RemoveMaterial(nPropertyID); + pBaseNode = pIImplicitFunction->AddFractNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5805,48 +14785,40 @@ Lib3MFResult lib3mf_basematerialgroup_removematerial(Lib3MF_BaseMaterialGroup pB } } -Lib3MFResult lib3mf_basematerialgroup_getname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint32 nNameBufferSize, Lib3MF_uint32* pNameNeededChars, char * pNameBuffer) +Lib3MFResult lib3mf_implicitfunction_addabsnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AbsNode * pNode) { - IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "GetName"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddAbsNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ( (!pNameBuffer) && !(pNameNeededChars) ) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sName(""); - IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); - if (!pIBaseMaterialGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - bool isCacheCall = (pNameBuffer == nullptr); - if (isCacheCall) { - sName = pIBaseMaterialGroup->GetName(nPropertyID); + pBaseNode = pIImplicitFunction->AddAbsNode(sIdentifier, eConfiguration, sDisplayName, sTag); - pIBaseMaterialGroup->_setCache (new ParameterCache_1 (sName)); - } - else { - auto cache = dynamic_cast*> (pIBaseMaterialGroup->_getCache ()); - if (cache == nullptr) - throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - cache->retrieveData (sName); - pIBaseMaterialGroup->_setCache (nullptr); - } - - if (pNameNeededChars) - *pNameNeededChars = (Lib3MF_uint32) (sName.size()+1); - if (pNameBuffer) { - if (sName.size() >= nNameBufferSize) - throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); - for (size_t iName = 0; iName < sName.size(); iName++) - pNameBuffer[iName] = sName[iName]; - pNameBuffer[sName.size()] = 0; - } + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addStringResult("Name", sName.c_str()); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5862,27 +14834,40 @@ Lib3MFResult lib3mf_basematerialgroup_getname(Lib3MF_BaseMaterialGroup pBaseMate } } -Lib3MFResult lib3mf_basematerialgroup_setname(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const char * pName) +Lib3MFResult lib3mf_implicitfunction_addexpnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ExpNode * pNode) { - IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "SetName"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); - pJournalEntry->addStringParameter("Name", pName); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddExpNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pName == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sName(pName); - IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); - if (!pIBaseMaterialGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBaseMaterialGroup->SetName(nPropertyID, sName); + pBaseNode = pIImplicitFunction->AddExpNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5898,23 +14883,40 @@ Lib3MFResult lib3mf_basematerialgroup_setname(Lib3MF_BaseMaterialGroup pBaseMate } } -Lib3MFResult lib3mf_basematerialgroup_setdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor) +Lib3MFResult lib3mf_implicitfunction_addlognode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_LogNode * pNode) { - IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "SetDisplayColor"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddLogNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); - if (!pIBaseMaterialGroup) + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIBaseMaterialGroup->SetDisplayColor(nPropertyID, *pTheColor); + pBaseNode = pIImplicitFunction->AddLogNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5930,25 +14932,40 @@ Lib3MFResult lib3mf_basematerialgroup_setdisplaycolor(Lib3MF_BaseMaterialGroup p } } -Lib3MFResult lib3mf_basematerialgroup_getdisplaycolor(Lib3MF_BaseMaterialGroup pBaseMaterialGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor) +Lib3MFResult lib3mf_implicitfunction_addlog2node(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log2Node * pNode) { - IBase* pIBaseClass = (IBase *)pBaseMaterialGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pBaseMaterialGroup, "BaseMaterialGroup", "GetDisplayColor"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddLog2Node"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pTheColor == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBaseMaterialGroup* pIBaseMaterialGroup = dynamic_cast(pIBaseClass); - if (!pIBaseMaterialGroup) + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pTheColor = pIBaseMaterialGroup->GetDisplayColor(nPropertyID); + pBaseNode = pIImplicitFunction->AddLog2Node(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -5964,29 +14981,40 @@ Lib3MFResult lib3mf_basematerialgroup_getdisplaycolor(Lib3MF_BaseMaterialGroup p } } - -/************************************************************************************************************************* - Class implementation for ColorGroup -**************************************************************************************************************************/ -Lib3MFResult lib3mf_colorgroup_getcount(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 * pCount) +Lib3MFResult lib3mf_implicitfunction_addlog10node(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_Log10Node * pNode) { - IBase* pIBaseClass = (IBase *)pColorGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pColorGroup, "ColorGroup", "GetCount"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddLog10Node"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pCount == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IColorGroup* pIColorGroup = dynamic_cast(pIBaseClass); - if (!pIColorGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pCount = pIColorGroup->GetCount(); + pBaseNode = pIImplicitFunction->AddLog10Node(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6002,24 +15030,39 @@ Lib3MFResult lib3mf_colorgroup_getcount(Lib3MF_ColorGroup pColorGroup, Lib3MF_ui } } -Lib3MFResult lib3mf_colorgroup_getallpropertyids(Lib3MF_ColorGroup pColorGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult lib3mf_implicitfunction_addlengthnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_LengthNode * pNode) { - IBase* pIBaseClass = (IBase *)pColorGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pColorGroup, "ColorGroup", "GetAllPropertyIDs"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddLengthNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ((!pPropertyIDsBuffer) && !(pPropertyIDsNeededCount)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IColorGroup* pIColorGroup = dynamic_cast(pIBaseClass); - if (!pIColorGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIColorGroup->GetAllPropertyIDs(nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + pBaseNode = pIImplicitFunction->AddLengthNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6035,25 +15078,40 @@ Lib3MFResult lib3mf_colorgroup_getallpropertyids(Lib3MF_ColorGroup pColorGroup, } } -Lib3MFResult lib3mf_colorgroup_addcolor(Lib3MF_ColorGroup pColorGroup, const sLib3MFColor * pTheColor, Lib3MF_uint32 * pPropertyID) +Lib3MFResult lib3mf_implicitfunction_addtransposenode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_TransposeNode * pNode) { - IBase* pIBaseClass = (IBase *)pColorGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pColorGroup, "ColorGroup", "AddColor"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddTransposeNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pPropertyID == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IColorGroup* pIColorGroup = dynamic_cast(pIBaseClass); - if (!pIColorGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pPropertyID = pIColorGroup->AddColor(*pTheColor); + pBaseNode = pIImplicitFunction->AddTransposeNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("PropertyID", *pPropertyID); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6069,23 +15127,39 @@ Lib3MFResult lib3mf_colorgroup_addcolor(Lib3MF_ColorGroup pColorGroup, const sLi } } -Lib3MFResult lib3mf_colorgroup_removecolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID) +Lib3MFResult lib3mf_implicitfunction_inversenode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_InverseNode * pNode) { - IBase* pIBaseClass = (IBase *)pColorGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pColorGroup, "ColorGroup", "RemoveColor"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "InverseNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - IColorGroup* pIColorGroup = dynamic_cast(pIBaseClass); - if (!pIColorGroup) + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIColorGroup->RemoveColor(nPropertyID); + pBaseNode = pIImplicitFunction->InverseNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6101,23 +15175,40 @@ Lib3MFResult lib3mf_colorgroup_removecolor(Lib3MF_ColorGroup pColorGroup, Lib3MF } } -Lib3MFResult lib3mf_colorgroup_setcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, const sLib3MFColor * pTheColor) +Lib3MFResult lib3mf_implicitfunction_addsqrtnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SqrtNode * pNode) { - IBase* pIBaseClass = (IBase *)pColorGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pColorGroup, "ColorGroup", "SetColor"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddSqrtNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - IColorGroup* pIColorGroup = dynamic_cast(pIBaseClass); - if (!pIColorGroup) + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIColorGroup->SetColor(nPropertyID, *pTheColor); + pBaseNode = pIImplicitFunction->AddSqrtNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6133,25 +15224,39 @@ Lib3MFResult lib3mf_colorgroup_setcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_ui } } -Lib3MFResult lib3mf_colorgroup_getcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_uint32 nPropertyID, sLib3MFColor * pTheColor) +Lib3MFResult lib3mf_implicitfunction_addresourceidnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ResourceIdNode * pNode) { - IBase* pIBaseClass = (IBase *)pColorGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pColorGroup, "ColorGroup", "GetColor"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddResourceIdNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pTheColor == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IColorGroup* pIColorGroup = dynamic_cast(pIBaseClass); - if (!pIColorGroup) + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pTheColor = pIColorGroup->GetColor(nPropertyID); + pBaseNode = pIImplicitFunction->AddResourceIdNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6164,32 +15269,43 @@ Lib3MFResult lib3mf_colorgroup_getcolor(Lib3MF_ColorGroup pColorGroup, Lib3MF_ui } catch (...) { return handleUnhandledException(pIBaseClass, pJournalEntry.get()); - } -} - - -/************************************************************************************************************************* - Class implementation for Texture2DGroup -**************************************************************************************************************************/ -Lib3MFResult lib3mf_texture2dgroup_getcount(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 * pCount) + } +} + +Lib3MFResult lib3mf_implicitfunction_addadditionnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_AdditionNode * pNode) { - IBase* pIBaseClass = (IBase *)pTexture2DGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2DGroup, "Texture2DGroup", "GetCount"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddAdditionNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pCount == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - ITexture2DGroup* pITexture2DGroup = dynamic_cast(pIBaseClass); - if (!pITexture2DGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pCount = pITexture2DGroup->GetCount(); + pBaseNode = pIImplicitFunction->AddAdditionNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6205,24 +15321,40 @@ Lib3MFResult lib3mf_texture2dgroup_getcount(Lib3MF_Texture2DGroup pTexture2DGrou } } -Lib3MFResult lib3mf_texture2dgroup_getallpropertyids(Lib3MF_Texture2DGroup pTexture2DGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult lib3mf_implicitfunction_addsubtractionnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SubtractionNode * pNode) { - IBase* pIBaseClass = (IBase *)pTexture2DGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2DGroup, "Texture2DGroup", "GetAllPropertyIDs"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddSubtractionNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ((!pPropertyIDsBuffer) && !(pPropertyIDsNeededCount)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - ITexture2DGroup* pITexture2DGroup = dynamic_cast(pIBaseClass); - if (!pITexture2DGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pITexture2DGroup->GetAllPropertyIDs(nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + pBaseNode = pIImplicitFunction->AddSubtractionNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6238,25 +15370,40 @@ Lib3MFResult lib3mf_texture2dgroup_getallpropertyids(Lib3MF_Texture2DGroup pText } } -Lib3MFResult lib3mf_texture2dgroup_addtex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, const sLib3MFTex2Coord * pUVCoordinate, Lib3MF_uint32 * pPropertyID) +Lib3MFResult lib3mf_implicitfunction_addmultiplicationnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MultiplicationNode * pNode) { - IBase* pIBaseClass = (IBase *)pTexture2DGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2DGroup, "Texture2DGroup", "AddTex2Coord"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddMultiplicationNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pPropertyID == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - ITexture2DGroup* pITexture2DGroup = dynamic_cast(pIBaseClass); - if (!pITexture2DGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pPropertyID = pITexture2DGroup->AddTex2Coord(*pUVCoordinate); + pBaseNode = pIImplicitFunction->AddMultiplicationNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("PropertyID", *pPropertyID); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6272,25 +15419,40 @@ Lib3MFResult lib3mf_texture2dgroup_addtex2coord(Lib3MF_Texture2DGroup pTexture2D } } -Lib3MFResult lib3mf_texture2dgroup_gettex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID, sLib3MFTex2Coord * pUVCoordinate) +Lib3MFResult lib3mf_implicitfunction_adddivisionnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_DivisionNode * pNode) { - IBase* pIBaseClass = (IBase *)pTexture2DGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2DGroup, "Texture2DGroup", "GetTex2Coord"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddDivisionNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pUVCoordinate == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - ITexture2DGroup* pITexture2DGroup = dynamic_cast(pIBaseClass); - if (!pITexture2DGroup) + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pUVCoordinate = pITexture2DGroup->GetTex2Coord(nPropertyID); + pBaseNode = pIImplicitFunction->AddDivisionNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6306,23 +15468,39 @@ Lib3MFResult lib3mf_texture2dgroup_gettex2coord(Lib3MF_Texture2DGroup pTexture2D } } -Lib3MFResult lib3mf_texture2dgroup_removetex2coord(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_uint32 nPropertyID) +Lib3MFResult lib3mf_implicitfunction_adddotnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DotNode * pNode) { - IBase* pIBaseClass = (IBase *)pTexture2DGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2DGroup, "Texture2DGroup", "RemoveTex2Coord"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddDotNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - ITexture2DGroup* pITexture2DGroup = dynamic_cast(pIBaseClass); - if (!pITexture2DGroup) + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pITexture2DGroup->RemoveTex2Coord(nPropertyID); + pBaseNode = pIImplicitFunction->AddDotNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6338,27 +15516,39 @@ Lib3MFResult lib3mf_texture2dgroup_removetex2coord(Lib3MF_Texture2DGroup pTextur } } -Lib3MFResult lib3mf_texture2dgroup_gettexture2d(Lib3MF_Texture2DGroup pTexture2DGroup, Lib3MF_Texture2D * pTexture2DInstance) +Lib3MFResult lib3mf_implicitfunction_addcrossnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_CrossNode * pNode) { - IBase* pIBaseClass = (IBase *)pTexture2DGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2DGroup, "Texture2DGroup", "GetTexture2D"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddCrossNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pTexture2DInstance == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBase* pBaseTexture2DInstance(nullptr); - ITexture2DGroup* pITexture2DGroup = dynamic_cast(pIBaseClass); - if (!pITexture2DGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pBaseTexture2DInstance = pITexture2DGroup->GetTexture2D(); + pBaseNode = pIImplicitFunction->AddCrossNode(sIdentifier, sDisplayName, sTag); - *pTexture2DInstance = (IBase*)(pBaseTexture2DInstance); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addHandleResult("Texture2DInstance", *pTexture2DInstance); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6374,29 +15564,39 @@ Lib3MFResult lib3mf_texture2dgroup_gettexture2d(Lib3MF_Texture2DGroup pTexture2D } } - -/************************************************************************************************************************* - Class implementation for CompositeMaterials -**************************************************************************************************************************/ -Lib3MFResult lib3mf_compositematerials_getcount(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 * pCount) +Lib3MFResult lib3mf_implicitfunction_addmatvecmultiplicationnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatVecMultiplicationNode * pNode) { - IBase* pIBaseClass = (IBase *)pCompositeMaterials; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pCompositeMaterials, "CompositeMaterials", "GetCount"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddMatVecMultiplicationNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pCount == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - ICompositeMaterials* pICompositeMaterials = dynamic_cast(pIBaseClass); - if (!pICompositeMaterials) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pCount = pICompositeMaterials->GetCount(); + pBaseNode = pIImplicitFunction->AddMatVecMultiplicationNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6412,24 +15612,40 @@ Lib3MFResult lib3mf_compositematerials_getcount(Lib3MF_CompositeMaterials pCompo } } -Lib3MFResult lib3mf_compositematerials_getallpropertyids(Lib3MF_CompositeMaterials pCompositeMaterials, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult lib3mf_implicitfunction_addminnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MinNode * pNode) { - IBase* pIBaseClass = (IBase *)pCompositeMaterials; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pCompositeMaterials, "CompositeMaterials", "GetAllPropertyIDs"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddMinNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ((!pPropertyIDsBuffer) && !(pPropertyIDsNeededCount)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - ICompositeMaterials* pICompositeMaterials = dynamic_cast(pIBaseClass); - if (!pICompositeMaterials) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pICompositeMaterials->GetAllPropertyIDs(nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + pBaseNode = pIImplicitFunction->AddMinNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6445,27 +15661,40 @@ Lib3MFResult lib3mf_compositematerials_getallpropertyids(Lib3MF_CompositeMateria } } -Lib3MFResult lib3mf_compositematerials_getbasematerialgroup(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_BaseMaterialGroup * pBaseMaterialGroupInstance) +Lib3MFResult lib3mf_implicitfunction_addmaxnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_MaxNode * pNode) { - IBase* pIBaseClass = (IBase *)pCompositeMaterials; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pCompositeMaterials, "CompositeMaterials", "GetBaseMaterialGroup"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddMaxNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pBaseMaterialGroupInstance == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBase* pBaseBaseMaterialGroupInstance(nullptr); - ICompositeMaterials* pICompositeMaterials = dynamic_cast(pIBaseClass); - if (!pICompositeMaterials) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pBaseBaseMaterialGroupInstance = pICompositeMaterials->GetBaseMaterialGroup(); + pBaseNode = pIImplicitFunction->AddMaxNode(sIdentifier, eConfiguration, sDisplayName, sTag); - *pBaseMaterialGroupInstance = (IBase*)(pBaseBaseMaterialGroupInstance); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addHandleResult("BaseMaterialGroupInstance", *pBaseMaterialGroupInstance); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6481,27 +15710,40 @@ Lib3MFResult lib3mf_compositematerials_getbasematerialgroup(Lib3MF_CompositeMate } } -Lib3MFResult lib3mf_compositematerials_addcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint64 nCompositeBufferSize, const sLib3MFCompositeConstituent * pCompositeBuffer, Lib3MF_uint32 * pPropertyID) +Lib3MFResult lib3mf_implicitfunction_addfmodnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_FmodNode * pNode) { - IBase* pIBaseClass = (IBase *)pCompositeMaterials; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pCompositeMaterials, "CompositeMaterials", "AddComposite"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddFmodNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ( (!pCompositeBuffer) && (nCompositeBufferSize>0)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - if (pPropertyID == nullptr) + if (pDisplayName == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - ICompositeMaterials* pICompositeMaterials = dynamic_cast(pIBaseClass); - if (!pICompositeMaterials) + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pPropertyID = pICompositeMaterials->AddComposite(nCompositeBufferSize, pCompositeBuffer); + pBaseNode = pIImplicitFunction->AddFmodNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("PropertyID", *pPropertyID); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6517,23 +15759,40 @@ Lib3MFResult lib3mf_compositematerials_addcomposite(Lib3MF_CompositeMaterials pC } } -Lib3MFResult lib3mf_compositematerials_removecomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID) +Lib3MFResult lib3mf_implicitfunction_addpownode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_PowNode * pNode) { - IBase* pIBaseClass = (IBase *)pCompositeMaterials; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pCompositeMaterials, "CompositeMaterials", "RemoveComposite"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddPowNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - ICompositeMaterials* pICompositeMaterials = dynamic_cast(pIBaseClass); - if (!pICompositeMaterials) + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pICompositeMaterials->RemoveComposite(nPropertyID); + pBaseNode = pIImplicitFunction->AddPowNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6549,25 +15808,40 @@ Lib3MFResult lib3mf_compositematerials_removecomposite(Lib3MF_CompositeMaterials } } -Lib3MFResult lib3mf_compositematerials_getcomposite(Lib3MF_CompositeMaterials pCompositeMaterials, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nCompositeBufferSize, Lib3MF_uint64* pCompositeNeededCount, sLib3MFCompositeConstituent * pCompositeBuffer) +Lib3MFResult lib3mf_implicitfunction_addselectnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_SelectNode * pNode) { - IBase* pIBaseClass = (IBase *)pCompositeMaterials; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pCompositeMaterials, "CompositeMaterials", "GetComposite"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddSelectNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ((!pCompositeBuffer) && !(pCompositeNeededCount)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - ICompositeMaterials* pICompositeMaterials = dynamic_cast(pIBaseClass); - if (!pICompositeMaterials) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pICompositeMaterials->GetComposite(nPropertyID, nCompositeBufferSize, pCompositeNeededCount, pCompositeBuffer); + pBaseNode = pIImplicitFunction->AddSelectNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6583,29 +15857,40 @@ Lib3MFResult lib3mf_compositematerials_getcomposite(Lib3MF_CompositeMaterials pC } } - -/************************************************************************************************************************* - Class implementation for MultiPropertyGroup -**************************************************************************************************************************/ -Lib3MFResult lib3mf_multipropertygroup_getcount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount) +Lib3MFResult lib3mf_implicitfunction_addclampnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, eLib3MFImplicitNodeConfiguration eConfiguration, const char * pDisplayName, const char * pTag, Lib3MF_ClampNode * pNode) { - IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "GetCount"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddClampNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addEnumParameter("Configuration", "ImplicitNodeConfiguration", (Lib3MF_int32)(eConfiguration)); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pCount == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); - if (!pIMultiPropertyGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pCount = pIMultiPropertyGroup->GetCount(); + pBaseNode = pIImplicitFunction->AddClampNode(sIdentifier, eConfiguration, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6621,24 +15906,39 @@ Lib3MFResult lib3mf_multipropertygroup_getcount(Lib3MF_MultiPropertyGroup pMulti } } -Lib3MFResult lib3mf_multipropertygroup_getallpropertyids(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult lib3mf_implicitfunction_addcomposevectornode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeVectorNode * pNode) { - IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "GetAllPropertyIDs"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddComposeVectorNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ((!pPropertyIDsBuffer) && !(pPropertyIDsNeededCount)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); - if (!pIMultiPropertyGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIMultiPropertyGroup->GetAllPropertyIDs(nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + pBaseNode = pIImplicitFunction->AddComposeVectorNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6654,27 +15954,39 @@ Lib3MFResult lib3mf_multipropertygroup_getallpropertyids(Lib3MF_MultiPropertyGro } } -Lib3MFResult lib3mf_multipropertygroup_addmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer, Lib3MF_uint32 * pPropertyID) +Lib3MFResult lib3mf_implicitfunction_addvectorfromscalarnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_VectorFromScalarNode * pNode) { - IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "AddMultiProperty"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddVectorFromScalarNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ( (!pPropertyIDsBuffer) && (nPropertyIDsBufferSize>0)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - if (pPropertyID == nullptr) + if (pDisplayName == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); - if (!pIMultiPropertyGroup) + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pPropertyID = pIMultiPropertyGroup->AddMultiProperty(nPropertyIDsBufferSize, pPropertyIDsBuffer); + pBaseNode = pIImplicitFunction->AddVectorFromScalarNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("PropertyID", *pPropertyID); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6690,25 +16002,39 @@ Lib3MFResult lib3mf_multipropertygroup_addmultiproperty(Lib3MF_MultiPropertyGrou } } -Lib3MFResult lib3mf_multipropertygroup_setmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, Lib3MF_uint64 nPropertyIDsBufferSize, const Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult lib3mf_implicitfunction_adddecomposevectornode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_DecomposeVectorNode * pNode) { - IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "SetMultiProperty"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddDecomposeVectorNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ( (!pPropertyIDsBuffer) && (nPropertyIDsBufferSize>0)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); - if (!pIMultiPropertyGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIMultiPropertyGroup->SetMultiProperty(nPropertyID, nPropertyIDsBufferSize, pPropertyIDsBuffer); + pBaseNode = pIImplicitFunction->AddDecomposeVectorNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6724,25 +16050,39 @@ Lib3MFResult lib3mf_multipropertygroup_setmultiproperty(Lib3MF_MultiPropertyGrou } } -Lib3MFResult lib3mf_multipropertygroup_getmultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID, const Lib3MF_uint64 nPropertyIDsBufferSize, Lib3MF_uint64* pPropertyIDsNeededCount, Lib3MF_uint32 * pPropertyIDsBuffer) +Lib3MFResult lib3mf_implicitfunction_addcomposematrixnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ComposeMatrixNode * pNode) { - IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "GetMultiProperty"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddComposeMatrixNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ((!pPropertyIDsBuffer) && !(pPropertyIDsNeededCount)) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); - if (!pIMultiPropertyGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIMultiPropertyGroup->GetMultiProperty(nPropertyID, nPropertyIDsBufferSize, pPropertyIDsNeededCount, pPropertyIDsBuffer); + pBaseNode = pIImplicitFunction->AddComposeMatrixNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6758,23 +16098,39 @@ Lib3MFResult lib3mf_multipropertygroup_getmultiproperty(Lib3MF_MultiPropertyGrou } } -Lib3MFResult lib3mf_multipropertygroup_removemultiproperty(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nPropertyID) +Lib3MFResult lib3mf_implicitfunction_addmatrixfromrowsnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromRowsNode * pNode) { - IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { - if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "RemoveMultiProperty"); - pJournalEntry->addUInt32Parameter("PropertyID", nPropertyID); + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddMatrixFromRowsNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); - if (!pIMultiPropertyGroup) + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIMultiPropertyGroup->RemoveMultiProperty(nPropertyID); + pBaseNode = pIImplicitFunction->AddMatrixFromRowsNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6790,25 +16146,39 @@ Lib3MFResult lib3mf_multipropertygroup_removemultiproperty(Lib3MF_MultiPropertyG } } -Lib3MFResult lib3mf_multipropertygroup_getlayercount(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 * pCount) +Lib3MFResult lib3mf_implicitfunction_addmatrixfromcolumnsnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MatrixFromColumnsNode * pNode) { - IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "GetLayerCount"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddMatrixFromColumnsNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pCount == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); - if (!pIMultiPropertyGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pCount = pIMultiPropertyGroup->GetLayerCount(); + pBaseNode = pIImplicitFunction->AddMatrixFromColumnsNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("Count", *pCount); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6824,25 +16194,39 @@ Lib3MFResult lib3mf_multipropertygroup_getlayercount(Lib3MF_MultiPropertyGroup p } } -Lib3MFResult lib3mf_multipropertygroup_addlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, const sLib3MFMultiPropertyLayer * pTheLayer, Lib3MF_uint32 * pLayerIndex) +Lib3MFResult lib3mf_implicitfunction_addconstantnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstantNode * pNode) { - IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "AddLayer"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddConstantNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pLayerIndex == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); - if (!pIMultiPropertyGroup) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pLayerIndex = pIMultiPropertyGroup->AddLayer(*pTheLayer); + pBaseNode = pIImplicitFunction->AddConstantNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt32Result("LayerIndex", *pLayerIndex); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6858,25 +16242,39 @@ Lib3MFResult lib3mf_multipropertygroup_addlayer(Lib3MF_MultiPropertyGroup pMulti } } -Lib3MFResult lib3mf_multipropertygroup_getlayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex, sLib3MFMultiPropertyLayer * pTheLayer) +Lib3MFResult lib3mf_implicitfunction_addconstvecnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstVecNode * pNode) { - IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "GetLayer"); - pJournalEntry->addUInt32Parameter("LayerIndex", nLayerIndex); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddConstVecNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pTheLayer == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); - if (!pIMultiPropertyGroup) + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pTheLayer = pIMultiPropertyGroup->GetLayer(nLayerIndex); + pBaseNode = pIImplicitFunction->AddConstVecNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6892,23 +16290,39 @@ Lib3MFResult lib3mf_multipropertygroup_getlayer(Lib3MF_MultiPropertyGroup pMulti } } -Lib3MFResult lib3mf_multipropertygroup_removelayer(Lib3MF_MultiPropertyGroup pMultiPropertyGroup, Lib3MF_uint32 nLayerIndex) +Lib3MFResult lib3mf_implicitfunction_addconstmatnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_ConstMatNode * pNode) { - IBase* pIBaseClass = (IBase *)pMultiPropertyGroup; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pMultiPropertyGroup, "MultiPropertyGroup", "RemoveLayer"); - pJournalEntry->addUInt32Parameter("LayerIndex", nLayerIndex); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddConstMatNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - IMultiPropertyGroup* pIMultiPropertyGroup = dynamic_cast(pIBaseClass); - if (!pIMultiPropertyGroup) + if (pIdentifier == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIMultiPropertyGroup->RemoveLayer(nLayerIndex); + pBaseNode = pIImplicitFunction->AddConstMatNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6924,51 +16338,39 @@ Lib3MFResult lib3mf_multipropertygroup_removelayer(Lib3MF_MultiPropertyGroup pMu } } - -/************************************************************************************************************************* - Class implementation for Attachment -**************************************************************************************************************************/ -Lib3MFResult lib3mf_attachment_getpath(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer) +Lib3MFResult lib3mf_implicitfunction_addmeshnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_MeshNode * pNode) { - IBase* pIBaseClass = (IBase *)pAttachment; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "GetPath"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddMeshNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if ( (!pPathBuffer) && !(pPathNeededChars) ) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sPath(""); - IAttachment* pIAttachment = dynamic_cast(pIBaseClass); - if (!pIAttachment) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - bool isCacheCall = (pPathBuffer == nullptr); - if (isCacheCall) { - sPath = pIAttachment->GetPath(); + pBaseNode = pIImplicitFunction->AddMeshNode(sIdentifier, sDisplayName, sTag); - pIAttachment->_setCache (new ParameterCache_1 (sPath)); - } - else { - auto cache = dynamic_cast*> (pIAttachment->_getCache ()); - if (cache == nullptr) - throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - cache->retrieveData (sPath); - pIAttachment->_setCache (nullptr); - } - - if (pPathNeededChars) - *pPathNeededChars = (Lib3MF_uint32) (sPath.size()+1); - if (pPathBuffer) { - if (sPath.size() >= nPathBufferSize) - throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); - for (size_t iPath = 0; iPath < sPath.size(); iPath++) - pPathBuffer[iPath] = sPath[iPath]; - pPathBuffer[sPath.size()] = 0; - } + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addStringResult("Path", sPath.c_str()); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -6984,26 +16386,39 @@ Lib3MFResult lib3mf_attachment_getpath(Lib3MF_Attachment pAttachment, const Lib3 } } -Lib3MFResult lib3mf_attachment_setpath(Lib3MF_Attachment pAttachment, const char * pPath) +Lib3MFResult lib3mf_implicitfunction_addunsignedmeshnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_UnsignedMeshNode * pNode) { - IBase* pIBaseClass = (IBase *)pAttachment; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "SetPath"); - pJournalEntry->addStringParameter("Path", pPath); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddUnsignedMeshNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pPath == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sPath(pPath); - IAttachment* pIAttachment = dynamic_cast(pIBaseClass); - if (!pIAttachment) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIAttachment->SetPath(sPath); + pBaseNode = pIImplicitFunction->AddUnsignedMeshNode(sIdentifier, sDisplayName, sTag); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -7019,27 +16434,39 @@ Lib3MFResult lib3mf_attachment_setpath(Lib3MF_Attachment pAttachment, const char } } -Lib3MFResult lib3mf_attachment_packagepart(Lib3MF_Attachment pAttachment, Lib3MF_PackagePart * pPackagePart) +Lib3MFResult lib3mf_implicitfunction_addfunctioncallnode(Lib3MF_ImplicitFunction pImplicitFunction, const char * pIdentifier, const char * pDisplayName, const char * pTag, Lib3MF_FunctionCallNode * pNode) { - IBase* pIBaseClass = (IBase *)pAttachment; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "PackagePart"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddFunctionCallNode"); + pJournalEntry->addStringParameter("Identifier", pIdentifier); + pJournalEntry->addStringParameter("DisplayName", pDisplayName); + pJournalEntry->addStringParameter("Tag", pTag); } - if (pPackagePart == nullptr) + if (pIdentifier == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBase* pBasePackagePart(nullptr); - IAttachment* pIAttachment = dynamic_cast(pIBaseClass); - if (!pIAttachment) + if (pDisplayName == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pTag == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (pNode == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sIdentifier(pIdentifier); + std::string sDisplayName(pDisplayName); + std::string sTag(pTag); + IBase* pBaseNode(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pBasePackagePart = pIAttachment->PackagePart(); + pBaseNode = pIImplicitFunction->AddFunctionCallNode(sIdentifier, sDisplayName, sTag); - *pPackagePart = (IBase*)(pBasePackagePart); + *pNode = (IBase*)(pBaseNode); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addHandleResult("PackagePart", *pPackagePart); + pJournalEntry->addHandleResult("Node", *pNode); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -7055,47 +16482,27 @@ Lib3MFResult lib3mf_attachment_packagepart(Lib3MF_Attachment pAttachment, Lib3MF } } -Lib3MFResult lib3mf_attachment_getrelationshiptype(Lib3MF_Attachment pAttachment, const Lib3MF_uint32 nPathBufferSize, Lib3MF_uint32* pPathNeededChars, char * pPathBuffer) +Lib3MFResult lib3mf_implicitfunction_getnodes(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_NodeIterator * pIterator) { - IBase* pIBaseClass = (IBase *)pAttachment; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "GetRelationShipType"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "GetNodes"); } - if ( (!pPathBuffer) && !(pPathNeededChars) ) + if (pIterator == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sPath(""); - IAttachment* pIAttachment = dynamic_cast(pIBaseClass); - if (!pIAttachment) + IBase* pBaseIterator(nullptr); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - bool isCacheCall = (pPathBuffer == nullptr); - if (isCacheCall) { - sPath = pIAttachment->GetRelationShipType(); + pBaseIterator = pIImplicitFunction->GetNodes(); - pIAttachment->_setCache (new ParameterCache_1 (sPath)); - } - else { - auto cache = dynamic_cast*> (pIAttachment->_getCache ()); - if (cache == nullptr) - throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - cache->retrieveData (sPath); - pIAttachment->_setCache (nullptr); - } - - if (pPathNeededChars) - *pPathNeededChars = (Lib3MF_uint32) (sPath.size()+1); - if (pPathBuffer) { - if (sPath.size() >= nPathBufferSize) - throw ELib3MFInterfaceException (LIB3MF_ERROR_BUFFERTOOSMALL); - for (size_t iPath = 0; iPath < sPath.size(); iPath++) - pPathBuffer[iPath] = sPath[iPath]; - pPathBuffer[sPath.size()] = 0; - } + *pIterator = (IBase*)(pBaseIterator); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addStringResult("Path", sPath.c_str()); + pJournalEntry->addHandleResult("Iterator", *pIterator); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -7111,24 +16518,26 @@ Lib3MFResult lib3mf_attachment_getrelationshiptype(Lib3MF_Attachment pAttachment } } -Lib3MFResult lib3mf_attachment_setrelationshiptype(Lib3MF_Attachment pAttachment, const char * pPath) +Lib3MFResult lib3mf_implicitfunction_removenode(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitNode pNode) { - IBase* pIBaseClass = (IBase *)pAttachment; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "SetRelationShipType"); - pJournalEntry->addStringParameter("Path", pPath); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "RemoveNode"); + pJournalEntry->addHandleParameter("Node", pNode); } - if (pPath == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sPath(pPath); - IAttachment* pIAttachment = dynamic_cast(pIBaseClass); - if (!pIAttachment) + IBase* pIBaseClassNode = (IBase *)pNode; + IImplicitNode* pINode = dynamic_cast(pIBaseClassNode); + if (!pINode) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIAttachment->SetRelationShipType(sPath); + pIImplicitFunction->RemoveNode(pINode); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -7146,24 +16555,32 @@ Lib3MFResult lib3mf_attachment_setrelationshiptype(Lib3MF_Attachment pAttachment } } -Lib3MFResult lib3mf_attachment_writetofile(Lib3MF_Attachment pAttachment, const char * pFileName) +Lib3MFResult lib3mf_implicitfunction_addlink(Lib3MF_ImplicitFunction pImplicitFunction, Lib3MF_ImplicitPort pSource, Lib3MF_ImplicitPort pTarget) { - IBase* pIBaseClass = (IBase *)pAttachment; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "WriteToFile"); - pJournalEntry->addStringParameter("FileName", pFileName); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddLink"); + pJournalEntry->addHandleParameter("Source", pSource); + pJournalEntry->addHandleParameter("Target", pTarget); } - if (pFileName == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sFileName(pFileName); - IAttachment* pIAttachment = dynamic_cast(pIBaseClass); - if (!pIAttachment) + IBase* pIBaseClassSource = (IBase *)pSource; + IImplicitPort* pISource = dynamic_cast(pIBaseClassSource); + if (!pISource) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IBase* pIBaseClassTarget = (IBase *)pTarget; + IImplicitPort* pITarget = dynamic_cast(pIBaseClassTarget); + if (!pITarget) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIAttachment->WriteToFile(sFileName); + pIImplicitFunction->AddLink(pISource, pITarget); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -7181,24 +16598,28 @@ Lib3MFResult lib3mf_attachment_writetofile(Lib3MF_Attachment pAttachment, const } } -Lib3MFResult lib3mf_attachment_readfromfile(Lib3MF_Attachment pAttachment, const char * pFileName) +Lib3MFResult lib3mf_implicitfunction_addlinkbynames(Lib3MF_ImplicitFunction pImplicitFunction, const char * pSource, const char * pTarget) { - IBase* pIBaseClass = (IBase *)pAttachment; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "ReadFromFile"); - pJournalEntry->addStringParameter("FileName", pFileName); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "AddLinkByNames"); + pJournalEntry->addStringParameter("Source", pSource); + pJournalEntry->addStringParameter("Target", pTarget); } - if (pFileName == nullptr) + if (pSource == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - std::string sFileName(pFileName); - IAttachment* pIAttachment = dynamic_cast(pIBaseClass); - if (!pIAttachment) + if (pTarget == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + std::string sSource(pSource); + std::string sTarget(pTarget); + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIAttachment->ReadFromFile(sFileName); + pIImplicitFunction->AddLinkByNames(sSource, sTarget); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -7216,22 +16637,20 @@ Lib3MFResult lib3mf_attachment_readfromfile(Lib3MF_Attachment pAttachment, const } } -Lib3MFResult lib3mf_attachment_readfromcallback(Lib3MF_Attachment pAttachment, Lib3MFReadCallback pTheReadCallback, Lib3MF_uint64 nStreamSize, Lib3MFSeekCallback pTheSeekCallback, Lib3MF_pvoid pUserData) +Lib3MFResult lib3mf_implicitfunction_clear(Lib3MF_ImplicitFunction pImplicitFunction) { - IBase* pIBaseClass = (IBase *)pAttachment; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "ReadFromCallback"); - pJournalEntry->addUInt64Parameter("StreamSize", nStreamSize); - pJournalEntry->addPointerParameter("UserData", pUserData); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "Clear"); } - IAttachment* pIAttachment = dynamic_cast(pIBaseClass); - if (!pIAttachment) + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIAttachment->ReadFromCallback(pTheReadCallback, nStreamSize, pTheSeekCallback, pUserData); + pIImplicitFunction->Clear(); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -7249,25 +16668,22 @@ Lib3MFResult lib3mf_attachment_readfromcallback(Lib3MF_Attachment pAttachment, L } } -Lib3MFResult lib3mf_attachment_getstreamsize(Lib3MF_Attachment pAttachment, Lib3MF_uint64 * pStreamSize) +Lib3MFResult lib3mf_implicitfunction_sortnodestopologically(Lib3MF_ImplicitFunction pImplicitFunction) { - IBase* pIBaseClass = (IBase *)pAttachment; + IBase* pIBaseClass = (IBase *)pImplicitFunction; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "GetStreamSize"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pImplicitFunction, "ImplicitFunction", "SortNodesTopologically"); } - if (pStreamSize == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IAttachment* pIAttachment = dynamic_cast(pIBaseClass); - if (!pIAttachment) + IImplicitFunction* pIImplicitFunction = dynamic_cast(pIBaseClass); + if (!pIImplicitFunction) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pStreamSize = pIAttachment->GetStreamSize(); + pIImplicitFunction->SortNodesTopologically(); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addUInt64Result("StreamSize", *pStreamSize); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -7283,24 +16699,31 @@ Lib3MFResult lib3mf_attachment_getstreamsize(Lib3MF_Attachment pAttachment, Lib3 } } -Lib3MFResult lib3mf_attachment_writetobuffer(Lib3MF_Attachment pAttachment, const Lib3MF_uint64 nBufferBufferSize, Lib3MF_uint64* pBufferNeededCount, Lib3MF_uint8 * pBufferBuffer) + +/************************************************************************************************************************* + Class implementation for FunctionFromImage3D +**************************************************************************************************************************/ +Lib3MFResult lib3mf_functionfromimage3d_getimage3d(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D * pImage3D) { - IBase* pIBaseClass = (IBase *)pAttachment; + IBase* pIBaseClass = (IBase *)pFunctionFromImage3D; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "WriteToBuffer"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionFromImage3D, "FunctionFromImage3D", "GetImage3D"); } - if ((!pBufferBuffer) && !(pBufferNeededCount)) + if (pImage3D == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IAttachment* pIAttachment = dynamic_cast(pIBaseClass); - if (!pIAttachment) + IBase* pBaseImage3D(nullptr); + IFunctionFromImage3D* pIFunctionFromImage3D = dynamic_cast(pIBaseClass); + if (!pIFunctionFromImage3D) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIAttachment->WriteToBuffer(nBufferBufferSize, pBufferNeededCount, pBufferBuffer); + pBaseImage3D = pIFunctionFromImage3D->GetImage3D(); + *pImage3D = (IBase*)(pBaseImage3D); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Image3D", *pImage3D); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -7316,22 +16739,26 @@ Lib3MFResult lib3mf_attachment_writetobuffer(Lib3MF_Attachment pAttachment, cons } } -Lib3MFResult lib3mf_attachment_readfrombuffer(Lib3MF_Attachment pAttachment, Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer) +Lib3MFResult lib3mf_functionfromimage3d_setimage3d(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_Image3D pImage3D) { - IBase* pIBaseClass = (IBase *)pAttachment; + IBase* pIBaseClass = (IBase *)pFunctionFromImage3D; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pAttachment, "Attachment", "ReadFromBuffer"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionFromImage3D, "FunctionFromImage3D", "SetImage3D"); + pJournalEntry->addHandleParameter("Image3D", pImage3D); } - if ( (!pBufferBuffer) && (nBufferBufferSize>0)) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IAttachment* pIAttachment = dynamic_cast(pIBaseClass); - if (!pIAttachment) + IBase* pIBaseClassImage3D = (IBase *)pImage3D; + IImage3D* pIImage3D = dynamic_cast(pIBaseClassImage3D); + if (!pIImage3D) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IFunctionFromImage3D* pIFunctionFromImage3D = dynamic_cast(pIBaseClass); + if (!pIFunctionFromImage3D) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pIAttachment->ReadFromBuffer(nBufferBufferSize, pBufferBuffer); + pIFunctionFromImage3D->SetImage3D(pIImage3D); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -7349,31 +16776,23 @@ Lib3MFResult lib3mf_attachment_readfrombuffer(Lib3MF_Attachment pAttachment, Lib } } - -/************************************************************************************************************************* - Class implementation for Texture2D -**************************************************************************************************************************/ -Lib3MFResult lib3mf_texture2d_getattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment * pAttachment) +Lib3MFResult lib3mf_functionfromimage3d_setfilter(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureFilter eFilter) { - IBase* pIBaseClass = (IBase *)pTexture2D; + IBase* pIBaseClass = (IBase *)pFunctionFromImage3D; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "GetAttachment"); - } - if (pAttachment == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBase* pBaseAttachment(nullptr); - ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); - if (!pITexture2D) + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionFromImage3D, "FunctionFromImage3D", "SetFilter"); + pJournalEntry->addEnumParameter("Filter", "TextureFilter", (Lib3MF_int32)(eFilter)); + } + IFunctionFromImage3D* pIFunctionFromImage3D = dynamic_cast(pIBaseClass); + if (!pIFunctionFromImage3D) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pBaseAttachment = pITexture2D->GetAttachment(); + pIFunctionFromImage3D->SetFilter(eFilter); - *pAttachment = (IBase*)(pBaseAttachment); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addHandleResult("Attachment", *pAttachment); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -7389,28 +16808,25 @@ Lib3MFResult lib3mf_texture2d_getattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_ } } -Lib3MFResult lib3mf_texture2d_setattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_Attachment pAttachment) +Lib3MFResult lib3mf_functionfromimage3d_getfilter(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureFilter * pFilter) { - IBase* pIBaseClass = (IBase *)pTexture2D; + IBase* pIBaseClass = (IBase *)pFunctionFromImage3D; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "SetAttachment"); - pJournalEntry->addHandleParameter("Attachment", pAttachment); + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionFromImage3D, "FunctionFromImage3D", "GetFilter"); } - IBase* pIBaseClassAttachment = (IBase *)pAttachment; - IAttachment* pIAttachment = dynamic_cast(pIBaseClassAttachment); - if (!pIAttachment) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); - - ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); - if (!pITexture2D) + if (pFilter == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IFunctionFromImage3D* pIFunctionFromImage3D = dynamic_cast(pIBaseClass); + if (!pIFunctionFromImage3D) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pITexture2D->SetAttachment(pIAttachment); + *pFilter = pIFunctionFromImage3D->GetFilter(); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addEnumResult("Filter", "TextureFilter", (Lib3MF_int32)(*pFilter)); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -7426,25 +16842,25 @@ Lib3MFResult lib3mf_texture2d_setattachment(Lib3MF_Texture2D pTexture2D, Lib3MF_ } } -Lib3MFResult lib3mf_texture2d_getcontenttype(Lib3MF_Texture2D pTexture2D, eLib3MFTextureType * pContentType) +Lib3MFResult lib3mf_functionfromimage3d_settilestyles(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV, eLib3MFTextureTileStyle eTileStyleW) { - IBase* pIBaseClass = (IBase *)pTexture2D; + IBase* pIBaseClass = (IBase *)pFunctionFromImage3D; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "GetContentType"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionFromImage3D, "FunctionFromImage3D", "SetTileStyles"); + pJournalEntry->addEnumParameter("TileStyleU", "TextureTileStyle", (Lib3MF_int32)(eTileStyleU)); + pJournalEntry->addEnumParameter("TileStyleV", "TextureTileStyle", (Lib3MF_int32)(eTileStyleV)); + pJournalEntry->addEnumParameter("TileStyleW", "TextureTileStyle", (Lib3MF_int32)(eTileStyleW)); } - if (pContentType == nullptr) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); - if (!pITexture2D) + IFunctionFromImage3D* pIFunctionFromImage3D = dynamic_cast(pIBaseClass); + if (!pIFunctionFromImage3D) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pContentType = pITexture2D->GetContentType(); + pIFunctionFromImage3D->SetTileStyles(eTileStyleU, eTileStyleV, eTileStyleW); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addEnumResult("ContentType", "TextureType", (Lib3MF_int32)(*pContentType)); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -7460,23 +16876,31 @@ Lib3MFResult lib3mf_texture2d_getcontenttype(Lib3MF_Texture2D pTexture2D, eLib3M } } -Lib3MFResult lib3mf_texture2d_setcontenttype(Lib3MF_Texture2D pTexture2D, eLib3MFTextureType eContentType) +Lib3MFResult lib3mf_functionfromimage3d_gettilestyles(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV, eLib3MFTextureTileStyle * pTileStyleW) { - IBase* pIBaseClass = (IBase *)pTexture2D; + IBase* pIBaseClass = (IBase *)pFunctionFromImage3D; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "SetContentType"); - pJournalEntry->addEnumParameter("ContentType", "TextureType", (Lib3MF_int32)(eContentType)); + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionFromImage3D, "FunctionFromImage3D", "GetTileStyles"); } - ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); - if (!pITexture2D) + if (!pTileStyleU) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (!pTileStyleV) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + if (!pTileStyleW) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IFunctionFromImage3D* pIFunctionFromImage3D = dynamic_cast(pIBaseClass); + if (!pIFunctionFromImage3D) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pITexture2D->SetContentType(eContentType); + pIFunctionFromImage3D->GetTileStyles(*pTileStyleU, *pTileStyleV, *pTileStyleW); if (pJournalEntry.get() != nullptr) { + pJournalEntry->addEnumResult("TileStyleU", "TextureTileStyle", (Lib3MF_int32)(*pTileStyleU)); + pJournalEntry->addEnumResult("TileStyleV", "TextureTileStyle", (Lib3MF_int32)(*pTileStyleV)); + pJournalEntry->addEnumResult("TileStyleW", "TextureTileStyle", (Lib3MF_int32)(*pTileStyleW)); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -7492,28 +16916,25 @@ Lib3MFResult lib3mf_texture2d_setcontenttype(Lib3MF_Texture2D pTexture2D, eLib3M } } -Lib3MFResult lib3mf_texture2d_gettilestyleuv(Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle * pTileStyleU, eLib3MFTextureTileStyle * pTileStyleV) +Lib3MFResult lib3mf_functionfromimage3d_getoffset(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pOffset) { - IBase* pIBaseClass = (IBase *)pTexture2D; + IBase* pIBaseClass = (IBase *)pFunctionFromImage3D; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "GetTileStyleUV"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionFromImage3D, "FunctionFromImage3D", "GetOffset"); } - if (!pTileStyleU) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - if (!pTileStyleV) + if (pOffset == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); - if (!pITexture2D) + IFunctionFromImage3D* pIFunctionFromImage3D = dynamic_cast(pIBaseClass); + if (!pIFunctionFromImage3D) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pITexture2D->GetTileStyleUV(*pTileStyleU, *pTileStyleV); + *pOffset = pIFunctionFromImage3D->GetOffset(); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addEnumResult("TileStyleU", "TextureTileStyle", (Lib3MF_int32)(*pTileStyleU)); - pJournalEntry->addEnumResult("TileStyleV", "TextureTileStyle", (Lib3MF_int32)(*pTileStyleV)); + pJournalEntry->addDoubleResult("Offset", *pOffset); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -7529,22 +16950,21 @@ Lib3MFResult lib3mf_texture2d_gettilestyleuv(Lib3MF_Texture2D pTexture2D, eLib3M } } -Lib3MFResult lib3mf_texture2d_settilestyleuv(Lib3MF_Texture2D pTexture2D, eLib3MFTextureTileStyle eTileStyleU, eLib3MFTextureTileStyle eTileStyleV) +Lib3MFResult lib3mf_functionfromimage3d_setoffset(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dOffset) { - IBase* pIBaseClass = (IBase *)pTexture2D; + IBase* pIBaseClass = (IBase *)pFunctionFromImage3D; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "SetTileStyleUV"); - pJournalEntry->addEnumParameter("TileStyleU", "TextureTileStyle", (Lib3MF_int32)(eTileStyleU)); - pJournalEntry->addEnumParameter("TileStyleV", "TextureTileStyle", (Lib3MF_int32)(eTileStyleV)); + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionFromImage3D, "FunctionFromImage3D", "SetOffset"); + pJournalEntry->addDoubleParameter("Offset", dOffset); } - ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); - if (!pITexture2D) + IFunctionFromImage3D* pIFunctionFromImage3D = dynamic_cast(pIBaseClass); + if (!pIFunctionFromImage3D) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pITexture2D->SetTileStyleUV(eTileStyleU, eTileStyleV); + pIFunctionFromImage3D->SetOffset(dOffset); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -7562,25 +16982,25 @@ Lib3MFResult lib3mf_texture2d_settilestyleuv(Lib3MF_Texture2D pTexture2D, eLib3M } } -Lib3MFResult lib3mf_texture2d_getfilter(Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter * pFilter) +Lib3MFResult lib3mf_functionfromimage3d_getscale(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double * pScale) { - IBase* pIBaseClass = (IBase *)pTexture2D; + IBase* pIBaseClass = (IBase *)pFunctionFromImage3D; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "GetFilter"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionFromImage3D, "FunctionFromImage3D", "GetScale"); } - if (pFilter == nullptr) + if (pScale == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); - if (!pITexture2D) + IFunctionFromImage3D* pIFunctionFromImage3D = dynamic_cast(pIBaseClass); + if (!pIFunctionFromImage3D) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - *pFilter = pITexture2D->GetFilter(); + *pScale = pIFunctionFromImage3D->GetScale(); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addEnumResult("Filter", "TextureFilter", (Lib3MF_int32)(*pFilter)); + pJournalEntry->addDoubleResult("Scale", *pScale); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -7596,21 +17016,21 @@ Lib3MFResult lib3mf_texture2d_getfilter(Lib3MF_Texture2D pTexture2D, eLib3MFText } } -Lib3MFResult lib3mf_texture2d_setfilter(Lib3MF_Texture2D pTexture2D, eLib3MFTextureFilter eFilter) +Lib3MFResult lib3mf_functionfromimage3d_setscale(Lib3MF_FunctionFromImage3D pFunctionFromImage3D, Lib3MF_double dScale) { - IBase* pIBaseClass = (IBase *)pTexture2D; + IBase* pIBaseClass = (IBase *)pFunctionFromImage3D; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pTexture2D, "Texture2D", "SetFilter"); - pJournalEntry->addEnumParameter("Filter", "TextureFilter", (Lib3MF_int32)(eFilter)); + pJournalEntry = m_GlobalJournal->beginClassMethod(pFunctionFromImage3D, "FunctionFromImage3D", "SetScale"); + pJournalEntry->addDoubleParameter("Scale", dScale); } - ITexture2D* pITexture2D = dynamic_cast(pIBaseClass); - if (!pITexture2D) + IFunctionFromImage3D* pIFunctionFromImage3D = dynamic_cast(pIBaseClass); + if (!pIFunctionFromImage3D) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pITexture2D->SetFilter(eFilter); + pIFunctionFromImage3D->SetScale(dScale); if (pJournalEntry.get() != nullptr) { pJournalEntry->writeSuccess(); @@ -11255,6 +20675,43 @@ Lib3MFResult lib3mf_model_getslicestackbyid(Lib3MF_Model pModel, Lib3MF_uint32 n } } +Lib3MFResult lib3mf_model_getlevelsetbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_LevelSet * pLevelSetObjectInstance) +{ + IBase* pIBaseClass = (IBase *)pModel; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "GetLevelSetByID"); + pJournalEntry->addUInt32Parameter("UniqueResourceID", nUniqueResourceID); + } + if (pLevelSetObjectInstance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseLevelSetObjectInstance(nullptr); + IModel* pIModel = dynamic_cast(pIBaseClass); + if (!pIModel) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseLevelSetObjectInstance = pIModel->GetLevelSetByID(nUniqueResourceID); + + *pLevelSetObjectInstance = (IBase*)(pBaseLevelSetObjectInstance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("LevelSetObjectInstance", *pLevelSetObjectInstance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + Lib3MFResult lib3mf_model_getbuilduuid(Lib3MF_Model pModel, bool * pHasUUID, const Lib3MF_uint32 nUUIDBufferSize, Lib3MF_uint32* pUUIDNeededChars, char * pUUIDBuffer) { IBase* pIBaseClass = (IBase *)pModel; @@ -11814,6 +21271,42 @@ Lib3MFResult lib3mf_model_getslicestacks(Lib3MF_Model pModel, Lib3MF_SliceStackI } } +Lib3MFResult lib3mf_model_getimage3ds(Lib3MF_Model pModel, Lib3MF_Image3DIterator * pResourceIterator) +{ + IBase* pIBaseClass = (IBase *)pModel; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "GetImage3Ds"); + } + if (pResourceIterator == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseResourceIterator(nullptr); + IModel* pIModel = dynamic_cast(pIBaseClass); + if (!pIModel) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseResourceIterator = pIModel->GetImage3Ds(); + + *pResourceIterator = (IBase*)(pBaseResourceIterator); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("ResourceIterator", *pResourceIterator); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + Lib3MFResult lib3mf_model_mergetomodel(Lib3MF_Model pModel, Lib3MF_Model * pMergedModelInstance) { IBase* pIBaseClass = (IBase *)pModel; @@ -11850,6 +21343,43 @@ Lib3MFResult lib3mf_model_mergetomodel(Lib3MF_Model pModel, Lib3MF_Model * pMerg } } +Lib3MFResult lib3mf_model_mergefrommodel(Lib3MF_Model pModel, Lib3MF_Model pModelInstance) +{ + IBase* pIBaseClass = (IBase *)pModel; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "MergeFromModel"); + pJournalEntry->addHandleParameter("ModelInstance", pModelInstance); + } + IBase* pIBaseClassModelInstance = (IBase *)pModelInstance; + IModel* pIModelInstance = dynamic_cast(pIBaseClassModelInstance); + if (!pIModelInstance) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IModel* pIModel = dynamic_cast(pIBaseClass); + if (!pIModel) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIModel->MergeFromModel(pIModelInstance); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + Lib3MFResult lib3mf_model_addmeshobject(Lib3MF_Model pModel, Lib3MF_MeshObject * pMeshObjectInstance) { IBase* pIBaseClass = (IBase *)pModel; @@ -12055,9 +21585,93 @@ Lib3MFResult lib3mf_model_addcolorgroup(Lib3MF_Model pModel, Lib3MF_ColorGroup * pBaseColorGroupInstance = pIModel->AddColorGroup(); - *pColorGroupInstance = (IBase*)(pBaseColorGroupInstance); + *pColorGroupInstance = (IBase*)(pBaseColorGroupInstance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("ColorGroupInstance", *pColorGroupInstance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_model_addtexture2dgroup(Lib3MF_Model pModel, Lib3MF_Texture2D pTexture2DInstance, Lib3MF_Texture2DGroup * pTexture2DGroupInstance) +{ + IBase* pIBaseClass = (IBase *)pModel; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "AddTexture2DGroup"); + pJournalEntry->addHandleParameter("Texture2DInstance", pTexture2DInstance); + } + if (pTexture2DGroupInstance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pIBaseClassTexture2DInstance = (IBase *)pTexture2DInstance; + ITexture2D* pITexture2DInstance = dynamic_cast(pIBaseClassTexture2DInstance); + if (!pITexture2DInstance) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IBase* pBaseTexture2DGroupInstance(nullptr); + IModel* pIModel = dynamic_cast(pIBaseClass); + if (!pIModel) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseTexture2DGroupInstance = pIModel->AddTexture2DGroup(pITexture2DInstance); + + *pTexture2DGroupInstance = (IBase*)(pBaseTexture2DGroupInstance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("Texture2DGroupInstance", *pTexture2DGroupInstance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_model_addcompositematerials(Lib3MF_Model pModel, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance, Lib3MF_CompositeMaterials * pCompositeMaterialsInstance) +{ + IBase* pIBaseClass = (IBase *)pModel; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "AddCompositeMaterials"); + pJournalEntry->addHandleParameter("BaseMaterialGroupInstance", pBaseMaterialGroupInstance); + } + if (pCompositeMaterialsInstance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pIBaseClassBaseMaterialGroupInstance = (IBase *)pBaseMaterialGroupInstance; + IBaseMaterialGroup* pIBaseMaterialGroupInstance = dynamic_cast(pIBaseClassBaseMaterialGroupInstance); + if (!pIBaseMaterialGroupInstance) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IBase* pBaseCompositeMaterialsInstance(nullptr); + IModel* pIModel = dynamic_cast(pIBaseClass); + if (!pIModel) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseCompositeMaterialsInstance = pIModel->AddCompositeMaterials(pIBaseMaterialGroupInstance); + + *pCompositeMaterialsInstance = (IBase*)(pBaseCompositeMaterialsInstance); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addHandleResult("ColorGroupInstance", *pColorGroupInstance); + pJournalEntry->addHandleResult("CompositeMaterialsInstance", *pCompositeMaterialsInstance); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -12073,33 +21687,27 @@ Lib3MFResult lib3mf_model_addcolorgroup(Lib3MF_Model pModel, Lib3MF_ColorGroup * } } -Lib3MFResult lib3mf_model_addtexture2dgroup(Lib3MF_Model pModel, Lib3MF_Texture2D pTexture2DInstance, Lib3MF_Texture2DGroup * pTexture2DGroupInstance) +Lib3MFResult lib3mf_model_addmultipropertygroup(Lib3MF_Model pModel, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance) { IBase* pIBaseClass = (IBase *)pModel; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "AddTexture2DGroup"); - pJournalEntry->addHandleParameter("Texture2DInstance", pTexture2DInstance); + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "AddMultiPropertyGroup"); } - if (pTexture2DGroupInstance == nullptr) + if (pMultiPropertyGroupInstance == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBase* pIBaseClassTexture2DInstance = (IBase *)pTexture2DInstance; - ITexture2D* pITexture2DInstance = dynamic_cast(pIBaseClassTexture2DInstance); - if (!pITexture2DInstance) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); - - IBase* pBaseTexture2DGroupInstance(nullptr); + IBase* pBaseMultiPropertyGroupInstance(nullptr); IModel* pIModel = dynamic_cast(pIBaseClass); if (!pIModel) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pBaseTexture2DGroupInstance = pIModel->AddTexture2DGroup(pITexture2DInstance); + pBaseMultiPropertyGroupInstance = pIModel->AddMultiPropertyGroup(); - *pTexture2DGroupInstance = (IBase*)(pBaseTexture2DGroupInstance); + *pMultiPropertyGroupInstance = (IBase*)(pBaseMultiPropertyGroupInstance); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addHandleResult("Texture2DGroupInstance", *pTexture2DGroupInstance); + pJournalEntry->addHandleResult("MultiPropertyGroupInstance", *pMultiPropertyGroupInstance); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -12115,33 +21723,30 @@ Lib3MFResult lib3mf_model_addtexture2dgroup(Lib3MF_Model pModel, Lib3MF_Texture2 } } -Lib3MFResult lib3mf_model_addcompositematerials(Lib3MF_Model pModel, Lib3MF_BaseMaterialGroup pBaseMaterialGroupInstance, Lib3MF_CompositeMaterials * pCompositeMaterialsInstance) +Lib3MFResult lib3mf_model_addimagestack(Lib3MF_Model pModel, Lib3MF_uint32 nColumnCount, Lib3MF_uint32 nRowCount, Lib3MF_uint32 nSheetCount, Lib3MF_ImageStack * pInstance) { IBase* pIBaseClass = (IBase *)pModel; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "AddCompositeMaterials"); - pJournalEntry->addHandleParameter("BaseMaterialGroupInstance", pBaseMaterialGroupInstance); + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "AddImageStack"); + pJournalEntry->addUInt32Parameter("ColumnCount", nColumnCount); + pJournalEntry->addUInt32Parameter("RowCount", nRowCount); + pJournalEntry->addUInt32Parameter("SheetCount", nSheetCount); } - if (pCompositeMaterialsInstance == nullptr) + if (pInstance == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBase* pIBaseClassBaseMaterialGroupInstance = (IBase *)pBaseMaterialGroupInstance; - IBaseMaterialGroup* pIBaseMaterialGroupInstance = dynamic_cast(pIBaseClassBaseMaterialGroupInstance); - if (!pIBaseMaterialGroupInstance) - throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); - - IBase* pBaseCompositeMaterialsInstance(nullptr); + IBase* pBaseInstance(nullptr); IModel* pIModel = dynamic_cast(pIBaseClass); if (!pIModel) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pBaseCompositeMaterialsInstance = pIModel->AddCompositeMaterials(pIBaseMaterialGroupInstance); + pBaseInstance = pIModel->AddImageStack(nColumnCount, nRowCount, nSheetCount); - *pCompositeMaterialsInstance = (IBase*)(pBaseCompositeMaterialsInstance); + *pInstance = (IBase*)(pBaseInstance); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addHandleResult("CompositeMaterialsInstance", *pCompositeMaterialsInstance); + pJournalEntry->addHandleResult("Instance", *pInstance); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -12157,27 +21762,28 @@ Lib3MFResult lib3mf_model_addcompositematerials(Lib3MF_Model pModel, Lib3MF_Base } } -Lib3MFResult lib3mf_model_addmultipropertygroup(Lib3MF_Model pModel, Lib3MF_MultiPropertyGroup * pMultiPropertyGroupInstance) +Lib3MFResult lib3mf_model_getimagestackbyid(Lib3MF_Model pModel, Lib3MF_uint32 nUniqueResourceID, Lib3MF_ImageStack * pImageStackInstance) { IBase* pIBaseClass = (IBase *)pModel; PLib3MFInterfaceJournalEntry pJournalEntry; try { if (m_GlobalJournal.get() != nullptr) { - pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "AddMultiPropertyGroup"); + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "GetImageStackByID"); + pJournalEntry->addUInt32Parameter("UniqueResourceID", nUniqueResourceID); } - if (pMultiPropertyGroupInstance == nullptr) + if (pImageStackInstance == nullptr) throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); - IBase* pBaseMultiPropertyGroupInstance(nullptr); + IBase* pBaseImageStackInstance(nullptr); IModel* pIModel = dynamic_cast(pIBaseClass); if (!pIModel) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); - pBaseMultiPropertyGroupInstance = pIModel->AddMultiPropertyGroup(); + pBaseImageStackInstance = pIModel->GetImageStackByID(nUniqueResourceID); - *pMultiPropertyGroupInstance = (IBase*)(pBaseMultiPropertyGroupInstance); + *pImageStackInstance = (IBase*)(pBaseImageStackInstance); if (pJournalEntry.get() != nullptr) { - pJournalEntry->addHandleResult("MultiPropertyGroupInstance", *pMultiPropertyGroupInstance); + pJournalEntry->addHandleResult("ImageStackInstance", *pImageStackInstance); pJournalEntry->writeSuccess(); } return LIB3MF_SUCCESS; @@ -12779,6 +22385,265 @@ Lib3MFResult lib3mf_model_getkeystore(Lib3MF_Model pModel, Lib3MF_KeyStore * pKe } } +Lib3MFResult lib3mf_model_getfunctions(Lib3MF_Model pModel, Lib3MF_FunctionIterator * pTheResourceIterator) +{ + IBase* pIBaseClass = (IBase *)pModel; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "GetFunctions"); + } + if (pTheResourceIterator == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseTheResourceIterator(nullptr); + IModel* pIModel = dynamic_cast(pIBaseClass); + if (!pIModel) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseTheResourceIterator = pIModel->GetFunctions(); + + *pTheResourceIterator = (IBase*)(pBaseTheResourceIterator); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("TheResourceIterator", *pTheResourceIterator); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_model_addimplicitfunction(Lib3MF_Model pModel, Lib3MF_ImplicitFunction * pFunctionInstance) +{ + IBase* pIBaseClass = (IBase *)pModel; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "AddImplicitFunction"); + } + if (pFunctionInstance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseFunctionInstance(nullptr); + IModel* pIModel = dynamic_cast(pIBaseClass); + if (!pIModel) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseFunctionInstance = pIModel->AddImplicitFunction(); + + *pFunctionInstance = (IBase*)(pBaseFunctionInstance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("FunctionInstance", *pFunctionInstance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_model_addfunctionfromimage3d(Lib3MF_Model pModel, Lib3MF_Image3D pImage3DInstance, Lib3MF_FunctionFromImage3D * pFunctionInstance) +{ + IBase* pIBaseClass = (IBase *)pModel; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "AddFunctionFromImage3D"); + pJournalEntry->addHandleParameter("Image3DInstance", pImage3DInstance); + } + if (pFunctionInstance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pIBaseClassImage3DInstance = (IBase *)pImage3DInstance; + IImage3D* pIImage3DInstance = dynamic_cast(pIBaseClassImage3DInstance); + if (!pIImage3DInstance) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IBase* pBaseFunctionInstance(nullptr); + IModel* pIModel = dynamic_cast(pIBaseClass); + if (!pIModel) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseFunctionInstance = pIModel->AddFunctionFromImage3D(pIImage3DInstance); + + *pFunctionInstance = (IBase*)(pBaseFunctionInstance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("FunctionInstance", *pFunctionInstance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_model_addvolumedata(Lib3MF_Model pModel, Lib3MF_VolumeData * pVolumeDataInstance) +{ + IBase* pIBaseClass = (IBase *)pModel; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "AddVolumeData"); + } + if (pVolumeDataInstance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseVolumeDataInstance(nullptr); + IModel* pIModel = dynamic_cast(pIBaseClass); + if (!pIModel) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseVolumeDataInstance = pIModel->AddVolumeData(); + + *pVolumeDataInstance = (IBase*)(pBaseVolumeDataInstance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("VolumeDataInstance", *pVolumeDataInstance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_model_addlevelset(Lib3MF_Model pModel, Lib3MF_LevelSet * pLevelSetInstance) +{ + IBase* pIBaseClass = (IBase *)pModel; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "AddLevelSet"); + } + if (pLevelSetInstance == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseLevelSetInstance(nullptr); + IModel* pIModel = dynamic_cast(pIBaseClass); + if (!pIModel) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseLevelSetInstance = pIModel->AddLevelSet(); + + *pLevelSetInstance = (IBase*)(pBaseLevelSetInstance); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("LevelSetInstance", *pLevelSetInstance); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_model_getlevelsets(Lib3MF_Model pModel, Lib3MF_LevelSetIterator * pResourceIterator) +{ + IBase* pIBaseClass = (IBase *)pModel; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "GetLevelSets"); + } + if (pResourceIterator == nullptr) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDPARAM); + IBase* pBaseResourceIterator(nullptr); + IModel* pIModel = dynamic_cast(pIBaseClass); + if (!pIModel) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pBaseResourceIterator = pIModel->GetLevelSets(); + + *pResourceIterator = (IBase*)(pBaseResourceIterator); + if (pJournalEntry.get() != nullptr) { + pJournalEntry->addHandleResult("ResourceIterator", *pResourceIterator); + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + +Lib3MFResult lib3mf_model_removeresource(Lib3MF_Model pModel, Lib3MF_Resource pResource) +{ + IBase* pIBaseClass = (IBase *)pModel; + + PLib3MFInterfaceJournalEntry pJournalEntry; + try { + if (m_GlobalJournal.get() != nullptr) { + pJournalEntry = m_GlobalJournal->beginClassMethod(pModel, "Model", "RemoveResource"); + pJournalEntry->addHandleParameter("Resource", pResource); + } + IBase* pIBaseClassResource = (IBase *)pResource; + IResource* pIResource = dynamic_cast(pIBaseClassResource); + if (!pIResource) + throw ELib3MFInterfaceException (LIB3MF_ERROR_INVALIDCAST); + + IModel* pIModel = dynamic_cast(pIBaseClass); + if (!pIModel) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + pIModel->RemoveResource(pIResource); + + if (pJournalEntry.get() != nullptr) { + pJournalEntry->writeSuccess(); + } + return LIB3MF_SUCCESS; + } + catch (ELib3MFInterfaceException & Exception) { + return handleLib3MFException(pIBaseClass, Exception, pJournalEntry.get()); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException, pJournalEntry.get()); + } + catch (...) { + return handleUnhandledException(pIBaseClass, pJournalEntry.get()); + } +} + /************************************************************************************************************************* @@ -12890,6 +22755,12 @@ Lib3MFResult Lib3MF::Impl::Lib3MF_GetProcAddress (const char * pProcName, void * *ppProcAddress = (void*) &lib3mf_compositematerialsiterator_getcurrentcompositematerials; if (sProcName == "lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup") *ppProcAddress = (void*) &lib3mf_multipropertygroupiterator_getcurrentmultipropertygroup; + if (sProcName == "lib3mf_image3diterator_getcurrentimage3d") + *ppProcAddress = (void*) &lib3mf_image3diterator_getcurrentimage3d; + if (sProcName == "lib3mf_functioniterator_getcurrentfunction") + *ppProcAddress = (void*) &lib3mf_functioniterator_getcurrentfunction; + if (sProcName == "lib3mf_levelsetiterator_getcurrentlevelset") + *ppProcAddress = (void*) &lib3mf_levelsetiterator_getcurrentlevelset; if (sProcName == "lib3mf_metadata_getnamespace") *ppProcAddress = (void*) &lib3mf_metadata_getnamespace; if (sProcName == "lib3mf_metadata_setnamespace") @@ -12940,6 +22811,8 @@ Lib3MFResult Lib3MF::Impl::Lib3MF_GetProcAddress (const char * pProcName, void * *ppProcAddress = (void*) &lib3mf_object_ismeshobject; if (sProcName == "lib3mf_object_iscomponentsobject") *ppProcAddress = (void*) &lib3mf_object_iscomponentsobject; + if (sProcName == "lib3mf_object_islevelsetobject") + *ppProcAddress = (void*) &lib3mf_object_islevelsetobject; if (sProcName == "lib3mf_object_isvalid") *ppProcAddress = (void*) &lib3mf_object_isvalid; if (sProcName == "lib3mf_object_setattachmentasthumbnail") @@ -13008,6 +22881,42 @@ Lib3MFResult Lib3MF::Impl::Lib3MF_GetProcAddress (const char * pProcName, void * *ppProcAddress = (void*) &lib3mf_meshobject_ismanifoldandoriented; if (sProcName == "lib3mf_meshobject_beamlattice") *ppProcAddress = (void*) &lib3mf_meshobject_beamlattice; + if (sProcName == "lib3mf_meshobject_getvolumedata") + *ppProcAddress = (void*) &lib3mf_meshobject_getvolumedata; + if (sProcName == "lib3mf_meshobject_setvolumedata") + *ppProcAddress = (void*) &lib3mf_meshobject_setvolumedata; + if (sProcName == "lib3mf_levelset_getfunction") + *ppProcAddress = (void*) &lib3mf_levelset_getfunction; + if (sProcName == "lib3mf_levelset_setfunction") + *ppProcAddress = (void*) &lib3mf_levelset_setfunction; + if (sProcName == "lib3mf_levelset_gettransform") + *ppProcAddress = (void*) &lib3mf_levelset_gettransform; + if (sProcName == "lib3mf_levelset_settransform") + *ppProcAddress = (void*) &lib3mf_levelset_settransform; + if (sProcName == "lib3mf_levelset_getchannelname") + *ppProcAddress = (void*) &lib3mf_levelset_getchannelname; + if (sProcName == "lib3mf_levelset_setchannelname") + *ppProcAddress = (void*) &lib3mf_levelset_setchannelname; + if (sProcName == "lib3mf_levelset_setminfeaturesize") + *ppProcAddress = (void*) &lib3mf_levelset_setminfeaturesize; + if (sProcName == "lib3mf_levelset_getminfeaturesize") + *ppProcAddress = (void*) &lib3mf_levelset_getminfeaturesize; + if (sProcName == "lib3mf_levelset_setfallbackvalue") + *ppProcAddress = (void*) &lib3mf_levelset_setfallbackvalue; + if (sProcName == "lib3mf_levelset_getfallbackvalue") + *ppProcAddress = (void*) &lib3mf_levelset_getfallbackvalue; + if (sProcName == "lib3mf_levelset_setmeshbboxonly") + *ppProcAddress = (void*) &lib3mf_levelset_setmeshbboxonly; + if (sProcName == "lib3mf_levelset_getmeshbboxonly") + *ppProcAddress = (void*) &lib3mf_levelset_getmeshbboxonly; + if (sProcName == "lib3mf_levelset_setmesh") + *ppProcAddress = (void*) &lib3mf_levelset_setmesh; + if (sProcName == "lib3mf_levelset_getmesh") + *ppProcAddress = (void*) &lib3mf_levelset_getmesh; + if (sProcName == "lib3mf_levelset_getvolumedata") + *ppProcAddress = (void*) &lib3mf_levelset_getvolumedata; + if (sProcName == "lib3mf_levelset_setvolumedata") + *ppProcAddress = (void*) &lib3mf_levelset_setvolumedata; if (sProcName == "lib3mf_beamlattice_getminlength") *ppProcAddress = (void*) &lib3mf_beamlattice_getminlength; if (sProcName == "lib3mf_beamlattice_setminlength") @@ -13054,6 +22963,64 @@ Lib3MFResult Lib3MF::Impl::Lib3MF_GetProcAddress (const char * pProcName, void * *ppProcAddress = (void*) &lib3mf_beamlattice_addbeamset; if (sProcName == "lib3mf_beamlattice_getbeamset") *ppProcAddress = (void*) &lib3mf_beamlattice_getbeamset; + if (sProcName == "lib3mf_functionreference_getfunctionresourceid") + *ppProcAddress = (void*) &lib3mf_functionreference_getfunctionresourceid; + if (sProcName == "lib3mf_functionreference_setfunctionresourceid") + *ppProcAddress = (void*) &lib3mf_functionreference_setfunctionresourceid; + if (sProcName == "lib3mf_functionreference_gettransform") + *ppProcAddress = (void*) &lib3mf_functionreference_gettransform; + if (sProcName == "lib3mf_functionreference_settransform") + *ppProcAddress = (void*) &lib3mf_functionreference_settransform; + if (sProcName == "lib3mf_functionreference_getchannelname") + *ppProcAddress = (void*) &lib3mf_functionreference_getchannelname; + if (sProcName == "lib3mf_functionreference_setchannelname") + *ppProcAddress = (void*) &lib3mf_functionreference_setchannelname; + if (sProcName == "lib3mf_functionreference_setminfeaturesize") + *ppProcAddress = (void*) &lib3mf_functionreference_setminfeaturesize; + if (sProcName == "lib3mf_functionreference_getminfeaturesize") + *ppProcAddress = (void*) &lib3mf_functionreference_getminfeaturesize; + if (sProcName == "lib3mf_functionreference_setfallbackvalue") + *ppProcAddress = (void*) &lib3mf_functionreference_setfallbackvalue; + if (sProcName == "lib3mf_functionreference_getfallbackvalue") + *ppProcAddress = (void*) &lib3mf_functionreference_getfallbackvalue; + if (sProcName == "lib3mf_volumedatacomposite_getbasematerialgroup") + *ppProcAddress = (void*) &lib3mf_volumedatacomposite_getbasematerialgroup; + if (sProcName == "lib3mf_volumedatacomposite_setbasematerialgroup") + *ppProcAddress = (void*) &lib3mf_volumedatacomposite_setbasematerialgroup; + if (sProcName == "lib3mf_volumedatacomposite_getmaterialmappingcount") + *ppProcAddress = (void*) &lib3mf_volumedatacomposite_getmaterialmappingcount; + if (sProcName == "lib3mf_volumedatacomposite_getmaterialmapping") + *ppProcAddress = (void*) &lib3mf_volumedatacomposite_getmaterialmapping; + if (sProcName == "lib3mf_volumedatacomposite_addmaterialmapping") + *ppProcAddress = (void*) &lib3mf_volumedatacomposite_addmaterialmapping; + if (sProcName == "lib3mf_volumedatacomposite_removematerialmapping") + *ppProcAddress = (void*) &lib3mf_volumedatacomposite_removematerialmapping; + if (sProcName == "lib3mf_volumedataproperty_getname") + *ppProcAddress = (void*) &lib3mf_volumedataproperty_getname; + if (sProcName == "lib3mf_volumedataproperty_setisrequired") + *ppProcAddress = (void*) &lib3mf_volumedataproperty_setisrequired; + if (sProcName == "lib3mf_volumedataproperty_isrequired") + *ppProcAddress = (void*) &lib3mf_volumedataproperty_isrequired; + if (sProcName == "lib3mf_volumedata_getcomposite") + *ppProcAddress = (void*) &lib3mf_volumedata_getcomposite; + if (sProcName == "lib3mf_volumedata_createnewcomposite") + *ppProcAddress = (void*) &lib3mf_volumedata_createnewcomposite; + if (sProcName == "lib3mf_volumedata_removecomposite") + *ppProcAddress = (void*) &lib3mf_volumedata_removecomposite; + if (sProcName == "lib3mf_volumedata_getcolor") + *ppProcAddress = (void*) &lib3mf_volumedata_getcolor; + if (sProcName == "lib3mf_volumedata_createnewcolor") + *ppProcAddress = (void*) &lib3mf_volumedata_createnewcolor; + if (sProcName == "lib3mf_volumedata_removecolor") + *ppProcAddress = (void*) &lib3mf_volumedata_removecolor; + if (sProcName == "lib3mf_volumedata_getpropertycount") + *ppProcAddress = (void*) &lib3mf_volumedata_getpropertycount; + if (sProcName == "lib3mf_volumedata_getproperty") + *ppProcAddress = (void*) &lib3mf_volumedata_getproperty; + if (sProcName == "lib3mf_volumedata_addpropertyfromfunction") + *ppProcAddress = (void*) &lib3mf_volumedata_addpropertyfromfunction; + if (sProcName == "lib3mf_volumedata_removeproperty") + *ppProcAddress = (void*) &lib3mf_volumedata_removeproperty; if (sProcName == "lib3mf_component_getobjectresource") *ppProcAddress = (void*) &lib3mf_component_getobjectresource; if (sProcName == "lib3mf_component_getobjectresourceid") @@ -13166,6 +23133,32 @@ Lib3MFResult Lib3MF::Impl::Lib3MF_GetProcAddress (const char * pProcName, void * *ppProcAddress = (void*) &lib3mf_multipropertygroup_getlayer; if (sProcName == "lib3mf_multipropertygroup_removelayer") *ppProcAddress = (void*) &lib3mf_multipropertygroup_removelayer; + if (sProcName == "lib3mf_image3d_getname") + *ppProcAddress = (void*) &lib3mf_image3d_getname; + if (sProcName == "lib3mf_image3d_setname") + *ppProcAddress = (void*) &lib3mf_image3d_setname; + if (sProcName == "lib3mf_image3d_isimagestack") + *ppProcAddress = (void*) &lib3mf_image3d_isimagestack; + if (sProcName == "lib3mf_imagestack_getrowcount") + *ppProcAddress = (void*) &lib3mf_imagestack_getrowcount; + if (sProcName == "lib3mf_imagestack_setrowcount") + *ppProcAddress = (void*) &lib3mf_imagestack_setrowcount; + if (sProcName == "lib3mf_imagestack_getcolumncount") + *ppProcAddress = (void*) &lib3mf_imagestack_getcolumncount; + if (sProcName == "lib3mf_imagestack_setcolumncount") + *ppProcAddress = (void*) &lib3mf_imagestack_setcolumncount; + if (sProcName == "lib3mf_imagestack_getsheetcount") + *ppProcAddress = (void*) &lib3mf_imagestack_getsheetcount; + if (sProcName == "lib3mf_imagestack_getsheet") + *ppProcAddress = (void*) &lib3mf_imagestack_getsheet; + if (sProcName == "lib3mf_imagestack_setsheet") + *ppProcAddress = (void*) &lib3mf_imagestack_setsheet; + if (sProcName == "lib3mf_imagestack_createemptysheet") + *ppProcAddress = (void*) &lib3mf_imagestack_createemptysheet; + if (sProcName == "lib3mf_imagestack_createsheetfrombuffer") + *ppProcAddress = (void*) &lib3mf_imagestack_createsheetfrombuffer; + if (sProcName == "lib3mf_imagestack_createsheetfromfile") + *ppProcAddress = (void*) &lib3mf_imagestack_createsheetfromfile; if (sProcName == "lib3mf_attachment_getpath") *ppProcAddress = (void*) &lib3mf_attachment_getpath; if (sProcName == "lib3mf_attachment_setpath") @@ -13204,6 +23197,340 @@ Lib3MFResult Lib3MF::Impl::Lib3MF_GetProcAddress (const char * pProcName, void * *ppProcAddress = (void*) &lib3mf_texture2d_getfilter; if (sProcName == "lib3mf_texture2d_setfilter") *ppProcAddress = (void*) &lib3mf_texture2d_setfilter; + if (sProcName == "lib3mf_implicitport_getidentifier") + *ppProcAddress = (void*) &lib3mf_implicitport_getidentifier; + if (sProcName == "lib3mf_implicitport_setidentifier") + *ppProcAddress = (void*) &lib3mf_implicitport_setidentifier; + if (sProcName == "lib3mf_implicitport_getdisplayname") + *ppProcAddress = (void*) &lib3mf_implicitport_getdisplayname; + if (sProcName == "lib3mf_implicitport_setdisplayname") + *ppProcAddress = (void*) &lib3mf_implicitport_setdisplayname; + if (sProcName == "lib3mf_implicitport_settype") + *ppProcAddress = (void*) &lib3mf_implicitport_settype; + if (sProcName == "lib3mf_implicitport_gettype") + *ppProcAddress = (void*) &lib3mf_implicitport_gettype; + if (sProcName == "lib3mf_implicitport_getreference") + *ppProcAddress = (void*) &lib3mf_implicitport_getreference; + if (sProcName == "lib3mf_implicitport_setreference") + *ppProcAddress = (void*) &lib3mf_implicitport_setreference; + if (sProcName == "lib3mf_iterator_movenext") + *ppProcAddress = (void*) &lib3mf_iterator_movenext; + if (sProcName == "lib3mf_iterator_moveprevious") + *ppProcAddress = (void*) &lib3mf_iterator_moveprevious; + if (sProcName == "lib3mf_iterator_count") + *ppProcAddress = (void*) &lib3mf_iterator_count; + if (sProcName == "lib3mf_implicitportiterator_getcurrent") + *ppProcAddress = (void*) &lib3mf_implicitportiterator_getcurrent; + if (sProcName == "lib3mf_implicitnode_getidentifier") + *ppProcAddress = (void*) &lib3mf_implicitnode_getidentifier; + if (sProcName == "lib3mf_implicitnode_setidentifier") + *ppProcAddress = (void*) &lib3mf_implicitnode_setidentifier; + if (sProcName == "lib3mf_implicitnode_getdisplayname") + *ppProcAddress = (void*) &lib3mf_implicitnode_getdisplayname; + if (sProcName == "lib3mf_implicitnode_setdisplayname") + *ppProcAddress = (void*) &lib3mf_implicitnode_setdisplayname; + if (sProcName == "lib3mf_implicitnode_gettag") + *ppProcAddress = (void*) &lib3mf_implicitnode_gettag; + if (sProcName == "lib3mf_implicitnode_settag") + *ppProcAddress = (void*) &lib3mf_implicitnode_settag; + if (sProcName == "lib3mf_implicitnode_getnodetype") + *ppProcAddress = (void*) &lib3mf_implicitnode_getnodetype; + if (sProcName == "lib3mf_implicitnode_addinput") + *ppProcAddress = (void*) &lib3mf_implicitnode_addinput; + if (sProcName == "lib3mf_implicitnode_getinputs") + *ppProcAddress = (void*) &lib3mf_implicitnode_getinputs; + if (sProcName == "lib3mf_implicitnode_addoutput") + *ppProcAddress = (void*) &lib3mf_implicitnode_addoutput; + if (sProcName == "lib3mf_implicitnode_getoutputs") + *ppProcAddress = (void*) &lib3mf_implicitnode_getoutputs; + if (sProcName == "lib3mf_implicitnode_findinput") + *ppProcAddress = (void*) &lib3mf_implicitnode_findinput; + if (sProcName == "lib3mf_implicitnode_findoutput") + *ppProcAddress = (void*) &lib3mf_implicitnode_findoutput; + if (sProcName == "lib3mf_implicitnode_aretypesvalid") + *ppProcAddress = (void*) &lib3mf_implicitnode_aretypesvalid; + if (sProcName == "lib3mf_oneinputnode_getinputa") + *ppProcAddress = (void*) &lib3mf_oneinputnode_getinputa; + if (sProcName == "lib3mf_oneinputnode_getoutputresult") + *ppProcAddress = (void*) &lib3mf_oneinputnode_getoutputresult; + if (sProcName == "lib3mf_resourceidnode_setresource") + *ppProcAddress = (void*) &lib3mf_resourceidnode_setresource; + if (sProcName == "lib3mf_resourceidnode_getresource") + *ppProcAddress = (void*) &lib3mf_resourceidnode_getresource; + if (sProcName == "lib3mf_resourceidnode_getoutputvalue") + *ppProcAddress = (void*) &lib3mf_resourceidnode_getoutputvalue; + if (sProcName == "lib3mf_twoinputnode_getinputb") + *ppProcAddress = (void*) &lib3mf_twoinputnode_getinputb; + if (sProcName == "lib3mf_selectnode_getinputb") + *ppProcAddress = (void*) &lib3mf_selectnode_getinputb; + if (sProcName == "lib3mf_selectnode_getinputc") + *ppProcAddress = (void*) &lib3mf_selectnode_getinputc; + if (sProcName == "lib3mf_selectnode_getinputd") + *ppProcAddress = (void*) &lib3mf_selectnode_getinputd; + if (sProcName == "lib3mf_clampnode_getinputmin") + *ppProcAddress = (void*) &lib3mf_clampnode_getinputmin; + if (sProcName == "lib3mf_clampnode_getinputmax") + *ppProcAddress = (void*) &lib3mf_clampnode_getinputmax; + if (sProcName == "lib3mf_composevectornode_getinputx") + *ppProcAddress = (void*) &lib3mf_composevectornode_getinputx; + if (sProcName == "lib3mf_composevectornode_getinputy") + *ppProcAddress = (void*) &lib3mf_composevectornode_getinputy; + if (sProcName == "lib3mf_composevectornode_getinputz") + *ppProcAddress = (void*) &lib3mf_composevectornode_getinputz; + if (sProcName == "lib3mf_composevectornode_getoutputresult") + *ppProcAddress = (void*) &lib3mf_composevectornode_getoutputresult; + if (sProcName == "lib3mf_decomposevectornode_getinputa") + *ppProcAddress = (void*) &lib3mf_decomposevectornode_getinputa; + if (sProcName == "lib3mf_decomposevectornode_getoutputx") + *ppProcAddress = (void*) &lib3mf_decomposevectornode_getoutputx; + if (sProcName == "lib3mf_decomposevectornode_getoutputy") + *ppProcAddress = (void*) &lib3mf_decomposevectornode_getoutputy; + if (sProcName == "lib3mf_decomposevectornode_getoutputz") + *ppProcAddress = (void*) &lib3mf_decomposevectornode_getoutputz; + if (sProcName == "lib3mf_composematrixnode_getinputm00") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm00; + if (sProcName == "lib3mf_composematrixnode_getinputm01") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm01; + if (sProcName == "lib3mf_composematrixnode_getinputm02") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm02; + if (sProcName == "lib3mf_composematrixnode_getinputm03") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm03; + if (sProcName == "lib3mf_composematrixnode_getinputm10") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm10; + if (sProcName == "lib3mf_composematrixnode_getinputm11") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm11; + if (sProcName == "lib3mf_composematrixnode_getinputm12") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm12; + if (sProcName == "lib3mf_composematrixnode_getinputm13") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm13; + if (sProcName == "lib3mf_composematrixnode_getinputm20") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm20; + if (sProcName == "lib3mf_composematrixnode_getinputm21") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm21; + if (sProcName == "lib3mf_composematrixnode_getinputm22") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm22; + if (sProcName == "lib3mf_composematrixnode_getinputm23") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm23; + if (sProcName == "lib3mf_composematrixnode_getinputm30") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm30; + if (sProcName == "lib3mf_composematrixnode_getinputm31") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm31; + if (sProcName == "lib3mf_composematrixnode_getinputm32") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm32; + if (sProcName == "lib3mf_composematrixnode_getinputm33") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getinputm33; + if (sProcName == "lib3mf_composematrixnode_getoutputresult") + *ppProcAddress = (void*) &lib3mf_composematrixnode_getoutputresult; + if (sProcName == "lib3mf_matrixfromrowsnode_getinputa") + *ppProcAddress = (void*) &lib3mf_matrixfromrowsnode_getinputa; + if (sProcName == "lib3mf_matrixfromrowsnode_getinputb") + *ppProcAddress = (void*) &lib3mf_matrixfromrowsnode_getinputb; + if (sProcName == "lib3mf_matrixfromrowsnode_getinputc") + *ppProcAddress = (void*) &lib3mf_matrixfromrowsnode_getinputc; + if (sProcName == "lib3mf_matrixfromrowsnode_getinputd") + *ppProcAddress = (void*) &lib3mf_matrixfromrowsnode_getinputd; + if (sProcName == "lib3mf_matrixfromrowsnode_getoutputresult") + *ppProcAddress = (void*) &lib3mf_matrixfromrowsnode_getoutputresult; + if (sProcName == "lib3mf_matrixfromcolumnsnode_getinputa") + *ppProcAddress = (void*) &lib3mf_matrixfromcolumnsnode_getinputa; + if (sProcName == "lib3mf_matrixfromcolumnsnode_getinputb") + *ppProcAddress = (void*) &lib3mf_matrixfromcolumnsnode_getinputb; + if (sProcName == "lib3mf_matrixfromcolumnsnode_getinputc") + *ppProcAddress = (void*) &lib3mf_matrixfromcolumnsnode_getinputc; + if (sProcName == "lib3mf_matrixfromcolumnsnode_getinputd") + *ppProcAddress = (void*) &lib3mf_matrixfromcolumnsnode_getinputd; + if (sProcName == "lib3mf_matrixfromcolumnsnode_getoutputresult") + *ppProcAddress = (void*) &lib3mf_matrixfromcolumnsnode_getoutputresult; + if (sProcName == "lib3mf_constantnode_setconstant") + *ppProcAddress = (void*) &lib3mf_constantnode_setconstant; + if (sProcName == "lib3mf_constantnode_getconstant") + *ppProcAddress = (void*) &lib3mf_constantnode_getconstant; + if (sProcName == "lib3mf_constantnode_getoutputvalue") + *ppProcAddress = (void*) &lib3mf_constantnode_getoutputvalue; + if (sProcName == "lib3mf_constvecnode_setvector") + *ppProcAddress = (void*) &lib3mf_constvecnode_setvector; + if (sProcName == "lib3mf_constvecnode_getvector") + *ppProcAddress = (void*) &lib3mf_constvecnode_getvector; + if (sProcName == "lib3mf_constvecnode_getoutputvector") + *ppProcAddress = (void*) &lib3mf_constvecnode_getoutputvector; + if (sProcName == "lib3mf_constmatnode_setmatrix") + *ppProcAddress = (void*) &lib3mf_constmatnode_setmatrix; + if (sProcName == "lib3mf_constmatnode_getmatrix") + *ppProcAddress = (void*) &lib3mf_constmatnode_getmatrix; + if (sProcName == "lib3mf_constmatnode_getoutputmatrix") + *ppProcAddress = (void*) &lib3mf_constmatnode_getoutputmatrix; + if (sProcName == "lib3mf_meshnode_getinputmesh") + *ppProcAddress = (void*) &lib3mf_meshnode_getinputmesh; + if (sProcName == "lib3mf_meshnode_getinputpos") + *ppProcAddress = (void*) &lib3mf_meshnode_getinputpos; + if (sProcName == "lib3mf_meshnode_getoutputdistance") + *ppProcAddress = (void*) &lib3mf_meshnode_getoutputdistance; + if (sProcName == "lib3mf_unsignedmeshnode_getinputmesh") + *ppProcAddress = (void*) &lib3mf_unsignedmeshnode_getinputmesh; + if (sProcName == "lib3mf_unsignedmeshnode_getinputpos") + *ppProcAddress = (void*) &lib3mf_unsignedmeshnode_getinputpos; + if (sProcName == "lib3mf_unsignedmeshnode_getoutputdistance") + *ppProcAddress = (void*) &lib3mf_unsignedmeshnode_getoutputdistance; + if (sProcName == "lib3mf_functioncallnode_getinputfunctionid") + *ppProcAddress = (void*) &lib3mf_functioncallnode_getinputfunctionid; + if (sProcName == "lib3mf_nodeiterator_getcurrent") + *ppProcAddress = (void*) &lib3mf_nodeiterator_getcurrent; + if (sProcName == "lib3mf_function_getdisplayname") + *ppProcAddress = (void*) &lib3mf_function_getdisplayname; + if (sProcName == "lib3mf_function_setdisplayname") + *ppProcAddress = (void*) &lib3mf_function_setdisplayname; + if (sProcName == "lib3mf_function_addinput") + *ppProcAddress = (void*) &lib3mf_function_addinput; + if (sProcName == "lib3mf_function_getinputs") + *ppProcAddress = (void*) &lib3mf_function_getinputs; + if (sProcName == "lib3mf_function_removeinput") + *ppProcAddress = (void*) &lib3mf_function_removeinput; + if (sProcName == "lib3mf_function_addoutput") + *ppProcAddress = (void*) &lib3mf_function_addoutput; + if (sProcName == "lib3mf_function_getoutputs") + *ppProcAddress = (void*) &lib3mf_function_getoutputs; + if (sProcName == "lib3mf_function_removeoutput") + *ppProcAddress = (void*) &lib3mf_function_removeoutput; + if (sProcName == "lib3mf_function_findinput") + *ppProcAddress = (void*) &lib3mf_function_findinput; + if (sProcName == "lib3mf_function_findoutput") + *ppProcAddress = (void*) &lib3mf_function_findoutput; + if (sProcName == "lib3mf_implicitfunction_getidentifier") + *ppProcAddress = (void*) &lib3mf_implicitfunction_getidentifier; + if (sProcName == "lib3mf_implicitfunction_setidentifier") + *ppProcAddress = (void*) &lib3mf_implicitfunction_setidentifier; + if (sProcName == "lib3mf_implicitfunction_addnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addnode; + if (sProcName == "lib3mf_implicitfunction_addsinnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addsinnode; + if (sProcName == "lib3mf_implicitfunction_addcosnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addcosnode; + if (sProcName == "lib3mf_implicitfunction_addtannode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addtannode; + if (sProcName == "lib3mf_implicitfunction_addarcsinnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addarcsinnode; + if (sProcName == "lib3mf_implicitfunction_addarccosnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addarccosnode; + if (sProcName == "lib3mf_implicitfunction_addarctan2node") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addarctan2node; + if (sProcName == "lib3mf_implicitfunction_addsinhnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addsinhnode; + if (sProcName == "lib3mf_implicitfunction_addcoshnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addcoshnode; + if (sProcName == "lib3mf_implicitfunction_addtanhnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addtanhnode; + if (sProcName == "lib3mf_implicitfunction_addroundnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addroundnode; + if (sProcName == "lib3mf_implicitfunction_addceilnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addceilnode; + if (sProcName == "lib3mf_implicitfunction_addfloornode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addfloornode; + if (sProcName == "lib3mf_implicitfunction_addsignnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addsignnode; + if (sProcName == "lib3mf_implicitfunction_addfractnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addfractnode; + if (sProcName == "lib3mf_implicitfunction_addabsnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addabsnode; + if (sProcName == "lib3mf_implicitfunction_addexpnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addexpnode; + if (sProcName == "lib3mf_implicitfunction_addlognode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addlognode; + if (sProcName == "lib3mf_implicitfunction_addlog2node") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addlog2node; + if (sProcName == "lib3mf_implicitfunction_addlog10node") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addlog10node; + if (sProcName == "lib3mf_implicitfunction_addlengthnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addlengthnode; + if (sProcName == "lib3mf_implicitfunction_addtransposenode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addtransposenode; + if (sProcName == "lib3mf_implicitfunction_inversenode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_inversenode; + if (sProcName == "lib3mf_implicitfunction_addsqrtnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addsqrtnode; + if (sProcName == "lib3mf_implicitfunction_addresourceidnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addresourceidnode; + if (sProcName == "lib3mf_implicitfunction_addadditionnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addadditionnode; + if (sProcName == "lib3mf_implicitfunction_addsubtractionnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addsubtractionnode; + if (sProcName == "lib3mf_implicitfunction_addmultiplicationnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addmultiplicationnode; + if (sProcName == "lib3mf_implicitfunction_adddivisionnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_adddivisionnode; + if (sProcName == "lib3mf_implicitfunction_adddotnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_adddotnode; + if (sProcName == "lib3mf_implicitfunction_addcrossnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addcrossnode; + if (sProcName == "lib3mf_implicitfunction_addmatvecmultiplicationnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addmatvecmultiplicationnode; + if (sProcName == "lib3mf_implicitfunction_addminnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addminnode; + if (sProcName == "lib3mf_implicitfunction_addmaxnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addmaxnode; + if (sProcName == "lib3mf_implicitfunction_addfmodnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addfmodnode; + if (sProcName == "lib3mf_implicitfunction_addpownode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addpownode; + if (sProcName == "lib3mf_implicitfunction_addselectnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addselectnode; + if (sProcName == "lib3mf_implicitfunction_addclampnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addclampnode; + if (sProcName == "lib3mf_implicitfunction_addcomposevectornode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addcomposevectornode; + if (sProcName == "lib3mf_implicitfunction_addvectorfromscalarnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addvectorfromscalarnode; + if (sProcName == "lib3mf_implicitfunction_adddecomposevectornode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_adddecomposevectornode; + if (sProcName == "lib3mf_implicitfunction_addcomposematrixnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addcomposematrixnode; + if (sProcName == "lib3mf_implicitfunction_addmatrixfromrowsnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addmatrixfromrowsnode; + if (sProcName == "lib3mf_implicitfunction_addmatrixfromcolumnsnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addmatrixfromcolumnsnode; + if (sProcName == "lib3mf_implicitfunction_addconstantnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addconstantnode; + if (sProcName == "lib3mf_implicitfunction_addconstvecnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addconstvecnode; + if (sProcName == "lib3mf_implicitfunction_addconstmatnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addconstmatnode; + if (sProcName == "lib3mf_implicitfunction_addmeshnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addmeshnode; + if (sProcName == "lib3mf_implicitfunction_addunsignedmeshnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addunsignedmeshnode; + if (sProcName == "lib3mf_implicitfunction_addfunctioncallnode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addfunctioncallnode; + if (sProcName == "lib3mf_implicitfunction_getnodes") + *ppProcAddress = (void*) &lib3mf_implicitfunction_getnodes; + if (sProcName == "lib3mf_implicitfunction_removenode") + *ppProcAddress = (void*) &lib3mf_implicitfunction_removenode; + if (sProcName == "lib3mf_implicitfunction_addlink") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addlink; + if (sProcName == "lib3mf_implicitfunction_addlinkbynames") + *ppProcAddress = (void*) &lib3mf_implicitfunction_addlinkbynames; + if (sProcName == "lib3mf_implicitfunction_clear") + *ppProcAddress = (void*) &lib3mf_implicitfunction_clear; + if (sProcName == "lib3mf_implicitfunction_sortnodestopologically") + *ppProcAddress = (void*) &lib3mf_implicitfunction_sortnodestopologically; + if (sProcName == "lib3mf_functionfromimage3d_getimage3d") + *ppProcAddress = (void*) &lib3mf_functionfromimage3d_getimage3d; + if (sProcName == "lib3mf_functionfromimage3d_setimage3d") + *ppProcAddress = (void*) &lib3mf_functionfromimage3d_setimage3d; + if (sProcName == "lib3mf_functionfromimage3d_setfilter") + *ppProcAddress = (void*) &lib3mf_functionfromimage3d_setfilter; + if (sProcName == "lib3mf_functionfromimage3d_getfilter") + *ppProcAddress = (void*) &lib3mf_functionfromimage3d_getfilter; + if (sProcName == "lib3mf_functionfromimage3d_settilestyles") + *ppProcAddress = (void*) &lib3mf_functionfromimage3d_settilestyles; + if (sProcName == "lib3mf_functionfromimage3d_gettilestyles") + *ppProcAddress = (void*) &lib3mf_functionfromimage3d_gettilestyles; + if (sProcName == "lib3mf_functionfromimage3d_getoffset") + *ppProcAddress = (void*) &lib3mf_functionfromimage3d_getoffset; + if (sProcName == "lib3mf_functionfromimage3d_setoffset") + *ppProcAddress = (void*) &lib3mf_functionfromimage3d_setoffset; + if (sProcName == "lib3mf_functionfromimage3d_getscale") + *ppProcAddress = (void*) &lib3mf_functionfromimage3d_getscale; + if (sProcName == "lib3mf_functionfromimage3d_setscale") + *ppProcAddress = (void*) &lib3mf_functionfromimage3d_setscale; if (sProcName == "lib3mf_builditem_getobjectresource") *ppProcAddress = (void*) &lib3mf_builditem_getobjectresource; if (sProcName == "lib3mf_builditem_getuuid") @@ -13392,6 +23719,8 @@ Lib3MFResult Lib3MF::Impl::Lib3MF_GetProcAddress (const char * pProcName, void * *ppProcAddress = (void*) &lib3mf_model_getcolorgroupbyid; if (sProcName == "lib3mf_model_getslicestackbyid") *ppProcAddress = (void*) &lib3mf_model_getslicestackbyid; + if (sProcName == "lib3mf_model_getlevelsetbyid") + *ppProcAddress = (void*) &lib3mf_model_getlevelsetbyid; if (sProcName == "lib3mf_model_getbuilduuid") *ppProcAddress = (void*) &lib3mf_model_getbuilduuid; if (sProcName == "lib3mf_model_setbuilduuid") @@ -13422,8 +23751,12 @@ Lib3MFResult Lib3MF::Impl::Lib3MF_GetProcAddress (const char * pProcName, void * *ppProcAddress = (void*) &lib3mf_model_getmultipropertygroups; if (sProcName == "lib3mf_model_getslicestacks") *ppProcAddress = (void*) &lib3mf_model_getslicestacks; + if (sProcName == "lib3mf_model_getimage3ds") + *ppProcAddress = (void*) &lib3mf_model_getimage3ds; if (sProcName == "lib3mf_model_mergetomodel") *ppProcAddress = (void*) &lib3mf_model_mergetomodel; + if (sProcName == "lib3mf_model_mergefrommodel") + *ppProcAddress = (void*) &lib3mf_model_mergefrommodel; if (sProcName == "lib3mf_model_addmeshobject") *ppProcAddress = (void*) &lib3mf_model_addmeshobject; if (sProcName == "lib3mf_model_addcomponentsobject") @@ -13442,6 +23775,10 @@ Lib3MFResult Lib3MF::Impl::Lib3MF_GetProcAddress (const char * pProcName, void * *ppProcAddress = (void*) &lib3mf_model_addcompositematerials; if (sProcName == "lib3mf_model_addmultipropertygroup") *ppProcAddress = (void*) &lib3mf_model_addmultipropertygroup; + if (sProcName == "lib3mf_model_addimagestack") + *ppProcAddress = (void*) &lib3mf_model_addimagestack; + if (sProcName == "lib3mf_model_getimagestackbyid") + *ppProcAddress = (void*) &lib3mf_model_getimagestackbyid; if (sProcName == "lib3mf_model_addbuilditem") *ppProcAddress = (void*) &lib3mf_model_addbuilditem; if (sProcName == "lib3mf_model_removebuilditem") @@ -13474,6 +23811,20 @@ Lib3MFResult Lib3MF::Impl::Lib3MF_GetProcAddress (const char * pProcName, void * *ppProcAddress = (void*) &lib3mf_model_setrandomnumbercallback; if (sProcName == "lib3mf_model_getkeystore") *ppProcAddress = (void*) &lib3mf_model_getkeystore; + if (sProcName == "lib3mf_model_getfunctions") + *ppProcAddress = (void*) &lib3mf_model_getfunctions; + if (sProcName == "lib3mf_model_addimplicitfunction") + *ppProcAddress = (void*) &lib3mf_model_addimplicitfunction; + if (sProcName == "lib3mf_model_addfunctionfromimage3d") + *ppProcAddress = (void*) &lib3mf_model_addfunctionfromimage3d; + if (sProcName == "lib3mf_model_addvolumedata") + *ppProcAddress = (void*) &lib3mf_model_addvolumedata; + if (sProcName == "lib3mf_model_addlevelset") + *ppProcAddress = (void*) &lib3mf_model_addlevelset; + if (sProcName == "lib3mf_model_getlevelsets") + *ppProcAddress = (void*) &lib3mf_model_getlevelsets; + if (sProcName == "lib3mf_model_removeresource") + *ppProcAddress = (void*) &lib3mf_model_removeresource; if (sProcName == "lib3mf_getlibraryversion") *ppProcAddress = (void*) &lib3mf_getlibraryversion; if (sProcName == "lib3mf_getprereleaseinformation") diff --git a/Autogenerated/Source/lib3mf_types.hpp b/Autogenerated/Source/lib3mf_types.hpp index 705f02718..61ecedc56 100644 --- a/Autogenerated/Source/lib3mf_types.hpp +++ b/Autogenerated/Source/lib3mf_types.hpp @@ -1,6 +1,6 @@ /*++ -Copyright (C) 2019 3MF Consortium (Original Author) +Copyright (C) 2024 3MF Consortium (Original Author) All rights reserved. @@ -29,7 +29,7 @@ This file has been generated by the Automatic Component Toolkit (ACT) version 1. Abstract: This is an autogenerated C++-Header file with basic types in order to allow an easy use of the 3MF Library -Interface version: 2.3.2 +Interface version: 2.4.0 */ @@ -83,8 +83,8 @@ typedef void * Lib3MF_pvoid; **************************************************************************************************************************/ #define LIB3MF_VERSION_MAJOR 2 -#define LIB3MF_VERSION_MINOR 3 -#define LIB3MF_VERSION_MICRO 2 +#define LIB3MF_VERSION_MINOR 4 +#define LIB3MF_VERSION_MICRO 0 #define LIB3MF_VERSION_PRERELEASEINFO "" #define LIB3MF_VERSION_BUILDINFO "" @@ -129,13 +129,18 @@ typedef void * Lib3MF_pvoid; #define LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER 140 /** A progress identifier is unknown */ #define LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT 141 /** An element buffer exceeds its spec limit */ #define LIB3MF_ERROR_INVALIDRESOURCE 142 /** A resource is invalid */ +#define LIB3MF_ERROR_INVALIDLEVELSET 143 /** A level set is invalid */ #define LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE 2000 /** This object type is not valid for beamlattices */ #define LIB3MF_ERROR_INVALIDKEYSTORE 3000 /** The keystore object is invalid */ #define LIB3MF_ERROR_INVALIDKEYSTORECONSUMER 3001 /** The consumer keystore object is invalid */ #define LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND 3002 /** A consumer has not been found */ #define LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND 3003 /** A resource data has not been found */ #define LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED 3004 /** A Key or Conentent encryption callback has not been registered */ -#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key siue is invalid */ +#define LIB3MF_ERROR_INVALIDKEYSIZE 3005 /** The key size is invalid */ +#define LIB3MF_ERROR_INCOMPATIBLEPORTTYPES 4000 /** Link could not be added, the port types are incompatible */ +#define LIB3MF_ERROR_GRAPHISCYCLIC 4001 /** The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted. */ +#define LIB3MF_ERROR_INPUTNOTSET 4002 /** The input of a node is not set. */ +#define LIB3MF_ERROR_INVALIDNODECONFIGURATION 4003 /** The selected node configuration is not supported */ /************************************************************************************************************************* Error strings for Lib3MF @@ -180,13 +185,18 @@ inline const char * LIB3MF_GETERRORSTRING (Lib3MFResult nErrorCode) { case LIB3MF_ERROR_UNKOWNPROGRESSIDENTIFIER: return "A progress identifier is unknown"; case LIB3MF_ERROR_ELEMENTCOUNTEXCEEDSLIMIT: return "An element buffer exceeds its spec limit"; case LIB3MF_ERROR_INVALIDRESOURCE: return "A resource is invalid"; + case LIB3MF_ERROR_INVALIDLEVELSET: return "A level set is invalid"; case LIB3MF_ERROR_BEAMLATTICE_INVALID_OBJECTTYPE: return "This object type is not valid for beamlattices"; case LIB3MF_ERROR_INVALIDKEYSTORE: return "The keystore object is invalid"; case LIB3MF_ERROR_INVALIDKEYSTORECONSUMER: return "The consumer keystore object is invalid"; case LIB3MF_ERROR_KEYSTORECONSUMERNOTFOUND: return "A consumer has not been found"; case LIB3MF_ERROR_KEYSTORERESOURCEDATANOTFOUND: return "A resource data has not been found"; case LIB3MF_ERROR_SECURECONTEXTNOTREGISTERED: return "A Key or Conentent encryption callback has not been registered"; - case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key siue is invalid"; + case LIB3MF_ERROR_INVALIDKEYSIZE: return "The key size is invalid"; + case LIB3MF_ERROR_INCOMPATIBLEPORTTYPES: return "Link could not be added, the port types are incompatible"; + case LIB3MF_ERROR_GRAPHISCYCLIC: return "The functin graph is cyclic. Only dircected graphs are valid and can be topological sorted."; + case LIB3MF_ERROR_INPUTNOTSET: return "The input of a node is not set."; + case LIB3MF_ERROR_INVALIDNODECONFIGURATION: return "The selected node configuration is not supported"; default: return "unknown error"; } } @@ -211,11 +221,21 @@ typedef Lib3MFHandle Lib3MF_ColorGroupIterator; typedef Lib3MFHandle Lib3MF_Texture2DGroupIterator; typedef Lib3MFHandle Lib3MF_CompositeMaterialsIterator; typedef Lib3MFHandle Lib3MF_MultiPropertyGroupIterator; +typedef Lib3MFHandle Lib3MF_Image3DIterator; +typedef Lib3MFHandle Lib3MF_FunctionIterator; +typedef Lib3MFHandle Lib3MF_LevelSetIterator; typedef Lib3MFHandle Lib3MF_MetaData; typedef Lib3MFHandle Lib3MF_MetaDataGroup; typedef Lib3MFHandle Lib3MF_Object; typedef Lib3MFHandle Lib3MF_MeshObject; +typedef Lib3MFHandle Lib3MF_LevelSet; typedef Lib3MFHandle Lib3MF_BeamLattice; +typedef Lib3MFHandle Lib3MF_FunctionReference; +typedef Lib3MFHandle Lib3MF_VolumeDataColor; +typedef Lib3MFHandle Lib3MF_MaterialMapping; +typedef Lib3MFHandle Lib3MF_VolumeDataComposite; +typedef Lib3MFHandle Lib3MF_VolumeDataProperty; +typedef Lib3MFHandle Lib3MF_VolumeData; typedef Lib3MFHandle Lib3MF_Component; typedef Lib3MFHandle Lib3MF_ComponentsObject; typedef Lib3MFHandle Lib3MF_BeamSet; @@ -224,8 +244,71 @@ typedef Lib3MFHandle Lib3MF_ColorGroup; typedef Lib3MFHandle Lib3MF_Texture2DGroup; typedef Lib3MFHandle Lib3MF_CompositeMaterials; typedef Lib3MFHandle Lib3MF_MultiPropertyGroup; +typedef Lib3MFHandle Lib3MF_Image3D; +typedef Lib3MFHandle Lib3MF_ImageStack; typedef Lib3MFHandle Lib3MF_Attachment; typedef Lib3MFHandle Lib3MF_Texture2D; +typedef Lib3MFHandle Lib3MF_ImplicitPort; +typedef Lib3MFHandle Lib3MF_Iterator; +typedef Lib3MFHandle Lib3MF_ImplicitPortIterator; +typedef Lib3MFHandle Lib3MF_ImplicitNode; +typedef Lib3MFHandle Lib3MF_OneInputNode; +typedef Lib3MFHandle Lib3MF_SinNode; +typedef Lib3MFHandle Lib3MF_CosNode; +typedef Lib3MFHandle Lib3MF_TanNode; +typedef Lib3MFHandle Lib3MF_ArcSinNode; +typedef Lib3MFHandle Lib3MF_ArcCosNode; +typedef Lib3MFHandle Lib3MF_ArcTanNode; +typedef Lib3MFHandle Lib3MF_SinhNode; +typedef Lib3MFHandle Lib3MF_CoshNode; +typedef Lib3MFHandle Lib3MF_TanhNode; +typedef Lib3MFHandle Lib3MF_RoundNode; +typedef Lib3MFHandle Lib3MF_CeilNode; +typedef Lib3MFHandle Lib3MF_FloorNode; +typedef Lib3MFHandle Lib3MF_SignNode; +typedef Lib3MFHandle Lib3MF_FractNode; +typedef Lib3MFHandle Lib3MF_AbsNode; +typedef Lib3MFHandle Lib3MF_ExpNode; +typedef Lib3MFHandle Lib3MF_LogNode; +typedef Lib3MFHandle Lib3MF_Log2Node; +typedef Lib3MFHandle Lib3MF_Log10Node; +typedef Lib3MFHandle Lib3MF_LengthNode; +typedef Lib3MFHandle Lib3MF_TransposeNode; +typedef Lib3MFHandle Lib3MF_InverseNode; +typedef Lib3MFHandle Lib3MF_SqrtNode; +typedef Lib3MFHandle Lib3MF_ResourceIdNode; +typedef Lib3MFHandle Lib3MF_TwoInputNode; +typedef Lib3MFHandle Lib3MF_AdditionNode; +typedef Lib3MFHandle Lib3MF_SubtractionNode; +typedef Lib3MFHandle Lib3MF_MultiplicationNode; +typedef Lib3MFHandle Lib3MF_DivisionNode; +typedef Lib3MFHandle Lib3MF_DotNode; +typedef Lib3MFHandle Lib3MF_CrossNode; +typedef Lib3MFHandle Lib3MF_ArcTan2Node; +typedef Lib3MFHandle Lib3MF_MatVecMultiplicationNode; +typedef Lib3MFHandle Lib3MF_MinNode; +typedef Lib3MFHandle Lib3MF_MaxNode; +typedef Lib3MFHandle Lib3MF_FmodNode; +typedef Lib3MFHandle Lib3MF_ModNode; +typedef Lib3MFHandle Lib3MF_PowNode; +typedef Lib3MFHandle Lib3MF_SelectNode; +typedef Lib3MFHandle Lib3MF_ClampNode; +typedef Lib3MFHandle Lib3MF_ComposeVectorNode; +typedef Lib3MFHandle Lib3MF_VectorFromScalarNode; +typedef Lib3MFHandle Lib3MF_DecomposeVectorNode; +typedef Lib3MFHandle Lib3MF_ComposeMatrixNode; +typedef Lib3MFHandle Lib3MF_MatrixFromRowsNode; +typedef Lib3MFHandle Lib3MF_MatrixFromColumnsNode; +typedef Lib3MFHandle Lib3MF_ConstantNode; +typedef Lib3MFHandle Lib3MF_ConstVecNode; +typedef Lib3MFHandle Lib3MF_ConstMatNode; +typedef Lib3MFHandle Lib3MF_MeshNode; +typedef Lib3MFHandle Lib3MF_UnsignedMeshNode; +typedef Lib3MFHandle Lib3MF_FunctionCallNode; +typedef Lib3MFHandle Lib3MF_NodeIterator; +typedef Lib3MFHandle Lib3MF_Function; +typedef Lib3MFHandle Lib3MF_ImplicitFunction; +typedef Lib3MFHandle Lib3MF_FunctionFromImage3D; typedef Lib3MFHandle Lib3MF_BuildItem; typedef Lib3MFHandle Lib3MF_BuildItemIterator; typedef Lib3MFHandle Lib3MF_Slice; @@ -306,7 +389,7 @@ namespace Lib3MF { }; enum class eBeamLatticeBallMode : Lib3MF_int32 { - None = 0, + BeamLatticeBallModeNone = 0, Mixed = 1, All = 2 }; @@ -344,6 +427,103 @@ namespace Lib3MF { Multiply = 2 }; + enum class eChannelName : Lib3MF_int32 { + Red = 0, + Green = 1, + Blue = 2, + Alpha = 3 + }; + + enum class eCompositionMethod : Lib3MF_int32 { + WeightedSum = 0, + Multiply = 1, + Min = 2, + Max = 3, + Mask = 4 + }; + + enum class eCompositionSpace : Lib3MF_int32 { + Raw = 0, + LinearColor = 1 + }; + + /** + * enum class eImplicitNodeType - The type of the node + */ + enum class eImplicitNodeType : Lib3MF_int32 { + Addition = 1, /** Adds to values (scalar or vector) */ + Subtraction = 2, /** Subtracts two values (scalar or vector) */ + Multiplication = 3, /** Multiplies two values (scalar or vector) */ + Division = 4, /** Divides two values (scalar or vector) */ + Constant = 5, /** A constant scalar value */ + ConstVec = 6, /** A constant vector value */ + ConstMat = 7, /** A constant matrix value */ + ComposeVector = 8, /** Creates a vector from three scalar values */ + DecomposeVector = 9, /** Decomposes a vector into three scalar values */ + ComposeMatrix = 10, /** Creates a matrix from nine scalar values */ + MatrixFromColumns = 11, /** Creates a matrix from three column vector values */ + MatrixFromRows = 12, /** Creates a matrix from three row vector values */ + Dot = 13, /** Calculates the dot product of two vector values */ + Cross = 14, /** Calculates the cross product of two vector values */ + MatVecMultiplication = 15, /** Multiplies a matrix with a vector */ + Transpose = 16, /** Transposes a matrix */ + Inverse = 17, /** Computes the inverse of a matrix */ + Sinus = 18, /** Calculates the sinus */ + Cosinus = 19, /** Calculates the cosinus */ + Tan = 20, /** Calculates the tangent */ + ArcSin = 21, /** Calculates the arcsinus */ + ArcCos = 22, /** Calculates the arccosinus */ + ArcTan = 23, /** Calculates the arctangent */ + ArcTan2 = 24, /** Calculates the arctangent */ + Min = 25, /** Calculates the minimum tow values */ + Max = 26, /** Calculates the maximum of two values */ + Abs = 27, /** Calcul the absolute value */ + Fmod = 28, /** Computes the remainder of the divison of the inputs (same behavior as C fmod) */ + Pow = 29, /** Calculates the power A^B */ + Sqrt = 30, /** Calculates the square root */ + Exp = 31, /** Exponential function */ + Log = 32, /** Natural logarithmus */ + Log2 = 33, /** Logarithmus to the base 2 */ + Log10 = 34, /** Logarithmus to the base 10 */ + Select = 35, /** If A is less B returns C, else D */ + Clamp = 36, /** Clamps the input value to min and max */ + Sinh = 37, /** Calculates the hyperbolic sine */ + Cosh = 38, /** Calculates the hyperbolic cosine */ + Tanh = 39, /** Calculates the hyperbolic tangent */ + Round = 40, /** Rounds a scalar value to the nearest integer */ + Ceil = 41, /** Rounds a scalar value up to the nearest integer */ + Floor = 42, /** Rounds a scalar value down to the nearest integer */ + Sign = 43, /** Returns the sign */ + Fract = 44, /** Returns the fractional part */ + FunctionCall = 45, /** Calls a function */ + Mesh = 46, /** Calculates the signed distance to a mesh */ + Length = 47, /** Calculates the length of a vector */ + ConstResourceID = 48, /** Selects a resource (function, mesh etc.) */ + VectorFromScalar = 49, /** Creates a vector from one scalar values */ + UnsignedMesh = 50, /** Calculates the unsigned distance to a mesh */ + Mod = 51 /** Calculates the modulo of two values (same behaviour as glsl mod) */ + }; + + /** + * enum class eImplicitPortType - The type of the port + */ + enum class eImplicitPortType : Lib3MF_int32 { + Scalar = 1, /** Scalar */ + Vector = 2, /** Vector */ + Matrix = 3, /** 4x4 Matrix */ + ResourceID = 4 /** Resource ID */ + }; + + /** + * enum class eImplicitNodeConfiguration - Defines the input and output types of a node + */ + enum class eImplicitNodeConfiguration : Lib3MF_int32 { + Default = 1, /** Default */ + ScalarToScalar = 2, /** Scalar -> Scalar */ + VectorToVector = 3, /** Vector -> Vector */ + MatrixToMatrix = 4 /** Matrix -> Matrix */ + }; + enum class eEncryptionAlgorithm : Lib3MF_int32 { AES256_GCM = 1 /** http://www.w3.org/2009/xmlenc11#aes256-gcm */ }; @@ -435,6 +615,14 @@ namespace Lib3MF { Lib3MF_double m_Radius; } sBall; + typedef struct sVector { + Lib3MF_double m_Coordinates[3]; + } sVector; + + typedef struct sMatrix4x4 { + Lib3MF_double m_Field[4][4]; + } sMatrix4x4; + #pragma pack () /************************************************************************************************************************* @@ -530,6 +718,12 @@ typedef Lib3MF::eBeamLatticeClipMode eLib3MFBeamLatticeClipMode; typedef Lib3MF::eBeamLatticeBallMode eLib3MFBeamLatticeBallMode; typedef Lib3MF::eProgressIdentifier eLib3MFProgressIdentifier; typedef Lib3MF::eBlendMethod eLib3MFBlendMethod; +typedef Lib3MF::eChannelName eLib3MFChannelName; +typedef Lib3MF::eCompositionMethod eLib3MFCompositionMethod; +typedef Lib3MF::eCompositionSpace eLib3MFCompositionSpace; +typedef Lib3MF::eImplicitNodeType eLib3MFImplicitNodeType; +typedef Lib3MF::eImplicitPortType eLib3MFImplicitPortType; +typedef Lib3MF::eImplicitNodeConfiguration eLib3MFImplicitNodeConfiguration; typedef Lib3MF::eEncryptionAlgorithm eLib3MFEncryptionAlgorithm; typedef Lib3MF::eWrappingAlgorithm eLib3MFWrappingAlgorithm; typedef Lib3MF::eMgfAlgorithm eLib3MFMgfAlgorithm; @@ -547,6 +741,8 @@ typedef Lib3MF::sBox sLib3MFBox; typedef Lib3MF::sColor sLib3MFColor; typedef Lib3MF::sBeam sLib3MFBeam; typedef Lib3MF::sBall sLib3MFBall; +typedef Lib3MF::sVector sLib3MFVector; +typedef Lib3MF::sMatrix4x4 sLib3MFMatrix4x4; typedef Lib3MF::ProgressCallback Lib3MFProgressCallback; typedef Lib3MF::WriteCallback Lib3MFWriteCallback; typedef Lib3MF::ReadCallback Lib3MFReadCallback; diff --git a/AutomaticComponentToolkit/generateWrapperAndBindingsLinux64.sh b/AutomaticComponentToolkit/generateWrapperAndBindingsLinux64.sh new file mode 100755 index 000000000..4b9751618 --- /dev/null +++ b/AutomaticComponentToolkit/generateWrapperAndBindingsLinux64.sh @@ -0,0 +1,8 @@ +#!/bin/sh +./act.linux64 lib3mf.xml -bindings ../Autogenerated/Bindings -interfaces ../Autogenerated/Source -stubs ../Source/API -suppresslicense -suppressexamples +./act.linux64 lib3mf.xml -stubs ../Include/API -suppresslicense -suppressexamples -suppressbindings -suppressinterfaces + +# remove header form ../Source/API +find ../Source/API -name "*.hpp" -type f -delete +# remove cpp from ../Include/API +find ../Include/API -name "*.cpp" -type f -delete \ No newline at end of file diff --git a/AutomaticComponentToolkit/generateWrapperAndBindingsWin64.sh b/AutomaticComponentToolkit/generateWrapperAndBindingsWin64.sh new file mode 100644 index 000000000..8e12e4632 --- /dev/null +++ b/AutomaticComponentToolkit/generateWrapperAndBindingsWin64.sh @@ -0,0 +1,8 @@ +#!/bin/sh +./act.win64.exe lib3mf.xml -bindings ../Autogenerated/Bindings -interfaces ../Autogenerated/Source -stubs ../Source/API -suppresslicense -suppressexamples +./act.win64.exe lib3mf.xml -stubs ../Include/API -suppresslicense -suppressexamples -suppressbindings -suppressinterfaces + +# remove header form ../Source/API +find ../Source/API -name "*.hpp" -type f -delete +# remove cpp from ../Include/API +find ../Include/API -name "*.cpp" -type f -delete \ No newline at end of file diff --git a/AutomaticComponentToolkit/lib3mf.xml b/AutomaticComponentToolkit/lib3mf.xml index 078cdc4b4..d08606821 100644 --- a/AutomaticComponentToolkit/lib3mf.xml +++ b/AutomaticComponentToolkit/lib3mf.xml @@ -1,1017 +1,1781 @@ - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + \ No newline at end of file diff --git a/AutomaticComponentToolkit/patch_python.bat b/AutomaticComponentToolkit/patch_python.bat deleted file mode 100644 index a19c08d1f..000000000 --- a/AutomaticComponentToolkit/patch_python.bat +++ /dev/null @@ -1,17 +0,0 @@ -@echo off - -REM This script is to patch python binding which is using None keyword for enum. Apply this patch until ACT is fixed - -set "current_dir=%~dp0" - -REM Specify the python binding file path -set "file_path=%current_dir%\..\Autogenerated\Bindings\Python\Lib3MF.py" - -REM None is a python keyword which has to be replaced -set "search_line= None = 0" - -REM Replace None with BeamLatticeBallModeNone -set "new_line= BeamLatticeBallModeNone = 0" - -REM Use PowerShell to find and replace the line -powershell -Command "(Get-Content '%file_path%') -replace '%search_line%', '%new_line%' | Set-Content '%file_path%'" \ No newline at end of file diff --git a/AutomaticComponentToolkit/patch_python.sh b/AutomaticComponentToolkit/patch_python.sh deleted file mode 100644 index ebf8b909b..000000000 --- a/AutomaticComponentToolkit/patch_python.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -# This script is to patch python binding which is using None keyword for enum. Apply this patch until ACT is fixed - -current_dir=`dirname "$0"` - -# Specify the python binding file path -file_path="$current_dir/../Autogenerated/Bindings/Python/Lib3MF.py" - -# None is python keyword which has to be replaced -search_line="\tNone = 0" - -# Replace None with BeamLatticeBallModeNone -new_line="\tBeamLatticeBallModeNone = 0" - -# Use sed to find and replace the line -sed -i "s|$search_line|$new_line|" "$file_path" \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index aaca07d2c..5e1911e52 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,8 +10,8 @@ include(GNUInstallDirs) # Define Version set(LIB3MF_VERSION_MAJOR 2) # increase on every backward-compatibility breaking change of the API -set(LIB3MF_VERSION_MINOR 3) # increase on every backward compatible change of the API -set(LIB3MF_VERSION_MICRO 2) # increase on on every change that does not alter the API +set(LIB3MF_VERSION_MINOR 4) # increase on every backward compatible change of the API +set(LIB3MF_VERSION_MICRO 0) # increase on on every change that does not alter the API set(LIB3MF_VERSION_PRERELEASE "") # denotes pre-release information of a version of lib3mf set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version") project(lib3mf @@ -19,6 +19,11 @@ project(lib3mf DESCRIPTION "An implementation of the 3D Manufacturing Format file standard" ) +find_program(buildcache_program buildcache) +if(buildcache_program) + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${buildcache_program}") +endif() + set(CMAKE_INSTALL_BINDIR bin CACHE PATH "directory for installing binary files") set(CMAKE_INSTALL_LIBDIR lib CACHE PATH "directory for installing library files") set(CMAKE_INSTALL_INCLUDEDIR include/lib3mf CACHE PATH "directory for installing header files") @@ -30,16 +35,25 @@ option(BUILD_FOR_CODECOVERAGE "Build for code coverage analysis" OFF) option(STRIP_BINARIES "Strip binaries (on non-apple)" ON) option(USE_PLATFORM_UUID "Use UUID geneator that is provided by the OS (always ON for Windows)" OFF) +add_compile_options($<$:/MP>) +set (CMAKE_CXX_STANDARD 17) + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") # using GCC add_definitions(-DBUILD_DLL) add_compile_options(-Wall) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -O2") + if (CMAKE_BUILD_TYPE MATCHES DEBUG) + add_compile_options(-g) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Og") + else() + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O2") + endif(CMAKE_BUILD_TYPE MATCHES DEBUG) + elseif ("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin") # using GCC add_definitions(-DBUILD_DLL) add_compile_options(-Wall) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -O2") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O2") set(CMAKE_MACOSX_RPATH ON) endif() @@ -113,6 +127,21 @@ add_library(${PROJECT_NAME} SHARED ${SRCS_COMMON} ${HDRS_COMMON} ${ACT_GENERATED_SOURCE} ${VERSION_FILES_OUTPUTLOCATION} ) + +if (${MSVC}) + # using Visual Studio C++ + + # Allow unnamed structs and ensures that the min/max macros of minwindef.h are not used + + # Note the generator expression to limit the scope to c++ compiler, otherwise the RC compiler would get the arguments as well. + # Works with ninja, but not with the VS build generators + if (CMAKE_GENERATOR MATCHES "Ninja") + target_compile_options(${PROJECT_NAME} PUBLIC $<$:-DNOMINMAX /Wv:18>) + else() + target_compile_options(${PROJECT_NAME} PUBLIC -DNOMINMAX /Wv:18) + endif() +endif() + SOURCE_GROUP("Source Files\\Autogenerated" FILES ${ACT_GENERATED_SOURCE}) @@ -184,6 +213,10 @@ else() target_link_libraries(${PROJECT_NAME} ${ZLIB_LIBRARIES}) endif() + +target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/submodules/fast_float/include) + + set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" IMPORT_PREFIX "" ) # This makes sure symbols are exported target_compile_options(${PROJECT_NAME} PRIVATE "-D__LIB3MF_EXPORTS") diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 000000000..dffe08f11 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,53 @@ +{ + "configurePresets": [ + { + "name": "windows-base", + "description": "Target Windows with the Visual Studio development environment.", + "hidden": true, + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/${presetName}", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Windows" + } + }, + { + "name": "x64-debug", + "displayName": "x64 Debug", + "description": "Target Windows (64-bit) with the Visual Studio development environment. (Debug)", + "inherits": "windows-base", + "architecture": { + "value": "x64", + "strategy": "external" + }, + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "x64-release", + "displayName": "x64 Release", + "description": "Target Windows (64-bit) with the Visual Studio development environment. (RelWithDebInfo)", + "inherits": "windows-base", + "architecture": { + "value": "x64", + "strategy": "external" + }, + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + }, + { + "name": "x64-release-debug", + "displayName": "x64 Release with Debug", + "description": "Target Windows (64-bit) with the Visual Studio development environment. (RelWithDebInfo)", + "inherits": "x64-release", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "RelWithDebInfo", + "CMAKE_CXX_FLAGS_DEBUG": "/Z7" + } + } + ], + "version": 3 +} \ No newline at end of file diff --git a/Include/API/lib3mf_absnode.hpp b/Include/API/lib3mf_absnode.hpp new file mode 100644 index 000000000..e2fddf149 --- /dev/null +++ b/Include/API/lib3mf_absnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CAbsNode + +*/ + + +#ifndef __LIB3MF_ABSNODE +#define __LIB3MF_ABSNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CAbsNode +**************************************************************************************************************************/ + +class CAbsNode : public virtual IAbsNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CAbsNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_ABSNODE diff --git a/Include/API/lib3mf_accessright.hpp b/Include/API/lib3mf_accessright.hpp index a1e8fe6b1..1c655eec6 100644 --- a/Include/API/lib3mf_accessright.hpp +++ b/Include/API/lib3mf_accessright.hpp @@ -56,13 +56,13 @@ namespace Lib3MF { CAccessRight(NMR::PKeyStoreAccessRight ar); // Inherited via IAccessRight - virtual IConsumer * GetConsumer() override; + IConsumer * GetConsumer() override; - virtual Lib3MF::eWrappingAlgorithm GetWrappingAlgorithm(); + Lib3MF::eWrappingAlgorithm GetWrappingAlgorithm() override; - virtual Lib3MF::eMgfAlgorithm GetMgfAlgorithm(); + Lib3MF::eMgfAlgorithm GetMgfAlgorithm() override; - virtual Lib3MF::eDigestMethod GetDigestMethod(); + Lib3MF::eDigestMethod GetDigestMethod() override; // Other access methods NMR::PKeyStoreAccessRight accessRight() const; diff --git a/Include/API/lib3mf_additionnode.hpp b/Include/API/lib3mf_additionnode.hpp new file mode 100644 index 000000000..e1f1038f8 --- /dev/null +++ b/Include/API/lib3mf_additionnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CAdditionNode + +*/ + + +#ifndef __LIB3MF_ADDITIONNODE +#define __LIB3MF_ADDITIONNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_twoinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CAdditionNode +**************************************************************************************************************************/ + +class CAdditionNode : public virtual IAdditionNode, public virtual CTwoInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CAdditionNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_ADDITIONNODE diff --git a/Include/API/lib3mf_arccosnode.hpp b/Include/API/lib3mf_arccosnode.hpp new file mode 100644 index 000000000..2619ddf74 --- /dev/null +++ b/Include/API/lib3mf_arccosnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CArcCosNode + +*/ + + +#ifndef __LIB3MF_ARCCOSNODE +#define __LIB3MF_ARCCOSNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CArcCosNode +**************************************************************************************************************************/ + +class CArcCosNode : public virtual IArcCosNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + /** + * Put protected members here. + */ + +public: + CArcCosNode(NMR::PModelImplicitNode pImplicitNode); + + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_ARCCOSNODE diff --git a/Include/API/lib3mf_arcsinnode.hpp b/Include/API/lib3mf_arcsinnode.hpp new file mode 100644 index 000000000..b80b7f859 --- /dev/null +++ b/Include/API/lib3mf_arcsinnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CArcSinNode + +*/ + + +#ifndef __LIB3MF_ARCSINNODE +#define __LIB3MF_ARCSINNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CArcSinNode +**************************************************************************************************************************/ + +class CArcSinNode : public virtual IArcSinNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + /** + * Put protected members here. + */ + +public: + CArcSinNode(NMR::PModelImplicitNode pImplicitNode); + + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_ARCSINNODE diff --git a/Include/API/lib3mf_arctan2node.hpp b/Include/API/lib3mf_arctan2node.hpp new file mode 100644 index 000000000..a808736f8 --- /dev/null +++ b/Include/API/lib3mf_arctan2node.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CArcTan2Node + +*/ + + +#ifndef __LIB3MF_ARCTAN2NODE +#define __LIB3MF_ARCTAN2NODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_twoinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CArcTan2Node +**************************************************************************************************************************/ + +class CArcTan2Node : public virtual IArcTan2Node, public virtual CTwoInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CArcTan2Node(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_ARCTAN2NODE diff --git a/Include/API/lib3mf_arctannode.hpp b/Include/API/lib3mf_arctannode.hpp new file mode 100644 index 000000000..469f660ae --- /dev/null +++ b/Include/API/lib3mf_arctannode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CArcTanNode + +*/ + + +#ifndef __LIB3MF_ARCTANNODE +#define __LIB3MF_ARCTANNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CArcTanNode +**************************************************************************************************************************/ + +class CArcTanNode : public virtual IArcTanNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CArcTanNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_ARCTANNODE diff --git a/Include/API/lib3mf_attachment.hpp b/Include/API/lib3mf_attachment.hpp index 1c3bfa778..b2f69a3cb 100644 --- a/Include/API/lib3mf_attachment.hpp +++ b/Include/API/lib3mf_attachment.hpp @@ -97,6 +97,8 @@ class CAttachment : public virtual IAttachment, public virtual CBase { void ReadFromBuffer(const Lib3MF_uint64 nBufferBufferSize, const Lib3MF_uint8 * pBufferBuffer); + NMR::PModelAttachment getModelAttachment (); + }; } diff --git a/Include/API/lib3mf_ceilnode.hpp b/Include/API/lib3mf_ceilnode.hpp new file mode 100644 index 000000000..3cf09ae05 --- /dev/null +++ b/Include/API/lib3mf_ceilnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CCeilNode + +*/ + + +#ifndef __LIB3MF_CEILNODE +#define __LIB3MF_CEILNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CCeilNode +**************************************************************************************************************************/ + +class CCeilNode : public virtual ICeilNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CCeilNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_CEILNODE diff --git a/Include/API/lib3mf_clampnode.hpp b/Include/API/lib3mf_clampnode.hpp new file mode 100644 index 000000000..23f2361ed --- /dev/null +++ b/Include/API/lib3mf_clampnode.hpp @@ -0,0 +1,99 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CClampNode + +*/ + + +#ifndef __LIB3MF_CLAMPNODE +#define __LIB3MF_CLAMPNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CClampNode +**************************************************************************************************************************/ + +class CClampNode : public virtual IClampNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CClampNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IClampNode::GetInputMin - Retrieves the input for the lower limit + * @return the input for the lower limit + */ + IImplicitPort * GetInputMin() override; + + /** + * IClampNode::GetInputMax - Retrieves the input for the upper limit + * @return the input for the upper limit + */ + IImplicitPort * GetInputMax() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_CLAMPNODE diff --git a/Include/API/lib3mf_componentsobject.hpp b/Include/API/lib3mf_componentsobject.hpp index 83f2cff20..2206a2540 100644 --- a/Include/API/lib3mf_componentsobject.hpp +++ b/Include/API/lib3mf_componentsobject.hpp @@ -86,6 +86,7 @@ class CComponentsObject : public virtual IComponentsObject, public virtual CObje bool IsComponentsObject(); + bool IsLevelSetObject() override; }; } diff --git a/Include/API/lib3mf_composematrixnode.hpp b/Include/API/lib3mf_composematrixnode.hpp new file mode 100644 index 000000000..24d9c2beb --- /dev/null +++ b/Include/API/lib3mf_composematrixnode.hpp @@ -0,0 +1,190 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CComposeMatrixNode + +*/ + + +#ifndef __LIB3MF_COMPOSEMATRIXNODE +#define __LIB3MF_COMPOSEMATRIXNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_implicitnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CComposeMatrixNode +**************************************************************************************************************************/ + +class CComposeMatrixNode : public virtual IComposeMatrixNode, public virtual CImplicitNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CComposeMatrixNode(NMR::PModelImplicitNode pImplicitNode); + + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IComposeMatrixNode::GetInputM00 - Retrieves the input for the element 0 0 + * @return the input for the m00 element + */ + IImplicitPort * GetInputM00() override; + + /** + * IComposeMatrixNode::GetInputM01 - Retrieves the input for the element 0 1 + * @return the input for the m01 element + */ + IImplicitPort * GetInputM01() override; + + /** + * IComposeMatrixNode::GetInputM02 - Retrieves the input for the element 0 2 + * @return the input for the m02 element + */ + IImplicitPort * GetInputM02() override; + + /** + * IComposeMatrixNode::GetInputM03 - Retrieves the input for the element 0 3 + * @return the input for the m03 element + */ + IImplicitPort * GetInputM03() override; + + /** + * IComposeMatrixNode::GetInputM10 - Retrieves the input for the element 1 0 + * @return the input for the m10 element + */ + IImplicitPort * GetInputM10() override; + + /** + * IComposeMatrixNode::GetInputM11 - Retrieves the input for the element 1 1 + * @return the input for the m11 element + */ + IImplicitPort * GetInputM11() override; + + /** + * IComposeMatrixNode::GetInputM12 - Retrieves the input for the element 1 2 + * @return the input for the m12 element + */ + IImplicitPort * GetInputM12() override; + + /** + * IComposeMatrixNode::GetInputM13 - Retrieves the input for the element 1 3 + * @return the input for the m3 element + */ + IImplicitPort * GetInputM13() override; + + /** + * IComposeMatrixNode::GetInputM20 - Retrieves the input for the element 2 0 + * @return the input for the m2 element + */ + IImplicitPort * GetInputM20() override; + + /** + * IComposeMatrixNode::GetInputM21 - Retrieves the input for the element 2 1 + * @return + */ + IImplicitPort * GetInputM21() override; + + /** + * IComposeMatrixNode::GetInputM22 - Retrieves the input for the element 2 2 + * @return the input for the m22 element + */ + IImplicitPort * GetInputM22() override; + + /** + * IComposeMatrixNode::GetInputM23 - Retrieves the input for the element 2 3 + * @return the input for the m23 element + */ + IImplicitPort * GetInputM23() override; + + /** + * IComposeMatrixNode::GetInputM30 - Retrieves the input for the element 3 0 + * @return the input for the m30 element + */ + IImplicitPort * GetInputM30() override; + + /** + * IComposeMatrixNode::GetInputM31 - Retrieves the input for the element 3 1 + * @return the input for the m31 element + */ + IImplicitPort * GetInputM31() override; + + /** + * IComposeMatrixNode::GetInputM32 - Retrieves the input for the element 3 2 + * @return the input for the m32 element + */ + IImplicitPort * GetInputM32() override; + + /** + * IComposeMatrixNode::GetInputM33 - Retrieves the input for the element 3 3 + * @return the input for the m33 element + */ + IImplicitPort * GetInputM33() override; + + /** + * IComposeMatrixNode::GetOutputMatrix - Retrieves the output + * @return the output + */ + IImplicitPort * GetOutputResult() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_COMPOSEMATRIXNODE diff --git a/Include/API/lib3mf_composevectornode.hpp b/Include/API/lib3mf_composevectornode.hpp new file mode 100644 index 000000000..b8496bb38 --- /dev/null +++ b/Include/API/lib3mf_composevectornode.hpp @@ -0,0 +1,111 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CComposeVectorNode + +*/ + + +#ifndef __LIB3MF_COMPOSEVECTORNODE +#define __LIB3MF_COMPOSEVECTORNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_implicitnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CComposeVectorNode +**************************************************************************************************************************/ + +class CComposeVectorNode : public virtual IComposeVectorNode, public virtual CImplicitNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CComposeVectorNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IComposeVectorNode::GetInputX - Retrieves the input for the x component + * @return the input for the x component + */ + IImplicitPort * GetInputX() override; + + /** + * IComposeVectorNode::GetInputY - Retrieves the input for the y component + * @return the input for the y component + */ + IImplicitPort * GetInputY() override; + + /** + * IComposeVectorNode::GetInputZ - Retrieves the input for the z component + * @return the input for the z component + */ + IImplicitPort * GetInputZ() override; + + /** + * IComposeVectorNode::GetOutputVector - Retrieves the output + * @return the output + */ + IImplicitPort * GetOutputResult() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_COMPOSEVECTORNODE diff --git a/Include/API/lib3mf_constantnode.hpp b/Include/API/lib3mf_constantnode.hpp new file mode 100644 index 000000000..b0aa3325c --- /dev/null +++ b/Include/API/lib3mf_constantnode.hpp @@ -0,0 +1,105 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CConstantNode + +*/ + + +#ifndef __LIB3MF_CONSTANTNODE +#define __LIB3MF_CONSTANTNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_implicitnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CConstantNode +**************************************************************************************************************************/ + +class CConstantNode : public virtual IConstantNode, public virtual CImplicitNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CConstantNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IConstantNode::SetConstant - Sets the constant value of the node + * @param[in] dValue - the value + */ + void SetConstant(const Lib3MF_double dValue) override; + + /** + * IConstantNode::GetConstant - Retrieves the constant value of the node + * @return the value + */ + Lib3MF_double GetConstant() override; + + /** + * IConstantNode::GetOutputValue - Retrieves the output + * @return the output + */ + IImplicitPort * GetOutputValue() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_CONSTANTNODE diff --git a/Include/API/lib3mf_constmatnode.hpp b/Include/API/lib3mf_constmatnode.hpp new file mode 100644 index 000000000..95cb78dd1 --- /dev/null +++ b/Include/API/lib3mf_constmatnode.hpp @@ -0,0 +1,105 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CConstMatNode + +*/ + + +#ifndef __LIB3MF_CONSTMATNODE +#define __LIB3MF_CONSTMATNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_implicitnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CConstMatNode +**************************************************************************************************************************/ + +class CConstMatNode : public virtual IConstMatNode, public virtual CImplicitNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CConstMatNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IConstMatNode::SetMatrix - Sets the matrix value of the node + * @param[in] Value - the value + */ + void SetMatrix(const Lib3MF::sMatrix4x4 Value) override; + + /** + * IConstMatNode::GetMatrix - Retrieves the matrix value of the node + * @return the matrix + */ + Lib3MF::sMatrix4x4 GetMatrix() override; + + /** + * IConstMatNode::GetOutputMatrix - Retrieves the output + * @return the output + */ + IImplicitPort * GetOutputMatrix() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_CONSTMATNODE diff --git a/Include/API/lib3mf_constvecnode.hpp b/Include/API/lib3mf_constvecnode.hpp new file mode 100644 index 000000000..5f6c493e8 --- /dev/null +++ b/Include/API/lib3mf_constvecnode.hpp @@ -0,0 +1,105 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CConstVecNode + +*/ + + +#ifndef __LIB3MF_CONSTVECNODE +#define __LIB3MF_CONSTVECNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_implicitnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CConstVecNode +**************************************************************************************************************************/ + +class CConstVecNode : public virtual IConstVecNode, public virtual CImplicitNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CConstVecNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IConstVecNode::SetVector - Sets the vector value of the node + * @param[in] Value - the value + */ + void SetVector(const Lib3MF::sVector Value) override; + + /** + * IConstVecNode::GetVector - Retrieves the vector value of the node + * @return the value + */ + Lib3MF::sVector GetVector() override; + + /** + * IConstVecNode::GetOutputVector - Retrieves the output + * @return the output + */ + IImplicitPort * GetOutputVector() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_CONSTVECNODE diff --git a/Include/API/lib3mf_coshnode.hpp b/Include/API/lib3mf_coshnode.hpp new file mode 100644 index 000000000..b0de53b13 --- /dev/null +++ b/Include/API/lib3mf_coshnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CCoshNode + +*/ + + +#ifndef __LIB3MF_COSHNODE +#define __LIB3MF_COSHNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CCoshNode +**************************************************************************************************************************/ + +class CCoshNode : public virtual ICoshNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CCoshNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_COSHNODE diff --git a/Include/API/lib3mf_cosnode.hpp b/Include/API/lib3mf_cosnode.hpp new file mode 100644 index 000000000..1128cf777 --- /dev/null +++ b/Include/API/lib3mf_cosnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CCosNode + +*/ + + +#ifndef __LIB3MF_COSNODE +#define __LIB3MF_COSNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CCosNode +**************************************************************************************************************************/ + +class CCosNode : public virtual ICosNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CCosNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_COSNODE diff --git a/Include/API/lib3mf_crossnode.hpp b/Include/API/lib3mf_crossnode.hpp new file mode 100644 index 000000000..13d5a709b --- /dev/null +++ b/Include/API/lib3mf_crossnode.hpp @@ -0,0 +1,88 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CCrossNode + +*/ + + +#ifndef __LIB3MF_CROSSNODE +#define __LIB3MF_CROSSNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_twoinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CCrossNode +**************************************************************************************************************************/ + +class CCrossNode : public virtual ICrossNode, public virtual CTwoInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CCrossNode() = delete; + CCrossNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_CROSSNODE diff --git a/Include/API/lib3mf_decomposevectornode.hpp b/Include/API/lib3mf_decomposevectornode.hpp new file mode 100644 index 000000000..070ca9d33 --- /dev/null +++ b/Include/API/lib3mf_decomposevectornode.hpp @@ -0,0 +1,111 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CDecomposeVectorNode + +*/ + + +#ifndef __LIB3MF_DECOMPOSEVECTORNODE +#define __LIB3MF_DECOMPOSEVECTORNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_implicitnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CDecomposeVectorNode +**************************************************************************************************************************/ + +class CDecomposeVectorNode : public virtual IDecomposeVectorNode, public virtual CImplicitNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CDecomposeVectorNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IDecomposeVectorNode::GetInputVector - Retrieves the input + * @return the input + */ + IImplicitPort * GetInputA() override; + + /** + * IDecomposeVectorNode::GetOutputX - Retrieves the output for the x component + * @return the output for the x component + */ + IImplicitPort * GetOutputX() override; + + /** + * IDecomposeVectorNode::GetOutputY - Retrieves the output for the y component + * @return the output for the y component + */ + IImplicitPort * GetOutputY() override; + + /** + * IDecomposeVectorNode::GetOutputZ - Retrieves the output for the z component + * @return the output for the z component + */ + IImplicitPort * GetOutputZ() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_DECOMPOSEVECTORNODE diff --git a/Include/API/lib3mf_divisionnode.hpp b/Include/API/lib3mf_divisionnode.hpp new file mode 100644 index 000000000..0e23bf494 --- /dev/null +++ b/Include/API/lib3mf_divisionnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CDivisionNode + +*/ + + +#ifndef __LIB3MF_DIVISIONNODE +#define __LIB3MF_DIVISIONNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_twoinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CDivisionNode +**************************************************************************************************************************/ + +class CDivisionNode : public virtual IDivisionNode, public virtual CTwoInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CDivisionNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_DIVISIONNODE diff --git a/Include/API/lib3mf_dotnode.hpp b/Include/API/lib3mf_dotnode.hpp new file mode 100644 index 000000000..32951f09f --- /dev/null +++ b/Include/API/lib3mf_dotnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CDotNode + +*/ + + +#ifndef __LIB3MF_DOTNODE +#define __LIB3MF_DOTNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_twoinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CDotNode +**************************************************************************************************************************/ + +class CDotNode : public virtual IDotNode, public virtual CTwoInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CDotNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_DOTNODE diff --git a/Include/API/lib3mf_expnode.hpp b/Include/API/lib3mf_expnode.hpp new file mode 100644 index 000000000..3b9dae9e6 --- /dev/null +++ b/Include/API/lib3mf_expnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CExpNode + +*/ + + +#ifndef __LIB3MF_EXPNODE +#define __LIB3MF_EXPNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CExpNode +**************************************************************************************************************************/ + +class CExpNode : public virtual IExpNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CExpNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_EXPNODE diff --git a/Include/API/lib3mf_floornode.hpp b/Include/API/lib3mf_floornode.hpp new file mode 100644 index 000000000..21315063a --- /dev/null +++ b/Include/API/lib3mf_floornode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CFloorNode + +*/ + + +#ifndef __LIB3MF_FLOORNODE +#define __LIB3MF_FLOORNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CFloorNode +**************************************************************************************************************************/ + +class CFloorNode : public virtual IFloorNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CFloorNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_FLOORNODE diff --git a/Include/API/lib3mf_fmodnode.hpp b/Include/API/lib3mf_fmodnode.hpp new file mode 100644 index 000000000..ec99eb53e --- /dev/null +++ b/Include/API/lib3mf_fmodnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CFmodNode + +*/ + + +#ifndef __LIB3MF_FMODNODE +#define __LIB3MF_FMODNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_twoinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CFmodNode +**************************************************************************************************************************/ + +class CFmodNode : public virtual IFmodNode, public virtual CTwoInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CFmodNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_FMODNODE diff --git a/Include/API/lib3mf_fractnode.hpp b/Include/API/lib3mf_fractnode.hpp new file mode 100644 index 000000000..d50eb5c22 --- /dev/null +++ b/Include/API/lib3mf_fractnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CFractNode + +*/ + + +#ifndef __LIB3MF_FRACTNODE +#define __LIB3MF_FRACTNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CFractNode +**************************************************************************************************************************/ + +class CFractNode : public virtual IFractNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CFractNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_FRACTNODE diff --git a/Include/API/lib3mf_function.hpp b/Include/API/lib3mf_function.hpp new file mode 100644 index 000000000..3b8f2d716 --- /dev/null +++ b/Include/API/lib3mf_function.hpp @@ -0,0 +1,156 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CFunction + +*/ + + +#ifndef __LIB3MF_FUNCTION +#define __LIB3MF_FUNCTION + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_resource.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Model/Classes/NMR_ModelFunction.h" + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CFunction +**************************************************************************************************************************/ + +class CFunction : public virtual IFunction, public virtual CResource { +private: + /** + * Put private members here. + */ + NMR::CModelFunction* function(); + +protected: + + /** + * Put protected members here. + */ + +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + CFunction() = delete; + CFunction(NMR::PModelResource pResource); + + /** + * Public member functions to implement. + */ + + /** + * IFunction::GetDisplayName - Retrieves the display name of the function + * @return the display name + */ + std::string GetDisplayName() override; + + /** + * IFunction::SetDisplayName - Sets the display name of the function + * @param[in] sDisplayName - the display name + */ + void SetDisplayName(const std::string & sDisplayName) override; + + /** + * IFunction::AddInput - Add an input + * @param[in] sIdentifier - the identifier of the input + * @param[in] sDisplayName - the display name of the input + * @param[in] eType - the type of the input + * @return The added input port + */ + IImplicitPort * AddInput(const std::string & sIdentifier, const std::string & sDisplayName, const Lib3MF::eImplicitPortType eType) override; + + /** + * IFunction::GetInputs - Retrieves the inputs + * @return iterator for the list of inputs + */ + IImplicitPortIterator * GetInputs() override; + + /** + * IFunction::RemoveInput - Removes an input + * @param[in] pInput - The input to be removed + */ + void RemoveInput(IImplicitPort* pInput) override; + + /** + * IFunction::AddOutput - Add an output + * @param[in] sIdentifier - the identifier of the output + * @param[in] sDisplayName - the display name of the output + * @param[in] eType - the type of the input + * @return The added input port + */ + IImplicitPort * AddOutput(const std::string & sIdentifier, const std::string & sDisplayName, const Lib3MF::eImplicitPortType eType) override; + + /** + * IFunction::GetOutputs - Retrieves the outputs + * @return iterator for the outputs + */ + IImplicitPortIterator * GetOutputs() override; + + /** + * IFunction::RemoveOutput - Removes an output + * @param[in] pOutput - The output to be removed + */ + void RemoveOutput(IImplicitPort* pOutput) override; + + /** + * IFunction::FindInput - Retrieves an input + * @param[in] sIdentifier - the identifier of the input + * @return the input port + */ + IImplicitPort * FindInput(const std::string & sIdentifier) override; + + /** + * IFunction::FindOutput - Retrieves an output + * @param[in] sIdentifier - the identifier of the output + * @return the output port + */ + IImplicitPort * FindOutput(const std::string & sIdentifier) override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_FUNCTION diff --git a/Include/API/lib3mf_functioncallnode.hpp b/Include/API/lib3mf_functioncallnode.hpp new file mode 100644 index 000000000..bdad495b4 --- /dev/null +++ b/Include/API/lib3mf_functioncallnode.hpp @@ -0,0 +1,92 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CFunctionCallNode + +*/ + + +#ifndef __LIB3MF_FUNCTIONCALLNODE +#define __LIB3MF_FUNCTIONCALLNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_implicitnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CFunctionCallNode +**************************************************************************************************************************/ + +class CFunctionCallNode : public virtual IFunctionCallNode, public virtual CImplicitNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CFunctionCallNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IFunctionCallNode::GetInputFunctionId - Retrieves the input for the function id + * @return the input port for the function + */ + IImplicitPort * GetInputFunctionID() override; +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_FUNCTIONCALLNODE diff --git a/Include/API/lib3mf_functionfromimage3d.hpp b/Include/API/lib3mf_functionfromimage3d.hpp new file mode 100644 index 000000000..ef781c443 --- /dev/null +++ b/Include/API/lib3mf_functionfromimage3d.hpp @@ -0,0 +1,156 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CFunctionFromImage3D + +*/ + + +#ifndef __LIB3MF_FUNCTIONFROMIMAGE3D +#define __LIB3MF_FUNCTIONFROMIMAGE3D + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_function.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Model/Classes/NMR_ModelFunctionFromImage3D.h" + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CFunctionFromImage3D +**************************************************************************************************************************/ + +class CFunctionFromImage3D : public virtual IFunctionFromImage3D, public virtual CFunction { +private: + + /** + * Put private members here. + */ + NMR::CModelFunctionFromImage3D* functionfromimage3d(); + +protected: + + /** + * Put protected members here. + */ + +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + /** + * Put additional public members here. They will not be visible in the external API. + */ + CFunctionFromImage3D() = delete; + CFunctionFromImage3D(NMR::PModelResource pResource); + + /** + * Public member functions to implement. + */ + + /** + * IFunctionFromImage3D::GetImage3D - Returns the selected 3D image. + * @return image instance + */ + IImage3D * GetImage3D() override; + + /** + * IFunctionFromImage3D::SetImage3D - Sets the 3D image of the selector. + * @param[in] pImage3D - image instance + */ + void SetImage3D(IImage3D* pImage3D) override; + + /** + * IFunctionFromImage3D::SetFilter - Sets the texture filter of the selector. + * @param[in] eFilter - texture filter + */ + void SetFilter(const Lib3MF::eTextureFilter eFilter) override; + + /** + * IFunctionFromImage3D::GetFilter - Returns the texture filter of the selector. + * @return texture filter + */ + Lib3MF::eTextureFilter GetFilter() override; + + /** + * IFunctionFromImage3D::SetTileStyles - Sets the tile styles of the selector. + * @param[in] eTileStyleU - tile style in U + * @param[in] eTileStyleV - tile style in V + * @param[in] eTileStyleW - tile style in W + */ + void SetTileStyles(const Lib3MF::eTextureTileStyle eTileStyleU, const Lib3MF::eTextureTileStyle eTileStyleV, const Lib3MF::eTextureTileStyle eTileStyleW) override; + + /** + * IFunctionFromImage3D::GetTileStyles - Retrieves the tile styles of the selector. + * @param[out] eTileStyleU - tile style in U + * @param[out] eTileStyleV - tile style in V + * @param[out] eTileStyleW - tile style in W + */ + void GetTileStyles(Lib3MF::eTextureTileStyle & eTileStyleU, Lib3MF::eTextureTileStyle & eTileStyleV, Lib3MF::eTextureTileStyle & eTileStyleW) override; + + /** + * IFunctionFromImage3D::GetOffset - returns the offset value for the pixel values in the Image3D + * @return the offset value for the pixel values in the Image3D + */ + Lib3MF_double GetOffset() override; + + /** + * IFunctionFromImage3D::SetOffset - Sets the offset value for the pixel values in the Image3D + * @param[in] dOffset - the offset value for the pixel values in the Image3D + */ + void SetOffset(const Lib3MF_double dOffset) override; + + /** + * IFunctionFromImage3D::GetScale - returns the scale value for the pixel values in the Image3D + * @return the scale value for the pixel values in the Image3D + */ + Lib3MF_double GetScale() override; + + /** + * IFunctionFromImage3D::SetScale - Sets the scale value for the pixel values in the Image3D + * @param[in] dScale - the scale value for the pixel values in the Image3D + */ + void SetScale(const Lib3MF_double dScale) override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_FUNCTIONFROMIMAGE3D diff --git a/Include/API/lib3mf_functioniterator.hpp b/Include/API/lib3mf_functioniterator.hpp new file mode 100644 index 000000000..95d694838 --- /dev/null +++ b/Include/API/lib3mf_functioniterator.hpp @@ -0,0 +1,93 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CFunctionIterator + +*/ + + +#ifndef __LIB3MF_FUNCTIONITERATOR +#define __LIB3MF_FUNCTIONITERATOR + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_resourceiterator.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CFunctionIterator +**************************************************************************************************************************/ + +class CFunctionIterator : public virtual IFunctionIterator, public virtual CResourceIterator { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IFunctionIterator::GetCurrentFunction - Returns the Function the iterator points at. + * @return returns the Function instance. + */ + IFunction * GetCurrentFunction() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_FUNCTIONITERATOR diff --git a/Include/API/lib3mf_functionreference.hpp b/Include/API/lib3mf_functionreference.hpp new file mode 100644 index 000000000..b2c7b8295 --- /dev/null +++ b/Include/API/lib3mf_functionreference.hpp @@ -0,0 +1,149 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CFunctionReference + +*/ + + +#ifndef __LIB3MF_FUNCTIONREFERENCE +#define __LIB3MF_FUNCTIONREFERENCE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_base.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Common/NMR_FunctionReference.h" + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CFunctionReference +**************************************************************************************************************************/ + +class CFunctionReference : public virtual IFunctionReference, public virtual CBase { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + NMR::PFunctionReference m_pFunctionReference; +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + CFunctionReference(NMR::PFunctionReference pFunctionReference); + + /** + * Public member functions to implement. + */ + + /** + * IFunctionReference::GetFunctionResourceID - Returns the UniqueResourceID of the Function. + * @return returns the UniqueResourceID. + */ + Lib3MF_uint32 GetFunctionResourceID() override; + + /** + * IFunctionReference::SetFunctionResourceID - Sets the UniqueResourceID to refer to. + * @param[in] nUniqueResourceID - UniqueResourceID of the function + */ + void SetFunctionResourceID(const Lib3MF_uint32 nUniqueResourceID) override; + + + /** + * IFunctionReference::GetTransform - Returns the transformation matrix into the coordinate system of the referenced Function. + * @return the transformation matrix + */ + Lib3MF::sTransform GetTransform() override; + + /** + * IFunctionReference::SetTransform - Sets the transformation matrix into the coordinate system of the referenced Function. + * @param[in] Transform - new transformation matrix + */ + void SetTransform(const Lib3MF::sTransform Transform) override; + + /** + * IFunctionReference::GetChannelName - Returns the name of the function output to use. + * @return the name of the function output + */ + std::string GetChannelName() override; + + /** + * IFunctionReference::SetChannelName - Sets the name of the function output to use. + * @param[in] sChannelName - new name of the function output + */ + void SetChannelName(const std::string & sChannelName) override; + + /** + * IFunctionReference::SetMinFeatureSize - Sets the minimal feature size as a hint for the function evaluator + * @param[in] dMinFeatureSize - minimal feature size + */ + void SetMinFeatureSize(const Lib3MF_double dMinFeatureSize) override; + + /** + * IFunctionReference::GetMinFeatureSize - Returns the minimal feature size as a hint for the function evaluator + * @return minimal feature size + */ + Lib3MF_double GetMinFeatureSize() override; + + /** + * IFunctionReference::SetFallBackValue - Sets the fallback value to use + * if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @param[in] dFallBackValue - fallback value + */ + void SetFallBackValue(const Lib3MF_double dFallBackValue) override; + + /** + * IFunctionReference::GetFallBackValue - Returns the fallback value to + * use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @return fallback value + */ + Lib3MF_double GetFallBackValue(); +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_FUNCTIONREFERENCE diff --git a/Include/API/lib3mf_image3d.hpp b/Include/API/lib3mf_image3d.hpp new file mode 100644 index 000000000..8de452444 --- /dev/null +++ b/Include/API/lib3mf_image3d.hpp @@ -0,0 +1,94 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CImage3D + +*/ + + +#ifndef __LIB3MF_IMAGE3D +#define __LIB3MF_IMAGE3D + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_resource.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Model/Classes/NMR_ModelImage3D.h" + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CImage3D +**************************************************************************************************************************/ + +class CImage3D : public virtual IImage3D, public virtual CResource { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + NMR::CModelImage3D* image3D(); +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + CImage3D() = delete; + CImage3D(NMR::PModelResource pResource); + + /** + * Public member functions to implement. + */ + + std::string GetName() override; + + void SetName(const std::string & sName) override; + + bool IsImageStack() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_IMAGE3D diff --git a/Include/API/lib3mf_image3diterator.hpp b/Include/API/lib3mf_image3diterator.hpp new file mode 100644 index 000000000..4752d3535 --- /dev/null +++ b/Include/API/lib3mf_image3diterator.hpp @@ -0,0 +1,88 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CImage3DIterator + +*/ + + +#ifndef __LIB3MF_IMAGE3DITERATOR +#define __LIB3MF_IMAGE3DITERATOR + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_resourceiterator.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CImage3DIterator +**************************************************************************************************************************/ + +class CImage3DIterator : public virtual IImage3DIterator, public virtual CResourceIterator { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + IImage3D * GetCurrentImage3D() override; +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_IMAGE3DITERATOR diff --git a/Include/API/lib3mf_imagestack.hpp b/Include/API/lib3mf_imagestack.hpp new file mode 100644 index 000000000..b0d6da42c --- /dev/null +++ b/Include/API/lib3mf_imagestack.hpp @@ -0,0 +1,109 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CImageStack + +*/ + + +#ifndef __LIB3MF_IMAGESTACK +#define __LIB3MF_IMAGESTACK + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_image3d.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Model/Classes/NMR_ModelImageStack.h" + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CImageStack +**************************************************************************************************************************/ + +class CImageStack : public virtual IImageStack, public virtual CImage3D { +private: + + /** + * Put private members here. + */ + NMR::PModelImageStack m_pModelImageStack; + +protected: + + /** + * Put protected members here. + */ + +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + CImageStack() = delete; + CImageStack(NMR::PModelImageStack pModelImageStack); + + /** + * Public member functions to implement. + */ + + Lib3MF_uint32 GetRowCount() override; + + void SetRowCount(const Lib3MF_uint32 nRowCount) override; + + Lib3MF_uint32 GetColumnCount() override; + + void SetColumnCount(const Lib3MF_uint32 nColumnCount) override; + + Lib3MF_uint32 GetSheetCount() override; + + IAttachment * GetSheet(const Lib3MF_uint32 nIndex) override; + + void SetSheet(const Lib3MF_uint32 nIndex, IAttachment* pSheet) override; + + IAttachment * CreateEmptySheet(const Lib3MF_uint32 nIndex, const std::string & sPath) override; + + IAttachment * CreateSheetFromBuffer(const Lib3MF_uint32 nIndex, const std::string & sPath, const Lib3MF_uint64 nDataBufferSize, const Lib3MF_uint8 * pDataBuffer) override; + + IAttachment * CreateSheetFromFile(const Lib3MF_uint32 nIndex, const std::string & sPath, const std::string & sFileName) override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_IMAGESTACK diff --git a/Include/API/lib3mf_implicitfunction.hpp b/Include/API/lib3mf_implicitfunction.hpp new file mode 100644 index 000000000..8a4e24e8c --- /dev/null +++ b/Include/API/lib3mf_implicitfunction.hpp @@ -0,0 +1,795 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CImplicitFunction + +*/ + +#ifndef __LIB3MF_IMPLICITFUNCTION +#define __LIB3MF_IMPLICITFUNCTION + +#include "lib3mf_function.hpp" +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_base.hpp" + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Model/Classes/NMR_ModelImplicitFunction.h" + +namespace Lib3MF +{ + namespace Impl + { + + /************************************************************************************************************************* + Class declaration of CImplicitFunction + **************************************************************************************************************************/ + + class CImplicitFunction : public IImplicitFunction, public CFunction + { + private: + /** + * Put private members here. + */ + NMR::CModelImplicitFunction* function(); + + protected: + /** + * Put protected members here. + */ + + public: + /** + * Put additional public members here. They will not be visible in + * the external API. + */ + + CImplicitFunction() = delete; + CImplicitFunction(NMR::PModelResource pResource); + /** + * Public member functions to implement. + */ + + /** + * IImplicitFunction::GetIdentifier - Retrieves the identifier of + * the function + * @return the identifier + */ + std::string GetIdentifier() override; + + /** + * IImplicitFunction::SetIdentifier - Sets the identifier of the + * function + * @param[in] sIdentifier - the identifier + */ + void SetIdentifier(const std::string& sIdentifier) override; + + /** + * IImplicitFunction::AddNode - Add a node + * @param[in] eNodeType - the type of the node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IImplicitNode* AddNode( + const Lib3MF::eImplicitNodeType eNodeType, + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddSinNode - Add a SinNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ISinNode* AddSinNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddCosNode - Add a CosNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ICosNode* AddCosNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddTanNode - Add a TanNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ITanNode* AddTanNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddArcSinNode - Add a ArcSinNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IArcSinNode* AddArcSinNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddArcCosNode - Add a ArcCosNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IArcCosNode* AddArcCosNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddArcTan2Node - Add a ArcTan2Node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IArcTan2Node* AddArcTan2Node( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddSinhNode - Add a SinhNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ISinhNode* AddSinhNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddCoshNode - Add a CoshNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ICoshNode* AddCoshNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddTanhNode - Add a TanhNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ITanhNode* AddTanhNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddRoundNode - Add a RoundNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IRoundNode* AddRoundNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddCeilNode - Add a CeilNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ICeilNode* AddCeilNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddFloorNode - Add a FloorNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IFloorNode* AddFloorNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddSignNode - Add a SignNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ISignNode* AddSignNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddFractNode - Add a FractNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IFractNode* AddFractNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddAbsNode - Add a AbsNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IAbsNode* AddAbsNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddExpNode - Add a ExpNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IExpNode* AddExpNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddLogNode - Add a LogNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ILogNode* AddLogNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddLog2Node - Add a Log2Node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ILog2Node* AddLog2Node( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddLog10Node - Add a Log10Node + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ILog10Node* AddLog10Node( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddLengthNode - Add a LengthNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ILengthNode* AddLengthNode(const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddTransposeNode - Add a TransposeNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ITransposeNode* AddTransposeNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::InverseNode - Add a InverseNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IInverseNode* InverseNode(const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddSqrtNode - Add a SqrtNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ISqrtNode* AddSqrtNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddResourceIdNode - Add a ResourceIdNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IResourceIdNode* AddResourceIdNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddAdditionNode - Add an AdditionNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IAdditionNode* AddAdditionNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddSubtractionNode - Add a SubtractionNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ISubtractionNode* AddSubtractionNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddMultiplicationNode - Add a + * MultiplicationNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IMultiplicationNode* AddMultiplicationNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddDivisionNode - Add a DivisionNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IDivisionNode* AddDivisionNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddDotNode - Add a DotNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IDotNode* AddDotNode(const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddCrossNode - Add a CrossNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ICrossNode* AddCrossNode(const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddMatVecMultiplicationNode - Add a + * MatVecMultiplicationNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IMatVecMultiplicationNode* AddMatVecMultiplicationNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddMinNode - Add a MinNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IMinNode* AddMinNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddMaxNode - Add a MaxNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IMaxNode* AddMaxNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddFmodNode - Add a FmodNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IFmodNode* AddFmodNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddPowNode - Add a PowNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IPowNode* AddPowNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddSelectNode - Add a SelectNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + ISelectNode* AddSelectNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddClampNode - Add a ClampNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] eConfiguration - the configuration of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IClampNode* AddClampNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddComposeVectorNode - Add a ComposeVectorNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IComposeVectorNode* AddComposeVectorNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddVectorFromScalarNode - Add a VectorFromScalar + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IVectorFromScalarNode * AddVectorFromScalarNode(const std::string & sIdentifier, + const std::string & sDisplayName, + const std::string & sTag) override; + + /** + * IImplicitFunction::AddDecomposeVectorNode - Add a + * DecomposeVectorNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IDecomposeVectorNode* AddDecomposeVectorNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddComposeMatrixNode - Add a ComposeMatrixNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IComposeMatrixNode* AddComposeMatrixNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddMatrixFromRowsNode - Add a MatrixFromRowsNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IMatrixFromRowsNode * AddMatrixFromRowsNode(const std::string & sIdentifier, + const std::string & sDisplayName, + const std::string & sTag) override; + + /** + * IImplicitFunction::AddMatrixFromColumnsNode - Add a MatrixFromColumnsNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IMatrixFromColumnsNode * AddMatrixFromColumnsNode(const std::string & sIdentifier, + const std::string & sDisplayName, + const std::string & sTag) override; + + /** + * IImplicitFunction::AddConstantNode - Add a ConstantNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IConstantNode* AddConstantNode(const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddConstVecNode - Add a ConstVecNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IConstVecNode* AddConstVecNode(const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddConstMatNode - Add a ConstMatNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IConstMatNode* AddConstMatNode(const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddMeshNode - Add a MeshNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IMeshNode* AddMeshNode(const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::AddUnsignedMeshNode - Add a UnsignedMeshNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IUnsignedMeshNode * AddUnsignedMeshNode(const std::string & sIdentifier, + const std::string & sDisplayName, + const std::string & sTag) override; + + /** + * IImplicitFunction::AddFunctionCallNode - Add a FunctionCallNode + * @param[in] sIdentifier - the identifier of the node + * @param[in] sDisplayName - the display name of the node + * @param[in] sTag - the tag of the node + * @return the added node + */ + IFunctionCallNode* AddFunctionCallNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) override; + + /** + * IImplicitFunction::GetNodes - Retrieves the nodes + * @return the accessor to the nodes + */ + INodeIterator* GetNodes() override; + + /** + * IImplicitFunction::RemoveNode - Removes a node + * @param[in] pNode - The node to be removed + */ + void RemoveNode(IImplicitNode* pNode) override; + + /** + * IImplicitFunction::AddLink - Add a link + * @param[in] pSource - the source port + * @param[in] pTarget - the target port + */ + void AddLink(IImplicitPort* pSource, + IImplicitPort* pTarget) override; + + /** + * IImplicitFunction::AddLinkByNames - Add a link + * @param[in] sSource - name of the source port in the format + * nodename.portname + * @param[in] sTarget - name of the target port in the format + * nodename.portname + */ + void AddLinkByNames(const std::string& sSource, + const std::string& sTarget) override; + + /** + * IImplicitFunction::Clear - Clears the function + */ + void Clear() override; + + /** + * IImplicitFunction::SortNodesTopologically - Sorts the nodes + * topologically + */ + void SortNodesTopologically() override; + }; + + } // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_IMPLICITFUNCTION diff --git a/Include/API/lib3mf_implicitnode.hpp b/Include/API/lib3mf_implicitnode.hpp new file mode 100644 index 000000000..10b733bbe --- /dev/null +++ b/Include/API/lib3mf_implicitnode.hpp @@ -0,0 +1,173 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CImplicitNode + +*/ + +#ifndef __LIB3MF_IMPLICITNODE +#define __LIB3MF_IMPLICITNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_base.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Model/Classes/NMR_ModelImplicitNode.h" + +namespace Lib3MF +{ + namespace Impl + { + + /************************************************************************************************************************* + Class declaration of CImplicitNode + **************************************************************************************************************************/ + + class CImplicitNode : public virtual IImplicitNode, public virtual CBase + { + private: + + + protected: + /** + * Put protected members here. + */ + NMR::PModelImplicitNode m_pImplicitNode; + + IImplicitPort * FindInputOrThrow(const std::string & sIdentifier); + IImplicitPort * FindOutputOrThrow(const std::string & sIdentifier); + public: + + CImplicitNode() = default; + explicit CImplicitNode(NMR::PModelImplicitNode pImplicitNode); + + /** + * Public member functions to implement. + */ + + /** + * IImplicitNode::GetIdentifier - Retrieves the identifier of the node + * @return the identifier + */ + std::string GetIdentifier() override; + + /** + * IImplicitNode::SetIdentifier - Sets the identifier of the node + * @param[in] sIdentifier - the identifier + */ + void SetIdentifier(const std::string & sIdentifier) override; + + /** + * IImplicitNode::GetDisplayName - Retrieves the display name of the node + * @return the display name + */ + std::string GetDisplayName() override; + + /** + * IImplicitNode::SetDisplayName - Sets the display name of the node + * @param[in] sDisplayName - the display name + */ + void SetDisplayName(const std::string & sDisplayName) override; + + /** + * IImplicitNode::GetTag - Retrieves the tag of the node + * @return the tag + */ + std::string GetTag() override; + + /** + * IImplicitNode::SetTag - Sets the tag of the node + * @param[in] sTag - the tag + */ + void SetTag(const std::string& sTag) override; + + Lib3MF::eImplicitNodeType GetNodeType() override; + + /** + * IImplicitNode::AddInput - Add an input + * @param[in] sIdentifier - the identifier of the input + * @param[in] sDisplayName - the display name of the input + * @return + */ + IImplicitPort * AddInput(const std::string & sIdentifier, + const std::string & sDisplayName) override; + + /** + * IImplicitNode::GetInputs - Retrieves the inputs + * @return the accessor to the inputs + */ + IImplicitPortIterator * GetInputs() override; + + /** + * IImplicitNode::AddOutput - Add an output + * @param[in] sIdentifier - the identifier of the output + * @param[in] sDisplayName - the display name of the output + * @return + */ + IImplicitPort * AddOutput(const std::string & sIdentifier, + const std::string & sDisplayName) override; + + /** + * IImplicitNode::GetOutputs - Retrieves the outputs + * @return the accessor to the outputs + */ + IImplicitPortIterator * GetOutputs() override; + + /** + * IImplicitNode::FindInput - Retrieves an input + * @param[in] sIdentifier - the identifier of the input + * @return the input port + */ + IImplicitPort * FindInput(const std::string & sIdentifier) override; + + /** + * IImplicitNode::FindOutput - Retrieves an output + * @param[in] sIdentifier - the identifier of the output + * @return the output port + */ + IImplicitPort * FindOutput(const std::string & sIdentifier) override; + + /** + * IImplicitNode::AreTypesValid - Checks if the types of the input + * and output ports are valid for the node type + * @return true, if the types are valid + */ + bool AreTypesValid() override; + }; + + } // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_IMPLICITNODE diff --git a/Include/API/lib3mf_implicitport.hpp b/Include/API/lib3mf_implicitport.hpp new file mode 100644 index 000000000..28a1aaee3 --- /dev/null +++ b/Include/API/lib3mf_implicitport.hpp @@ -0,0 +1,137 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CImplicitPort + +*/ + +#ifndef __LIB3MF_IMPLICITPORT +#define __LIB3MF_IMPLICITPORT + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_base.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Model/Classes/NMR_ModelImplicitPort.h" + +namespace Lib3MF +{ + namespace Impl + { + + /************************************************************************************************************************* + Class declaration of CImplicitPort + **************************************************************************************************************************/ + + class CImplicitPort : public virtual IImplicitPort, public virtual CBase + { + private: + /** + * Put private members here. + */ + NMR::PModelImplicitPort m_pImplicitPort; + + protected: + /** + * Put protected members here. + */ + + public: + CImplicitPort(NMR::PModelImplicitPort pImplicitPort); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + /** + * Public member functions to implement. + */ + + /** + * IImplicitPort::GetIdentifier - Retrieves the identifier of the port + * @return the identifier + */ + std::string GetIdentifier() override; + + /** + * IImplicitPort::SetIdentifier - Sets the identifier of the port + * @param[in] sIdentifier - the identifier + */ + void SetIdentifier(const std::string & sIdentifier) override; + + /** + * IImplicitPort::GetDisplayName - Retrieves the display name of the port + * @return the display name + */ + std::string GetDisplayName() override; + + /** + * IImplicitPort::SetDisplayName - Sets the display name of the port + * @param[in] sDisplayName - the display name + */ + void SetDisplayName(const std::string & sDisplayName) override; + + /** + * IImplicitPort::SetType - Sets the type of the port + * @param[in] eImplicitPortType - the type + */ + void SetType(const Lib3MF::eImplicitPortType eImplicitPortType) override; + + /** + * IImplicitPort::GetType - Retrieves the type of the port + * @return the type + */ + Lib3MF::eImplicitPortType GetType() override; + + /** + * IImplicitPort::GetReference - Retrieves the reference of the port, only used for + * input ports + * @return the reference + */ + std::string GetReference() override; + + /** + * IImplicitPort::SetReference - Sets the reference of the port, only used for input + * ports + * @param[in] sReference - the reference + */ + void SetReference(const std::string & sReference) override; + + NMR::PModelImplicitPort getPort(); + }; + + } // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_IMPLICITPORT diff --git a/Include/API/lib3mf_implicitportiterator.hpp b/Include/API/lib3mf_implicitportiterator.hpp new file mode 100644 index 000000000..b0e6d169b --- /dev/null +++ b/Include/API/lib3mf_implicitportiterator.hpp @@ -0,0 +1,95 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CImplicitPortIterator + +*/ + + +#ifndef __LIB3MF_IMPLICITPORTITERATOR +#define __LIB3MF_IMPLICITPORTITERATOR + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_iterator.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Model/Classes/NMR_ModelImplicitNode.h" + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CImplicitPortIterator +**************************************************************************************************************************/ + +class CImplicitPortIterator : public virtual IImplicitPortIterator, public virtual CIterator { +private: + + /** + * Put private members here. + */ + NMR::PPorts m_pPorts; +protected: + + /** + * Put protected members here. + */ + +public: + CImplicitPortIterator(NMR::PPorts pPorts); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IImplicitPortIterator::GetCurrent - Returns the current element + * @return The current element + */ + IImplicitPort * GetCurrent() override; + + Lib3MF_uint64 Count() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_IMPLICITPORTITERATOR diff --git a/Include/API/lib3mf_inversenode.hpp b/Include/API/lib3mf_inversenode.hpp new file mode 100644 index 000000000..a013fd154 --- /dev/null +++ b/Include/API/lib3mf_inversenode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CInverseNode + +*/ + + +#ifndef __LIB3MF_INVERSENODE +#define __LIB3MF_INVERSENODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CInverseNode +**************************************************************************************************************************/ + +class CInverseNode : public virtual IInverseNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CInverseNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_INVERSENODE diff --git a/Include/API/lib3mf_iterator.hpp b/Include/API/lib3mf_iterator.hpp new file mode 100644 index 000000000..fb72702cd --- /dev/null +++ b/Include/API/lib3mf_iterator.hpp @@ -0,0 +1,106 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CIterator + +*/ + + +#ifndef __LIB3MF_ITERATOR +#define __LIB3MF_ITERATOR + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_base.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CIterator +**************************************************************************************************************************/ + +class CIterator : public virtual IIterator, public virtual CBase { +private: + + /** + * Put private members here. + */ + Lib3MF_int64 m_nCurrentIndex = -1; +protected: + + /** + * Put protected members here. + */ + Lib3MF_int64 getCurrentIndex(); + void throwIfInvalidIndex(); +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IIterator::MoveNext - Iterates to the next item in the list. + * @return Iterates to the next item in the list. + */ + bool MoveNext() override; + + /** + * IIterator::MovePrevious - Iterates to the previous item in the list. + * @return Iterates to the previous item in the list. + */ + bool MovePrevious() override; + + /** + * IIterator::Count - Returns the number of items the iterator captures. + * @return returns the number of items the iterator captures. + */ + Lib3MF_uint64 Count() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_ITERATOR diff --git a/Include/API/lib3mf_keystore.hpp b/Include/API/lib3mf_keystore.hpp index cfc4bb2b6..78e48df31 100644 --- a/Include/API/lib3mf_keystore.hpp +++ b/Include/API/lib3mf_keystore.hpp @@ -93,23 +93,29 @@ namespace Lib3MF { virtual Lib3MF_uint64 GetResourceDataGroupCount() override; - virtual IResourceDataGroup * GetResourceDataGroup(const Lib3MF_uint64 nResourceDataIndex) override; + IResourceDataGroup * GetResourceDataGroup(const Lib3MF_uint64 nResourceDataIndex) override; - virtual IResourceDataGroup * AddResourceDataGroup() override; + IResourceDataGroup * AddResourceDataGroup() override; - virtual void RemoveResourceDataGroup(IResourceDataGroup * pTheResourceDataGroup) override; + void RemoveResourceDataGroup(IResourceDataGroup * pTheResourceDataGroup) override; - virtual Lib3MF::Impl::IResourceDataGroup * FindResourceDataGroup(Lib3MF::Impl::IPackagePart *pPartPath); + Lib3MF::Impl::IResourceDataGroup * FindResourceDataGroup(Lib3MF::Impl::IPackagePart *pPartPath) override; - virtual IResourceData * AddResourceData(IResourceDataGroup* pResourceDataGroup, IPackagePart* pPartPath, const Lib3MF::eEncryptionAlgorithm eAlgorithm, const Lib3MF::eCompression eCompression, const Lib3MF_uint64 nAdditionalAuthenticationDataBufferSize, const Lib3MF_uint8 * pAdditionalAuthenticationDataBuffer); + IResourceData * AddResourceData( + IResourceDataGroup * pResourceDataGroup, + IPackagePart * pPartPath, + const Lib3MF::eEncryptionAlgorithm eAlgorithm, + const Lib3MF::eCompression eCompression, + const Lib3MF_uint64 nAdditionalAuthenticationDataBufferSize, + const Lib3MF_uint8 * pAdditionalAuthenticationDataBuffer) override; - virtual void RemoveResourceData(Lib3MF::Impl::IResourceData *pResourceData); + void RemoveResourceData(Lib3MF::Impl::IResourceData *pResourceData) override; - virtual Lib3MF_uint64 GetResourceDataCount(); + Lib3MF_uint64 GetResourceDataCount() override; - virtual Lib3MF::Impl::IResourceData * GetResourceData(const Lib3MF_uint64 nResourceDataIndex); + Lib3MF::Impl::IResourceData * GetResourceData(const Lib3MF_uint64 nResourceDataIndex) override; - virtual IResourceData * FindResourceData(IPackagePart * pResourcePath) override; + IResourceData * FindResourceData(IPackagePart * pResourcePath) override; }; diff --git a/Include/API/lib3mf_lengthnode.hpp b/Include/API/lib3mf_lengthnode.hpp new file mode 100644 index 000000000..912c6f26a --- /dev/null +++ b/Include/API/lib3mf_lengthnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CLengthNode + +*/ + + +#ifndef __LIB3MF_LENGTHNODE +#define __LIB3MF_LENGTHNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CLengthNode +**************************************************************************************************************************/ + +class CLengthNode : public virtual ILengthNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CLengthNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_LENGTHNODE diff --git a/Include/API/lib3mf_levelset.hpp b/Include/API/lib3mf_levelset.hpp new file mode 100644 index 000000000..be1c11e4a --- /dev/null +++ b/Include/API/lib3mf_levelset.hpp @@ -0,0 +1,194 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CLevelSet + +*/ + + +#ifndef __LIB3MF_BOUNDARYSHAPE +#define __LIB3MF_BOUNDARYSHAPE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_object.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Model/Classes/NMR_ModelLevelSetObject.h" + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CLevelSet +**************************************************************************************************************************/ + +class CLevelSet : public virtual ILevelSet, public virtual CObject { +private: + + /** + * Put private members here. + */ + NMR::PModelLevelSetObject levelSetObject(); +protected: + + /** + * Put protected members here. + */ + +public: + /** + * Put additional public members here. They will not be visible in the external API. + */ + + CLevelSet() = delete; + + CLevelSet(NMR::PModelResource pResource); + + + /** + * Public member functions to implement. + */ + static ILevelSet* fnCreateLevelSetFromModelResource( + NMR::PModelResource pResource, bool bFailIfUnkownClass); + + /** + * ILevelSet::GetFunction - Returns the function that is used as boundary shape. + * @return the function to use as boundary shape + */ + IFunction * GetFunction() override; + + /** + * ILevelSet::SetFunction - Sets the function to use as boundary shape. + * @param[in] pTheFunction - the function to use as boundary shape + */ + void SetFunction(IFunction* pTheFunction) override; + + /** + * ILevelSet::GetTransform - Returns the transformation matrix into the coordinate system of the referenced Function. + * @return the transformation matrix + */ + Lib3MF::sTransform GetTransform() override; + + /** + * ILevelSet::SetTransform - Sets the transformation matrix into the coordinate system of the referenced Function. + * @param[in] Transform - new transformation matrix + */ + void SetTransform(const Lib3MF::sTransform Transform) override; + + /** + * ILevelSet::GetChannelName - Returns the name of the function output channel to use. + * @return the name of the function output channel + */ + std::string GetChannelName() override; + + /** + * ILevelSet::SetChannelName - Sets the name of the function output channel to use. + * @param[in] sChannelName - new name of the function output channel + */ + void SetChannelName(const std::string & sChannelName) override; + + /** + * ILevelSet::SetMinFeatureSize - Sets the minimal feature size as a hint for the function evaluator + * @param[in] dMinFeatureSize - minimal feature size + */ + void SetMinFeatureSize(const Lib3MF_double dMinFeatureSize) override; + + /** + * ILevelSet::GetMinFeatureSize - Returns the minimal feature size as a hint for the function evaluator + * @return minimal feature size + */ + Lib3MF_double GetMinFeatureSize() override; + + /** + * ILevelSet::SetFallBackValue - Sets the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @param[in] dFallBackValue - fallback value + */ + void SetFallBackValue(const Lib3MF_double dFallBackValue) override; + + /** + * ILevelSet::GetFallBackValue - Returns the fallback value to use if the function evaluation fails (e.g. evaluates to NaN or Inf). + * @return fallback value + */ + Lib3MF_double GetFallBackValue() override; + + /** + * ILevelSet::SetMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + * @param[in] bMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + */ + void SetMeshBBoxOnly(const bool bMeshBBoxOnly) override; + + /** + * ILevelSet::GetMeshBBoxOnly - If set only the bounding box of the mesh is intersected with the boundary + * @return If set only the bounding box of the mesh is intersected with the boundary + */ + bool GetMeshBBoxOnly() override; + + /** + * ILevelSet::SetMesh - Sets the mesh to use as evaluation domain + * @param[in] pTheMesh - The mesh + */ + void SetMesh(IMeshObject* pTheMesh) override; + + /** + * ILevelSet::GetMesh - Returns the mesh that is used as evaluation domain + * @return The mesh + */ + IMeshObject * GetMesh() override; + + + /** + * ILevelSet::GetVolumeData - Retrieves the VolumeData this MeshObject. + * @return the VolumeData of this MeshObject + */ + IVolumeData * GetVolumeData() override; + + /** + * ILevelSet::SetVolumeData - Sets the VolumeData of this LevelSet. + * @param[in] pTheVolumeData - the VolumeData of this MeshObject + */ + void SetVolumeData(IVolumeData* pTheVolumeData) override; + + bool IsMeshObject() override; + + bool IsComponentsObject() override; + + bool IsLevelSetObject() override; +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_BOUNDARYSHAPE diff --git a/Include/API/lib3mf_levelsetiterator.hpp b/Include/API/lib3mf_levelsetiterator.hpp new file mode 100644 index 000000000..1684a1322 --- /dev/null +++ b/Include/API/lib3mf_levelsetiterator.hpp @@ -0,0 +1,93 @@ +/*++ + +Copyright (C) 2024 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CLevelSetIterator + +*/ + + +#ifndef __LIB3MF_BOUNDARYSHAPEITERATOR +#define __LIB3MF_BOUNDARYSHAPEITERATOR + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_resourceiterator.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CLevelSetIterator +**************************************************************************************************************************/ + +class CLevelSetIterator : public virtual ILevelSetIterator, public virtual CResourceIterator { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * ILevelSetIterator::GetCurrentLevelSet - Returns the LevelSet the iterator points at. + * @return returns the MeshObject instance. + */ + ILevelSet * GetCurrentLevelSet() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_BOUNDARYSHAPEITERATOR diff --git a/Include/API/lib3mf_log10node.hpp b/Include/API/lib3mf_log10node.hpp new file mode 100644 index 000000000..d8429eaad --- /dev/null +++ b/Include/API/lib3mf_log10node.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CLog10Node + +*/ + + +#ifndef __LIB3MF_LOG10NODE +#define __LIB3MF_LOG10NODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CLog10Node +**************************************************************************************************************************/ + +class CLog10Node : public virtual ILog10Node, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CLog10Node(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_LOG10NODE diff --git a/Include/API/lib3mf_log2node.hpp b/Include/API/lib3mf_log2node.hpp new file mode 100644 index 000000000..712028582 --- /dev/null +++ b/Include/API/lib3mf_log2node.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CLog2Node + +*/ + + +#ifndef __LIB3MF_LOG2NODE +#define __LIB3MF_LOG2NODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CLog2Node +**************************************************************************************************************************/ + +class CLog2Node : public virtual ILog2Node, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CLog2Node(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_LOG2NODE diff --git a/Include/API/lib3mf_lognode.hpp b/Include/API/lib3mf_lognode.hpp new file mode 100644 index 000000000..c14eab2be --- /dev/null +++ b/Include/API/lib3mf_lognode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CLogNode + +*/ + + +#ifndef __LIB3MF_LOGNODE +#define __LIB3MF_LOGNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CLogNode +**************************************************************************************************************************/ + +class CLogNode : public virtual ILogNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CLogNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_LOGNODE diff --git a/Include/API/lib3mf_materialmapping.hpp b/Include/API/lib3mf_materialmapping.hpp new file mode 100644 index 000000000..0bfd6d6e5 --- /dev/null +++ b/Include/API/lib3mf_materialmapping.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CMaterialMapping + +*/ + + +#ifndef __LIB3MF_MATERIALMAPPING +#define __LIB3MF_MATERIALMAPPING + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_functionreference.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CMaterialMapping +**************************************************************************************************************************/ + +class CMaterialMapping : public virtual IMaterialMapping, public virtual CFunctionReference { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_MATERIALMAPPING diff --git a/Include/API/lib3mf_matrixfromcolumnsnode.hpp b/Include/API/lib3mf_matrixfromcolumnsnode.hpp new file mode 100644 index 000000000..0fe970046 --- /dev/null +++ b/Include/API/lib3mf_matrixfromcolumnsnode.hpp @@ -0,0 +1,117 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CMatrixFromColumnsNode + +*/ + + +#ifndef __LIB3MF_MATRIXFROMCOLUMNSNODE +#define __LIB3MF_MATRIXFROMCOLUMNSNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_implicitnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CMatrixFromColumnsNode +**************************************************************************************************************************/ + +class CMatrixFromColumnsNode : public virtual IMatrixFromColumnsNode, public virtual CImplicitNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CMatrixFromColumnsNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IMatrixFromColumnsNode::GetInputA - Retrieves the input for the first column + * @return the input for the first column + */ + IImplicitPort * GetInputA() override; + + /** + * IMatrixFromColumnsNode::GetInputB - Retrieves the input for the second column + * @return the input for the second column + */ + IImplicitPort * GetInputB() override; + + /** + * IMatrixFromColumnsNode::GetInputC - Retrieves the input for the third column + * @return the input for the third column + */ + IImplicitPort * GetInputC() override; + + /** + * IMatrixFromColumnsNode::GetInputD - Retrieves the input for the fourth column + * @return the input for the fourth column + */ + IImplicitPort * GetInputD() override; + + /** + * IMatrixFromColumnsNode::GetOutputResult - Retrieves the output + * @return the output + */ + IImplicitPort * GetOutputResult() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_MATRIXFROMCOLUMNSNODE diff --git a/Include/API/lib3mf_matrixfromrowsnode.hpp b/Include/API/lib3mf_matrixfromrowsnode.hpp new file mode 100644 index 000000000..b02703de5 --- /dev/null +++ b/Include/API/lib3mf_matrixfromrowsnode.hpp @@ -0,0 +1,117 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CMatrixFromRowsNode + +*/ + + +#ifndef __LIB3MF_MATRIXFROMROWSNODE +#define __LIB3MF_MATRIXFROMROWSNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_implicitnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CMatrixFromRowsNode +**************************************************************************************************************************/ + +class CMatrixFromRowsNode : public virtual IMatrixFromRowsNode, public virtual CImplicitNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CMatrixFromRowsNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IMatrixFromRowsNode::GetInputA - Retrieves the input for the first row + * @return the input for the first row + */ + IImplicitPort * GetInputA() override; + + /** + * IMatrixFromRowsNode::GetInputB - Retrieves the input for the second row + * @return the input for the second row + */ + IImplicitPort * GetInputB() override; + + /** + * IMatrixFromRowsNode::GetInputC - Retrieves the input for the third row + * @return the input for the third row + */ + IImplicitPort * GetInputC() override; + + /** + * IMatrixFromRowsNode::GetInputD - Retrieves the input for the fourth row + * @return the input for the fourth row + */ + IImplicitPort * GetInputD() override; + + /** + * IMatrixFromRowsNode::GetOutputResult - Retrieves the output + * @return the output + */ + IImplicitPort * GetOutputResult() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_MATRIXFROMROWSNODE diff --git a/Include/API/lib3mf_matvecmultiplicationnode.hpp b/Include/API/lib3mf_matvecmultiplicationnode.hpp new file mode 100644 index 000000000..c534ce439 --- /dev/null +++ b/Include/API/lib3mf_matvecmultiplicationnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CMatVecMultiplicationNode + +*/ + + +#ifndef __LIB3MF_MATVECMULTIPLICATIONNODE +#define __LIB3MF_MATVECMULTIPLICATIONNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_twoinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CMatVecMultiplicationNode +**************************************************************************************************************************/ + +class CMatVecMultiplicationNode : public virtual IMatVecMultiplicationNode, public virtual CTwoInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CMatVecMultiplicationNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_MATVECMULTIPLICATIONNODE diff --git a/Include/API/lib3mf_maxnode.hpp b/Include/API/lib3mf_maxnode.hpp new file mode 100644 index 000000000..06969d7c6 --- /dev/null +++ b/Include/API/lib3mf_maxnode.hpp @@ -0,0 +1,84 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CMaxNode + +*/ + +#ifndef __LIB3MF_MAXNODE +#define __LIB3MF_MAXNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_twoinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + +namespace Lib3MF +{ + namespace Impl + { + + /************************************************************************************************************************* + Class declaration of CMaxNode + **************************************************************************************************************************/ + + class CMaxNode : public virtual IMaxNode, public virtual CTwoInputNode + { + private: + /** + * Put private members here. + */ + + protected: + /** + * Put protected members here. + */ + + public: + CMaxNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in + * the external API. + */ + + /** + * Public member functions to implement. + */ + }; + + } // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_MAXNODE diff --git a/Include/API/lib3mf_meshnode.hpp b/Include/API/lib3mf_meshnode.hpp new file mode 100644 index 000000000..6094a1445 --- /dev/null +++ b/Include/API/lib3mf_meshnode.hpp @@ -0,0 +1,105 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CMeshNode + +*/ + + +#ifndef __LIB3MF_MESHNODE +#define __LIB3MF_MESHNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_implicitnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CMeshNode +**************************************************************************************************************************/ + +class CMeshNode : public virtual IMeshNode, public virtual CImplicitNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CMeshNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IMeshNode::GetInputMesh - Retrieves the input for the model resource id of the mesh + * @return the input port for the model resource id of the mesh + */ + IImplicitPort * GetInputMesh() override; + + /** + * IMeshNode::GetInputPos - Retrieves the input for the position + * @return the input port for the position + */ + IImplicitPort * GetInputPos() override; + + /** + * IMeshNode::GetOutputDistance - Retrieves the output + * @return the output port for the signed distance to the mesh + */ + IImplicitPort * GetOutputDistance() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_MESHNODE diff --git a/Include/API/lib3mf_meshobject.hpp b/Include/API/lib3mf_meshobject.hpp index edc714c5c..b5630a2dc 100644 --- a/Include/API/lib3mf_meshobject.hpp +++ b/Include/API/lib3mf_meshobject.hpp @@ -109,7 +109,9 @@ class CMeshObject : public virtual IMeshObject, public virtual CObject { bool IsComponentsObject(); - bool IsValid(); + bool IsLevelSetObject() override; + + bool IsValid(); virtual IBeamLattice * BeamLattice(); @@ -126,6 +128,10 @@ class CMeshObject : public virtual IMeshObject, public virtual CObject { void GetAllTriangleProperties(Lib3MF_uint64 nPropertiesArrayBufferSize, Lib3MF_uint64* pPropertiesArrayNeededCount, sLib3MFTriangleProperties * pPropertiesArrayBuffer); void ClearAllProperties(); + + IVolumeData * GetVolumeData() override; + + void SetVolumeData(IVolumeData* pTheVolumeData) override; }; } diff --git a/Include/API/lib3mf_minnode.hpp b/Include/API/lib3mf_minnode.hpp new file mode 100644 index 000000000..47cdb5e4a --- /dev/null +++ b/Include/API/lib3mf_minnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CMinNode + +*/ + + +#ifndef __LIB3MF_MINNODE +#define __LIB3MF_MINNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_twoinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CMinNode +**************************************************************************************************************************/ + +class CMinNode : public virtual IMinNode, public virtual CTwoInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CMinNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_MINNODE diff --git a/Include/API/lib3mf_model.hpp b/Include/API/lib3mf_model.hpp index d491ea086..6326c1227 100644 --- a/Include/API/lib3mf_model.hpp +++ b/Include/API/lib3mf_model.hpp @@ -58,6 +58,8 @@ class CModel : public virtual IModel, public virtual CBase { NMR::PModel m_model; + void mergeModel(NMR::CModel & sourceModel, NMR::CModel & targetModel); + protected: /** @@ -117,7 +119,9 @@ class CModel : public virtual IModel, public virtual CBase { ISliceStack * GetSliceStackByID(const Lib3MF_uint32 nUniqueResourceID) override; - std::string GetBuildUUID (bool & bHasUUID) override; + ILevelSet* GetLevelSetByID(const Lib3MF_uint32 nUniqueResourceID) override; + + std::string GetBuildUUID (bool & bHasUUID) override; void SetBuildUUID (const std::string & sUUID) override; @@ -147,6 +151,8 @@ class CModel : public virtual IModel, public virtual CBase { IModel * MergeToModel() override; + void MergeFromModel(IModel* pModelInstance) override; + IMeshObject * AddMeshObject() override; IComponentsObject * AddComponentsObject() override; @@ -195,9 +201,29 @@ class CModel : public virtual IModel, public virtual CBase { Lib3MF::sBox GetOutbox() override; - IKeyStore * GetKeyStore(); + IKeyStore * GetKeyStore() override; + + void SetRandomNumberCallback(const Lib3MF::RandomNumberCallback pTheCallback, const Lib3MF_pvoid pUserData) override; + + IImageStack * AddImageStack(const Lib3MF_uint32 nSizeX, const Lib3MF_uint32 nSizeY, const Lib3MF_uint32 nSheetCount) override; + + IImageStack* GetImageStackByID(const Lib3MF_uint32 nUniqueResourceID) override; + + IImage3DIterator * GetImage3Ds() override; + + IFunctionIterator * GetFunctions() override; + + IImplicitFunction * AddImplicitFunction() override; + + IFunctionFromImage3D* AddFunctionFromImage3D(IImage3D* pImage3DInstance) override; + + IVolumeData * AddVolumeData() override; + + ILevelSet* AddLevelSet() override; + + ILevelSetIterator * GetLevelSets() override; - void SetRandomNumberCallback(const Lib3MF::RandomNumberCallback pTheCallback, const Lib3MF_pvoid pUserData); + void RemoveResource(IResource* pResource) override; }; } diff --git a/Include/API/lib3mf_modnode.hpp b/Include/API/lib3mf_modnode.hpp new file mode 100644 index 000000000..8ea0e796d --- /dev/null +++ b/Include/API/lib3mf_modnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2024 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CModNode + +*/ + + +#ifndef __LIB3MF_MODNODE +#define __LIB3MF_MODNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_twoinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CModNode +**************************************************************************************************************************/ + +class CModNode : public virtual IModNode, public virtual CTwoInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CModNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_MODNODE diff --git a/Include/API/lib3mf_multiplicationnode.hpp b/Include/API/lib3mf_multiplicationnode.hpp new file mode 100644 index 000000000..032fa1bb2 --- /dev/null +++ b/Include/API/lib3mf_multiplicationnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CMultiplicationNode + +*/ + + +#ifndef __LIB3MF_MULTIPLICATIONNODE +#define __LIB3MF_MULTIPLICATIONNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_twoinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CMultiplicationNode +**************************************************************************************************************************/ + +class CMultiplicationNode : public virtual IMultiplicationNode, public virtual CTwoInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CMultiplicationNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_MULTIPLICATIONNODE diff --git a/Include/API/lib3mf_nodeiterator.hpp b/Include/API/lib3mf_nodeiterator.hpp new file mode 100644 index 000000000..4839fa5c6 --- /dev/null +++ b/Include/API/lib3mf_nodeiterator.hpp @@ -0,0 +1,96 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CNodeIterator + +*/ + +#ifndef __LIB3MF_NODEITERATOR +#define __LIB3MF_NODEITERATOR + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_iterator.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "lib3mf_implicitfunction.hpp" +#include "lib3mf_implicitnode.hpp" + +namespace Lib3MF +{ + namespace Impl + { + + /************************************************************************************************************************* + Class declaration of CNodeIterator + **************************************************************************************************************************/ + + class CNodeIterator : public virtual INodeIterator, public virtual CIterator + { + private: + /** + * Put private members here. + */ + NMR::PImplicitNodes m_pNodes; + + IImplicitNode * implicitNodeFromModelImplicitNode(NMR::PModelImplicitNode pNode); + protected: + /** + * Put protected members here. + */ + + public: + CNodeIterator(NMR::PImplicitNodes pNodes); + CNodeIterator() = delete; + /** + * Put additional public members here. They will not be visible in the external API. + */ + + /** + * Public member functions to implement. + */ + + /** + * INodeIterator::GetCurrent - Returns the current element + * @return The current element + */ + IImplicitNode * GetCurrent() override; + + Lib3MF_uint64 Count() override; + }; + + } // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_NODEITERATOR diff --git a/Include/API/lib3mf_object.hpp b/Include/API/lib3mf_object.hpp index 24bee6cac..1b92133ff 100644 --- a/Include/API/lib3mf_object.hpp +++ b/Include/API/lib3mf_object.hpp @@ -92,6 +92,8 @@ class CObject : public virtual IObject, public virtual CResource { virtual bool IsComponentsObject (); + virtual bool IsLevelSetObject (); + virtual IMeshObject * AsMeshObject(); virtual IComponentsObject * AsComponentsObject(); diff --git a/Include/API/lib3mf_oneinputnode.hpp b/Include/API/lib3mf_oneinputnode.hpp new file mode 100644 index 000000000..823e7d4ce --- /dev/null +++ b/Include/API/lib3mf_oneinputnode.hpp @@ -0,0 +1,101 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of COneInputNode + +*/ + + +#ifndef __LIB3MF_ONEINPUTNODE +#define __LIB3MF_ONEINPUTNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_implicitnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of COneInputNode +**************************************************************************************************************************/ + +class COneInputNode : public virtual IOneInputNode, public virtual CImplicitNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + COneInputNode() = default; + COneInputNode(NMR::PModelImplicitNode pImplicitNode); + + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IOneInputNode::GetInputA - Retrieves the input + * @return the input + */ + IImplicitPort * GetInputA() override; + + /** + * IOneInputNode::GetOutputResult - Retrieves the output + * @return the output + */ + IImplicitPort * GetOutputResult() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_ONEINPUTNODE diff --git a/Include/API/lib3mf_pownode.hpp b/Include/API/lib3mf_pownode.hpp new file mode 100644 index 000000000..991e53bc1 --- /dev/null +++ b/Include/API/lib3mf_pownode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CPowNode + +*/ + + +#ifndef __LIB3MF_POWNODE +#define __LIB3MF_POWNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_twoinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CPowNode +**************************************************************************************************************************/ + +class CPowNode : public virtual IPowNode, public virtual CTwoInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CPowNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_POWNODE diff --git a/Include/API/lib3mf_resource.hpp b/Include/API/lib3mf_resource.hpp index a24bf7f2e..846a27f31 100644 --- a/Include/API/lib3mf_resource.hpp +++ b/Include/API/lib3mf_resource.hpp @@ -61,9 +61,9 @@ class CResource : public virtual IResource, public virtual CBase { protected: - NMR::PModelResource resource(); - public: + NMR::CModel* model(); + NMR::PModelResource resource(); /** * Put additional public members here. They will not be visible in the external API. diff --git a/Include/API/lib3mf_resourceidnode.hpp b/Include/API/lib3mf_resourceidnode.hpp new file mode 100644 index 000000000..2e620b41f --- /dev/null +++ b/Include/API/lib3mf_resourceidnode.hpp @@ -0,0 +1,106 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CResourceIdNode + +*/ + + +#ifndef __LIB3MF_RESOURCEIDNODE +#define __LIB3MF_RESOURCEIDNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_implicitnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CResourceIdNode +**************************************************************************************************************************/ + +class CResourceIdNode : public virtual IResourceIdNode, public virtual CImplicitNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + + CResourceIdNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IResourceIdNode::SetResource - Sets the Resource that the resourceid attribute of the node will point to + * @param[in] pResource - the resource + */ + void SetResource(IResource* pResource) override; + + /** + * IResourceIdNode::GetResource - Retrieves the resource of the node + * @return the resource + */ + IResource * GetResource() override; + + /** + * IResourceIdNode::GetOutputValue - Retrieves the output + * @return the output + */ + IImplicitPort * GetOutputValue() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_RESOURCEIDNODE diff --git a/Include/API/lib3mf_resourceiterator.hpp b/Include/API/lib3mf_resourceiterator.hpp index 064117203..42e76a972 100644 --- a/Include/API/lib3mf_resourceiterator.hpp +++ b/Include/API/lib3mf_resourceiterator.hpp @@ -54,6 +54,8 @@ namespace Impl { class CResourceIterator : public virtual IResourceIterator, public virtual CBase { private: + NMR::PModel m_pModel; + std::vector m_pResources; Lib3MF_int32 m_nCurrentIndex; diff --git a/Include/API/lib3mf_roundnode.hpp b/Include/API/lib3mf_roundnode.hpp new file mode 100644 index 000000000..72662118d --- /dev/null +++ b/Include/API/lib3mf_roundnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CRoundNode + +*/ + + +#ifndef __LIB3MF_ROUNDNODE +#define __LIB3MF_ROUNDNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CRoundNode +**************************************************************************************************************************/ + +class CRoundNode : public virtual IRoundNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CRoundNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_ROUNDNODE diff --git a/Include/API/lib3mf_selectnode.hpp b/Include/API/lib3mf_selectnode.hpp new file mode 100644 index 000000000..7b0cf39ce --- /dev/null +++ b/Include/API/lib3mf_selectnode.hpp @@ -0,0 +1,105 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CSelectNode + +*/ + + +#ifndef __LIB3MF_SELECTNODE +#define __LIB3MF_SELECTNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CSelectNode +**************************************************************************************************************************/ + +class CSelectNode : public virtual ISelectNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CSelectNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * ISelectNode::GetInputB - Retrieves the second input + * @return the second input + */ + IImplicitPort * GetInputB() override; + + /** + * ISelectNode::GetInputC - Retrieves the third input + * @return the third input + */ + IImplicitPort * GetInputC() override; + + /** + * ISelectNode::GetInputD - Retrieves the fourth input + * @return the fourth input + */ + IImplicitPort * GetInputD() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_SELECTNODE diff --git a/Include/API/lib3mf_signnode.hpp b/Include/API/lib3mf_signnode.hpp new file mode 100644 index 000000000..1451891e3 --- /dev/null +++ b/Include/API/lib3mf_signnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CSignNode + +*/ + + +#ifndef __LIB3MF_SIGNNODE +#define __LIB3MF_SIGNNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CSignNode +**************************************************************************************************************************/ + +class CSignNode : public virtual ISignNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CSignNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_SIGNNODE diff --git a/Include/API/lib3mf_sinhnode.hpp b/Include/API/lib3mf_sinhnode.hpp new file mode 100644 index 000000000..397b75e8a --- /dev/null +++ b/Include/API/lib3mf_sinhnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CSinhNode + +*/ + + +#ifndef __LIB3MF_SINHNODE +#define __LIB3MF_SINHNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CSinhNode +**************************************************************************************************************************/ + +class CSinhNode : public virtual ISinhNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CSinhNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_SINHNODE diff --git a/Include/API/lib3mf_sinnode.hpp b/Include/API/lib3mf_sinnode.hpp new file mode 100644 index 000000000..2b19cb2c8 --- /dev/null +++ b/Include/API/lib3mf_sinnode.hpp @@ -0,0 +1,88 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CSinNode + +*/ + + +#ifndef __LIB3MF_SINNODE +#define __LIB3MF_SINNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CSinNode +**************************************************************************************************************************/ + +class CSinNode : public virtual ISinNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CSinNode(NMR::PModelImplicitNode pImplicitNode); + + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_SINNODE diff --git a/Include/API/lib3mf_sqrtnode.hpp b/Include/API/lib3mf_sqrtnode.hpp new file mode 100644 index 000000000..bb8124f7e --- /dev/null +++ b/Include/API/lib3mf_sqrtnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CSqrtNode + +*/ + + +#ifndef __LIB3MF_SQRTNODE +#define __LIB3MF_SQRTNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CSqrtNode +**************************************************************************************************************************/ + +class CSqrtNode : public virtual ISqrtNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CSqrtNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_SQRTNODE diff --git a/Include/API/lib3mf_subtractionnode.hpp b/Include/API/lib3mf_subtractionnode.hpp new file mode 100644 index 000000000..4e6eb351c --- /dev/null +++ b/Include/API/lib3mf_subtractionnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CSubtractionNode + +*/ + + +#ifndef __LIB3MF_SUBTRACTIONNODE +#define __LIB3MF_SUBTRACTIONNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_twoinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CSubtractionNode +**************************************************************************************************************************/ + +class CSubtractionNode : public virtual ISubtractionNode, public virtual CTwoInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CSubtractionNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_SUBTRACTIONNODE diff --git a/Include/API/lib3mf_tanhnode.hpp b/Include/API/lib3mf_tanhnode.hpp new file mode 100644 index 000000000..a6ff9ad61 --- /dev/null +++ b/Include/API/lib3mf_tanhnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CTanhNode + +*/ + + +#ifndef __LIB3MF_TANHNODE +#define __LIB3MF_TANHNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CTanhNode +**************************************************************************************************************************/ + +class CTanhNode : public virtual ITanhNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CTanhNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_TANHNODE diff --git a/Include/API/lib3mf_tannode.hpp b/Include/API/lib3mf_tannode.hpp new file mode 100644 index 000000000..53c0c86b6 --- /dev/null +++ b/Include/API/lib3mf_tannode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CTanNode + +*/ + + +#ifndef __LIB3MF_TANNODE +#define __LIB3MF_TANNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CTanNode +**************************************************************************************************************************/ + +class CTanNode : public virtual ITanNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CTanNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_TANNODE diff --git a/Include/API/lib3mf_transposenode.hpp b/Include/API/lib3mf_transposenode.hpp new file mode 100644 index 000000000..a1c30ca65 --- /dev/null +++ b/Include/API/lib3mf_transposenode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CTransposeNode + +*/ + + +#ifndef __LIB3MF_TRANSPOSENODE +#define __LIB3MF_TRANSPOSENODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CTransposeNode +**************************************************************************************************************************/ + +class CTransposeNode : public virtual ITransposeNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CTransposeNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_TRANSPOSENODE diff --git a/Include/API/lib3mf_twoinputnode.hpp b/Include/API/lib3mf_twoinputnode.hpp new file mode 100644 index 000000000..a53225985 --- /dev/null +++ b/Include/API/lib3mf_twoinputnode.hpp @@ -0,0 +1,94 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CTwoInputNode + +*/ + + +#ifndef __LIB3MF_TWOINPUTNODE +#define __LIB3MF_TWOINPUTNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CTwoInputNode +**************************************************************************************************************************/ + +class CTwoInputNode : public virtual ITwoInputNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CTwoInputNode() = default; + CTwoInputNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * ITwoInputNode::GetInputB - Retrieves the second input + * @return the second input + */ + IImplicitPort * GetInputB() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_TWOINPUTNODE diff --git a/Include/API/lib3mf_unsignedmeshnode.hpp b/Include/API/lib3mf_unsignedmeshnode.hpp new file mode 100644 index 000000000..29dbe1f90 --- /dev/null +++ b/Include/API/lib3mf_unsignedmeshnode.hpp @@ -0,0 +1,105 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CUnsignedMeshNode + +*/ + + +#ifndef __LIB3MF_UNSIGNEDMESHNODE +#define __LIB3MF_UNSIGNEDMESHNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_implicitnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CUnsignedMeshNode +**************************************************************************************************************************/ + +class CUnsignedMeshNode : public virtual IUnsignedMeshNode, public virtual CImplicitNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CUnsignedMeshNode(NMR::PModelImplicitNode pImplicitNode); + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ + + /** + * IUnsignedMeshNode::GetInputMesh - Retrieves the input for the model resource id of the mesh + * @return the input port for the model resource id of the mesh + */ + IImplicitPort * GetInputMesh() override; + + /** + * IUnsignedMeshNode::GetInputPos - Retrieves the input for the position + * @return the input port for the position + */ + IImplicitPort * GetInputPos() override; + + /** + * IUnsignedMeshNode::GetOutputDistance - Retrieves the output + * @return the output port for the unsigned distance to the mesh + */ + IImplicitPort * GetOutputDistance() override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_UNSIGNEDMESHNODE diff --git a/Include/API/lib3mf_utils.hpp b/Include/API/lib3mf_utils.hpp index 235df5d2e..66883f3d5 100644 --- a/Include/API/lib3mf_utils.hpp +++ b/Include/API/lib3mf_utils.hpp @@ -36,6 +36,7 @@ Abstract: This file contains utilties used in the API of lib3mf // Include custom headers here. #include "Common/Math/NMR_Matrix.h" +#include "Model/Classes/NMR_ModelTypes.h" #include "Common/NMR_SecureContentTypes.h" namespace Lib3MF { diff --git a/Include/API/lib3mf_vectorfromscalarnode.hpp b/Include/API/lib3mf_vectorfromscalarnode.hpp new file mode 100644 index 000000000..aa9d78750 --- /dev/null +++ b/Include/API/lib3mf_vectorfromscalarnode.hpp @@ -0,0 +1,87 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CVectorFromScalarNode + +*/ + + +#ifndef __LIB3MF_VECTORFROMSCALARNODE +#define __LIB3MF_VECTORFROMSCALARNODE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_oneinputnode.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. + + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CVectorFromScalarNode +**************************************************************************************************************************/ + +class CVectorFromScalarNode : public virtual IVectorFromScalarNode, public virtual COneInputNode { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + +public: + CVectorFromScalarNode(NMR::PModelImplicitNode pImplicitNode); + + /** + * Put additional public members here. They will not be visible in the external API. + */ + + + /** + * Public member functions to implement. + */ +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_VECTORFROMSCALARNODE diff --git a/Include/API/lib3mf_volumedata.hpp b/Include/API/lib3mf_volumedata.hpp new file mode 100644 index 000000000..d90bee8cf --- /dev/null +++ b/Include/API/lib3mf_volumedata.hpp @@ -0,0 +1,116 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CVolumeData + +*/ + + +#ifndef __LIB3MF_VOLUMEDATA +#define __LIB3MF_VOLUMEDATA + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_base.hpp" +#include "lib3mf_resource.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Common/Mesh/NMR_Mesh.h" +#include "Model/Classes/NMR_ModelVolumeData.h" +#include "Model/Classes/NMR_ModelMeshObject.h" +#include "Model/Classes/NMR_ModelResource.h" + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CVolumeData +**************************************************************************************************************************/ + +class CVolumeData : public virtual IVolumeData, public virtual CResource { +private: + + /** + * Put private members here. + */ + NMR::PModelVolumeData m_pVolumeData; + +protected: + + /** + * Put protected members here. + */ + +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + CVolumeData() = delete; + CVolumeData(NMR::PModelResource pResource); + + // CVolumeData(NMR::PModelMeshObject pMeshObject, NMR::PModelVolumeData pVolumeData); + + /** + * Public member functions to implement. + */ + IVolumeDataComposite * GetComposite() override; + + IVolumeDataComposite * CreateNewComposite() override; + + void RemoveComposite() override; + + IVolumeDataColor * GetColor() override; + + IVolumeDataColor* CreateNewColor(IFunction* pTheFunction) override; + + void RemoveColor() override; + + Lib3MF_uint32 GetPropertyCount() override; + + IVolumeDataProperty * GetProperty(const Lib3MF_uint32 nIndex) override; + + IVolumeDataProperty* AddPropertyFromFunction( + const std::string& sName, IFunction* pTheFunction) override; + + + void RemoveProperty(const Lib3MF_uint32 nIndex) override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_VOLUMEDATA diff --git a/Include/API/lib3mf_volumedatacolor.hpp b/Include/API/lib3mf_volumedatacolor.hpp new file mode 100644 index 000000000..524ce8812 --- /dev/null +++ b/Include/API/lib3mf_volumedatacolor.hpp @@ -0,0 +1,89 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CVolumeDataColor + +*/ + + +#ifndef __LIB3MF_VOLUMEDATACOLOR +#define __LIB3MF_VOLUMEDATACOLOR + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_functionreference.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Common/Mesh/NMR_VolumeDataColor.h" + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CVolumeDataColor +**************************************************************************************************************************/ + +class CVolumeDataColor : public virtual IVolumeDataColor, public virtual CFunctionReference { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + NMR::PVolumeDataColor asVolumeDataColor(); + +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + CVolumeDataColor() = delete; + CVolumeDataColor(NMR::PVolumeDataColor pColor); + + /** + * Public member functions to implement. + */ + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_VOLUMEDATACOLOR diff --git a/Include/API/lib3mf_volumedatacomposite.hpp b/Include/API/lib3mf_volumedatacomposite.hpp new file mode 100644 index 000000000..b2f9ebf21 --- /dev/null +++ b/Include/API/lib3mf_volumedatacomposite.hpp @@ -0,0 +1,102 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CVolumeDataComposite + +*/ + + +#ifndef __LIB3MF_VOLUMEDATACOMPOSITE +#define __LIB3MF_VOLUMEDATACOMPOSITE + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_base.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Common/Mesh/NMR_VolumeDataComposite.h" + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CVolumeDataComposite +**************************************************************************************************************************/ + +class CVolumeDataComposite : public virtual IVolumeDataComposite, public virtual CBase { +private: + + /** + * Put private members here. + */ + NMR::PVolumeDataComposite m_pVolumeDataComposite; + +protected: + + /** + * Put protected members here. + */ + NMR::PVolumeDataComposite volumeDataComposite(); + + +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + CVolumeDataComposite() = delete; + CVolumeDataComposite(NMR::PVolumeDataComposite pComposite); + + /** + * Public member functions to implement. + */ + IBaseMaterialGroup * GetBaseMaterialGroup() override; + + void SetBaseMaterialGroup(IBaseMaterialGroup* pBaseMaterialGroupInstance) override; + + Lib3MF_uint32 GetMaterialMappingCount() override; + + IMaterialMapping * GetMaterialMapping(const Lib3MF_uint32 nIndex) override; + + IMaterialMapping * AddMaterialMapping(const Lib3MF::sTransform Transform) override; + + void RemoveMaterialMapping(const Lib3MF_uint32 nIndex) override; + +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_VOLUMEDATACOMPOSITE diff --git a/Include/API/lib3mf_volumedataproperty.hpp b/Include/API/lib3mf_volumedataproperty.hpp new file mode 100644 index 000000000..696ae5309 --- /dev/null +++ b/Include/API/lib3mf_volumedataproperty.hpp @@ -0,0 +1,94 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is the class declaration of CVolumeDataProperty + +*/ + + +#ifndef __LIB3MF_VOLUMEDATAPROPERTY +#define __LIB3MF_VOLUMEDATAPROPERTY + +#include "lib3mf_interfaces.hpp" + +// Parent classes +#include "lib3mf_functionreference.hpp" +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4250) +#endif + +// Include custom headers here. +#include "Common/Mesh/NMR_VolumeDataProperty.h" + +namespace Lib3MF { +namespace Impl { + + +/************************************************************************************************************************* + Class declaration of CVolumeDataProperty +**************************************************************************************************************************/ + +class CVolumeDataProperty : public virtual IVolumeDataProperty, public virtual CFunctionReference { +private: + + /** + * Put private members here. + */ + +protected: + + /** + * Put protected members here. + */ + NMR::PVolumeDataProperty asVolumeDataProperty(); + +public: + + /** + * Put additional public members here. They will not be visible in the external API. + */ + CVolumeDataProperty() = delete; + CVolumeDataProperty(NMR::PVolumeDataProperty pProperty); + + /** + * Public member functions to implement. + */ + + std::string GetName() override; + + void SetIsRequired(const bool bIsRequired) override; + + bool IsRequired() override; +}; + +} // namespace Impl +} // namespace Lib3MF + +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif // __LIB3MF_VOLUMEDATAPROPERTY diff --git a/Include/API/lib3mf_writer.hpp b/Include/API/lib3mf_writer.hpp index b06fb7a86..9aebe5098 100644 --- a/Include/API/lib3mf_writer.hpp +++ b/Include/API/lib3mf_writer.hpp @@ -100,17 +100,17 @@ class CWriter : public virtual IWriter, public virtual CBase { void SetDecimalPrecision(const Lib3MF_uint32 nDecimalPrecision) override; - void AddKeyWrappingCallback(const std::string & sConsumerID, const Lib3MF::KeyWrappingCallback pTheCallback, const Lib3MF_pvoid pUserData); + void AddKeyWrappingCallback(const std::string & sConsumerID, const Lib3MF::KeyWrappingCallback pTheCallback, const Lib3MF_pvoid pUserData) override; - void SetContentEncryptionCallback(const Lib3MF::ContentEncryptionCallback pTheCallback, const Lib3MF_pvoid pUserData); + void SetContentEncryptionCallback(const Lib3MF::ContentEncryptionCallback pTheCallback, const Lib3MF_pvoid pUserData) override; - void SetStrictModeActive(const bool bStrictModeActive); + void SetStrictModeActive(const bool bStrictModeActive) override; - bool GetStrictModeActive(); + bool GetStrictModeActive() override; - std::string GetWarning(const Lib3MF_uint32 nIndex, Lib3MF_uint32 & nErrorCode); + std::string GetWarning(const Lib3MF_uint32 nIndex, Lib3MF_uint32 & nErrorCode) override; - Lib3MF_uint32 GetWarningCount(); + Lib3MF_uint32 GetWarningCount() override; }; diff --git a/Include/Common/Graph/DirectedGraph.h b/Include/Common/Graph/DirectedGraph.h new file mode 100644 index 000000000..a6a6c0ee1 --- /dev/null +++ b/Include/Common/Graph/DirectedGraph.h @@ -0,0 +1,67 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification,276529 are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#pragma once +#include "IDirectedGraph.h" + +namespace NMR::common::graph +{ + class DirectedGraph : public IDirectedGraph + { + public: + explicit DirectedGraph(std::size_t size); + void addDependency(Identifier id, Identifier idOfDependency) override; + void removeDependency(Identifier id, + Identifier idOfDependency) override; + [[nodiscard]] auto isDirectlyDependingOn( + Identifier id, + Identifier dependencyInQuestion) const -> bool override; + + [[nodiscard]] auto getSize() const -> std::size_t override; + + void removeVertex(Identifier id) override; + + [[nodiscard]] auto getVertices() const -> const DependencySet& override; + void addVertex(Identifier id) override; + + private: + std::size_t m_size; + std::vector m_graphData; + + DependencySet m_vertices; // Possible performance improvement: We could + // try out a std::set + + using PredecessorList = std::vector; + std::vector m_predecessors; + + // Inherited via IDirectedGraph + [[nodiscard]] auto hasPredecessors(Identifier id) const + -> bool override; + }; +} // namespace NMR::common::graph diff --git a/Include/Common/Graph/GraphAlgorithms.h b/Include/Common/Graph/GraphAlgorithms.h new file mode 100644 index 000000000..2ffc4b125 --- /dev/null +++ b/Include/Common/Graph/GraphAlgorithms.h @@ -0,0 +1,41 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification,276529 +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#pragma once + +#include "IDirectedGraph.h" +#include +#include +#include +#include + +namespace NMR::common::graph +{ + VertexList topologicalSort(const IDirectedGraph & graph); + bool isCyclic(const IDirectedGraph & graph); +} diff --git a/Include/Common/Graph/IDirectedGraph.h b/Include/Common/Graph/IDirectedGraph.h new file mode 100644 index 000000000..aa109ff36 --- /dev/null +++ b/Include/Common/Graph/IDirectedGraph.h @@ -0,0 +1,62 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification,276529 are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#pragma once + +#include +#include + +namespace NMR::common::graph +{ + using Identifier = std::size_t; + using DependencySet = std::set; + using VertexList = std::vector; + + class IDirectedGraph + { + public: + explicit IDirectedGraph(std::size_t const /*unused*/) {}; + virtual ~IDirectedGraph() = default; + virtual void addDependency(Identifier id, + Identifier idOfDependency) = 0; + virtual void removeDependency(Identifier id, + Identifier idOfDependency) = 0; + [[nodiscard]] virtual auto isDirectlyDependingOn( + Identifier id, Identifier dependencyInQuestion) const -> bool = 0; + + [[nodiscard]] virtual auto getSize() const -> std::size_t = 0; + virtual void removeVertex(Identifier id) = 0; + virtual void addVertex(Identifier id) = 0; + [[nodiscard]] virtual auto hasPredecessors(Identifier id) const + -> bool = 0; + + [[nodiscard]] virtual auto getVertices() const + -> const DependencySet& = 0; + }; +} // namespace NMR::common::graph diff --git a/Include/Common/Mesh/NMR_Mesh.h b/Include/Common/Mesh/NMR_Mesh.h index 628f43df0..adef011c6 100644 --- a/Include/Common/Mesh/NMR_Mesh.h +++ b/Include/Common/Mesh/NMR_Mesh.h @@ -58,7 +58,6 @@ namespace NMR { CBeamLattice m_BeamLattice; PMeshInformationHandler m_pMeshInformationHandler; - public: CMesh(); CMesh(_In_opt_ CMesh * pMesh); diff --git a/Include/Common/Mesh/NMR_MeshTypes.h b/Include/Common/Mesh/NMR_MeshTypes.h index 5dbe04378..b93169461 100644 --- a/Include/Common/Mesh/NMR_MeshTypes.h +++ b/Include/Common/Mesh/NMR_MeshTypes.h @@ -81,16 +81,13 @@ namespace NMR { m_sIdentifier = ""; } } BEAMSET; - typedef std::shared_ptr PBEAMSET; + typedef std::shared_ptr PBEAMSET; typedef struct MESHBEAM { - nfInt32 m_index; - nfInt32 m_nodeindices[2]; - nfDouble m_radius[2]; - nfInt32 m_capMode[2]; - // eModelBeamLatticeCapMode m_capMode[2]; - MESHBEAM() { - }; + nfInt32 m_index = 1; + nfInt32 m_nodeindices[2] = { 0, 0 }; + nfDouble m_radius[2] = { 1., 1. }; + nfInt32 m_capMode[2] = { 0,0 }; } MESHBEAM; typedef CPagedVector MESHBEAMS; @@ -98,8 +95,6 @@ namespace NMR { nfInt32 m_index; nfInt32 m_nodeindex; nfDouble m_radius; - MESHBALL() { - }; } MESHBALL; typedef CPagedVector MESHBALLS; diff --git a/Include/Common/Mesh/NMR_VolumeDataBoundary.h b/Include/Common/Mesh/NMR_VolumeDataBoundary.h new file mode 100644 index 000000000..f05cee91e --- /dev/null +++ b/Include/Common/Mesh/NMR_VolumeDataBoundary.h @@ -0,0 +1,61 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_VolumeDataBoundary.h defines the class CVolumeDataBoundary. + +--*/ + +#ifndef __NMR_VOLUMEDATABOUNDARY +#define __NMR_VOLUMEDATABOUNDARY + +#include "Common/NMR_Types.h" +#include "Model/Classes/NMR_ModelTypes.h" +#include "Common/NMR_FunctionReference.h" +#include + +namespace NMR { + class CModelFunction; + typedef std::shared_ptr PModelFunction; + + class CVolumeDataBoundary : public CFunctionReference { + private: + + bool m_meshBBoxOnly = false; + public: + CVolumeDataBoundary() = delete; + CVolumeDataBoundary(PModelFunction pFunction); + + bool getMeshBBoxOnly(); + void setMeshBBoxOnly(bool bMeshBBoxOnly); + }; + + typedef std::shared_ptr PVolumeDataBoundary; + +} + +#endif // __NMR_VOLUMEDATABOUNDARY diff --git a/Include/Common/Mesh/NMR_VolumeDataColor.h b/Include/Common/Mesh/NMR_VolumeDataColor.h new file mode 100644 index 000000000..a88db4fc6 --- /dev/null +++ b/Include/Common/Mesh/NMR_VolumeDataColor.h @@ -0,0 +1,54 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_VolumeDataColor.h defines the class CVolumeDataColor. + +--*/ + +#ifndef __NMR_VOLUMECOLOR +#define __NMR_VOLUMECOLOR + +#include "Common/NMR_Types.h" +#include "Model/Classes/NMR_ModelTypes.h" +#include "Common/NMR_FunctionReference.h" +#include "Model/Classes/NMR_ModelResource.h" +#include "Model/Classes/NMR_ModelFunction.h" + +namespace NMR { + + class CVolumeDataColor : public CFunctionReference { + private: + + public: + CVolumeDataColor(PModelFunction pFunction); + }; + + typedef std::shared_ptr PVolumeDataColor; +} + +#endif // __NMR_VOLUMECOLOR diff --git a/Include/Common/Mesh/NMR_VolumeDataComposite.h b/Include/Common/Mesh/NMR_VolumeDataComposite.h new file mode 100644 index 000000000..60b5d3902 --- /dev/null +++ b/Include/Common/Mesh/NMR_VolumeDataComposite.h @@ -0,0 +1,68 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_VolumeComposite.h defines the class CVolumeDataComposite. + +--*/ + +#ifndef __NMR_VOLUMEDATACOMPOSITE +#define __NMR_VOLUMEDATACOMPOSITE + +#include +#include "Common/NMR_Types.h" +#include "Common/NMR_FunctionReference.h" +#include "Model/Classes/NMR_ModelTypes.h" +#include "Model/Classes/NMR_ModelBaseMaterials.h" + +namespace NMR { + + class CModelFunction; + typedef std::shared_ptr PModelFunction; + // does not derive from the CVolumeBase, as CVolumeDataComposite contains + // multiple ScalarFieldReferences, but is not a ScalarFieldReference itself. + class CVolumeDataComposite { + private: + std::vector m_vctFunctionReferences; + NMR::PModelBaseMaterialResource m_pBaseMaterialGroup; + public: + CVolumeDataComposite(); + + NMR::PModelBaseMaterialResource getBaseMaterialGroup(); + void setBaseMaterialGroup(PModelBaseMaterialResource ); + + nfUint32 materialMappingCount() const; + PFunctionReference getMaterialMapping(nfUint32); + PFunctionReference addMaterialMapping(PModelFunction pFunction); + void removeMaterialMapping(nfUint32); + }; + + typedef std::shared_ptr PVolumeDataComposite; + +} + +#endif // __NMR_VOLUMEDATACOMPOSITE diff --git a/Include/Common/Mesh/NMR_VolumeDataProperty.h b/Include/Common/Mesh/NMR_VolumeDataProperty.h new file mode 100644 index 000000000..410c70448 --- /dev/null +++ b/Include/Common/Mesh/NMR_VolumeDataProperty.h @@ -0,0 +1,64 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_VolumeDataProperty.h defines the class CVolumeDataProperty. + +--*/ + +#ifndef __NMR_VOLUMEDATAPROPERTY +#define __NMR_VOLUMEDATAPROPERTY + +#include "Common/NMR_Types.h" +#include "Model/Classes/NMR_ModelTypes.h" +#include "Common/NMR_FunctionReference.h" + +namespace NMR { + class CModelFunction; + typedef std::shared_ptr PModelFunction; + + class CVolumeDataProperty : public CFunctionReference { + private: + std::string m_sName; + bool m_bIsRequired; + public: + CVolumeDataProperty() = delete; + explicit CVolumeDataProperty(PModelFunction pFunction); + CVolumeDataProperty(PModelFunction pFunction, std::string sName); + + std::string getName(); + void setName(std::string sPropertyName); + + bool isRequired(); + void setIsRequired(bool bIsRequired); + }; + + typedef std::shared_ptr PVolumeDataProperty; + +} + +#endif // __NMR_VOLUMEDATAPROPERTY diff --git a/Include/Common/NMR_ErrorConst.h b/Include/Common/NMR_ErrorConst.h index aaaf60fb8..9a772e5d2 100644 --- a/Include/Common/NMR_ErrorConst.h +++ b/Include/Common/NMR_ErrorConst.h @@ -1231,6 +1231,234 @@ Model error codes (0x8XXX) // A keystore element is not base64 encoded #define NMR_ERROR_KEYSTOREINVALIDENCODING 0x810E +// errors for the volumetric extension 0x88xx + +// Invalid Image3D Size +#define NMR_ERROR_INVALIDIMAGE3DSIZE 0x8800 + +// Too many channel selectors +#define NMR_ERROR_TOOMANYCHANNELSELECTORS 0x8801 + +// Too many volumetric channels +#define NMR_ERROR_TOOMANYVOLUMETRICCHANNELS 0x8802 + +// Could not map package ID +#define NMR_ERROR_COULDNOTMAPPACKAGEID 0x8803 + +// Duplicate volumetric channel +#define NMR_ERROR_DUPLICATEVOLUMETRICCHANNEL 0x8804 + +// Could not remove volumetric layer +#define NMR_ERROR_COULDNOTREMOVEVOLUMETRICLAYER 0x8805 + +// Could not reindex volumetric layer +#define NMR_ERROR_COULDNOTREINDEXVOLUMETRICLAYER 0x8806 + +// Could not reindex channel selector +#define NMR_ERROR_COULDNOTREINDEXCHANNELSELECTOR 0x8807 + +// Duplicate Image3D Name +#define NMR_ERROR_DUPLICATEIMAGE3DNAME 0x8808 + +// Duplicate Image3D Size +#define NMR_ERROR_DUPLICATEIMAGESTACKSIZE 0x8809 + +// Duplicate Image3D Sheet count +#define NMR_ERROR_DUPLICATEIMAGESTACKSHEETCOUNT 0x880A + +// Missing Image Stack Size +#define NMR_ERROR_MISSINGIMAGESTACKSIZE 0x880B + +// Missing Image Stack Sheetcount +#define NMR_ERROR_MISSINGIMAGESTACKSHEETCOUNT 0x880C + +// Missing 3D Image Name +#define NMR_ERROR_MISSINGIMAGE3DNAME 0x880D + +// Invalid Image3D Sheet Count +#define NMR_ERROR_INVALIDIMAGSHEETCOUNT 0x880E + +// Image Sheet not found +#define NMR_ERROR_IMAGESHEETNOTFOUND 0x880F + +// Too many Image Stack sheets +#define NMR_ERROR_TOOMANYIMAGESHEETS 0x8810 + +// Missing Image3D sheet path +#define NMR_ERROR_MISSINGIMAGE3DSHEETPATH 0x8811 + +// Duplicate Volumetric Background +#define NMR_ERROR_DUPLICATEVOLUMETRICBACKGROUND 0x8812 + +// Invalid Volumetric Background +#define NMR_ERROR_INVALIDVOLUMETRICBACKGROUND 0x8813 + +// Missing Volumetric DstChannel Name +#define NMR_ERROR_MISSINGVOLUMETRICDSTCHANNELNAME 0x8814 + +// Missing Volumetric Layer Blend Method +#define NMR_ERROR_MISSINGVOLUMETRICLAYERBLENDMETHOD 0x8815 + +// Duplicate Volumetric Blend Method +#define NMR_ERROR_DUPLICATEVOLUMETRICBLENDMETHOD 0x8816 + +// Missing Volumetric Layer Transform +#define NMR_ERROR_MISSINGVOLUMETRICLAYERTRANSFORM 0x8817 + +// Duplicate Volumetric Transform +#define NMR_ERROR_DUPLICATEVOLUMETRICTRANSFORM 0x8818 + +// Duplicate Volumetric Src Alpha +#define NMR_ERROR_DUPLICATEVOLUMETRICSRCALPHA 0x8819 + +// Invalid Volumetric Src Alpha +#define NMR_ERROR_INVALIDVOLUMETRICSRCALPHA 0x881A + +// Duplicate Volumetric Dst Alpha +#define NMR_ERROR_DUPLICATEVOLUMETRICDSTALPHA 0x881B + +// Invalid Volumetric Dst Alpha +#define NMR_ERROR_INVALIDVOLUMETRICDSTALPHA 0x881C + +// Duplicate Mask Channel Selector +#define NMR_ERROR_DUPLICATEMASKCHANNELSELECTOR 0x881D + +// Duplicate Volumetric Min Value +#define NMR_ERROR_DUPLICATEVOLUMETRICMINVALUE 0x881E + +// Invalid Volumetric Min Value +#define NMR_ERROR_INVALIDVOLUMETRICMINVALUE 0x881F + +// Duplicate Volumetric Max Value +#define NMR_ERROR_DUPLICATEVOLUMETRICMAXVALUE 0x8820 + +// Invalid Volumetric Max Value +#define NMR_ERROR_INVALIDVOLUMETRICMAXVALUE 0x8821 + +// Missing Channel Selector ID +#define NMR_ERROR_MISSINGCHANNELSELECTORID 0x8822 + +// Missing Channel Selector TileStyle +#define NMR_ERROR_MISSINGCHANNELSELECTORTILESTYLE 0x8823 + +// Duplicate Volumetric TileStyle +#define NMR_ERROR_DUPLICATEVOLUMETRICTILESTYLE 0x8824 + +// Duplicate Volumetric Filter +#define NMR_ERROR_DUPLICATEVOLUMETRICFILTER 0x8825 + +// Duplicate Volumetric Source Channel +#define NMR_ERROR_DUPLICATEVOLUMETRICSOURCECHANNEL 0x8826 + +// Duplicate Volumetric Destination Channel +#define NMR_ERROR_DUPLICATEVOLUMETRICDESTINATIONCHANNEL 0x8827 + +// Duplicate VolumeData Levelset +#define NMR_ERROR_DUPLICATEVOLUMEDATABOUNDARY 0x8828 + +// Duplicate VolumeData Transform +#define NMR_ERROR_DUPLICATEVOLUMEDATATRANSFORM 0x8829 + +// Duplicate VolumeData Channel +#define NMR_ERROR_DUPLICATEVOLUMEDATACHANNEL 0x882A + +// Duplicate VolumeData VolumetricStackID +#define NMR_ERROR_DUPLICATEVOLUMEDATAFIELDID 0x882B + +// Duplicate VolumeData Solid Threshold +#define NMR_ERROR_DUPLICATEVOLUMEDATASOLIDTHRESHOLD 0x882C + +// Missing VolumeData Channel +#define NMR_ERROR_MISSINGVOLUMEDATACHANNEL 0x882D + +// Missing VolumeData VolumetricStackID +#define NMR_ERROR_MISSINGVOLUMEDATAFIELDID 0x882E + +// Invalid VolumeData Solid Threshold +#define NMR_ERROR_INVALIDVOLUMEDATASOLIDTHRESHOLD 0x882F + +// Duplicate VolumeData Property +#define NMR_ERROR_DUPLICATEVOLUMEDATAPROPERTY 0x8830 + +// Missing VolumeData Property +#define NMR_ERROR_MISSINGVOLUMEDATAPROPERTYNAME 0x8831 + +// Missing Volumetric Source Alpha +#define NMR_ERROR_MISSINGVOLUMETRICSRCALPHA 0x882 + +// Missing Volumetric Destination Alpha +#define NMR_ERROR_MISSINGVOLUMETRICDSTALPHA 0x8833 + +// Missing attribute in scalar field composed +#define NMR_ERROR_MISSING_ATTRIBUTE_SCALARFIELDCOMPOSED 0x8834 + +// Duplicate attribute in scalar field composed +#define NMR_ERROR_DUPLICATE_ATTRIBUTE_SCALARFIELDCOMPOSED 0x8835 + +// Missing attribute in vector3d field composed +#define NMR_ERROR_MISSING_ATTRIBUTE_VECTOR3DFIELDCOMPOSED 0x8836 + +// Duplicate attribute in vector3d field composed +#define NMR_ERROR_DUPLICATE_ATTRIBUTE_VECTOR3DFIELDCOMPOSED 0x8837 + +// Unknown node type in implict model +#define NMR_ERROR_UNKNOWN_NODETYPE_IMPLICITMODEL 0x8838 + +// Invalid source node in implicit function +#define NMR_ERROR_IMPLICIT_FUNCTION_INVALID_SOURCE_NODE 0x8839 + +// Invalid target node in implicit function +#define NMR_ERROR_IMPLICIT_FUNCTION_INVALID_TARGET_NODE 0x883A + +// Invalid source port in implicit function +#define NMR_ERROR_IMPLICIT_FUNCTION_INVALID_SOURCE_PORT 0x883B + +// Invalid target port in implicit function +#define NMR_ERROR_IMPLICIT_FUNCTION_INVALID_TARGET_PORT 0x883C + +// Invalid port type in implicit function +#define NMR_ERROR_IMPLICIT_FUNCTION_INVALID_PORT_TYPE 0x883D + +// Port does not exist in node +#define NMR_ERROR_IMPLICIT_PORT_DOES_NOT_EXIST 0x883E + +// Duplicate attribute meshbboxonly in volumedata boundary +#define NMR_ERROR_DUPLICATE_VOLUMEDATA_MESHBBOXONLY 0x883F + +// Duplicate attribute minfeature size in volumedata element +#define NMR_ERROR_DUPLICATE_VOLUMEDATA_MINFEATURESIZE 0x8840 + +// Function graph is not a directed acyclic graph +#define NMR_ERROR_IMPLICIT_FUNCTION_CYCLIC_GRAPH 0x8841 + +// Duplicate attribute fallbackvalue in volumedata element +#define NMR_ERROR_DUPLICATE_VOLUMEDATA_FALLBACKVALUE 0x8842 + +// Duplicate attribute functionid in levelset element +#define NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_FUNCTION_ID 0x8843 + +// Duplicate attribute channel in levelset element +#define NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_CHANNEL 0x8844 + +// Duplicate attribute fallbackvalue in levelset element +#define NMR_ERROR_DUPLICATE_BOUNDARY_SHAOE_FALLBACKVALUE 0x8845 + +// Duplicate attribute transform in levelset element +#define NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_TRANSFORM 0x8846 + +// Duplicate attribute minfeaturesize in levelset element +#define NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_MIN_FEATURE_SIZE 0x8847 + +// Duplicate attribute fallbackvalue in levelset element +#define NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_FALLBACK_VALUE 0x8848 + +// Duplicate attribute volumeid in levelset element +#define NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_VOLUME_ID 0x8849 + +// Duplicate attribute mesh id in levelset element +#define NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_MESH_ID 0x884A + + /*------------------------------------------------------------------- XML Parser Error Constants (0x9XXX) -------------------------------------------------------------------*/ diff --git a/Include/Common/NMR_Exception.h b/Include/Common/NMR_Exception.h index 00271b1aa..0f31090b3 100644 --- a/Include/Common/NMR_Exception.h +++ b/Include/Common/NMR_Exception.h @@ -39,14 +39,19 @@ Each exception is identified via a global ErrorCode #include "Common/NMR_Types.h" #include "Common/NMR_Local.h" #include +#include namespace NMR { class CNMRException : public std::exception { private: nfError m_errorcode; - public: + std::string m_message; + + public: CNMRException(_In_ nfError errorcode); + CNMRException(_In_ nfError errorcode, _In_ const std::string & message); + virtual const char * what() const throw (); nfError getErrorCode() const; }; diff --git a/Include/Common/NMR_FunctionReference.h b/Include/Common/NMR_FunctionReference.h new file mode 100644 index 000000000..a5cb2447f --- /dev/null +++ b/Include/Common/NMR_FunctionReference.h @@ -0,0 +1,80 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_FunctionReference.h defines the class CFunctionReference. + +--*/ + +#pragma once + +#include "Common/NMR_Types.h" +#include "Common/Math/NMR_Geometry.h" +#include "Common/Math/NMR_Matrix.h" +#include "Model/Classes/NMR_ModelTypes.h" +#include "Model/Classes/NMR_PackageResourceID.h" + +namespace NMR { + class CModelFunction; + typedef std::shared_ptr PModelFunction; + + class CFunctionReference { + private: + UniqueResourceID m_pFunctionResourceID; + std::string m_outputPortName; + + NMR::NMATRIX3 m_transform = NMR::fnMATRIX3_identity(); + bool m_bHasTransform = false; + + double m_minFeatureSize = 0.0; + + double m_fallBackValue = 0.0; + public: + CFunctionReference() = delete; + explicit CFunctionReference(UniqueResourceID functionResourceId); + explicit CFunctionReference(PModelFunction pFunction); + + virtual void setFunctionResourceID(UniqueResourceID functionID); + virtual UniqueResourceID getFunctionResourceID() const; + + void setChannelName(std::string outputPortName); + std::string const& getChannelName() const; + + void setTransform(NMR::NMATRIX3 transform); + NMR::NMATRIX3 getTransform() const; + + bool hasTransform() const; + + void setMinFeatureSize(double minFeatureSize); + double getMinFeatureSize() const; + + void setFallBackValue(double fallBackValue); + double getFallBackValue() const; + }; + + typedef std::shared_ptr PFunctionReference; +} diff --git a/Include/Model/Classes/NMR_ImplicitNodeTypes.h b/Include/Model/Classes/NMR_ImplicitNodeTypes.h new file mode 100644 index 000000000..5fa0ad08e --- /dev/null +++ b/Include/Model/Classes/NMR_ImplicitNodeTypes.h @@ -0,0 +1,116 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#pragma once + +#include +#include +#include +#include +#include + +namespace NMR +{ + class CModelImplicitNode; + namespace implicit + { + using PortIdentifier = std::string; + + using PortMap = + std::unordered_map; + using In = PortMap; + using Out = PortMap; + + struct InputOutputRule + { + InputOutputRule(Lib3MF::eImplicitNodeConfiguration const& configuration, + In const& inputs, + Out const& outputs) + : configuration(configuration), inputs(inputs), outputs(outputs) + { + } + + Lib3MF::eImplicitNodeConfiguration configuration = Lib3MF::eImplicitNodeConfiguration::Default; + In inputs; + Out outputs; + }; + + using AllowedInputOutputs = std::vector; + + class NodeType + { + public: + NodeType(std::string const& name, + AllowedInputOutputs const& allowedInputOutputs); + + NodeType() = delete; + + std::string const& getName() const; + + AllowedInputOutputs const& getAllowedInputOutputs() const; + + Lib3MF::eImplicitNodeType getType() const; + + private: + std::string m_name; + AllowedInputOutputs m_allowedInputOutputs; + }; + + using NodeTypesMap = std::map; + + class NodeTypes + { + public: + NodeTypes(); + NodeTypes(NodeTypes const& other) = delete; + NodeTypes(NodeTypes&& other) = delete; + NodeTypes& operator=(NodeTypes const& other) = delete; + NodeTypes& operator=(NodeTypes&& other) = delete; + + NodeType const& getNodeType(Lib3MF::eImplicitNodeType type) const; + + NodeTypesMap const& getTypes() const; + + void addExpectedPortsToNode(NMR::CModelImplicitNode& node) const; + void addExpectedPortsToNode(NMR::CModelImplicitNode& node, Lib3MF::eImplicitNodeConfiguration const configuration) const; + + void applyInputOutputRuleToNode(NMR::CModelImplicitNode& node, + InputOutputRule const& rule) const; + + bool arePortsValidForNode(NMR::CModelImplicitNode const& node) const; + + private: + NodeTypesMap m_nodeTypes; + + bool arePortsValidForRule(NMR::CModelImplicitNode const& node, + InputOutputRule const& rule) const; + }; + + NodeTypes const& getNodeTypes(); + } // namespace implicit +} // namespace NMR \ No newline at end of file diff --git a/Include/Model/Classes/NMR_KeyStoreCEKParams.h b/Include/Model/Classes/NMR_KeyStoreCEKParams.h index becdeb0fb..1d605ef2b 100644 --- a/Include/Model/Classes/NMR_KeyStoreCEKParams.h +++ b/Include/Model/Classes/NMR_KeyStoreCEKParams.h @@ -42,8 +42,8 @@ namespace NMR { class CKeyStoreCEKParams { protected: - eKeyStoreEncryptAlgorithm m_eAlgorithm; nfBool m_bCompression; + eKeyStoreEncryptAlgorithm m_eAlgorithm; std::vector m_rgIv, m_rgTag, m_rgAad; nfUint64 m_nDescriptor; public: diff --git a/Include/Model/Classes/NMR_Model.h b/Include/Model/Classes/NMR_Model.h index d443f7ac8..21581aa38 100644 --- a/Include/Model/Classes/NMR_Model.h +++ b/Include/Model/Classes/NMR_Model.h @@ -96,6 +96,27 @@ namespace NMR { typedef std::map UniqueResourceIDMapping; + class CModelImage3D; + typedef std::shared_ptr PModelImage3D; + + class CModelImageStack; + typedef std::shared_ptr PModelImageStack; + + class CModelFunction; + typedef std::shared_ptr PModelFunction; + + class CModelImplicitFunction; + typedef std::shared_ptr PModelImplicitFunction; + + class CModelFunctionFromImage3D; + typedef std::shared_ptr PModelFunctionFromImage3D; + + class CModelVolumeData; + typedef std::shared_ptr PModelVolumeData; + + class LevelSetObject; + typedef std::shared_ptr PLevelSetObject; + // The Model class implements the unification of all model-file in a 3MF package // It should be understood as a "MultiModel" class CModel { @@ -148,6 +169,10 @@ namespace NMR { std::vector m_Texture2DGroupLookup; std::vector m_CompositeMaterialsLookup; std::vector m_MultiPropertyGroupLookup; + std::vector m_Image3DLookup; + std::vector m_FunctionLookup; // for implicit models + std::vector m_VolumeDataLookup; + std::vector m_levelSetObjectLookup; // The KeyStore reference PKeyStore m_pKeyStore; @@ -280,6 +305,29 @@ namespace NMR { CModelTexture2DResource * getTexture2D(_In_ nfUint32 nIndex); void mergeTextures2D(_In_ CModel * pSourceModel, _In_ UniqueResourceIDMapping &oldToNewMapping); + // Convenience functions for 3D Images + _Ret_maybenull_ PModelImage3D findImage3D(_In_ UniqueResourceID nResourceID); + _Ret_maybenull_ PModelImageStack findImageStack(_In_ UniqueResourceID nResourceID); + nfUint32 getImage3DCount(); + PModelResource getImage3DResource(_In_ nfUint32 nIndex); + CModelImage3D* getImage3D(_In_ nfUint32 nIndex); + void mergeImage3Ds(_In_ CModel* pSourceModel, _In_ UniqueResourceIDMapping& oldToNewMapping); + + // Convenience functions for Functions + PModelFunction findFunction(UniqueResourceID nResourceID); + nfUint32 getFunctionCount(); + PModelResource getFunctionResource(_In_ nfUint32 nIndex); + CModelImplicitFunction* getImplicitFunction(_In_ nfUint32 nIndex); + CModelFunctionFromImage3D* getFunctionFromImage3D(_In_ nfUint32 nIndex); + void mergeFunctions(_In_ CModel* pSourceModel, _In_ UniqueResourceIDMapping& oldToNewMapping); + + // Convenience functions for volume data + PModelVolumeData findVolumeData(UniqueResourceID nResourceID); + nfUint32 getVolumeDataCount(); + PModelResource getVolumeDataResource(_In_ nfUint32 nIndex); + CModelVolumeData* getVolumeData(_In_ nfUint32 nIndex); + + // Clear all build items and Resources void clearAll (); @@ -328,6 +376,10 @@ namespace NMR { nfBool hasCryptoRandCallbak() const; nfUint64 generateRandomBytes(nfByte *, nfUint64); + [[nodiscard]] ModelResourceID getMaxModelResourceID(); + + void removeResource(PModelResource pResource); + }; typedef std::shared_ptr PModel; diff --git a/Include/Model/Classes/NMR_ModelAttachment.h b/Include/Model/Classes/NMR_ModelAttachment.h index 758793d7b..2610e04ed 100644 --- a/Include/Model/Classes/NMR_ModelAttachment.h +++ b/Include/Model/Classes/NMR_ModelAttachment.h @@ -42,6 +42,8 @@ NMR_ModelAttachment.h defines the Model Attachment Class. namespace NMR { + typedef std::shared_ptr PModelAttachment; + class CModelAttachment { private: CModel * m_pModel; @@ -61,9 +63,10 @@ namespace NMR { void setStream(_In_ PImportStream pStream); void setRelationShipType(_In_ const std::string sRelationShipType); + + PModelAttachment cloneIntoNewModel (_In_ CModel * pModel, _In_ nfBool bCloneMemory); }; - typedef std::shared_ptr PModelAttachment; } diff --git a/Include/Model/Classes/NMR_ModelComponentsObject.h b/Include/Model/Classes/NMR_ModelComponentsObject.h index 8b4d1f0c7..86a2882bf 100644 --- a/Include/Model/Classes/NMR_ModelComponentsObject.h +++ b/Include/Model/Classes/NMR_ModelComponentsObject.h @@ -70,6 +70,8 @@ namespace NMR { void calculateComponentDepthLevel(nfUint32 nLevel) override; void extendOutbox(_Out_ NOUTBOX3& vOutBox, _In_ const NMATRIX3 mAccumulatedMatrix) override; + + ResourceDependencies getDependencies() override; }; typedef std::shared_ptr PModelComponentsObject; diff --git a/Include/Model/Classes/NMR_ModelConstants.h b/Include/Model/Classes/NMR_ModelConstants.h index 21191891b..7778b9905 100644 --- a/Include/Model/Classes/NMR_ModelConstants.h +++ b/Include/Model/Classes/NMR_ModelConstants.h @@ -84,12 +84,16 @@ These are given by the 3MF Standard #define XML_3MF_NAMESPACE_SECURECONTENTSPEC "http://schemas.microsoft.com/3dmanufacturing/securecontent/2019/04" #define XML_3MF_NAMESPACE_DIGITALSIGNATURESPEC "http://www.w3.org/2000/09/xmldsig#" #define XML_3MF_NAMESPACE_CIPHERVALUESPEC "http://www.w3.org/2001/04/xmlenc#" +#define XML_3MF_NAMESPACE_VOLUMETRICSPEC "http://schemas.3mf.io/3dmanufacturing/volumetric/2022/01" +#define XML_3MF_NAMESPACE_IMPLICITSPEC "http://schemas.3mf.io/3dmanufacturing/implicit/2023/12" #define XML_3MF_NAMESPACEPREFIX_MATERIAL "m" #define XML_3MF_NAMESPACEPREFIX_PRODUCTION "p" #define XML_3MF_NAMESPACEPREFIX_BEAMLATTICE "b" #define XML_3MF_NAMESPACEPREFIX_SLICE "s" #define XML_3MF_NAMESPACEPREFIX_SECURECONTENT "sc" +#define XML_3MF_NAMESPACEPREFIX_VOLUMETRIC "v" +#define XML_3MF_NAMESPACEPREFIX_IMPLICIT "i" #define XML_3MF_ATTRIBUTE_XMLNS "xmlns" #define XML_3MF_ATTRIBUTE_PREFIX_XML "xml" @@ -117,6 +121,7 @@ These are given by the 3MF Standard // Mesh element. #define XML_3MF_ELEMENT_MESH "mesh" +#define XML_3MF_ATTRIBUTE_MESH_VOLUMEDATA "volumeid" // Slices element. #define XML_3MF_ELEMENT_SLICES "slices" @@ -221,6 +226,94 @@ These are given by the 3MF Standard #define XML_3MF_ELEMENT_COMPOSITE "composite" #define XML_3MF_ATTRIBUTE_COMPOSITE_VALUES "values" + +// Volumetric Extension +#define XML_3MF_ELEMENT_IMAGE3D "image3d" +#define XML_3MF_ATTRIBUTE_IMAGE3D_ID "id" +#define XML_3MF_ATTRIBUTE_IMAGE3D_NAME "name" + +#define XML_3MF_ELEMENT_IMAGESTACK "imagestack" +#define XML_3MF_ATTRIBUTE_IMAGESTACK_ROWCOUNT "rowcount" +#define XML_3MF_ATTRIBUTE_IMAGESTACK_COLUMNCOUNT "columncount" +#define XML_3MF_ATTRIBUTE_IMAGESTACK_SHEETCOUNT "sheetcount" + +#define XML_3MF_ELEMENT_IMAGESHEET "imagesheet" +#define XML_3MF_ATTRIBUTE_IMAGESHEET_PATH "path" + +#define XML_3MF_ELEMENT_VOLUMEDATA "volumedata" +#define XML_3MF_ATTRIBUTE_VOLUMEDATA_ID "id" +#define XML_3MF_ELEMENT_VOLUMETRIC_COMPOSITE "composite" +#define XML_3MF_ELEMENT_VOLUMETRIC_COLOR "color" +#define XML_3MF_ELEMENT_VOLUMETRIC_PROPERTY "property" + +#define XML_3MF_ATTRIBUTE_VOLUMEDATA_FUNCTIONID "functionid" +#define XML_3MF_ATTRIBUTE_VOLUMEDATA_TRANSFORM "transform" +#define XML_3MF_ATTRIBUTE_VOLUMEDATA_CHANNEL "channel" +#define XML_3MF_ATTRIBUTE_VOLUMEDATA_SOLIDTHRESHOLD "solidthreshold" +#define XML_3MF_ATTRIBUTE_VOLUMEDATA_MINFEATURESIZE "minfeaturesize" +#define XML_3MF_ATTRIBUTE_VOLUMEDATA_FALLBACKVALUE "fallbackvalue" + +#define XML_3MF_ATTRIBUTE_VOLUMEDATA_PROPERTY "name" +#define XML_3MF_ATTRIBUTE_VOLUMEDATA_PROPERTY_REQUIRED "required" + + +// Voumeteric/Implicit +#define XML_3MF_ELEMENT_IMPLICIT_FUNCTION_DEPRECATED "function" +#define XML_3MF_ELEMENT_IMPLICIT_FUNCTION "implicitfunction" + +#define XML_3MF_ATTRIBUTE_IMPLICIT_FUNCTION_ID "id" +#define XML_3MF_ATTRIBUTE_IMPLICIT_FUNCTION_DISPLAY_NAME "displayname" +#define XML_3MF_ELEMENT_IMPLICIT_FUNCTION_INPUT "in" +#define XML_3MF_ELEMENT_IMPLICIT_FUNCTION_OUTPUT "out" +#define XML_3MF_ELEMENT_IMPLICIT_NODE_INPUT "in" +#define XML_3MF_ELEMENT_IMPLICIT_NODE_OUTPUT "out" +#define XML_3MF_ATTRIBUTE_IMPLICIT_NODE_VALUE "value" +#define XML_3MF_ATTRIBUTE_IMPLICIT_NODE_MATRIX "matrix" +#define XML_3MF_ATTRIBUTE_IMPLICIT_NODE_X "x" +#define XML_3MF_ATTRIBUTE_IMPLICIT_NODE_Y "y" +#define XML_3MF_ATTRIBUTE_IMPLICIT_NODE_Z "z" +#define XML_3MF_ATTRIBUTE_IMPLICIT_NODE_ID "identifier" +#define XML_3MF_ATTRIBUTE_IMPLICIT_NODE_DISPLAY_NAME "displayname" +#define XML_3MF_ATTRIBUTE_IMPLICIT_NODE_TAG "tag" +#define XML_3MF_ATTRIBUTE_IMPLICIT_NODE_RESOURCE_ID "resourceid" +#define XML_3MF_ATTRIBUTE_IMPLICIT_NODE_RESOURCE_ID_VALUE_DEPRECATED "resourceid" +#define XML_3MF_ATTRIBUTE_IMPLICIT_PORT_ID "identifier" +#define XML_3MF_ATTRIBUTE_IMPLICIT_PORT_DISPLAY_NAME "displayname" +#define XML_3MF_ATTRIBUTE_IMPLICIT_PORT_REFERENCE "ref" +#define XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_SCALAR "scalar" +#define XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_VECTOR "vector" +#define XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_MATRIX "matrix" +#define XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_RESOURCE_ID "resourceid" +#define XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_SCALAR_REF "scalarref" +#define XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_VECTOR_REF "vectorref" +#define XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_MATRIX_REF "matrixref" +#define XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_RESOURCE_REF "resourceref" + +#define XML_3MF_ELEMENT_FUNCTION_FROM_IMAGE3D "functionfromimage3d" +#define XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_IMAGE3DID "image3did" +#define XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_OFFSET "valueoffset" +#define XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_SCALE "valuescale" +#define XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_IMAGE3DID_DEPRECATED "image3dID" +#define XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_OFFSET_DEPRECATED "offset" +#define XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_SCALE_DEPRECATED "scale" +#define XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_TILESTYLEU "tilestyleu" +#define XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_TILESTYLEV "tilestylev" +#define XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_TILESTYLEW "tilestylew" +#define XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_FILTER "filter" + + +#define XML_3MF_ELEMENT_BOUNDARY_SHAPE "levelset" +#define XML_3MF_ATTRIBUTE_LEVELSET_VOLUMEDATA "volumeid" +#define XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_ID "id" +#define XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_FUNCTION_ID "functionid" +#define XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_CHANNEL "channel" +#define XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_CHANNEL_DEFAULT "shape" +#define XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_TRANSFORM "transform" +#define XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_MIN_FEATURE_SIZE "minfeaturesize" +#define XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_MESH_BBOX_ONLY "meshbboxonly" +#define XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_FALLBACK_VALUE "fallbackvalue" +#define XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_MESH_ID "meshid" + // Multiproperties #define XML_3MF_ELEMENT_MULTIPROPERTIES "multiproperties" #define XML_3MF_ATTRIBUTE_MULTIPROPERTIES_ID "id" @@ -228,6 +321,7 @@ These are given by the 3MF Standard #define XML_3MF_ATTRIBUTE_MULTIPROPERTIES_BLENDMETHODS "blendmethods" #define XML_3MF_ATTRIBUTE_MULTIPROPERTIES_BLENDMETHOD_MIX "mix" #define XML_3MF_ATTRIBUTE_MULTIPROPERTIES_BLENDMETHOD_MULTIPLY "multiply" +#define XML_3MF_ATTRIBUTE_MULTIPROPERTIES_BLENDMETHOD_MASK "mask" #define XML_3MF_ELEMENT_MULTI "multi" #define XML_3MF_ATTRIBUTE_MULTI_PINDICES "pindices" @@ -424,4 +518,8 @@ These are given by the 3MF Standard #define XML_3MF_MAXBEAMCOUNT 2147483647 #define XML_3MF_MAXBALLCOUNT 2147483647 +#ifdef __MINGW32__ +#define isNotANumber(x) ((x)!=(x)) +#endif + #endif // __NMR_MODELCONSTANTS diff --git a/Include/Model/Classes/NMR_ModelFunction.h b/Include/Model/Classes/NMR_ModelFunction.h new file mode 100644 index 000000000..ace840f93 --- /dev/null +++ b/Include/Model/Classes/NMR_ModelFunction.h @@ -0,0 +1,73 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#pragma once + +#include "Model/Classes/NMR_ModelResource.h" +#include +#include + +#include +#include +#include + +namespace NMR +{ + class CModelFunction : public CModelResource + { + private: + std::string m_displayname; + + PPorts m_inputs; + PPorts m_outputs; + + public: + CModelFunction(_In_ const ModelResourceID sID, _In_ CModel* pModel); + + std::string const& getDisplayName() const; + void setDisplayName(std::string const& displayname); + + PModelImplicitPort addInput(const std::string& sPortIdentifier, + const std::string& sDisplayName, + const Lib3MF::eImplicitPortType ePortType); + + PModelImplicitPort addOutput(const std::string& sPortIdentifier, + const std::string& sDisplayName, + const Lib3MF::eImplicitPortType ePortType); + + PPorts const& getInputs() const; + PPorts const& getOutputs() const; + + PModelImplicitPort findInput(const std::string& sIdentifier) const; + PModelImplicitPort findOutput(const std::string& sIdentifier) const; + + virtual void clear(); + }; + + using PModelFunction = std::shared_ptr; +} diff --git a/Include/Model/Classes/NMR_ModelFunctionFromImage3D.h b/Include/Model/Classes/NMR_ModelFunctionFromImage3D.h new file mode 100644 index 000000000..fbd0980ca --- /dev/null +++ b/Include/Model/Classes/NMR_ModelFunctionFromImage3D.h @@ -0,0 +1,91 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +CModelFunctionFromImage3D.h defines a function that can be used inside of an implicit model to access a 3D image. +--*/ +#pragma once + +#include "Model/Classes/NMR_Model.h" +#include "Model/Classes/NMR_ModelImplicitFunction.h" +#include "Common/NMR_Types.h" + + +#include + +namespace NMR { + + class CModel; + typedef std::shared_ptr PModel; + + class CModelFunctionFromImage3D : public CModelFunction{ + + UniqueResourceID m_image3DUniqueResourceID{}; + + eModelTextureTileStyle m_tileStyleU = {}; + eModelTextureTileStyle m_tileStyleV = {}; + eModelTextureTileStyle m_tileStyleW = {}; + + eModelTextureFilter m_filter = {eModelTextureFilter::MODELTEXTUREFILTER_LINEAR}; + + double m_offset = {}; + double m_scale = {1.}; + public: + CModelFunctionFromImage3D() = delete; + CModelFunctionFromImage3D(const ModelResourceID sID, CModel * pModel); + + CModelFunctionFromImage3D(const CModelFunctionFromImage3D& other) = default; + CModelFunctionFromImage3D& operator=(const CModelFunctionFromImage3D& other) = default; + + void setImage3DUniqueResourceID(const UniqueResourceID sID); + UniqueResourceID getImage3DUniqueResourceID(); + + void setImage3DModelResourceID(const ModelResourceID sID); + ModelResourceID getImage3DModelResourceID(); + + void setTileStyleU(const eModelTextureTileStyle tileStyleU); + eModelTextureTileStyle getTileStyleU(); + + void setTileStyleV(const eModelTextureTileStyle tileStyleV); + eModelTextureTileStyle getTileStyleV(); + + void setTileStyleW(const eModelTextureTileStyle tileStyleW); + eModelTextureTileStyle getTileStyleW(); + + void setFilter(const eModelTextureFilter filter); + eModelTextureFilter getFilter(); + + void setOffset(double offset); + double getOffset(); + + void setScale(double scale); + double getScale(); + }; + + typedef std::shared_ptr PModelFunctionFromImage3D; +} + diff --git a/Include/Model/Classes/NMR_ModelImage3D.h b/Include/Model/Classes/NMR_ModelImage3D.h new file mode 100644 index 000000000..6a36090f2 --- /dev/null +++ b/Include/Model/Classes/NMR_ModelImage3D.h @@ -0,0 +1,69 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_ModelImage3D.h defines a 3D image for the volumetric extension + +--*/ + +#ifndef __NMR_MODELIMAGE3D +#define __NMR_MODELIMAGE3D + +#include "Common/NMR_Types.h" + + +#include "Model/Classes/NMR_ModelResource.h" +#include "Model/Classes/NMR_Model.h" +#include +#include "Common/Platform/NMR_ImportStream.h" +#include +#include +#include + +namespace NMR { + + class CModel; + typedef std::shared_ptr PModel; + + class CModelImage3D : public CModelResource { + private: + std::string m_sName; + + protected: + CModelImage3D(_In_ const ModelResourceID sID, _In_ CModel* pModel); + public: + CModelImage3D() = delete; + + void setName(std::string); + std::string getName() const; + }; + + typedef std::shared_ptr PModelImage3D; +} + +#endif // __NMR_MODELIMAGE3D + diff --git a/Include/Model/Classes/NMR_ModelImageStack.h b/Include/Model/Classes/NMR_ModelImageStack.h new file mode 100644 index 000000000..557892af8 --- /dev/null +++ b/Include/Model/Classes/NMR_ModelImageStack.h @@ -0,0 +1,80 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_ModelImageStack.h defines an image stack for the volumetric extension + +--*/ + +#ifndef __NMR_MODELIMAGESTACK +#define __NMR_MODELIMAGESTACK + +#include +#include +#include +#include +#include "Common/NMR_Types.h" +#include "Model/Classes/NMR_ModelImage3D.h" +#include "Common/Platform/NMR_ImportStream.h" + +constexpr auto MAX_IMAGESTACK_SIZE = (1024 * 1024 * 1024); + +namespace NMR { + + class CModelImageStack : public CModelImage3D { + private: + nfUint32 m_nRowCount; + nfUint32 m_nColumnCount; + nfUint32 m_nSheetCount; + + std::vector m_Sheets; + protected: + CModelImageStack(_In_ const ModelResourceID sID, _In_ CModel* pModel, _In_ nfUint32 nRowCount, _In_ nfUint32 nColumCount, nfUint32 nSheetCount); + + public: + CModelImageStack() = delete; + + static std::shared_ptr make(_In_ const ModelResourceID sID, _In_ CModel* pModel, _In_ nfUint32 nRowCount, _In_ nfUint32 nColumCount, nfUint32 nSheetCount); + + nfUint32 getRowCount() const; + nfUint32 getColumnCount() const; + nfUint32 getSheetCount() const; + void setRowCount(nfUint32 nRowCount); + void setColumnCount(nfUint32 nColumnCount); + void setSheetCount(nfUint32 nSheetCount); + + void setSheet(nfUint32 nSheetIndex, PModelAttachment pAttachment); + PModelAttachment getSheet(nfUint32 nSheetIndex); + PModelAttachment createSheet(nfUint32 nSheetIndex, const std::string & sPath, PImportStream pCopiedStream); + }; + + typedef std::shared_ptr PModelImageStack; + +} + +#endif // __NMR_MODELIMAGESTACK + diff --git a/Include/Model/Classes/NMR_ModelImplicitFunction.h b/Include/Model/Classes/NMR_ModelImplicitFunction.h new file mode 100644 index 000000000..e3600e9f9 --- /dev/null +++ b/Include/Model/Classes/NMR_ModelImplicitFunction.h @@ -0,0 +1,134 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#pragma once + +#include +#include + +#include +#include +#include + +#include "Model/Classes/NMR_ModelFunction.h" + +namespace NMR +{ + using ImplicitNodes = std::vector; + using PImplicitNodes = std::shared_ptr; + + namespace implicit + { + class NodeTypes; + } + + // Extract node name (before the first dot) from a node identifier + std::string extractNodeName(const ImplicitIdentifier& sIdentifier); + + // Extract port name (after the first dot) from a node identifier + std::string extractPortName(const ImplicitIdentifier& sIdentifier); + + // Concatenate node name and port name to a reference identifier + ImplicitIdentifier makeReferenceIdentifier( + const ImplicitIdentifier& sNodeIdentifier, + const ImplicitIdentifier& sPortIdentifier); + + class CModelImplicitFunction : public CModelFunction + { + private: + ImplicitIdentifier m_identifier; + PImplicitNodes m_nodes; + static const implicit::NodeTypes m_nodeTypes; + + CModelImplicitNode* findNode( + const ImplicitIdentifier& sIdentifier) const; + + public: + CModelImplicitFunction(_In_ const ModelResourceID sID, + _In_ CModel* pModel); + + // Copy constructor + CModelImplicitFunction(const CModelImplicitFunction& other) = default; + + // Copy assignment operator + CModelImplicitFunction& operator=(const CModelImplicitFunction& other) = + default; + + ImplicitIdentifier const& getIdentifier() const; + void setIdentifier(ImplicitIdentifier const& identifier); + + PModelImplicitNode addNode(const Lib3MF::eImplicitNodeType eNodeType, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag); + + PModelImplicitNode addNode(const Lib3MF::eImplicitNodeType eNodeType, const Lib3MF::eImplicitNodeConfiguration eConfiguration); + + PImplicitNodes getNodes() const; + + void addLink(const ImplicitIdentifier& sSourceNodeIdentifier, + const ImplicitIdentifier& sTargetNodeIdentifier); + + void addLink(PModelImplicitPort pSourcePort, PModelImplicitPort pTargetPort); + + implicit::NodeTypes const& getNodeTypes() const; + + void removeNode(const ImplicitIdentifier& sIdentifier); + + void clear() override; + + /** + * @brief Replaces a resource ID with a new one. + * + * This function replaces all occurrences of the old resource ID with + * the new one. + * + * @param sOldID The old resource ID to replace. + * @param sNewID The new resource ID to use. + */ + void replaceResourceID(const ModelResourceID sOldID, + const ModelResourceID sNewID); + + /** + * @brief Topologically sorts the implicit function tree. + * + * This function performs a topological sort on the implicit function + * tree, ensuring that parent nodes are always evaluated before their + * children. + * + */ + void sortNodesTopologically(); + + PModelImplicitPort findPort(const ImplicitIdentifier& sIdentifier) const; + + ResourceDependencies getDependencies() override; + }; + + using PModelImplicitFunction = std::shared_ptr; +} // namespace NMR diff --git a/Include/Model/Classes/NMR_ModelImplicitNode.h b/Include/Model/Classes/NMR_ModelImplicitNode.h new file mode 100644 index 000000000..ca010c614 --- /dev/null +++ b/Include/Model/Classes/NMR_ModelImplicitNode.h @@ -0,0 +1,126 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#pragma once + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace NMR +{ + class CModelImplicitFunction; + + using GraphID = unsigned int; + using TopologicalOrderIndex = unsigned int; + class CModelImplicitNode + { + private: + Lib3MF::eImplicitNodeType m_type; + ImplicitIdentifier m_identifier; + std::string m_displayname; + std::string m_tag; + + PPorts m_inputs; + PPorts m_outputs; + + // Optional values for constants + double m_constant = 0.; + std::unique_ptr m_vector; + std::unique_ptr m_matrix; + + // resource ID that is unique in the scope of a model to reference mesh objects, functions etc. + ModelResourceID m_modelResourceID; + + CModelImplicitFunction * m_parent = nullptr; + + // ID of the node in the graph, used for the topological sort + GraphID m_graphId = 0; + TopologicalOrderIndex m_topologicalOrderIndex = 0; + + public: + CModelImplicitNode(Lib3MF::eImplicitNodeType type, + ImplicitIdentifier const & identifier, + std::string const & displayname, + std::string const & tag, + CModelImplicitFunction * parent); + CModelImplicitNode(Lib3MF::eImplicitNodeType type, CModelImplicitFunction * parent); + + ImplicitIdentifier const & getIdentifier() const; + std::string const & getDisplayName() const; + std::string const& getTag() const; + void setIdentifier(ImplicitIdentifier const & identifier); + void setDisplayName(std::string const & displayname); + void setTag(std::string const& tag); + + void setType(Lib3MF::eImplicitNodeType type); + Lib3MF::eImplicitNodeType getNodeType() const; + + PModelImplicitPort addInput(const std::string & sIdentifier, + const std::string & sDisplayName); + + PModelImplicitPort addOutput(const std::string & sIdentifier, + const std::string & sDisplayName); + + PPorts getInputs() const; + PPorts getOutputs() const; + + PModelImplicitPort findInput(const std::string & sIdentifier) const; + PModelImplicitPort findOutput(const std::string & sIdentifier) const; + + void setConstant(double value); + double getConstant() const; + + void setVector(const Lib3MF::sVector & value); + Lib3MF::sVector getVector() const; + + + void setMatrix(const Lib3MF::sMatrix4x4 & value); + Lib3MF::sMatrix4x4 getMatrix() const; + + void setModelResourceID(ModelResourceID resourceID); + ModelResourceID getModelResourceID() const; + PModelResource getResource() const; + + bool arePortsValid() const; + + void setGraphID(GraphID id); + GraphID getGraphID() const; + CModelImplicitFunction * getParent() const; + void setParent(CModelImplicitFunction * parent); + }; + + using PModelImplicitNode = std::shared_ptr; +} diff --git a/Include/Model/Classes/NMR_ModelImplicitPort.h b/Include/Model/Classes/NMR_ModelImplicitPort.h new file mode 100644 index 000000000..f6a1505b6 --- /dev/null +++ b/Include/Model/Classes/NMR_ModelImplicitPort.h @@ -0,0 +1,90 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#pragma once + +#include +#include +#include +#include + +#include "Model/Classes/NMR_ModelImplicitPortNames.h" + + +namespace NMR +{ + + using ImplicitIdentifier = std::string; + class CModelImplicitNode; + class CModelImplicitPort; + class CModelImplicitFunction; + + class CModelImplicitPort + { + private: + CModelImplicitNode * m_parent = nullptr; + ImplicitIdentifier m_identifier; + std::string m_displayname; + Lib3MF::eImplicitPortType m_type = Lib3MF::eImplicitPortType::Scalar; + + mutable std::shared_ptr m_referencedPort; + ImplicitIdentifier m_reference; // m_reference might seem redundant, but it can be set if the dependency does not exist yet + + void updateReference() const; + + public: + CModelImplicitPort(CModelImplicitNode * parent, + ImplicitIdentifier const & identifier, + std::string const & displayname); + + CModelImplicitPort(ImplicitIdentifier const & identifier, + std::string const & displayname, + Lib3MF::eImplicitPortType type); + + ImplicitIdentifier const & getIdentifier() const; + std::string const & getDisplayName() const; + void setIdentifier(ImplicitIdentifier const & identifier); + void setDisplayName(std::string const & displayname); + + Lib3MF::eImplicitPortType getType() const; + void setType(Lib3MF::eImplicitPortType type); + + ImplicitIdentifier getReference() const; + void setReference(ImplicitIdentifier const & reference); + + CModelImplicitNode * getParent() const; + + std::shared_ptr getReferencedPort() const; + void setReferencedPort(std::shared_ptr const & referencedPort); + }; + + using PModelImplicitPort = std::shared_ptr; + + using Ports = std::vector; + using PPorts = std::shared_ptr; +} diff --git a/Include/Model/Classes/NMR_ModelImplicitPortNames.h b/Include/Model/Classes/NMR_ModelImplicitPortNames.h new file mode 100644 index 000000000..1b3fa202f --- /dev/null +++ b/Include/Model/Classes/NMR_ModelImplicitPortNames.h @@ -0,0 +1,79 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#pragma once + + +#include +#include + +namespace NMR +{ + struct InputNames + { + static auto constexpr A = "A"; + static auto constexpr B = "B"; + static auto constexpr C = "C"; + static auto constexpr D = "D"; + static auto constexpr m00 = "m00"; + static auto constexpr m01 = "m01"; + static auto constexpr m02 = "m02"; + static auto constexpr m03 = "m03"; + static auto constexpr m10 = "m10"; + static auto constexpr m11 = "m11"; + static auto constexpr m12 = "m12"; + static auto constexpr m13 = "m13"; + static auto constexpr m20 = "m20"; + static auto constexpr m21 = "m21"; + static auto constexpr m22 = "m22"; + static auto constexpr m23 = "m23"; + static auto constexpr m30 = "m30"; + static auto constexpr m31 = "m31"; + static auto constexpr m32 = "m32"; + static auto constexpr m33 = "m33"; + static auto constexpr x = "x"; + static auto constexpr y = "y"; + static auto constexpr z = "z"; + static auto constexpr pos = "pos"; + static auto constexpr mesh = "mesh"; + static auto constexpr color = "color"; + static auto constexpr min = "min"; + static auto constexpr max = "max"; + static auto constexpr functionID = "functionID"; + }; + + struct OutputNames + { + static auto constexpr result = "result"; + static auto constexpr value = "value"; + static auto constexpr vector = "vector"; + static auto constexpr matrix = "matrix"; + static auto constexpr color = "color"; + static auto constexpr distance = "distance"; + }; +} diff --git a/Include/Model/Classes/NMR_ModelLevelSetObject.h b/Include/Model/Classes/NMR_ModelLevelSetObject.h new file mode 100644 index 000000000..6a8832bd5 --- /dev/null +++ b/Include/Model/Classes/NMR_ModelLevelSetObject.h @@ -0,0 +1,116 @@ +/*++ + +Copyright (C) 2024 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_ModelLevelSetObject.cpp implements the Model LevelSet Object Class. +A model levelset object is an in memory representation of the 3MF +levelset object. + +--*/ + +#ifndef __NMR_ModelLevelSetObject +#define __NMR_ModelLevelSetObject + +#include "Model/Classes/NMR_ModelObject.h" + +#include + +namespace NMR { + + class CModel; + typedef std::shared_ptr PModel; + + class CModelVolumeData; + typedef std::shared_ptr PModelVolumeData; + + class CModelMeshObject; + typedef std::shared_ptr PModelMeshObject; + + class CModelFunction; + typedef std::shared_ptr PModelFunction; + + class CModelLevelSetObject : public CModelObject { + private: + PModelMeshObject m_pMesh; + PModelFunction m_pFunction; + PModelVolumeData m_pVolumeData; + + std::string m_outputPortName; + NMR::NMATRIX3 m_transform = NMR::fnMATRIX3_identity(); + bool m_bHasTransform = false; + double m_minFeatureSize = 0.0; + double m_fallBackValue = 0.0; + bool m_meshBBoxOnly = false; + public: + CModelLevelSetObject() = delete; + CModelLevelSetObject(const ModelResourceID sID, CModel * pModel); + ~CModelLevelSetObject(); + + void mergeToMesh(_In_ CMesh* pMesh, + _In_ const NMATRIX3 mMatrix) override; + + nfBool isValid() override; + nfBool hasSlices(nfBool bRecursive) override; + nfBool isValidForSlices( + const NMATRIX3& totalParentMatrix) override; + void extendOutbox(_Out_ NOUTBOX3& vOutBox, + _In_ const NMATRIX3 + mAccumulatedMatrix) override; + + PModelMeshObject getMesh(); + void setMesh(PModelMeshObject pMesh); + + PModelFunction getFunction(); + void setFunction(PModelFunction pFunction); + + PModelVolumeData getVolumeData(); + void setVolumeData(_In_ PModelVolumeData pVolumeData); + + void setChannelName(std::string outputPortName); + std::string const& getChannelName() const; + + void setTransform(NMR::NMATRIX3 transform); + NMR::NMATRIX3 getTransform() const; + bool hasTransform() const; + + void setMinFeatureSize(double minFeatureSize); + double getMinFeatureSize() const; + + void setFallBackValue(double fallBackValue); + double getFallBackValue() const; + + void setMeshBBoxOnly(bool bMeshBBoxOnly); + bool getMeshBBoxOnly() const; + + ResourceDependencies getDependencies() override; + }; + + typedef std::shared_ptr PModelLevelSetObject; + +} + +#endif // __NMR_ModelLevelSetObject diff --git a/Include/Model/Classes/NMR_ModelMeshObject.h b/Include/Model/Classes/NMR_ModelMeshObject.h index b040a4678..f3cbf34af 100644 --- a/Include/Model/Classes/NMR_ModelMeshObject.h +++ b/Include/Model/Classes/NMR_ModelMeshObject.h @@ -35,7 +35,8 @@ mesh object. #ifndef __NMR_MODELMESHOBJECT #define __NMR_MODELMESHOBJECT -#include "Common/Mesh/NMR_Mesh.h" +#include "Common/Mesh/NMR_Mesh.h" +#include "Model/Classes/NMR_ModelVolumeData.h" #include "Model/Classes/NMR_ModelObject.h" #include "Model/Classes/NMR_ModelMeshBeamLatticeAttributes.h" @@ -50,6 +51,8 @@ namespace NMR { class CModelMeshObject : public CModelObject { private: PMesh m_pMesh; + + PModelVolumeData m_pVolumeData; PModelMeshBeamLatticeAttributes m_pBeamLatticeAttributes; public: CModelMeshObject() = delete; @@ -80,6 +83,10 @@ namespace NMR { void extendOutbox(_Out_ NOUTBOX3& vOutBox, _In_ const NMATRIX3 mAccumulatedMatrix) override; + _Ret_notnull_ PModelVolumeData getVolumeData(); + void setVolumeData(_In_ PModelVolumeData pVolumeData); + + ResourceDependencies getDependencies() override; }; typedef std::shared_ptr PModelMeshObject; diff --git a/Include/Model/Classes/NMR_ModelObject.h b/Include/Model/Classes/NMR_ModelObject.h index 8195083e3..7d64f751d 100644 --- a/Include/Model/Classes/NMR_ModelObject.h +++ b/Include/Model/Classes/NMR_ModelObject.h @@ -118,7 +118,6 @@ namespace NMR { virtual void calculateComponentDepthLevel (nfUint32 nLevel); virtual void extendOutbox(_Out_ NOUTBOX3& vOutBox, _In_ const NMATRIX3 mAccumulatedMatrix) = 0; - }; typedef std::shared_ptr PModelObject; diff --git a/Include/Model/Classes/NMR_ModelResource.h b/Include/Model/Classes/NMR_ModelResource.h index 95eef8ebf..54b96e94c 100644 --- a/Include/Model/Classes/NMR_ModelResource.h +++ b/Include/Model/Classes/NMR_ModelResource.h @@ -41,9 +41,12 @@ resource object. #include "Model/Classes/NMR_Model.h" #include +#include namespace NMR { + using ResourceDependencies = std::vector; + class CModelResource { private: CModel * m_pModel; @@ -52,15 +55,14 @@ namespace NMR { protected: std::vector m_ResourceIndexMap; nfBool m_bHasResourceIndexMap; - CModel * Model(); - + CModel * Model(); public: CModelResource() = delete; // CModelResource(_In_ const PPackageResourceID sResourceID, _In_ CModel * pModel); CModelResource(_In_ const ModelResourceID sResourceID, _In_ CModel * pModel); virtual ~CModelResource(); - virtual PPackageResourceID getPackageResourceID(); + PPackageResourceID getPackageResourceID(); void setPackageResourceID(PPackageResourceID pID); bool mapResourceIndexToPropertyID (_In_ ModelResourceIndex nPropertyIndex, _Out_ ModelPropertyID & nPropertyID); @@ -69,6 +71,11 @@ namespace NMR { nfBool hasResourceIndexMap(); _Ret_notnull_ CModel * getModel(); + void setModel(CModel * pModel); + + /// Returns all dependencies of this resource, usd for topological sorting during writing + virtual ResourceDependencies getDependencies(); + }; typedef std::shared_ptr PModelResource; diff --git a/Include/Model/Classes/NMR_ModelTypes.h b/Include/Model/Classes/NMR_ModelTypes.h index a63ea066d..6c1fec494 100644 --- a/Include/Model/Classes/NMR_ModelTypes.h +++ b/Include/Model/Classes/NMR_ModelTypes.h @@ -79,8 +79,8 @@ namespace NMR { }; typedef struct MODELMESHBEAM { - DWORD m_nIndices[2]; - DOUBLE m_dRadius[2]; // the radius of end 0 or 1 of this beam + DWORD m_nIndices[2] = {0,0}; + DOUBLE m_dRadius[2] = { 1.,1. }; // the radius of end 0 or 1 of this beam eModelBeamLatticeCapMode m_eCapMode[2]; MODELMESHBEAM() { m_eCapMode[0] = MODELBEAMLATTICECAPMODE_SPHERE; @@ -89,16 +89,12 @@ namespace NMR { } MODELMESHBEAM; typedef struct MODELMESHBALL { - DWORD m_nIndex; - DOUBLE m_dRadius; // the radius of this ball + DWORD m_nIndex = 0; + DOUBLE m_dRadius = 1.; // the radius of this ball MODELMESHBALL() { } } MODELMESHBALL; - typedef struct { - FLOAT m_fFields[3][4]; - } MODELTRANSFORM; - typedef struct { BYTE m_Red; BYTE m_Green; @@ -124,9 +120,9 @@ namespace NMR { #pragma pack() typedef DWORD ModelPropertyID; - typedef DWORD ModelResourceID; - typedef DWORD UniqueResourceID; - typedef DWORD ModelResourceIndex; + typedef DWORD ModelResourceID; // Resource ID unique within a model, the id that you actually see as id in the xml + typedef DWORD UniqueResourceID; // Resource ID unique within a package, handled internally to allow access to resources across models + typedef DWORD ModelResourceIndex; //TODO: Add explanation enum eModelUnit { MODELUNIT_MICROMETER = 0, @@ -173,9 +169,29 @@ namespace NMR { }; enum eModelBlendMethod { - MODELBLENDMETHOD_NONE = 0, - MODELBLENDMETHOD_MIX = 1, - MODELBLENDMETHOD_MULTIPLY = 2 + MODELBLENDMETHOD_MIX = 0, + MODELBLENDMETHOD_MULTIPLY = 1, + MODELBLENDMETHOD_MASK = 2 + }; + + enum eModelColorChannel { + MODELCOLORCHANNEL_RED = 0, + MODELCOLORCHANNEL_GREEN = 1, + MODELCOLORCHANNEL_BLUE = 2, + MODELCOLORCHANNEL_ALPHA = 3 + }; + + enum class eModelCompositionMethod { + MODELCOMPOSITIONMETHOD_WEIGHTEDSUM = 0, + MODELCOMPOSITIONMETHOD_MULTIPLY= 1, + MODELCOMPOSITIONMETHOD_MIN = 2, + MODELCOMPOSITIONMETHOD_MAX = 3, + MODELCOMPOSITIONMETHOD_MASK = 4 + }; + + enum class eModelCompositionSpace { + MODELCOMPOSITIONSPACE_RAW = 0, + MODELCOMPOSITIONSPACE_LINEARCOLOR = 1 }; typedef struct { @@ -191,7 +207,6 @@ namespace NMR { UniqueResourceID m_nUniqueResourceID; eModelBlendMethod m_nMethod; } MODELMULTIPROPERTYLAYER; - } #endif // __NMR_MODELTYPES diff --git a/Include/Model/Classes/NMR_ModelVolumeData.h b/Include/Model/Classes/NMR_ModelVolumeData.h new file mode 100644 index 000000000..e7065bf2d --- /dev/null +++ b/Include/Model/Classes/NMR_ModelVolumeData.h @@ -0,0 +1,92 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_VolumeData.h defines the class CVolumeData. + +--*/ + +#ifndef __NMR_VOLUMEDATA +#define __NMR_VOLUMEDATA + +#include "Common/NMR_Types.h" +#include "Common/Math/NMR_Geometry.h" +#include "Common/Mesh/NMR_MeshTypes.h" + +#include "Common/Mesh/NMR_VolumeDataColor.h" +#include "Common/Mesh/NMR_VolumeDataProperty.h" +#include "Common/Mesh/NMR_VolumeDataComposite.h" +#include "Model/Classes/NMR_ModelResource.h" + +namespace NMR { + class CModelFunction; + typedef std::shared_ptr PModelFunction; + + class CModelVolumeData : public CModelResource { + private: + PVolumeDataComposite m_pComposite; + PVolumeDataColor m_pColor; + std::map m_mapProperties; + public: + CModelVolumeData() = delete; + CModelVolumeData(ModelResourceID sResourceID, + CModel* pModel); + + void clear(); + + nfBool hasProperty(std::string sName); + nfUint32 getPropertyCount() const; + PVolumeDataProperty getProperty(nfUint32 nIndex); + PVolumeDataProperty findProperty(std::string sName); + void addProperty(PVolumeDataProperty pProperty); + PVolumeDataProperty addProperty(std::string sName, + PModelFunction pfunction); + void removeProperty(std::string sName); + + bool hasColor() const; + PVolumeDataColor getColor(); + PVolumeDataColor createColor(PModelFunction pfunction); + void setColor(PVolumeDataColor pColor); + void removeColor(); + + bool hasComposite() const; + PVolumeDataComposite getComposite(); + PVolumeDataComposite createComposite(/* basematerialgroupd*/); + void setComposite(PVolumeDataComposite pComposite); + void removeComposite(); + + ResourceDependencies getDependencies() override; + + PPackageResourceID packageResourceIDFromResourceID( + UniqueResourceID uniqueResourceID); + }; + + typedef std::shared_ptr PModelVolumeData; + +} + +#endif // __NMR_BEAMLATTICE diff --git a/Include/Model/Reader/NMR_ModelReaderNode_KeyStoreBase.h b/Include/Model/Reader/NMR_ModelReaderNode_KeyStoreBase.h index 6b076bd8b..bbff6d93c 100644 --- a/Include/Model/Reader/NMR_ModelReaderNode_KeyStoreBase.h +++ b/Include/Model/Reader/NMR_ModelReaderNode_KeyStoreBase.h @@ -42,8 +42,8 @@ namespace NMR { class CModelReaderNode_KeyStoreBase : public CModelReaderNode { protected: - CKeyStore * const m_pKeyStore; CModel * const m_pModel; + CKeyStore * const m_pKeyStore; public: CModelReaderNode_KeyStoreBase() = delete; diff --git a/Include/Model/Reader/Volumetric2201/NMR_Implicit_PortType_Convert.h b/Include/Model/Reader/Volumetric2201/NMR_Implicit_PortType_Convert.h new file mode 100644 index 000000000..42fff5075 --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_Implicit_PortType_Convert.h @@ -0,0 +1,55 @@ + + +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Coverter for PortType + +--*/ + +#pragma once + +#include "Model/Classes/NMR_ModelConstants.h" +#include "lib3mf_types.hpp" + +#include + +namespace NMR +{ + + namespace implicit + { + const char * portTypeToRefName(Lib3MF::eImplicitPortType type); + + const char * portTypeToName(Lib3MF::eImplicitPortType type); + + bool portTypeFromRefName(std::string const & name, Lib3MF::eImplicitPortType & resultType); + + bool portTypeFromName(std::string const & name, Lib3MF::eImplicitPortType & resultType); + + } +} \ No newline at end of file diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_FunctionFromImage3D.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_FunctionFromImage3D.h new file mode 100644 index 000000000..e50cf8df0 --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_FunctionFromImage3D.h @@ -0,0 +1,74 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for FunctionFromImage3D + +--*/ + +#pragma once + +#include "Model/Classes/NMR_ImplicitNodeTypes.h" +#include "Model/Classes/NMR_ModelFunctionFromImage3D.h" +#include "Model/Reader/NMR_ModelReaderNode.h" + +namespace NMR +{ + class CModelReaderNode_FunctionFromImage3D : public CModelReaderNode + { + private: + PModelFunctionFromImage3D m_pFunctionFromImage3D; + CModel * m_pModel = nullptr; + + ModelResourceID m_nID = 0; + ModelResourceID m_imageModelResourceID = 0; + + std::string m_displayName; + + eModelTextureTileStyle m_tileStyleU = {}; + eModelTextureTileStyle m_tileStyleV = {}; + eModelTextureTileStyle m_tileStyleW = {}; + + eModelTextureFilter m_filter = {eModelTextureFilter::MODELTEXTUREFILTER_LINEAR}; + + double m_offset = {}; + double m_scale = {1.}; + + public: + CModelReaderNode_FunctionFromImage3D() = delete; + CModelReaderNode_FunctionFromImage3D(_In_ CModel * pModel, _In_ PModelWarnings pWarnings); + + void parseXML(_In_ CXmlReader * pXMLReader) override; + + void OnAttribute(_In_z_ const nfChar * pAttributeName, + _In_z_ const nfChar * pAttributeValue) override; + + }; + + typedef std::shared_ptr + PModelReaderNode_FunctionFromImage3D; + +} \ No newline at end of file diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function.h new file mode 100644 index 000000000..0d2853f4c --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function.h @@ -0,0 +1,68 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for implicit function ressources + +--*/ + +#pragma once + +#include "Model/Classes/NMR_ModelImplicitFunction.h" +#include "Model/Reader/NMR_ModelReaderNode.h" +#include "Model/Classes/NMR_ImplicitNodeTypes.h" + +namespace NMR +{ + class CModelReaderNode_ImplicitFunction : public CModelReaderNode + { + private: + PModelImplicitFunction m_pImplicitFunction; + CModel * m_pModel = nullptr; + + ModelResourceID m_nID = 0; + + std::string m_displayName; + const static implicit::NodeTypes m_nodeTypes; + + public: + CModelReaderNode_ImplicitFunction() = delete; + CModelReaderNode_ImplicitFunction(_In_ CModel * pModel, _In_ PModelWarnings pWarnings); + + void parseXML(_In_ CXmlReader * pXMLReader) override; + + void OnAttribute(_In_z_ const nfChar * pAttributeName, + _In_z_ const nfChar * pAttributeValue) override; + + void OnNSChildElement(_In_z_ const nfChar * pChildName, + _In_z_ const nfChar * pNameSpace, + _In_ CXmlReader * pXMLReader) override; + + + }; + + typedef std::shared_ptr PModelReaderNode_ImplicitFunction; +} \ No newline at end of file diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Input.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Input.h new file mode 100644 index 000000000..8e7f3e034 --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Input.h @@ -0,0 +1,63 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for a single input of a function for implicit modelling + +--*/ + +#pragma once + +#include "Model/Classes/NMR_ModelImplicitFunction.h" +#include "Model/Reader/NMR_ModelReaderNode.h" + +namespace NMR +{ + class CModelReaderNode_Implicit_Function_Input : public CModelReaderNode + { + private: + CModelImplicitFunction * m_pParentFunction; + + std::string m_identifier; + std::string m_displayName; + std::string m_reference; + Lib3MF::eImplicitPortType m_portType; + void createInput(); + + public: + CModelReaderNode_Implicit_Function_Input() = delete; + CModelReaderNode_Implicit_Function_Input(CModelImplicitFunction * pParentFunction, + PModelWarnings pWarnings, + Lib3MF::eImplicitPortType portType); + + void parseXML(CXmlReader * pXMLReader) override; + + void OnAttribute(const nfChar * pAttributeName, const nfChar * pAttributeValue) override; + }; + + typedef std::shared_ptr + PModelReaderNode_Implicit_Function_Input; +} \ No newline at end of file diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Inputs.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Inputs.h new file mode 100644 index 000000000..ddb843d74 --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Inputs.h @@ -0,0 +1,60 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for ports of a function for implicit modelling + +--*/ + +#pragma once + +#include "Model/Classes/NMR_ModelImplicitFunction.h" +#include "Model/Reader/NMR_ModelReaderNode.h" + + +namespace NMR +{ + + class CModelReaderNode_Implicit_Function_Inputs : public CModelReaderNode + { + private: + CModelImplicitFunction * m_pImplicitFunction; + + public: + CModelReaderNode_Implicit_Function_Inputs() = delete; + CModelReaderNode_Implicit_Function_Inputs(CModelImplicitFunction * pParentFunction, + PModelWarnings pWarnings); + + void parseXML(CXmlReader * pXMLReader) override; + + void OnNSChildElement(const nfChar * pChildName, + const nfChar * pNameSpace, + CXmlReader * pXMLReader) override; + }; + + typedef std::shared_ptr + PModelReaderNode_Implicit_Function_Inputs; +} \ No newline at end of file diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Output.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Output.h new file mode 100644 index 000000000..8a891e6ff --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Output.h @@ -0,0 +1,64 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for an output element + +--*/ + +#pragma once + +#include "Model/Classes/NMR_ModelImplicitFunction.h" +#include "Model/Reader/NMR_ModelReaderNode.h" + +namespace NMR +{ + class CModelReaderNode_Implicit_Function_Output : public CModelReaderNode + { + private: + CModelImplicitFunction * m_pParentFunction; + + std::string m_identifier; + std::string m_displayName; + std::string m_reference; + Lib3MF::eImplicitPortType m_portType; + void createOutput(); + public: + CModelReaderNode_Implicit_Function_Output() = delete; + CModelReaderNode_Implicit_Function_Output(CModelImplicitFunction * pParentFunction, + PModelWarnings pWarnings, + Lib3MF::eImplicitPortType portType + ); + + void parseXML(CXmlReader * pXMLReader) override; + + void OnAttribute(const nfChar * pAttributeName, const nfChar * pAttributeValue) override; + + + }; + + typedef std::shared_ptr PModelReaderNode_Implicit_Function_Output; +} \ No newline at end of file diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Outputs.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Outputs.h new file mode 100644 index 000000000..356be171c --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Outputs.h @@ -0,0 +1,60 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for inputs (arguments) of a function for implicit modelling + +--*/ + +#pragma once + +#include "Model/Classes/NMR_ModelImplicitFunction.h" +#include "Model/Reader/NMR_ModelReaderNode.h" + + +namespace NMR +{ + + class CModelReaderNode_Implicit_Function_Outputs : public CModelReaderNode + { + private: + CModelImplicitFunction * m_pImplicitFunction; + + public: + CModelReaderNode_Implicit_Function_Outputs() = delete; + CModelReaderNode_Implicit_Function_Outputs(CModelImplicitFunction * pParentFunction, + PModelWarnings pWarnings); + + void parseXML(CXmlReader * pXMLReader) override; + + void OnNSChildElement(const nfChar * pChildName, + const nfChar * pNameSpace, + CXmlReader * pXMLReader) override; + }; + + typedef std::shared_ptr + PModelReaderNode_Implicit_Function_Outputs; +} \ No newline at end of file diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node.h new file mode 100644 index 000000000..af82ab592 --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node.h @@ -0,0 +1,65 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for nodes of graph representing a function for implicit modelling + +--*/ + +#pragma once + +#include "Model/Classes/NMR_ModelImplicitNode.h" +#include "Model/Reader/NMR_ModelReaderNode.h" + +namespace NMR +{ + class CModelReaderNode_Implicit_Node : public CModelReaderNode + { + private: + CModelImplicitNode * m_pImplicitNode; + CModel * m_pModel; + + double m_value; + Lib3MF::sVector m_vector; + public: + CModelReaderNode_Implicit_Node() = delete; + CModelReaderNode_Implicit_Node(_In_ CModel * pModel, + _In_ CModelImplicitNode * pImplicitNode, + _In_ PModelWarnings pWarnings); + + void parseXML(_In_ CXmlReader * pXMLReader) override; + + void OnAttribute(_In_z_ const nfChar * pAttributeName, + _In_z_ const nfChar * pAttributeValue) override; + + void OnNSChildElement(_In_z_ const nfChar * pChildName, + _In_z_ const nfChar * pNameSpace, + _In_ CXmlReader * pXMLReader) override; + }; + + typedef std::shared_ptr + PModelReaderNode_Implicit_Node; +} \ No newline at end of file diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Inputs.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Inputs.h new file mode 100644 index 000000000..a7ca9339e --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Inputs.h @@ -0,0 +1,59 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for ports of a node of a graph representing a function for implicit modelling + +--*/ + +#pragma once + +#include "Model/Classes/NMR_ModelImplicitNode.h" +#include "Model/Reader/NMR_ModelReaderNode.h" + +namespace NMR +{ + + class CModelReaderNode_Implicit_Node_Inputs : public CModelReaderNode + { + private: + CModelImplicitNode * m_pImplicitNode; + + public: + CModelReaderNode_Implicit_Node_Inputs() = delete; + CModelReaderNode_Implicit_Node_Inputs(_In_ CModelImplicitNode * pParentNode, + _In_ PModelWarnings pWarnings + ); + + void parseXML(_In_ CXmlReader * pXMLReader) override; + + void OnNSChildElement(_In_z_ const nfChar * pChildName, + _In_z_ const nfChar * pNameSpace, + _In_ CXmlReader * pXMLReader) override; + }; + + typedef std::shared_ptr PModelReaderNode_Implicit_Node_Inputs; +} \ No newline at end of file diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Outputs.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Outputs.h new file mode 100644 index 000000000..a343a1b4f --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Outputs.h @@ -0,0 +1,59 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for output ports of a node + +--*/ + +#pragma once + +#include "Model/Classes/NMR_ModelImplicitNode.h" +#include "Model/Reader/NMR_ModelReaderNode.h" + +namespace NMR +{ + + class CModelReaderNode_Implicit_Node_Outputs : public CModelReaderNode + { + private: + CModelImplicitNode * m_pImplicitNode; + + public: + CModelReaderNode_Implicit_Node_Outputs() = delete; + CModelReaderNode_Implicit_Node_Outputs(_In_ CModelImplicitNode * pParentNode, + _In_ PModelWarnings pWarnings + ); + + void parseXML(_In_ CXmlReader * pXMLReader) override; + + void OnNSChildElement(_In_z_ const nfChar * pChildName, + _In_z_ const nfChar * pNameSpace, + _In_ CXmlReader * pXMLReader) override; + }; + + typedef std::shared_ptr PModelReaderNode_Implicit_Node_Outputs; +} \ No newline at end of file diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Port.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Port.h new file mode 100644 index 000000000..5a71b7b35 --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Port.h @@ -0,0 +1,75 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for a single port of a node of a graph representing a function for implicit modelling + +--*/ + +#pragma once + +#include "Model/Classes/NMR_ModelImplicitNode.h" +#include "Model/Reader/NMR_ModelReaderNode.h" + +namespace NMR +{ + + enum class ImplicitPortInOut + { + Input, + Output + }; + + + class CModelReaderNode_Implicit_Port : public CModelReaderNode + { + private: + CModelImplicitNode * m_pParentNode; + + std::string m_identifier; + std::string m_displayName; + std::string m_reference; + Lib3MF::eImplicitPortType m_portType; + ImplicitPortInOut m_inOut; + + + public: + CModelReaderNode_Implicit_Port() = delete; + CModelReaderNode_Implicit_Port(CModelImplicitNode * pParentNode, + PModelWarnings pWarnings, + Lib3MF::eImplicitPortType portType, + ImplicitPortInOut inOut); + + void parseXML(CXmlReader * pXMLReader) override; + + void OnAttribute(const nfChar * pAttributeName, const nfChar * pAttributeValue) override; + + void createInput(); + void createOutput(); + }; + + typedef std::shared_ptr PModelReaderNode_Implicit_Port; +} \ No newline at end of file diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_LevelSet.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_LevelSet.h new file mode 100644 index 000000000..102c0ccc3 --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_LevelSet.h @@ -0,0 +1,88 @@ +/*++ + +Copyright (C) 2024 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for boundary shape objects + +--*/ + +#pragma once + +#include "Model/Classes/NMR_ImplicitNodeTypes.h" +#include "Model/Classes/NMR_ModelLevelSetObject.h" +#include "Model/Reader/NMR_ModelReaderNode.h" +#include "Model/Reader/v100/NMR_ModelReaderNode100_Object.h" + +namespace NMR +{ + class CModelReaderNode_LevelSet : public CModelReaderNode + { + private: + PModelLevelSetObject m_pLevelSet; + CModel* m_parentModel = nullptr; + + ModelResourceID m_resID = 0; + + nfBool m_bHasFunctionID = false; + nfBool m_bHasTransform = false; + nfBool m_bHasChannel = false; + nfBool m_bHasMeshBBoxOnly = false; + nfBool m_meshBBoxOnly = false; + nfBool m_bHasMeshID = false; + + double m_dMinFeatureSize = 0.0; + nfBool m_bHasMinFeatureSize = false; + + double m_dFallBackValue = 0.0; + nfBool m_bHasFallBackValue = false; + + ModelResourceID m_nFunctionID; + NMATRIX3 m_Transform; + + std::string m_sChannel; + + ModelResourceID m_nVolumeDataID = 0; + ModelResourceID m_nMeshID = 0; + nfBool m_bHasVolumeDataID = false; + + public: + CModelReaderNode_LevelSet() = delete; + CModelReaderNode_LevelSet(CModel* pModel, PModelLevelSetObject levelSet, PModelWarnings pWarnings, + PProgressMonitor pProgressMonitor); + + void parseXML(_In_ CXmlReader* pXMLReader) override; + + void OnAttribute(_In_z_ const nfChar* pAttributeName, + _In_z_ const nfChar* pAttributeValue) override; + + void OnNSChildElement(_In_z_ const nfChar* pChildName, + _In_z_ const nfChar* pNameSpace, + _In_ CXmlReader* pXMLReader) override; + }; + + typedef std::shared_ptr + PModelReaderNode_LevelSet; +} // namespace NMR \ No newline at end of file diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Color.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Color.h new file mode 100644 index 000000000..13edd1a9c --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Color.h @@ -0,0 +1,76 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +NMR_ModelReaderNode_Volumetric2201_Color.h covers the official 3MF volumetric extension. + +--*/ + +#ifndef __NMR_MODELREADERNODE_Volumetric2201_COLOR +#define __NMR_MODELREADERNODE_Volumetric2201_COLOR + +#include "Model/Reader/NMR_ModelReaderNode.h" +#include "Model/Classes/NMR_ModelComponent.h" +#include "Model/Classes/NMR_ModelVolumeData.h" +#include "Common/Math/NMR_Matrix.h" + +namespace NMR { + + class CModelReaderNode_Volumetric2201_Color : public CModelReaderNode { + private: + nfBool m_bHasFieldID = false; + nfBool m_bHasTransform = false; + nfBool m_bHasChannel = false; + + ModelResourceID m_nFieldID; + NMATRIX3 m_Transform = fnMATRIX3_identity(); + std::string m_sChannel; + + double m_dMinFeatureSize = 0.0; + nfBool m_bHasMinFeatureSize = false; + + double m_dFallBackValue = 0.0; + nfBool m_bHasFallBackValue = false; + + protected: + virtual void OnAttribute(_In_z_ const nfChar * pAttributeName, _In_z_ const nfChar * pAttributeValue); + public: + CModelReaderNode_Volumetric2201_Color() = delete; + CModelReaderNode_Volumetric2201_Color(_In_ PModelWarnings pWarnings); + + virtual void parseXML(_In_ CXmlReader * pXMLReader); + + virtual void OnNSChildElement(_In_z_ const nfChar * pChildName, _In_z_ const nfChar * pNameSpace, _In_ CXmlReader * pXMLReader); + + PVolumeDataColor MakeColor(_In_ CModel* pModel); + }; + + typedef std::shared_ptr PModelReaderNode_Volumetric2201_Color; + +} + +#endif // __NMR_MODELREADERNODE_Volumetric2201_COLOR + diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Image3D.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Image3D.h new file mode 100644 index 000000000..4e784e15b --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Image3D.h @@ -0,0 +1,68 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +NMR_ModelReaderNode_Volumetric2201_Image3D.h covers the official 3MF volumetric extension. + +--*/ + +#ifndef __NMR_MODELREADERNODE_Volumetric2201_IMAGE3D +#define __NMR_MODELREADERNODE_Volumetric2201_IMAGE3D + +#include "Model/Reader/NMR_ModelReaderNode.h" +#include "Model/Classes/NMR_ModelImage3D.h" + +namespace NMR { + + class CModelReaderNode_Volumetric2201_Image3D : public CModelReaderNode { + private: + protected: + + CModel * m_pModel; + + ModelResourceID m_modelResourceId; + + nfBool m_bHasName; + std::string m_sName; + + PModelImage3D m_pImage3D; + + virtual void OnAttribute(_In_z_ const nfChar * pAttributeName, _In_z_ const nfChar * pAttributeValue); + virtual void OnNSChildElement(_In_z_ const nfChar * pChildName, _In_z_ const nfChar * pNameSpace, _In_ CXmlReader * pXMLReader); + + public: + CModelReaderNode_Volumetric2201_Image3D() = delete; + CModelReaderNode_Volumetric2201_Image3D(_In_ CModel * pModel, _In_ PModelWarnings pWarnings); + + virtual void parseXML(_In_ CXmlReader * pXMLReader); + + }; + + typedef std::shared_ptr PModelReaderNode_Volumetric2201_Image3D; + +} + +#endif // __NMR_MODELREADERNODE_Volumetric2201_IMAGE3D diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageSheet.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageSheet.h new file mode 100644 index 000000000..218ab8daa --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageSheet.h @@ -0,0 +1,61 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +NMR_ModelReaderNode_Volumetric2201_ImageSheet.h covers the official 3MF volumetric extension. + +--*/ + +#ifndef __NMR_MODELREADERNODE_VOLUMETRIC2201_IMAGESHEET +#define __NMR_MODELREADERNODE_VOLUMETRIC2201_IMAGESHEET + +#include "Model/Reader/NMR_ModelReaderNode.h" +#include "Model/Classes/NMR_ModelComponent.h" +#include "Model/Classes/NMR_ModelComponentsObject.h" +#include "Model/Classes/NMR_ModelObject.h" + +namespace NMR { + + class CModelReaderNode_Volumetric2201_ImageSheet : public CModelReaderNode { + private: + std::string m_sPath; + + protected: + virtual void OnAttribute(_In_z_ const nfChar * pAttributeName, _In_z_ const nfChar * pAttributeValue); + public: + CModelReaderNode_Volumetric2201_ImageSheet() = delete; + CModelReaderNode_Volumetric2201_ImageSheet(_In_ PModelWarnings pWarnings); + + virtual void parseXML(_In_ CXmlReader * pXMLReader); + + std::string getPath(); + }; + + typedef std::shared_ptr PModelReaderNode_Volumetric2201_ImageSheet; + +} + +#endif // __NMR_MODELREADERNODE_VOLUMETRIC2201_IMAGESHEET diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageStack.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageStack.h new file mode 100644 index 000000000..8ccee51f0 --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageStack.h @@ -0,0 +1,67 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +NMR_ModelReaderNode_Volumetric2201_Image3D.h covers the official 3MF volumetric extension. + +--*/ + +#ifndef __NMR_MODELREADERNODE_VOLUMETRIC2201_IMAGESTACK +#define __NMR_MODELREADERNODE_VOLUMETRIC2201_IMAGESTACK + +#include "Model/Reader/NMR_ModelReaderNode.h" +#include "Model/Classes/NMR_ModelImageStack.h" + +namespace NMR { + + class CModelReaderNode_Volumetric2201_ImageStack : public CModelReaderNode { + private: + protected: + + CModel* m_pModel = nullptr; + CModelImageStack* m_pImageStack = nullptr; + + nfUint32 m_nRowCount; + nfUint32 m_nColumnCount; + nfUint32 m_nSheetCount; + nfUint32 m_nSheetIndex; + + virtual void OnAttribute(_In_z_ const nfChar * pAttributeName, _In_z_ const nfChar * pAttributeValue); + virtual void OnNSChildElement(_In_z_ const nfChar * pChildName, _In_z_ const nfChar * pNameSpace, _In_ CXmlReader * pXMLReader); + + public: + CModelReaderNode_Volumetric2201_ImageStack() = delete; + CModelReaderNode_Volumetric2201_ImageStack(_In_ CModel* pModel, _In_ CModelImageStack* pImageStack, _In_ PModelWarnings pWarnings); + + virtual void parseXML(_In_ CXmlReader * pXMLReader); + + }; + + typedef std::shared_ptr PModelReaderNode_Volumetric2201_ImageStack; + +} + +#endif // __NMR_MODELREADERNODE_VOLUMETRIC2201_IMAGESTACK diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Property.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Property.h new file mode 100644 index 000000000..c118b0e59 --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Property.h @@ -0,0 +1,78 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +NMR_ModelReaderNode_Volumetric2201_Property.h covers the official 3MF volumetric extension. + +--*/ + +#ifndef __NMR_MODELREADERNODE_VOLUMETRIC2201_PROPERTY +#define __NMR_MODELREADERNODE_VOLUMETRIC2201_PROPERTY + +#include "Model/Reader/NMR_ModelReaderNode.h" +#include "Model/Classes/NMR_ModelVolumeData.h" +#include "Common/Math/NMR_Matrix.h" + +namespace NMR { + + class CModelReaderNode_Volumetric2201_Property : public CModelReaderNode { + private: + nfBool m_bHasFieldID = false; + nfBool m_bHasName = false; + nfBool m_bHasTransform = false; + nfBool m_bHasRequired = false; + nfBool m_bHasChannel = false; + + ModelResourceID m_nFieldID; + std::string m_sName; + NMATRIX3 m_Transform; + nfBool m_bRequired = true; + std::string m_sChannel; + + double m_dMinFeatureSize = 0.0; + nfBool m_bHasMinFeatureSize = false; + + double m_dFallBackValue = 0.0; + nfBool m_bHasFallBackValue = false; + protected: + virtual void OnAttribute(_In_z_ const nfChar * pAttributeName, _In_z_ const nfChar * pAttributeValue); + public: + CModelReaderNode_Volumetric2201_Property() = delete; + CModelReaderNode_Volumetric2201_Property(_In_ PModelWarnings pWarnings); + + virtual void parseXML(_In_ CXmlReader * pXMLReader); + + virtual void OnNSChildElement(_In_z_ const nfChar * pChildName, _In_z_ const nfChar * pNameSpace, _In_ CXmlReader * pXMLReader); + + PVolumeDataProperty MakeProperty(_In_ CModel* pModel); + }; + + typedef std::shared_ptr PModelReaderNode_Volumetric2201_Property; + +} + +#endif // __NMR_MODELREADERNODE_VOLUMETRIC2201_PROPERTY + diff --git a/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_VolumeData.h b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_VolumeData.h new file mode 100644 index 000000000..8a03f8b0c --- /dev/null +++ b/Include/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_VolumeData.h @@ -0,0 +1,63 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +NMR_ModelReaderNode_Volumetric2201_VolumeData.h covers the official 3MF volumetric extension. + +--*/ + +#ifndef __NMR_MODELREADERNODE_VOLUMETRIC2201_VOLUMEDATA +#define __NMR_MODELREADERNODE_VOLUMETRIC2201_VOLUMEDATA + +#include "Model/Reader/NMR_ModelReaderNode.h" +#include "Model/Classes/NMR_ModelComponent.h" +#include "Model/Classes/NMR_ModelVolumeData.h" + +namespace NMR { + + class CModelReaderNode_Volumetric2201_VolumeData : public CModelReaderNode { + private: + CModel* m_pModel; + ModelResourceID m_nID = 0; + PModelVolumeData m_pVolumeData; + + protected: + virtual void OnAttribute(const nfChar * pAttributeName, const nfChar * pAttributeValue); + public: + CModelReaderNode_Volumetric2201_VolumeData() = delete; + CModelReaderNode_Volumetric2201_VolumeData(CModel* pModel, PModelWarnings pWarnings); + + virtual void parseXML(CXmlReader * pXMLReader); + + virtual void OnNSChildElement(const nfChar * pChildName, const nfChar * pNameSpace, CXmlReader * pXMLReader); + }; + + typedef std::shared_ptr PModelReaderNode_Volumetric2201_VolumeData; + +} + +#endif // __NMR_MODELREADERNODE_VOLUMETRIC2201_VOLUMEDATA + diff --git a/Include/Model/Reader/v100/NMR_ModelReaderNode100_Mesh.h b/Include/Model/Reader/v100/NMR_ModelReaderNode100_Mesh.h index 573f7f808..2bbb24dfd 100644 --- a/Include/Model/Reader/v100/NMR_ModelReaderNode100_Mesh.h +++ b/Include/Model/Reader/v100/NMR_ModelReaderNode100_Mesh.h @@ -38,14 +38,17 @@ A mesh reader model node is a parser for the mesh node of an XML Model Stream. #include "Model/Reader/NMR_ModelReader_TexCoordMapping.h" #include "Model/Classes/NMR_ModelComponent.h" #include "Model/Classes/NMR_ModelObject.h" +#include "Model/Classes/NMR_ModelVolumeData.h" +#include "Model/Classes/NMR_ModelMeshObject.h" namespace NMR { class CModelReaderNode100_Mesh : public CModelReaderNode { private: - CMesh * m_pMesh; + PModelMeshObject m_pMesh; CModel * m_pModel; + ModelResourceID m_nObjectLevelPropertyID; PPackageResourceID m_pObjectLevelPropertyID; ModelResourceIndex m_nObjectLevelPropertyIndex; @@ -54,12 +57,17 @@ namespace NMR { ModelResourceID m_nClippingMeshID; nfBool m_bHasRepresentationMeshID; ModelResourceID m_nRepresentationMeshID; + + nfBool m_bHasVolumeDataID = false; + ModelResourceID m_nVolumeDataID = 0; protected: - virtual void OnAttribute(_In_z_ const nfChar * pAttributeName, _In_z_ const nfChar * pAttributeValue); - virtual void OnNSChildElement(_In_z_ const nfChar * pChildName, _In_z_ const nfChar * pNameSpace, _In_ CXmlReader * pXMLReader); + void OnNSAttribute(_In_z_ const nfChar *pAttributeName, + _In_z_ const nfChar *pAttributeValue, + _In_z_ const nfChar *pNameSpace) override; + void OnNSChildElement(_In_z_ const nfChar * pChildName, _In_z_ const nfChar * pNameSpace, _In_ CXmlReader * pXMLReader) override; public: CModelReaderNode100_Mesh() = delete; - CModelReaderNode100_Mesh(_In_ CModel * pModel, _In_ CMesh * pMesh, _In_ PModelWarnings pWarnings, _In_ PProgressMonitor pProgressMonitor, _In_ PPackageResourceID m_pObjectLevelPropertyID, _In_ ModelResourceIndex nDefaultPropertyIndex); + CModelReaderNode100_Mesh(_In_ CModel * pModel, PModelMeshObject pMesh, _In_ PModelWarnings pWarnings, _In_ PProgressMonitor pProgressMonitor, _In_ PPackageResourceID m_pObjectLevelPropertyID, _In_ ModelResourceIndex nDefaultPropertyIndex); virtual void parseXML(_In_ CXmlReader * pXMLReader); void retrieveClippingInfo(_Out_ eModelBeamLatticeClipMode &eClipMode, _Out_ nfBool & bHasClippingMode, _Out_ ModelResourceID & nClippingMeshID); diff --git a/Include/Model/Writer/NMR_ModelWriterNode.h b/Include/Model/Writer/NMR_ModelWriterNode.h index 0a3caee4f..12f25accc 100644 --- a/Include/Model/Writer/NMR_ModelWriterNode.h +++ b/Include/Model/Writer/NMR_ModelWriterNode.h @@ -51,8 +51,10 @@ namespace NMR { void writeConstPrefixedStringAttribute(_In_z_ const nfChar * pPrefix, _In_z_ const nfChar * pAttributeName, _In_z_ const nfChar * pAttributeValue); void writeIntAttribute(_In_z_ const nfChar * pAttributeName, _In_ nfInt32 nAttributeValue); + void writePrefixedIntAttribute(_In_z_ const nfChar * pPrefix, _In_z_ const nfChar * pAttributeName, _In_ nfInt32 nAttributeValue); void writeUintAttribute(_In_z_ const nfChar * pAttributeName, _In_ nfUint32 nAttributeValue); void writeFloatAttribute(_In_z_ const nfChar * pAttributeName, _In_ nfFloat fAttributeValue); + void writeDoubleAttribute(_In_z_ const nfChar* pAttributeName, _In_ nfDouble dAttributeValue); void writeStartElement(_In_z_ const nfChar * pElementName); void writeStartElementWithNamespace(_In_z_ const nfChar * pElementName, _In_z_ const nfChar * pNameSpace); diff --git a/Include/Model/Writer/NMR_ModelWriterNode_Implicit.h b/Include/Model/Writer/NMR_ModelWriterNode_Implicit.h new file mode 100644 index 000000000..7edc1eeb2 --- /dev/null +++ b/Include/Model/Writer/NMR_ModelWriterNode_Implicit.h @@ -0,0 +1,74 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + + +--*/ + +#pragma once + +#include "Common/3MF_ProgressMonitor.h" +#include "Common/Platform/NMR_XmlWriter.h" +#include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_ModelImplicitFunction.h" +#include "Model/Classes/NMR_ModelImplicitNode.h" +#include "Model/Writer/NMR_ModelWriterNode_ModelBase.h" + +namespace NMR +{ + namespace implicit + { + class NodeTypes; + } + + class CModelWriterNode_Implicit : public CModelWriterNode_ModelBase + { + + public: + CModelWriterNode_Implicit() = delete; + CModelWriterNode_Implicit(CModel * pModel, + CXmlWriter * pXMLWriter, + PProgressMonitor pProgressMonitor); + + void writeImplicitFunctions(); + void writeImplicitFunction(CModelImplicitFunction & function); + + void writeToXML() override; + + private: + static const implicit::NodeTypes m_nodeTypes; + + void writeImplicitFunctionElements(CModelImplicitFunction & function); + void writeImplicitNode(CModelImplicitNode & node); + void writeImplicitOutputs(NMR::Ports & ports); + void writeImplicitInputs(NMR::Ports & ports); + + void writeImplicitFunctionInputs(NMR::Ports & ports); + void writeImplicitFunctionOutputs(NMR::Ports & ports); + }; + +} diff --git a/Include/Model/Writer/NMR_ModelWriterNode_LevelSet.h b/Include/Model/Writer/NMR_ModelWriterNode_LevelSet.h new file mode 100644 index 000000000..ed52bcb33 --- /dev/null +++ b/Include/Model/Writer/NMR_ModelWriterNode_LevelSet.h @@ -0,0 +1,70 @@ +/*++ + +Copyright (C) 2024 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Writer node for LevelSet resources + +--*/ + +#pragma once + +#include "Common/3MF_ProgressMonitor.h" +#include "Common/Platform/NMR_XmlWriter.h" +#include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_ModelResource.h" +#include "Model/Classes/NMR_ModelVolumeData.h" + +#include "Model/Writer/NMR_ModelWriterNode_ModelBase.h" + +namespace NMR +{ + namespace implicit + { + class NodeTypes; + } + + class CModelLevelSetObject; + + class CModelWriterNode_LevelSet : public CModelWriterNode_ModelBase + { + + public: + CModelWriterNode_LevelSet() = delete; + CModelWriterNode_LevelSet(CModel * pModel, + CModelLevelSetObject * pLevelSet, + CXmlWriter * pXMLWriter, + PProgressMonitor pProgressMonitor); + + void writeToXML() override; + + private: + void writeLevelSetResources(); + void writeLevelSetResource(CModelLevelSetObject& levelSet); + + CModelLevelSetObject * m_pLevelSet = nullptr; + }; + +} diff --git a/Include/Model/Writer/NMR_ModelWriterNode_VolumeData.h b/Include/Model/Writer/NMR_ModelWriterNode_VolumeData.h new file mode 100644 index 000000000..9e20e0b93 --- /dev/null +++ b/Include/Model/Writer/NMR_ModelWriterNode_VolumeData.h @@ -0,0 +1,69 @@ +/*++ + +Copyright (C) 2024 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Writer node for VolumeData resources + +--*/ + +#pragma once + +#include "Common/3MF_ProgressMonitor.h" +#include "Common/Platform/NMR_XmlWriter.h" +#include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_ModelResource.h" +#include "Model/Classes/NMR_ModelVolumeData.h" + +#include "Model/Writer/NMR_ModelWriterNode_ModelBase.h" + +namespace NMR +{ + namespace implicit + { + class NodeTypes; + } + + class CModelWriterNode_VolumeData : public CModelWriterNode_ModelBase + { + + public: + CModelWriterNode_VolumeData() = delete; + CModelWriterNode_VolumeData(CModel * pModel, + CXmlWriter * pXMLWriter, + PProgressMonitor pProgressMonitor); + + + void writeToXML() override; + + void writeVolumeDataResource(CModelVolumeData & volumeData); + private: + void writeVolumeDataResources(); + void writeProperty(CVolumeDataProperty & property); + void writeColor(CVolumeDataColor & color); + + }; + +} diff --git a/Include/Model/Writer/v100/NMR_ModelWriterNode100_Mesh.h b/Include/Model/Writer/v100/NMR_ModelWriterNode100_Mesh.h index 74a5b832d..94715edcd 100644 --- a/Include/Model/Writer/v100/NMR_ModelWriterNode100_Mesh.h +++ b/Include/Model/Writer/v100/NMR_ModelWriterNode100_Mesh.h @@ -68,6 +68,7 @@ namespace NMR { nfBool m_bWriteMaterialExtension; nfBool m_bWriteBeamLatticeExtension; + nfBool m_bWriteVolumetricExtension; // Internal functions for an efficient and buffered output of raw XML data std::array m_VertexLine; @@ -120,7 +121,8 @@ namespace NMR { public: CModelWriterNode100_Mesh() = delete; CModelWriterNode100_Mesh(_In_ CModelMeshObject * pModelMeshObject, _In_ CXmlWriter * pXMLWriter, _In_ PProgressMonitor pProgressMonitor, - _In_ PMeshInformation_PropertyIndexMapping pPropertyIndexMapping, _In_ int nPosAfterDecPoint, _In_ nfBool bWriteMaterialExtension, _In_ nfBool m_bWriteBeamLatticeExtension); + _In_ PMeshInformation_PropertyIndexMapping pPropertyIndexMapping, _In_ int nPosAfterDecPoint, _In_ nfBool bWriteMaterialExtension, _In_ nfBool m_bWriteBeamLatticeExtension, + _In_ nfBool bWriteVolumetricExtension); virtual void writeToXML(); }; diff --git a/Include/Model/Writer/v100/NMR_ModelWriterNode100_Model.h b/Include/Model/Writer/v100/NMR_ModelWriterNode100_Model.h index 6ed375bb2..d4eecb5de 100644 --- a/Include/Model/Writer/v100/NMR_ModelWriterNode100_Model.h +++ b/Include/Model/Writer/v100/NMR_ModelWriterNode100_Model.h @@ -61,22 +61,44 @@ namespace NMR { nfBool m_bWriteObjects; nfBool m_bIsRootModel; nfBool m_bWriteCustomNamespaces; + nfBool m_bWriteVolumetricExtension; + nfBool m_bWriteImplicitExtension; - void writeModelMetaData(); + void writeModelMetaData(); void writeMetaData(_In_ PModelMetaData pMetaData); void writeMetaDataGroup(_In_ PModelMetaDataGroup pMetaDataGroup); void writeResources(); + void writeResource(CModelResource * pResource); + void writeBaseMaterials(); + void writeBaseMaterial( + CModelBaseMaterialResource* pBaseMaterial); void writeTextures2D(); + void writeTexture2D( + CModelTexture2DResource* pTexture2D); void writeColors(); + void writeColor( + CModelColorGroupResource* pColorGroup); void writeTex2Coords(); void writeCompositeMaterials(); void writeMultiProperties(); void writeMultiPropertyAttributes(_In_ CModelMultiPropertyGroupResource* pMultiPropertyGroup); void writeMultiPropertyMultiElements(_In_ CModelMultiPropertyGroupResource* pMultiPropertyGroup); + + void writeImage3Ds(); + void writeImage3D(CModelImage3D & pImage3D); + + void writeFunctionsFromImage3D(); + void writeFunctionFromImage3D(CModelFunctionFromImage3D & functionFromImage3D); + + void writeImplicitFunctions(); + void writeVolumeData(); + + void writeObjects(); + void writeObject(CModelObject & pObject); void writeBuild(); void writeSliceStacks(); diff --git a/Include/Model/Writer/v100/NMR_ResourceDependencySorter.h b/Include/Model/Writer/v100/NMR_ResourceDependencySorter.h new file mode 100644 index 000000000..2f83d54a3 --- /dev/null +++ b/Include/Model/Writer/v100/NMR_ResourceDependencySorter.h @@ -0,0 +1,65 @@ +/*++ + +Copyright (C) 2024 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_ResourcDependencySorter resolves the dependencies between resources by +sorting them topologically. +--*/ + +#pragma once + +#include + +#include "Common/Graph/DirectedGraph.h" +#include "Common/Graph/GraphAlgorithms.h" +#include "Model/Classes/NMR_Model.h" + +namespace NMR +{ + using TopologicalSortResult = std::vector; + + class CResourceDependencySorter + { + private: + common::graph::DirectedGraph buildGraph(); + void buildIndexMaps(); + + [[nodiscard]] PPackageResourceID indexToModelResourceID(size_t index) const; + [[nodiscard]] size_t modelResourceIDToIndex(PPackageResourceID resourceID) const; + + CModel * m_pModel; + + std::unordered_map m_indexToResourceID; + std::unordered_map m_resourceIDToIndex; + + public: + explicit CResourceDependencySorter(CModel * pModel); + TopologicalSortResult sort(); + + }; + +} // namespace NMR \ No newline at end of file diff --git a/SDK/CPackExamples/Cpp/CMakeLists.txt b/SDK/CPackExamples/Cpp/CMakeLists.txt index 64e493284..c9060c3a2 100644 --- a/SDK/CPackExamples/Cpp/CMakeLists.txt +++ b/SDK/CPackExamples/Cpp/CMakeLists.txt @@ -5,11 +5,11 @@ set(CMAKE_CXX_STANDARD 11) # Determine the platform and set lib3mf_DIR accordingly if(WIN32) # Path for Windows - set(lib3mf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib3mf-2.3.2-Windows/lib/cmake/lib3mf") + set(lib3mf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib3mf-$ENV{LIB3MF_VERSION}-Windows/lib/cmake/lib3mf") find_package(lib3mf REQUIRED COMPONENTS Cpp) elseif(APPLE) # Path for macOS (Darwin) - set(lib3mf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib3mf-2.3.2-Darwin/lib/cmake/lib3mf") + set(lib3mf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib3mf-$ENV{LIB3MF_VERSION}-Darwin/lib/cmake/lib3mf") find_package(lib3mf REQUIRED COMPONENTS Cpp) else() # Path for Linux (Here we check twice to test for Debian / RPM packages properly) @@ -17,7 +17,7 @@ else() # Check if the package was not found if(NOT lib3mf_FOUND) # lib3mf not found, so set lib3mf_DIR to the fallback directory - set(lib3mf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib3mf-2.3.2-Linux/lib/cmake/lib3mf") + set(lib3mf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib3mf-$ENV{LIB3MF_VERSION}-Linux/lib/cmake/lib3mf") # Find package (lib3mf) find_package(lib3mf REQUIRED COMPONENTS Cpp) endif() diff --git a/SDK/CPackExamples/CppDynamic/CMakeLists.txt b/SDK/CPackExamples/CppDynamic/CMakeLists.txt index 0e1a52a69..a484b3775 100644 --- a/SDK/CPackExamples/CppDynamic/CMakeLists.txt +++ b/SDK/CPackExamples/CppDynamic/CMakeLists.txt @@ -42,11 +42,11 @@ set(CMAKE_CXX_STANDARD 11) # Determine the platform and set lib3mf_DIR accordingly if(WIN32) # Path for Windows - set(lib3mf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib3mf-2.3.2-Windows/lib/cmake/lib3mf") + set(lib3mf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib3mf-$ENV{LIB3MF_VERSION}-Windows/lib/cmake/lib3mf") find_package(lib3mf REQUIRED COMPONENTS CppDynamic) elseif(APPLE) # Path for macOS (Darwin) - set(lib3mf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib3mf-2.3.2-Darwin/lib/cmake/lib3mf") + set(lib3mf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib3mf-$ENV{LIB3MF_VERSION}-Darwin/lib/cmake/lib3mf") find_package(lib3mf REQUIRED COMPONENTS CppDynamic) else() # Path for Linux (Here we check twice to test for Debian / RPM packages properly) @@ -54,7 +54,7 @@ else() # Check if the package was not found if(NOT lib3mf_FOUND) # lib3mf not found, so set lib3mf_DIR to the fallback directory - set(lib3mf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib3mf-2.3.2-Linux/lib/cmake/lib3mf") + set(lib3mf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib3mf-$ENV{LIB3MF_VERSION}-Linux/lib/cmake/lib3mf") # Find package (lib3mf) find_package(lib3mf REQUIRED COMPONENTS CppDynamic) endif() diff --git a/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/.NETCoreApp,Version=v2.0.AssemblyAttributes.cs b/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/.NETCoreApp,Version=v2.0.AssemblyAttributes.cs new file mode 100644 index 000000000..2d687849b --- /dev/null +++ b/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/.NETCoreApp,Version=v2.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v2.0", FrameworkDisplayName = ".NET Core 2.0")] diff --git a/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.AssemblyInfo.cs b/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.AssemblyInfo.cs new file mode 100644 index 000000000..3ea8e757a --- /dev/null +++ b/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Lib3MF_Example")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("Lib3MF_Example")] +[assembly: System.Reflection.AssemblyTitleAttribute("Lib3MF_Example")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.AssemblyInfoInputs.cache b/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.AssemblyInfoInputs.cache new file mode 100644 index 000000000..bacd5e307 --- /dev/null +++ b/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +8a586aaf8f6e1fbc04f0ea6c10eae84a68902461 diff --git a/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.GeneratedMSBuildEditorConfig.editorconfig b/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 000000000..79cc46485 --- /dev/null +++ b/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,3 @@ +is_global = true +build_property.RootNamespace = Lib3MF_Example +build_property.ProjectDir = D:\orj\projects\lib3mf\SDK\Examples\CSharp\ diff --git a/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.csproj.CoreCompileInputs.cache b/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.csproj.CoreCompileInputs.cache new file mode 100644 index 000000000..73ccc96a2 --- /dev/null +++ b/SDK/Examples/CSharp/obj/x64/Release/netcoreapp2.0/Lib3MF_Example.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +e4b7b7d442e93614080676c15eefb6837e777bea diff --git a/SDK/GenerateSDK_github.sh b/SDK/GenerateSDK_github.sh index 7e1db4b47..79d0543fa 100644 --- a/SDK/GenerateSDK_github.sh +++ b/SDK/GenerateSDK_github.sh @@ -30,7 +30,7 @@ mkdir -p $SDKARTIFACT/Lib || failed "Error creating Lib-folder" echo Copy binaries cp $LOCATION/lib3mf.dll/lib3mf.dll $SDKARTIFACT/Bin/ || failed "Error copying binary" cp $LOCATION/lib3mf.so/lib3mf.so.2 $SDKARTIFACT/Bin/lib3mf.so || failed "Error copying binary" -cp $LOCATION/lib3mf.dylib/lib3mf.2.3.2.0.dylib $SDKARTIFACT/Bin/lib3mf.dylib || failed "Error copying binary" +cp $LOCATION/lib3mf.dylib/lib3mf.$LIB3MF_VERSION.0.dylib $SDKARTIFACT/Bin/lib3mf.dylib || failed "Error copying binary" cp $LOCATION/lib3mf.lib/lib3mf.lib $SDKARTIFACT/Lib/ || failed "Error copying binary" echo Generate version.txt diff --git a/Source/API/lib3mf_absnode.cpp b/Source/API/lib3mf_absnode.cpp new file mode 100644 index 000000000..8b842d69c --- /dev/null +++ b/Source/API/lib3mf_absnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CAbsNode + +*/ + +#include "lib3mf_absnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CAbsNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CAbsNode::CAbsNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode(pImplicitNode) +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_additionnode.cpp b/Source/API/lib3mf_additionnode.cpp new file mode 100644 index 000000000..a4fd9f02d --- /dev/null +++ b/Source/API/lib3mf_additionnode.cpp @@ -0,0 +1,48 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CAdditionNode + +*/ + +#include "lib3mf_additionnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CAdditionNode +**************************************************************************************************************************/ + +CAdditionNode::CAdditionNode( + NMR::PModelImplicitNode pImplicitNode) + : CTwoInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_arccosnode.cpp b/Source/API/lib3mf_arccosnode.cpp new file mode 100644 index 000000000..289cca364 --- /dev/null +++ b/Source/API/lib3mf_arccosnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CArcCosNode + +*/ + +#include "lib3mf_arccosnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CArcCosNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CArcCosNode::CArcCosNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_arcsinnode.cpp b/Source/API/lib3mf_arcsinnode.cpp new file mode 100644 index 000000000..4f415168d --- /dev/null +++ b/Source/API/lib3mf_arcsinnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CArcSinNode + +*/ + +#include "lib3mf_arcsinnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CArcSinNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CArcSinNode::CArcSinNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_arctan2node.cpp b/Source/API/lib3mf_arctan2node.cpp new file mode 100644 index 000000000..3401ab6b4 --- /dev/null +++ b/Source/API/lib3mf_arctan2node.cpp @@ -0,0 +1,48 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CArcTan2Node + +*/ + +#include "lib3mf_arctan2node.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. +#include "lib3mf_twoinputnode.hpp" + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CArcTan2Node +**************************************************************************************************************************/ + +Lib3MF::Impl::CArcTan2Node::CArcTan2Node(NMR::PModelImplicitNode pImplicitNode) +: CTwoInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_arctannode.cpp b/Source/API/lib3mf_arctannode.cpp new file mode 100644 index 000000000..2439cdd83 --- /dev/null +++ b/Source/API/lib3mf_arctannode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CArcTanNode + +*/ + +#include "lib3mf_arctannode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CArcTanNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CArcTanNode::CArcTanNode(NMR::PModelImplicitNode pImplicitNode) +: COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_attachment.cpp b/Source/API/lib3mf_attachment.cpp index 9e8dfcfac..63c068612 100644 --- a/Source/API/lib3mf_attachment.cpp +++ b/Source/API/lib3mf_attachment.cpp @@ -161,3 +161,8 @@ void CAttachment::ReadFromBuffer(const Lib3MF_uint64 nBufferBufferSize, const Li m_pModelAttachment->setStream(pImportStream); } + +NMR::PModelAttachment CAttachment::getModelAttachment() +{ + return m_pModelAttachment; +} diff --git a/Source/API/lib3mf_beamlattice.cpp b/Source/API/lib3mf_beamlattice.cpp index 53942b71c..e2c9a8ecf 100644 --- a/Source/API/lib3mf_beamlattice.cpp +++ b/Source/API/lib3mf_beamlattice.cpp @@ -139,7 +139,7 @@ void CBeamLattice::GetBallOptions (eLib3MFBeamLatticeBallMode & eBallMode, Lib3M void CBeamLattice::SetBallOptions (const eLib3MFBeamLatticeBallMode eBallMode, const Lib3MF_double dBallRadius) { - if (eBallMode == eLib3MFBeamLatticeBallMode::None || dBallRadius > 0.0) { + if (eBallMode == eLib3MFBeamLatticeBallMode::BeamLatticeBallModeNone || dBallRadius > 0.0) { m_mesh.setBeamLatticeBallMode((NMR::eModelBeamLatticeBallMode)eBallMode); m_mesh.setDefaultBallRadius(dBallRadius); } @@ -307,7 +307,7 @@ sLib3MFBall CBeamLattice::GetBall (const Lib3MF_uint32 nIndex) return ball; } else if (ballMode == eBeamLatticeBallMode::All) { - Lib3MF_uint32 ballNodeIndex = m_mesh.getOccupiedNode(nIndex)->m_index; + Lib3MF_int32 ballNodeIndex = m_mesh.getOccupiedNode(nIndex)->m_index; Lib3MF_uint32 meshBallCount = m_mesh.getBallCount(); for (Lib3MF_uint32 iBall = 0; iBall < meshBallCount; iBall++) { @@ -377,7 +377,7 @@ void CBeamLattice::SetBall (const Lib3MF_uint32 nIndex, const sLib3MFBall BallIn meshBall->m_radius = BallInfo.m_Radius; } else if (ballMode == eBeamLatticeBallMode::All) { - Lib3MF_uint32 ballNodeIndex = m_mesh.getOccupiedNode(nIndex)->m_index; + Lib3MF_int32 ballNodeIndex = m_mesh.getOccupiedNode(nIndex)->m_index; Lib3MF_uint32 meshBallCount = m_mesh.getBallCount(); for (Lib3MF_uint32 iBall = 0; iBall < meshBallCount; iBall++) { NMR::MESHBALL * meshBall = m_mesh.getBall(iBall); diff --git a/Source/API/lib3mf_ceilnode.cpp b/Source/API/lib3mf_ceilnode.cpp new file mode 100644 index 000000000..263aa0e06 --- /dev/null +++ b/Source/API/lib3mf_ceilnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CCeilNode + +*/ + +#include "lib3mf_ceilnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CCeilNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CCeilNode::CCeilNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_clampnode.cpp b/Source/API/lib3mf_clampnode.cpp new file mode 100644 index 000000000..b0fdfb2fe --- /dev/null +++ b/Source/API/lib3mf_clampnode.cpp @@ -0,0 +1,57 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CClampNode + +*/ + +#include "lib3mf_clampnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CClampNode +**************************************************************************************************************************/ + +IImplicitPort* CClampNode::GetInputMin() +{ + return FindInputOrThrow(NMR::InputNames::min); +} + +IImplicitPort* CClampNode::GetInputMax() +{ + return FindInputOrThrow(NMR::InputNames::max); +} + +Lib3MF::Impl::CClampNode::CClampNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_componentsobject.cpp b/Source/API/lib3mf_componentsobject.cpp index 6c0658b5e..2c6530e05 100644 --- a/Source/API/lib3mf_componentsobject.cpp +++ b/Source/API/lib3mf_componentsobject.cpp @@ -126,3 +126,8 @@ bool CComponentsObject::IsComponentsObject() return true; } +bool CComponentsObject::IsLevelSetObject() +{ + return false; +} + diff --git a/Source/API/lib3mf_composematrixnode.cpp b/Source/API/lib3mf_composematrixnode.cpp new file mode 100644 index 000000000..517b7b7a1 --- /dev/null +++ b/Source/API/lib3mf_composematrixnode.cpp @@ -0,0 +1,133 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CComposeMatrixNode + +*/ + +#include "lib3mf_composematrixnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CComposeMatrixNode +**************************************************************************************************************************/ + +IImplicitPort * CComposeMatrixNode::GetInputM00() +{ + return FindInputOrThrow(NMR::InputNames::m00); +} + +IImplicitPort * CComposeMatrixNode::GetInputM01() +{ + return FindInputOrThrow(NMR::InputNames::m01); +} + +IImplicitPort * CComposeMatrixNode::GetInputM02() +{ + return FindInputOrThrow(NMR::InputNames::m02); +} + +IImplicitPort * CComposeMatrixNode::GetInputM03() +{ + return FindInputOrThrow(NMR::InputNames::m03); +} + +IImplicitPort * CComposeMatrixNode::GetInputM10() +{ + return FindInputOrThrow(NMR::InputNames::m10); +} + +IImplicitPort * CComposeMatrixNode::GetInputM11() +{ + return FindInputOrThrow(NMR::InputNames::m11); +} + +IImplicitPort * CComposeMatrixNode::GetInputM12() +{ + return FindInputOrThrow(NMR::InputNames::m12); +} + +IImplicitPort * CComposeMatrixNode::GetInputM13() +{ + return FindInputOrThrow(NMR::InputNames::m13); +} + +IImplicitPort * CComposeMatrixNode::GetInputM20() +{ + return FindInputOrThrow(NMR::InputNames::m20); +} + +IImplicitPort * CComposeMatrixNode::GetInputM21() +{ + return FindInputOrThrow(NMR::InputNames::m21); +} + +IImplicitPort * CComposeMatrixNode::GetInputM22() +{ + return FindInputOrThrow(NMR::InputNames::m22); +} + +IImplicitPort * CComposeMatrixNode::GetInputM23() +{ + return FindInputOrThrow(NMR::InputNames::m23); +} + +IImplicitPort * CComposeMatrixNode::GetInputM30() +{ + return FindInputOrThrow(NMR::InputNames::m30); +} + +IImplicitPort * CComposeMatrixNode::GetInputM31() +{ + return FindInputOrThrow(NMR::InputNames::m31); +} + +IImplicitPort * CComposeMatrixNode::GetInputM32() +{ + return FindInputOrThrow(NMR::InputNames::m32); +} + +IImplicitPort * CComposeMatrixNode::GetInputM33() +{ + return FindInputOrThrow(NMR::InputNames::m33); +} + +IImplicitPort * CComposeMatrixNode::GetOutputResult() +{ + return FindOutputOrThrow(NMR::OutputNames::result); +} + +Lib3MF::Impl::CComposeMatrixNode::CComposeMatrixNode( + NMR::PModelImplicitNode pImplicitNode) + : CImplicitNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_composevectornode.cpp b/Source/API/lib3mf_composevectornode.cpp new file mode 100644 index 000000000..bbef8adfc --- /dev/null +++ b/Source/API/lib3mf_composevectornode.cpp @@ -0,0 +1,68 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CComposeVectorNode + +*/ + +#include "lib3mf_composevectornode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CComposeVectorNode +**************************************************************************************************************************/ + +IImplicitPort * CComposeVectorNode::GetInputX() +{ + return FindInputOrThrow(NMR::InputNames::x); +} + +IImplicitPort * CComposeVectorNode::GetInputY() +{ + return FindInputOrThrow(NMR::InputNames::y); +} + +IImplicitPort * CComposeVectorNode::GetInputZ() +{ + return FindInputOrThrow(NMR::InputNames::z); +} + +IImplicitPort * CComposeVectorNode::GetOutputResult() +{ + return FindOutputOrThrow(NMR::OutputNames::result); +} + +Lib3MF::Impl::CComposeVectorNode::CComposeVectorNode( + NMR::PModelImplicitNode pImplicitNode) + : CImplicitNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_constantnode.cpp b/Source/API/lib3mf_constantnode.cpp new file mode 100644 index 000000000..caa3a40a3 --- /dev/null +++ b/Source/API/lib3mf_constantnode.cpp @@ -0,0 +1,64 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CConstantNode + +*/ + +#include "lib3mf_constantnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CConstantNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CConstantNode::CConstantNode( + NMR::PModelImplicitNode pImplicitNode) + : CImplicitNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} + +void CConstantNode::SetConstant(const Lib3MF_double dValue) +{ + m_pImplicitNode->setConstant(dValue); +} + +Lib3MF_double CConstantNode::GetConstant() +{ + return m_pImplicitNode->getConstant(); +} + +IImplicitPort * CConstantNode::GetOutputValue() +{ + return FindOutputOrThrow(NMR::OutputNames::value); +} + diff --git a/Source/API/lib3mf_constmatnode.cpp b/Source/API/lib3mf_constmatnode.cpp new file mode 100644 index 000000000..04e9ddab0 --- /dev/null +++ b/Source/API/lib3mf_constmatnode.cpp @@ -0,0 +1,64 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CConstMatNode + +*/ + +#include "lib3mf_constmatnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CConstMatNode +**************************************************************************************************************************/ + +CConstMatNode::CConstMatNode( + NMR::PModelImplicitNode pImplicitNode) +: CImplicitNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} + +void CConstMatNode::SetMatrix(const Lib3MF::sMatrix4x4 Value) +{ + m_pImplicitNode->setMatrix(Value); +} + +Lib3MF::sMatrix4x4 CConstMatNode::GetMatrix() +{ + return m_pImplicitNode->getMatrix(); +} + +IImplicitPort * CConstMatNode::GetOutputMatrix() +{ + return FindOutputOrThrow(NMR::OutputNames::matrix); +} + diff --git a/Source/API/lib3mf_constvecnode.cpp b/Source/API/lib3mf_constvecnode.cpp new file mode 100644 index 000000000..24d004f92 --- /dev/null +++ b/Source/API/lib3mf_constvecnode.cpp @@ -0,0 +1,64 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CConstVecNode + +*/ + +#include "lib3mf_constvecnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CConstVecNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CConstVecNode::CConstVecNode( + NMR::PModelImplicitNode pImplicitNode) + : CImplicitNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} + +void CConstVecNode::SetVector(const Lib3MF::sVector Value) +{ + m_pImplicitNode->setVector(Value); +} + +Lib3MF::sVector CConstVecNode::GetVector() +{ + return m_pImplicitNode->getVector(); +} + +IImplicitPort * CConstVecNode::GetOutputVector() +{ + return FindOutputOrThrow(NMR::OutputNames::vector); +} + diff --git a/Source/API/lib3mf_coshnode.cpp b/Source/API/lib3mf_coshnode.cpp new file mode 100644 index 000000000..39f09a2d0 --- /dev/null +++ b/Source/API/lib3mf_coshnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CCoshNode + +*/ + +#include "lib3mf_coshnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CCoshNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CCoshNode::CCoshNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_cosnode.cpp b/Source/API/lib3mf_cosnode.cpp new file mode 100644 index 000000000..cf867b530 --- /dev/null +++ b/Source/API/lib3mf_cosnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CCosNode + +*/ + +#include "lib3mf_cosnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CCosNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CCosNode::CCosNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_crossnode.cpp b/Source/API/lib3mf_crossnode.cpp new file mode 100644 index 000000000..ec4a65ef2 --- /dev/null +++ b/Source/API/lib3mf_crossnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CCrossNode + +*/ + +#include "lib3mf_crossnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CCrossNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CCrossNode::CCrossNode(NMR::PModelImplicitNode pImplicitNode) + : CTwoInputNode{pImplicitNode} + { + CImplicitNode::m_pImplicitNode = pImplicitNode; + } diff --git a/Source/API/lib3mf_decomposevectornode.cpp b/Source/API/lib3mf_decomposevectornode.cpp new file mode 100644 index 000000000..e4e2d9c2b --- /dev/null +++ b/Source/API/lib3mf_decomposevectornode.cpp @@ -0,0 +1,68 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CDecomposeVectorNode + +*/ + +#include "lib3mf_decomposevectornode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CDecomposeVectorNode +**************************************************************************************************************************/ + +IImplicitPort * CDecomposeVectorNode::GetInputA() +{ + return FindInput("A"); +} + +IImplicitPort * CDecomposeVectorNode::GetOutputX() +{ + return FindOutput("x"); +} + +IImplicitPort * CDecomposeVectorNode::GetOutputY() +{ + return FindOutput("y"); +} + +IImplicitPort * CDecomposeVectorNode::GetOutputZ() +{ + return FindOutput("z"); +} + +Lib3MF::Impl::CDecomposeVectorNode::CDecomposeVectorNode( + NMR::PModelImplicitNode pImplicitNode) + : CImplicitNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_divisionnode.cpp b/Source/API/lib3mf_divisionnode.cpp new file mode 100644 index 000000000..6b517d3b3 --- /dev/null +++ b/Source/API/lib3mf_divisionnode.cpp @@ -0,0 +1,48 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CDivisionNode + +*/ + +#include "lib3mf_divisionnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CDivisionNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CDivisionNode::CDivisionNode( + NMR::PModelImplicitNode pImplicitNode) + : CTwoInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_dotnode.cpp b/Source/API/lib3mf_dotnode.cpp new file mode 100644 index 000000000..7ba816cd0 --- /dev/null +++ b/Source/API/lib3mf_dotnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CDotNode + +*/ + +#include "lib3mf_dotnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CDotNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CDotNode::CDotNode(NMR::PModelImplicitNode pImplicitNode) +: CTwoInputNode{pImplicitNode} + { + CImplicitNode::m_pImplicitNode = pImplicitNode; + } diff --git a/Source/API/lib3mf_expnode.cpp b/Source/API/lib3mf_expnode.cpp new file mode 100644 index 000000000..fb266e4b0 --- /dev/null +++ b/Source/API/lib3mf_expnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CExpNode + +*/ + +#include "lib3mf_expnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CExpNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CExpNode::CExpNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_floornode.cpp b/Source/API/lib3mf_floornode.cpp new file mode 100644 index 000000000..8b97baa6e --- /dev/null +++ b/Source/API/lib3mf_floornode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CFloorNode + +*/ + +#include "lib3mf_floornode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CFloorNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CFloorNode::CFloorNode(NMR::PModelImplicitNode pImplicitNode) +: COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_fmodnode.cpp b/Source/API/lib3mf_fmodnode.cpp new file mode 100644 index 000000000..731ad48de --- /dev/null +++ b/Source/API/lib3mf_fmodnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CFmodNode + +*/ + +#include "lib3mf_fmodnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CFmodNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CFmodNode::CFmodNode(NMR::PModelImplicitNode pImplicitNode) + : CTwoInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_fractnode.cpp b/Source/API/lib3mf_fractnode.cpp new file mode 100644 index 000000000..c3e0ff2c2 --- /dev/null +++ b/Source/API/lib3mf_fractnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CFractNode + +*/ + +#include "lib3mf_fractnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CFractNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CFractNode::CFractNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_function.cpp b/Source/API/lib3mf_function.cpp new file mode 100644 index 000000000..182581437 --- /dev/null +++ b/Source/API/lib3mf_function.cpp @@ -0,0 +1,126 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CFunction + +*/ + +#include "lib3mf_function.hpp" +#include "lib3mf_interfaceexception.hpp" +#include "lib3mf_implicitport.hpp" +#include "lib3mf_implicitportiterator.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CFunction +**************************************************************************************************************************/ + +NMR::CModelFunction* Lib3MF::Impl::CFunction::function() +{ + NMR::CModelFunction* pFunction = dynamic_cast(resource().get()); + if (pFunction == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDOBJECT); + + return pFunction; +} + +Lib3MF::Impl::CFunction::CFunction(NMR::PModelResource pResource) + : CResource(pResource) +{ +} + +std::string CFunction::GetDisplayName() +{ + return function()->getDisplayName(); +} + +void CFunction::SetDisplayName(const std::string& sDisplayName) +{ + function()->setDisplayName(sDisplayName); +} + +IImplicitPort* CFunction::AddInput(const std::string& sIdentifier, + const std::string& sDisplayName, + const Lib3MF::eImplicitPortType eType) +{ + + return new CImplicitPort(function()->addInput(sIdentifier, sDisplayName, eType)); +} + +IImplicitPortIterator* CFunction::GetInputs() +{ + return new CImplicitPortIterator(function()->getInputs()); +} + +void CFunction::RemoveInput(IImplicitPort* pInput) +{ + auto inputs = function()->getInputs(); + auto it = std::find_if(inputs->begin(), inputs->end(), [pInput](const NMR::PModelImplicitPort& port) { + return port->getIdentifier() == pInput->GetIdentifier(); + }); + if (it != inputs->end()) + inputs->erase(it); + else + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); +} + +IImplicitPort* CFunction::AddOutput(const std::string& sIdentifier, + const std::string& sDisplayName, + const Lib3MF::eImplicitPortType eType) +{ + return new CImplicitPort(function()->addOutput(sIdentifier, sDisplayName, eType)); +} + +IImplicitPortIterator* CFunction::GetOutputs() +{ + return new CImplicitPortIterator(function()->getOutputs()); +} + +void CFunction::RemoveOutput(IImplicitPort* pOutput) +{ + auto outputs = function()->getOutputs(); + auto it = std::find_if(outputs->begin(), outputs->end(), [pOutput](const NMR::PModelImplicitPort& port) { + return port->getIdentifier() == pOutput->GetIdentifier(); + }); + if (it != outputs->end()) + outputs->erase(it); + else + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); +} + +IImplicitPort* CFunction::FindInput(const std::string& sIdentifier) +{ + return new CImplicitPort(function()->findInput(sIdentifier)); +} + +IImplicitPort* CFunction::FindOutput(const std::string& sIdentifier) +{ + return new CImplicitPort(function()->findOutput(sIdentifier)); +} diff --git a/Source/API/lib3mf_functioncallnode.cpp b/Source/API/lib3mf_functioncallnode.cpp new file mode 100644 index 000000000..639010af4 --- /dev/null +++ b/Source/API/lib3mf_functioncallnode.cpp @@ -0,0 +1,53 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CFunctionCallNode + +*/ + +#include "lib3mf_functioncallnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CFunctionCallNode +**************************************************************************************************************************/ + +CFunctionCallNode::CFunctionCallNode( + NMR::PModelImplicitNode pImplicitNode) + : CImplicitNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} + +IImplicitPort * CFunctionCallNode::GetInputFunctionID() +{ + return FindInputOrThrow(NMR::InputNames::functionID); +} diff --git a/Source/API/lib3mf_functionfromimage3d.cpp b/Source/API/lib3mf_functionfromimage3d.cpp new file mode 100644 index 000000000..21cb4ce93 --- /dev/null +++ b/Source/API/lib3mf_functionfromimage3d.cpp @@ -0,0 +1,128 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CFunctionFromImage3D + +*/ + +#include "lib3mf_functionfromimage3d.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. +#include "lib3mf_image3d.hpp" + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CFunctionFromImage3D +**************************************************************************************************************************/ + +IImage3D * CFunctionFromImage3D::GetImage3D() +{ + auto id = functionfromimage3d()->getImage3DUniqueResourceID(); + auto image = model()->findImage3D(id); + + + if(!image) + throw ELib3MFInterfaceException(NMR_ERROR_INVALIDMODELRESOURCE); + + return new CImage3D(image); +} + +NMR::CModelFunctionFromImage3D * Lib3MF::Impl::CFunctionFromImage3D::functionfromimage3d() +{ + auto pFunctionFromImage3D = std::dynamic_pointer_cast(resource()); + + if(!pFunctionFromImage3D) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDOBJECT, "Resource is not a FunctionFromImage3D Object"); + } + + return pFunctionFromImage3D.get(); +} + +Lib3MF::Impl::CFunctionFromImage3D::CFunctionFromImage3D(NMR::PModelResource pResource) + : CResource(pResource) + , CFunction(pResource) +{ +} + +void CFunctionFromImage3D::SetImage3D(IImage3D * pImage3D) +{ + if (pImage3D == nullptr) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + functionfromimage3d()->setImage3DUniqueResourceID(pImage3D->GetUniqueResourceID()); +} + +void CFunctionFromImage3D::SetFilter(const Lib3MF::eTextureFilter eFilter) +{ + functionfromimage3d()->setFilter((NMR::eModelTextureFilter) eFilter); +} + +Lib3MF::eTextureFilter CFunctionFromImage3D::GetFilter() +{ + return (Lib3MF::eTextureFilter) functionfromimage3d()->getFilter(); +} + +void CFunctionFromImage3D::SetTileStyles(const Lib3MF::eTextureTileStyle eTileStyleU, + const Lib3MF::eTextureTileStyle eTileStyleV, + const Lib3MF::eTextureTileStyle eTileStyleW) +{ + functionfromimage3d()->setTileStyleU((NMR::eModelTextureTileStyle) eTileStyleU); + functionfromimage3d()->setTileStyleV((NMR::eModelTextureTileStyle) eTileStyleV); + functionfromimage3d()->setTileStyleW((NMR::eModelTextureTileStyle) eTileStyleW); +} + +void CFunctionFromImage3D::GetTileStyles(Lib3MF::eTextureTileStyle & eTileStyleU, + Lib3MF::eTextureTileStyle & eTileStyleV, + Lib3MF::eTextureTileStyle & eTileStyleW) +{ + eTileStyleU = (Lib3MF::eTextureTileStyle) functionfromimage3d()->getTileStyleU(); + eTileStyleV = (Lib3MF::eTextureTileStyle) functionfromimage3d()->getTileStyleV(); + eTileStyleW = (Lib3MF::eTextureTileStyle) functionfromimage3d()->getTileStyleW(); +} + +Lib3MF_double CFunctionFromImage3D::GetOffset() +{ + return functionfromimage3d()->getOffset(); +} + +void CFunctionFromImage3D::SetOffset(const Lib3MF_double dOffset) +{ + functionfromimage3d()->setOffset(dOffset); +} + +Lib3MF_double CFunctionFromImage3D::GetScale() +{ + return functionfromimage3d()->getScale(); +} + +void CFunctionFromImage3D::SetScale(const Lib3MF_double dScale) +{ + functionfromimage3d()->setScale(dScale); +} diff --git a/Source/API/lib3mf_functioniterator.cpp b/Source/API/lib3mf_functioniterator.cpp new file mode 100644 index 000000000..36408a72c --- /dev/null +++ b/Source/API/lib3mf_functioniterator.cpp @@ -0,0 +1,51 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CFunctionIterator + +*/ + +#include "lib3mf_functioniterator.hpp" +#include "lib3mf_interfaceexception.hpp" +#include "lib3mf_implicitfunction.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CFunctionIterator +**************************************************************************************************************************/ + +IFunction * CFunctionIterator::GetCurrentFunction() +{ + auto currentFunction = dynamic_cast(GetCurrent()); + if (currentFunction == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + return currentFunction; +} + diff --git a/Source/API/lib3mf_functionreference.cpp b/Source/API/lib3mf_functionreference.cpp new file mode 100644 index 000000000..b9e0da67a --- /dev/null +++ b/Source/API/lib3mf_functionreference.cpp @@ -0,0 +1,106 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CFunctionReference + +*/ + +#include "lib3mf_functionreference.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. +#include "lib3mf_utils.hpp" + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CFunctionReference +**************************************************************************************************************************/ + +Lib3MF_uint32 CFunctionReference::GetFunctionResourceID() +{ + return m_pFunctionReference->getFunctionResourceID(); +} + +void CFunctionReference::SetFunctionResourceID( + const Lib3MF_uint32 nUniqueResourceID) +{ + m_pFunctionReference->setFunctionResourceID(nUniqueResourceID); +} + +CFunctionReference::CFunctionReference( + NMR::PFunctionReference pFunctionReference) + : m_pFunctionReference(pFunctionReference) +{ +} + +void CFunctionReference::SetTransform( + const Lib3MF::sTransform Transform) +{ + m_pFunctionReference->setTransform(TransformToMatrix(Transform)); +} + + +Lib3MF::sTransform CFunctionReference::GetTransform() +{ + NMR::NMATRIX3 const matrix = m_pFunctionReference->getTransform(); + return MatrixToTransform(matrix); +} + +//std::string GetChannelName() +std::string CFunctionReference::GetChannelName() +{ + return m_pFunctionReference->getChannelName(); +} + +void CFunctionReference::SetChannelName( + const std::string & sChannelName) +{ + m_pFunctionReference->setChannelName(sChannelName); +} + +void CFunctionReference::SetMinFeatureSize( + const Lib3MF_double dMinFeatureSize) +{ + m_pFunctionReference->setMinFeatureSize(dMinFeatureSize); +} + +Lib3MF_double CFunctionReference::GetMinFeatureSize() +{ + return m_pFunctionReference->getMinFeatureSize(); +} + +void CFunctionReference::SetFallBackValue( + const Lib3MF_double dFallBackValue) +{ + m_pFunctionReference->setFallBackValue(dFallBackValue); +} + +Lib3MF_double CFunctionReference::GetFallBackValue() +{ + return m_pFunctionReference->getFallBackValue(); +} \ No newline at end of file diff --git a/Source/API/lib3mf_image3d.cpp b/Source/API/lib3mf_image3d.cpp new file mode 100644 index 000000000..01a02ce8d --- /dev/null +++ b/Source/API/lib3mf_image3d.cpp @@ -0,0 +1,70 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CImage3D + +*/ + +#include "lib3mf_image3d.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. +#include "Model/Classes/NMR_ModelImageStack.h" + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CImage3D +**************************************************************************************************************************/ + +CImage3D::CImage3D(NMR::PModelResource pResource) + :CResource(pResource) +{} + +NMR::CModelImage3D* CImage3D::image3D() +{ + NMR::CModelImage3D* pImage3D = dynamic_cast (resource().get()); + if (pImage3D == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_RESOURCENOTFOUND); + + return pImage3D; +} + +std::string CImage3D::GetName() +{ + return image3D()->getName(); +} + +void CImage3D::SetName(const std::string & sName) +{ + image3D()->setName(sName); +} + +bool CImage3D::IsImageStack() +{ + return (dynamic_cast(image3D()) != nullptr); +} + diff --git a/Source/API/lib3mf_image3diterator.cpp b/Source/API/lib3mf_image3diterator.cpp new file mode 100644 index 000000000..fc8d7e15c --- /dev/null +++ b/Source/API/lib3mf_image3diterator.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CImage3DIterator + +*/ + +#include "lib3mf_image3diterator.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CImage3DIterator +**************************************************************************************************************************/ + +IImage3D * CImage3DIterator::GetCurrentImage3D() +{ + return dynamic_cast(GetCurrent()); +} + diff --git a/Source/API/lib3mf_imagestack.cpp b/Source/API/lib3mf_imagestack.cpp new file mode 100644 index 000000000..9eeaa2436 --- /dev/null +++ b/Source/API/lib3mf_imagestack.cpp @@ -0,0 +1,117 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CImageStack + +*/ + +#include "lib3mf_imagestack.hpp" +#include "lib3mf_interfaceexception.hpp" +#include "lib3mf_attachment.hpp" + +#include "Common/Platform/NMR_ImportStream_Shared_Memory.h" +#include "Common/Platform/NMR_ImportStream_Unique_Memory.h" +#include "Common/Platform/NMR_ImportStream_Native.h" + +#include "Common/NMR_StringUtils.h" + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CImageStack +**************************************************************************************************************************/ + +CImageStack::CImageStack(NMR::PModelImageStack pModelImageStack) + :CResource(pModelImageStack), CImage3D(pModelImageStack), m_pModelImageStack(pModelImageStack) +{ +} + + +Lib3MF_uint32 CImageStack::GetRowCount() +{ + return m_pModelImageStack->getRowCount(); +} + +void CImageStack::SetRowCount(const Lib3MF_uint32 nRowCount) +{ + m_pModelImageStack->setRowCount(nRowCount); +} + +Lib3MF_uint32 CImageStack::GetColumnCount() +{ + return m_pModelImageStack->getColumnCount(); +} + +void CImageStack::SetColumnCount(const Lib3MF_uint32 nColumnCount) +{ + m_pModelImageStack->setColumnCount(nColumnCount); +} + +Lib3MF_uint32 CImageStack::GetSheetCount() +{ + return m_pModelImageStack->getSheetCount(); +} + +IAttachment * CImageStack::GetSheet(const Lib3MF_uint32 nIndex) +{ + auto pAttachment = m_pModelImageStack->getSheet(nIndex); + return new CAttachment(pAttachment); +} + +void CImageStack::SetSheet(const Lib3MF_uint32 nIndex, IAttachment* pSheet) +{ + if (pSheet == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + + CAttachment* pAttachment = dynamic_cast (pSheet); + if (pAttachment == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); + + m_pModelImageStack->setSheet(nIndex, pAttachment->getModelAttachment()); +} + +IAttachment * CImageStack::CreateEmptySheet(const Lib3MF_uint32 nIndex, const std::string & sPath) +{ + NMR::PImportStream pStream = std::make_shared(); + auto pAttachment = m_pModelImageStack->createSheet(nIndex, sPath, pStream); + return new CAttachment(pAttachment); +} + +IAttachment * CImageStack::CreateSheetFromBuffer(const Lib3MF_uint32 nIndex, const std::string & sPath, const Lib3MF_uint64 nDataBufferSize, const Lib3MF_uint8 * pDataBuffer) +{ + NMR::PImportStream pStream = std::make_shared(pDataBuffer, nDataBufferSize); + auto pAttachment = m_pModelImageStack->createSheet(nIndex, sPath, pStream); + return new CAttachment(pAttachment); +} + +IAttachment * CImageStack::CreateSheetFromFile(const Lib3MF_uint32 nIndex, const std::string & sPath, const std::string & sFileName) +{ + std::wstring sUTF16FileName = NMR::fnUTF8toUTF16(sFileName); + NMR::PImportStream pFileStream = std::make_shared(sUTF16FileName.c_str()); + auto pAttachment = m_pModelImageStack->createSheet(nIndex, sPath, pFileStream->copyToMemory()); + return new CAttachment(pAttachment); +} + diff --git a/Source/API/lib3mf_implicitfunction.cpp b/Source/API/lib3mf_implicitfunction.cpp new file mode 100644 index 000000000..85f735177 --- /dev/null +++ b/Source/API/lib3mf_implicitfunction.cpp @@ -0,0 +1,719 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CImplicitFunction + +*/ + +#include "lib3mf_implicitfunction.hpp" + +#include "lib3mf_absnode.hpp" +#include "lib3mf_additionnode.hpp" +#include "lib3mf_arccosnode.hpp" +#include "lib3mf_arcsinnode.hpp" +#include "lib3mf_arctan2node.hpp" +#include "lib3mf_ceilnode.hpp" +#include "lib3mf_clampnode.hpp" +#include "lib3mf_composematrixnode.hpp" +#include "lib3mf_composevectornode.hpp" +#include "lib3mf_constantnode.hpp" +#include "lib3mf_constmatnode.hpp" +#include "lib3mf_constvecnode.hpp" +#include "lib3mf_coshnode.hpp" +#include "lib3mf_cosnode.hpp" +#include "lib3mf_crossnode.hpp" +#include "lib3mf_decomposevectornode.hpp" +#include "lib3mf_divisionnode.hpp" +#include "lib3mf_dotnode.hpp" +#include "lib3mf_expnode.hpp" +#include "lib3mf_floornode.hpp" +#include "lib3mf_fmodnode.hpp" +#include "lib3mf_fractnode.hpp" +#include "lib3mf_functioncallnode.hpp" +#include "lib3mf_implicitnode.hpp" +#include "lib3mf_implicitport.hpp" +#include "lib3mf_interfaceexception.hpp" +#include "lib3mf_inversenode.hpp" +#include "lib3mf_lengthnode.hpp" +#include "lib3mf_log10node.hpp" +#include "lib3mf_log2node.hpp" +#include "lib3mf_lognode.hpp" +#include "lib3mf_matrixfromcolumnsnode.hpp" +#include "lib3mf_matrixfromrowsnode.hpp" +#include "lib3mf_matvecmultiplicationnode.hpp" +#include "lib3mf_maxnode.hpp" +#include "lib3mf_meshnode.hpp" +#include "lib3mf_minnode.hpp" +#include "lib3mf_multiplicationnode.hpp" +#include "lib3mf_pownode.hpp" +#include "lib3mf_resourceidnode.hpp" +#include "lib3mf_roundnode.hpp" +#include "lib3mf_selectnode.hpp" +#include "lib3mf_signnode.hpp" +#include "lib3mf_sinhnode.hpp" +#include "lib3mf_sinnode.hpp" +#include "lib3mf_sqrtnode.hpp" +#include "lib3mf_subtractionnode.hpp" +#include "lib3mf_tanhnode.hpp" +#include "lib3mf_tannode.hpp" +#include "lib3mf_transposenode.hpp" +#include "lib3mf_unsignedmeshnode.hpp" +#include "lib3mf_vectorfromscalarnode.hpp" + +// Include custom headers here. +#include "lib3mf_implicitportiterator.hpp" +#include "lib3mf_nodeiterator.hpp" + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CImplicitFunction +**************************************************************************************************************************/ + +NMR::CModelImplicitFunction* CImplicitFunction::function() +{ + NMR::CModelImplicitFunction* pFunction = + dynamic_cast(resource().get()); + if(pFunction == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDOBJECT); + + return pFunction; +} + +CImplicitFunction::CImplicitFunction(NMR::PModelResource pResource) + : CResource(pResource), CFunction(pResource) +{ +} + +std::string CImplicitFunction::GetIdentifier() +{ + return function()->getIdentifier(); +} + +void CImplicitFunction::SetIdentifier(const std::string& sIdentifier) +{ + function()->setIdentifier(sIdentifier); +} + +IImplicitNode* CImplicitFunction::AddNode( + const Lib3MF::eImplicitNodeType eNodeType, const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = function()->addNode(eNodeType, eConfiguration, sIdentifier, + sDisplayName, sTag); + return new CImplicitNode(newNode); +} + +ISinNode* CImplicitFunction::AddSinNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Sinus, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CSinNode(newNode); +} + +ICosNode* CImplicitFunction::AddCosNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Cosinus, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CCosNode(newNode); +} + +ITanNode* CImplicitFunction::AddTanNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Tan, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CTanNode(newNode); +} + +IArcSinNode* CImplicitFunction::AddArcSinNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::ArcSin, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CArcSinNode(newNode); +} + +IArcCosNode* CImplicitFunction::AddArcCosNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::ArcCos, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CArcCosNode(newNode); +} + +IArcTan2Node* CImplicitFunction::AddArcTan2Node( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::ArcTan2, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CArcTan2Node(newNode); +} + +ISinhNode* CImplicitFunction::AddSinhNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Sinh, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CSinhNode(newNode); +} + +ICoshNode* CImplicitFunction::AddCoshNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Cosh, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CCoshNode(newNode); +} + +ITanhNode* CImplicitFunction::AddTanhNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Tanh, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CTanhNode(newNode); +} + +IRoundNode* CImplicitFunction::AddRoundNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Round, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CRoundNode(newNode); +} + +ICeilNode* CImplicitFunction::AddCeilNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Ceil, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CCeilNode(newNode); +} + +IFloorNode* CImplicitFunction::AddFloorNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Floor, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CFloorNode(newNode); +} + +ISignNode* CImplicitFunction::AddSignNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Sign, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CSignNode(newNode); +} + +IFractNode* CImplicitFunction::AddFractNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Fract, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CFractNode(newNode); +} + +IAbsNode* CImplicitFunction::AddAbsNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Abs, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CAbsNode(newNode); +} + +IExpNode* CImplicitFunction::AddExpNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Exp, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CExpNode(newNode); +} + +ILogNode* CImplicitFunction::AddLogNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Log, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CLogNode(newNode); +} + +ILog2Node* CImplicitFunction::AddLog2Node( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Log2, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CLog2Node(newNode); +} + +ILog10Node* CImplicitFunction::AddLog10Node( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Log10, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CLog10Node(newNode); +} + +ILengthNode* CImplicitFunction::AddLengthNode(const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Length, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CLengthNode(newNode); +} + +ITransposeNode* CImplicitFunction::AddTransposeNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Transpose, + eConfiguration, sIdentifier, sDisplayName, sTag); + return new CTransposeNode(newNode); +} + +IInverseNode* CImplicitFunction::InverseNode(const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Inverse, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CInverseNode(newNode); +} + +ISqrtNode* CImplicitFunction::AddSqrtNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Sqrt, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CSqrtNode(newNode); +} + +IResourceIdNode* CImplicitFunction::AddResourceIdNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::ConstResourceID, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CResourceIdNode(newNode); +} + +IAdditionNode* CImplicitFunction::AddAdditionNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Addition, eConfiguration, + sIdentifier, sDisplayName, sTag); + + return new CAdditionNode(newNode); +} + +ISubtractionNode* CImplicitFunction::AddSubtractionNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Subtraction, + eConfiguration, sIdentifier, sDisplayName, sTag); + return new CSubtractionNode(newNode); +} + +IMultiplicationNode* CImplicitFunction::AddMultiplicationNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Multiplication, + eConfiguration, sIdentifier, sDisplayName, sTag); + return new CMultiplicationNode(newNode); +} + +IDivisionNode* CImplicitFunction::AddDivisionNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Division, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CDivisionNode(newNode); +} + +IDotNode* CImplicitFunction::AddDotNode(const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Dot, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CDotNode(newNode); +} + +ICrossNode* CImplicitFunction::AddCrossNode(const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Cross, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CCrossNode(newNode); +} + +IMatVecMultiplicationNode* CImplicitFunction::AddMatVecMultiplicationNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::MatVecMultiplication, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CMatVecMultiplicationNode(newNode); +} + +IMinNode* CImplicitFunction::AddMinNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Min, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CMinNode(newNode); +} + +IMaxNode* CImplicitFunction::AddMaxNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Max, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CMaxNode(newNode); +} + +IFmodNode* CImplicitFunction::AddFmodNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Fmod, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CFmodNode(newNode); +} + +IPowNode* CImplicitFunction::AddPowNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Pow, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CPowNode(newNode); +} + +ISelectNode* CImplicitFunction::AddSelectNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Select, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CSelectNode(newNode); +} + +IClampNode* CImplicitFunction::AddClampNode( + const std::string& sIdentifier, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string& sDisplayName, const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Clamp, eConfiguration, + sIdentifier, sDisplayName, sTag); + return new CClampNode(newNode); +} + +IComposeVectorNode* CImplicitFunction::AddComposeVectorNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::ComposeVector, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CComposeVectorNode(newNode); +} + +IVectorFromScalarNode * CImplicitFunction::AddVectorFromScalarNode(const std::string & sIdentifier, + const std::string & sDisplayName, + const std::string & sTag) +{ + auto newNode = function()->addNode(Lib3MF::eImplicitNodeType::VectorFromScalar, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, + sDisplayName, + sTag); + return new CVectorFromScalarNode(newNode); +} + +IDecomposeVectorNode* CImplicitFunction::AddDecomposeVectorNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::DecomposeVector, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CDecomposeVectorNode(newNode); +} + +IComposeMatrixNode* CImplicitFunction::AddComposeMatrixNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::ComposeMatrix, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CComposeMatrixNode(newNode); +} + +IMatrixFromRowsNode * CImplicitFunction::AddMatrixFromRowsNode(const std::string & sIdentifier, + const std::string & sDisplayName, + const std::string & sTag) +{ + auto newNode = function()->addNode(Lib3MF::eImplicitNodeType::MatrixFromRows, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, + sDisplayName, + sTag); + return new CMatrixFromRowsNode(newNode); +} + +IMatrixFromColumnsNode * CImplicitFunction::AddMatrixFromColumnsNode(const std::string & sIdentifier, + const std::string & sDisplayName, + const std::string & sTag) +{ + auto newNode = function()->addNode(Lib3MF::eImplicitNodeType::MatrixFromColumns, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, + sDisplayName, + sTag); + return new CMatrixFromColumnsNode(newNode); +} + +IConstantNode* CImplicitFunction::AddConstantNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Constant, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CConstantNode(newNode); +} + +IConstVecNode* CImplicitFunction::AddConstVecNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::ConstVec, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CConstVecNode(newNode); +} + +IConstMatNode* CImplicitFunction::AddConstMatNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::ConstMat, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CConstMatNode(newNode); +} + +IMeshNode* CImplicitFunction::AddMeshNode(const std::string& sIdentifier, + const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::Mesh, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CMeshNode(newNode); +} + +IUnsignedMeshNode * CImplicitFunction::AddUnsignedMeshNode(const std::string & sIdentifier, + const std::string & sDisplayName, + const std::string & sTag) +{ + auto newNode = function()->addNode(Lib3MF::eImplicitNodeType::UnsignedMesh, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, + sDisplayName, + sTag); + return new CUnsignedMeshNode(newNode); +} + +IFunctionCallNode* CImplicitFunction::AddFunctionCallNode( + const std::string& sIdentifier, const std::string& sDisplayName, + const std::string& sTag) +{ + auto newNode = + function()->addNode(Lib3MF::eImplicitNodeType::FunctionCall, + Lib3MF::eImplicitNodeConfiguration::Default, + sIdentifier, sDisplayName, sTag); + return new CFunctionCallNode(newNode); +} + +INodeIterator* CImplicitFunction::GetNodes() +{ + return new CNodeIterator(function()->getNodes()); +} + +void CImplicitFunction::RemoveNode(IImplicitNode* pNode) +{ + if(pNode == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + function()->removeNode(pNode->GetIdentifier()); +} + +void CImplicitFunction::AddLink(IImplicitPort* pSource, IImplicitPort* pTarget) +{ + if (pSource == nullptr || pTarget == nullptr) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + CImplicitPort* pSourcePort = dynamic_cast(pSource); + CImplicitPort* pTargetPort = dynamic_cast(pTarget); + + if (pSourcePort == nullptr || pTargetPort == nullptr) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + + function()->addLink(pSourcePort->getPort(), pTargetPort->getPort()); +} + +void CImplicitFunction::AddLinkByNames(const std::string& sSource, + const std::string& sTarget) +{ + function()->addLink(sSource, sTarget); +} + +void CImplicitFunction::Clear() +{ + function()->clear(); +} + +void CImplicitFunction::SortNodesTopologically() +{ + function()->sortNodesTopologically(); +} + diff --git a/Source/API/lib3mf_implicitnode.cpp b/Source/API/lib3mf_implicitnode.cpp new file mode 100644 index 000000000..aa96490c5 --- /dev/null +++ b/Source/API/lib3mf_implicitnode.cpp @@ -0,0 +1,158 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CImplicitNode + +*/ + +#include "lib3mf_implicitnode.hpp" +#include "lib3mf_implicitport.hpp" +#include "lib3mf_implicitportiterator.hpp" +#include "lib3mf_interfaceexception.hpp" +#include "lib3mf_meshobject.hpp" +#include + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CImplicitNode +**************************************************************************************************************************/ + +std::string CImplicitNode::GetIdentifier() +{ + if (!m_pImplicitNode) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + return m_pImplicitNode->getIdentifier(); +} + +void CImplicitNode::SetIdentifier(const std::string & sIdentifier) +{ + m_pImplicitNode->setIdentifier(sIdentifier); +} + +std::string CImplicitNode::GetDisplayName() +{ + return m_pImplicitNode->getDisplayName(); +} + +void CImplicitNode::SetDisplayName(const std::string& sDisplayName) +{ + m_pImplicitNode->setDisplayName(sDisplayName); +} + +std::string CImplicitNode::GetTag() +{ + return m_pImplicitNode->getTag(); +} + +void CImplicitNode::SetTag(const std::string& sTag) +{ + m_pImplicitNode->setTag(sTag); +} + +IImplicitPort* Lib3MF::Impl::CImplicitNode::FindInputOrThrow( + const std::string& sIdentifier) +{ + auto pPort = FindInput(sIdentifier); + if (!pPort) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + return pPort; +} + +IImplicitPort* Lib3MF::Impl::CImplicitNode::FindOutputOrThrow( + const std::string& sIdentifier) +{ + auto pPort = FindOutput(sIdentifier); + if (!pPort) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + return pPort; +} + +CImplicitNode::CImplicitNode(NMR::PModelImplicitNode pImplicitNode) + : m_pImplicitNode{pImplicitNode} +{ +} + +Lib3MF::eImplicitNodeType CImplicitNode::GetNodeType() +{ + return m_pImplicitNode->getNodeType(); +} + +IImplicitPort * CImplicitNode::AddInput(const std::string & sIdentifier, + const std::string & sDisplayName) +{ + return new CImplicitPort(m_pImplicitNode->addInput(sIdentifier, sDisplayName)); +} + +IImplicitPort * CImplicitNode::AddOutput(const std::string & sIdentifier, + const std::string & sDisplayName) +{ + return new CImplicitPort(m_pImplicitNode->addOutput(sIdentifier, sDisplayName)); +} + +IImplicitPortIterator * CImplicitNode::GetOutputs() +{ + return new CImplicitPortIterator(m_pImplicitNode->getOutputs()); +} + +IImplicitPortIterator * CImplicitNode::GetInputs() +{ + return new CImplicitPortIterator(m_pImplicitNode->getInputs()); +} + +IImplicitPort * CImplicitNode::FindInput(const std::string & sIdentifier) +{ + auto pPort = m_pImplicitNode->findInput(sIdentifier); + if (!pPort) + { + return nullptr; + } + return new CImplicitPort(pPort); +} + +IImplicitPort * CImplicitNode::FindOutput(const std::string & sIdentifier) +{ + auto pPort = m_pImplicitNode->findOutput(sIdentifier); + if (!pPort) + { + return nullptr; + } + return new CImplicitPort(pPort); +} + +bool Lib3MF::Impl::CImplicitNode::AreTypesValid() +{ + return m_pImplicitNode->arePortsValid(); +} + diff --git a/Source/API/lib3mf_implicitport.cpp b/Source/API/lib3mf_implicitport.cpp new file mode 100644 index 000000000..184aacf26 --- /dev/null +++ b/Source/API/lib3mf_implicitport.cpp @@ -0,0 +1,91 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CImplicitPort + +*/ + +#include "lib3mf_implicitport.hpp" +#include "lib3mf_interfaceexception.hpp" +#include "lib3mf_types.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CImplicitPort +**************************************************************************************************************************/ + +Lib3MF::Impl::CImplicitPort::CImplicitPort(NMR::PModelImplicitPort pImplicitPort) + : m_pImplicitPort(pImplicitPort) +{ +} + +std::string CImplicitPort::GetIdentifier() +{ + return m_pImplicitPort->getIdentifier(); +} + +void CImplicitPort::SetIdentifier(const std::string & sIdentifier) +{ + m_pImplicitPort->setIdentifier(sIdentifier); +} + +std::string CImplicitPort::GetDisplayName() +{ + return m_pImplicitPort->getDisplayName(); +} + +void CImplicitPort::SetDisplayName(const std::string & sDisplayName) +{ + m_pImplicitPort->setDisplayName(sDisplayName); +} + +void CImplicitPort::SetType(const Lib3MF::eImplicitPortType eType) +{ + m_pImplicitPort->setType(eType); +} + +Lib3MF::eImplicitPortType CImplicitPort::GetType() +{ + return m_pImplicitPort->getType(); +} + +std::string CImplicitPort::GetReference() +{ + return m_pImplicitPort->getReference(); +} + +void CImplicitPort::SetReference(const std::string & sReference) +{ + m_pImplicitPort->setReference(sReference); +} + +NMR::PModelImplicitPort Lib3MF::Impl::CImplicitPort::getPort() +{ + return m_pImplicitPort; +} diff --git a/Source/API/lib3mf_implicitportiterator.cpp b/Source/API/lib3mf_implicitportiterator.cpp new file mode 100644 index 000000000..64f9e98b3 --- /dev/null +++ b/Source/API/lib3mf_implicitportiterator.cpp @@ -0,0 +1,57 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CImplicitPortIterator + +*/ + +#include "lib3mf_implicitportiterator.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. +#include "lib3mf_implicitport.hpp" + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CImplicitPortIterator +**************************************************************************************************************************/ + +Lib3MF::Impl::CImplicitPortIterator::CImplicitPortIterator(NMR::PPorts pPorts) : m_pPorts(pPorts) +{ +} + +Lib3MF_uint64 Lib3MF::Impl::CImplicitPortIterator::Count() +{ + return static_cast(m_pPorts->size()); +} + +IImplicitPort * CImplicitPortIterator::GetCurrent() +{ + throwIfInvalidIndex(); + return new CImplicitPort(m_pPorts->at(static_cast(getCurrentIndex()))); +} + diff --git a/Source/API/lib3mf_inversenode.cpp b/Source/API/lib3mf_inversenode.cpp new file mode 100644 index 000000000..6275b7bae --- /dev/null +++ b/Source/API/lib3mf_inversenode.cpp @@ -0,0 +1,46 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CInverseNode + +*/ + +#include "lib3mf_inversenode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CInverseNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CInverseNode::CInverseNode(NMR::PModelImplicitNode pImplicitNode) +: COneInputNode(std::move(pImplicitNode)) +{ +} diff --git a/Source/API/lib3mf_iterator.cpp b/Source/API/lib3mf_iterator.cpp new file mode 100644 index 000000000..8a4e7e7bb --- /dev/null +++ b/Source/API/lib3mf_iterator.cpp @@ -0,0 +1,86 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CIterator + +*/ + +#include "lib3mf_iterator.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CIterator +**************************************************************************************************************************/ + +bool CIterator::MoveNext() +{ + auto const numItems = static_cast(Count()); + m_nCurrentIndex++; + + if (m_nCurrentIndex >= numItems) + { + m_nCurrentIndex = numItems; + return false; + } + else + { + return true; + } +} + +bool CIterator::MovePrevious() +{ + m_nCurrentIndex--; + if (m_nCurrentIndex <= -1) + { + m_nCurrentIndex = -1; + return false; + } + else + { + return true; + } +} + +Lib3MF_uint64 CIterator::Count() +{ + throw ELib3MFInterfaceException(LIB3MF_ERROR_NOTIMPLEMENTED); +} + +Lib3MF_int64 Lib3MF::Impl::CIterator::getCurrentIndex() +{ + return m_nCurrentIndex; +} + +void Lib3MF::Impl::CIterator::throwIfInvalidIndex() +{ + if ((m_nCurrentIndex < 0) || (m_nCurrentIndex >= static_cast(Count()))) + throw ELib3MFInterfaceException(LIB3MF_ERROR_ITERATORINVALIDINDEX); +} diff --git a/Source/API/lib3mf_lengthnode.cpp b/Source/API/lib3mf_lengthnode.cpp new file mode 100644 index 000000000..94819e54e --- /dev/null +++ b/Source/API/lib3mf_lengthnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CLengthNode + +*/ + +#include "lib3mf_lengthnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CLengthNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CLengthNode::CLengthNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_levelset.cpp b/Source/API/lib3mf_levelset.cpp new file mode 100644 index 000000000..f73d39f5c --- /dev/null +++ b/Source/API/lib3mf_levelset.cpp @@ -0,0 +1,278 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CLevelSet + +*/ + +#include "lib3mf_levelset.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. +#include "lib3mf_meshobject.hpp" +#include "lib3mf_utils.hpp" +#include "lib3mf_function.hpp" +#include "lib3mf_volumedata.hpp" +#include "Model/Classes/NMR_ModelLevelSetObject.h" +#include "Model/Classes/NMR_ModelFunction.h" +#include "Model/Classes/NMR_ModelMeshObject.h" + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CLevelSet +**************************************************************************************************************************/ + + +ILevelSet* CLevelSet::fnCreateLevelSetFromModelResource(NMR::PModelResource pResource, bool bFailIfUnkownClass) { + + if (!pResource.get()) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + + NMR::CModelLevelSetObject * LevelSetObject = dynamic_cast (pResource.get()); + if (LevelSetObject) { + return new CLevelSet(pResource); + } + + if (bFailIfUnkownClass) + throw ELib3MFInterfaceException(NMR_ERROR_UNKNOWNMODELRESOURCE); + + return nullptr; +} + + + +IFunction * CLevelSet::GetFunction() +{ + auto levelSet = levelSetObject(); + auto function = levelSet->getFunction(); + if (!function) + { + return nullptr; + } + return new CFunction(function); +} + +NMR::PModelLevelSetObject +Lib3MF::Impl::CLevelSet::levelSetObject() +{ + NMR::PModelLevelSetObject pLevelSet = std::dynamic_pointer_cast(resource()); + if (pLevelSet.get() == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDOBJECT, "Resource is not a LevelSet Object"); + return pLevelSet; +} + +CLevelSet::CLevelSet(NMR::PModelResource pResource) + : CResource(pResource), CObject(pResource) +{ +} + +void CLevelSet::SetFunction(IFunction* pTheFunction) +{ + if(pTheFunction == nullptr) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + + NMR::CModel* pModel = levelSetObject()->getModel(); + if(pModel == nullptr) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDOBJECT, "LevelSet Object has no Model"); + } + + NMR::PModelFunction pFunction = + std::dynamic_pointer_cast( + pModel->findResource(pTheFunction->GetUniqueResourceID())); + + if(!pFunction) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + levelSetObject()->setFunction(pFunction); +} + +Lib3MF::sTransform CLevelSet::GetTransform() +{ + return MatrixToTransform(levelSetObject()->getTransform()); +} + +void CLevelSet::SetTransform(const Lib3MF::sTransform Transform) +{ + levelSetObject()->setTransform(TransformToMatrix(Transform)); +} + +std::string CLevelSet::GetChannelName() +{ + return levelSetObject()->getChannelName(); +} + +void CLevelSet::SetChannelName(const std::string & sChannelName) +{ + levelSetObject()->setChannelName(sChannelName); +} + +void CLevelSet::SetMinFeatureSize(const Lib3MF_double dMinFeatureSize) +{ + levelSetObject()->setMinFeatureSize(dMinFeatureSize); +} + +Lib3MF_double CLevelSet::GetMinFeatureSize() +{ + return levelSetObject()->getMinFeatureSize(); +} + +void CLevelSet::SetFallBackValue(const Lib3MF_double dFallBackValue) +{ + levelSetObject()->setFallBackValue(dFallBackValue); +} + +Lib3MF_double CLevelSet::GetFallBackValue() +{ + return levelSetObject()->getFallBackValue(); +} + +void CLevelSet::SetMeshBBoxOnly(const bool bMeshBBoxOnly) +{ + levelSetObject()->setMeshBBoxOnly(bMeshBBoxOnly); +} + +bool CLevelSet::GetMeshBBoxOnly() +{ + return levelSetObject()->getMeshBBoxOnly(); +} + +void CLevelSet::SetMesh(IMeshObject* pTheMesh) +{ + if(pTheMesh == nullptr) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + + NMR::CModel* pModel = levelSetObject()->getModel(); + if(pModel == nullptr) + { + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDOBJECT, + "LevelSet Object " + + std::to_string(levelSetObject() + ->getPackageResourceID() + ->getModelResourceID()) + + " has no Model"); + } + + NMR::PModelMeshObject pMesh = + std::dynamic_pointer_cast( + pModel->findResource(pTheMesh->GetUniqueResourceID())); + + if(!pMesh) + { + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDPARAM, + "Referenced Mesh Object not found with resource ID: " + + std::to_string(pTheMesh->GetModelResourceID())); + } + levelSetObject()->setMesh(pMesh); +} + +IMeshObject * CLevelSet::GetMesh() +{ + NMR::PModelMeshObject meshObject = levelSetObject()->getMesh(); + + if(!meshObject) + { + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDOBJECT, + "Referenced Mesh Object of the levelset with the id " + + std::to_string(levelSetObject() + ->getPackageResourceID() + ->getModelResourceID()) + + " could not be found"); + } + + return new CMeshObject(meshObject); +} + +void CLevelSet::SetVolumeData(IVolumeData* pTheVolumeData) +{ + NMR::CModel * pModel = levelSetObject()->getModel(); + if (pModel == nullptr) + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDOBJECT, + "LevelSet Object " + + std::to_string(levelSetObject() + ->getPackageResourceID() + ->getModelResourceID()) + + " has no parent Model"); + + NMR::PModelResource pResource = pModel->findResource(pTheVolumeData->GetResourceID()); + if (pResource == nullptr) + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDOBJECT, + "Referenced VolumeData Resource with ID " + + std::to_string(pTheVolumeData->GetModelResourceID()) + + " not found"); + + NMR::PModelVolumeData pVolumeData = std::dynamic_pointer_cast(pResource); + + if(pVolumeData == nullptr) + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDOBJECT, + "Referenced Resource " + + std::to_string(pTheVolumeData->GetModelResourceID()) + + " by levelset " + + std::to_string(levelSetObject() + ->getPackageResourceID() + ->getModelResourceID()) + + " is not of type VolumeData"); + + levelSetObject()->setVolumeData(pVolumeData); +} + +bool CLevelSet::IsMeshObject() +{ + return false; +} + +bool Lib3MF::Impl::CLevelSet::IsComponentsObject() +{ + return false; +} + +bool CLevelSet::IsLevelSetObject() +{ + return true; +} + +IVolumeData * CLevelSet::GetVolumeData() +{ + NMR::PModelVolumeData pVolumeData = levelSetObject()->getVolumeData(); + if (!pVolumeData) + { + return nullptr; + } + return new CVolumeData(pVolumeData); +} \ No newline at end of file diff --git a/Source/API/lib3mf_levelsetiterator.cpp b/Source/API/lib3mf_levelsetiterator.cpp new file mode 100644 index 000000000..0814f7286 --- /dev/null +++ b/Source/API/lib3mf_levelsetiterator.cpp @@ -0,0 +1,48 @@ +/*++ + +Copyright (C) 2024 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CLevelSetIterator + +*/ + +#include "lib3mf_levelsetiterator.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. +#include "lib3mf_levelset.hpp" + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CLevelSetIterator +**************************************************************************************************************************/ + +ILevelSet * CLevelSetIterator::GetCurrentLevelSet() +{ + return CLevelSet::fnCreateLevelSetFromModelResource(GetCurrentResource(), true); +} + diff --git a/Source/API/lib3mf_log10node.cpp b/Source/API/lib3mf_log10node.cpp new file mode 100644 index 000000000..e69e3485a --- /dev/null +++ b/Source/API/lib3mf_log10node.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CLog10Node + +*/ + +#include "lib3mf_log10node.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CLog10Node +**************************************************************************************************************************/ + +Lib3MF::Impl::CLog10Node::CLog10Node(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_log2node.cpp b/Source/API/lib3mf_log2node.cpp new file mode 100644 index 000000000..c37f0a212 --- /dev/null +++ b/Source/API/lib3mf_log2node.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CLog2Node + +*/ + +#include "lib3mf_log2node.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CLog2Node +**************************************************************************************************************************/ + +Lib3MF::Impl::CLog2Node::CLog2Node(NMR::PModelImplicitNode pImplicitNode) +: COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_lognode.cpp b/Source/API/lib3mf_lognode.cpp new file mode 100644 index 000000000..c20b37a2a --- /dev/null +++ b/Source/API/lib3mf_lognode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CLogNode + +*/ + +#include "lib3mf_lognode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CLogNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CLogNode::CLogNode(NMR::PModelImplicitNode pImplicitNode) +: COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_materialmapping.cpp b/Source/API/lib3mf_materialmapping.cpp new file mode 100644 index 000000000..55a7fe55d --- /dev/null +++ b/Source/API/lib3mf_materialmapping.cpp @@ -0,0 +1,42 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CMaterialMapping + +*/ + +#include "lib3mf_materialmapping.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CMaterialMapping +**************************************************************************************************************************/ + diff --git a/Source/API/lib3mf_matrixfromcolumnsnode.cpp b/Source/API/lib3mf_matrixfromcolumnsnode.cpp new file mode 100644 index 000000000..d9d023ef1 --- /dev/null +++ b/Source/API/lib3mf_matrixfromcolumnsnode.cpp @@ -0,0 +1,73 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CMatrixFromColumnsNode + +*/ + +#include "lib3mf_matrixfromcolumnsnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CMatrixFromColumnsNode +**************************************************************************************************************************/ +CMatrixFromColumnsNode:: + CMatrixFromColumnsNode(NMR::PModelImplicitNode pImplicitNode) + : CImplicitNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} + +IImplicitPort * CMatrixFromColumnsNode::GetInputA() +{ + return FindInputOrThrow(NMR::InputNames::A); +} + +IImplicitPort * CMatrixFromColumnsNode::GetInputB() +{ + return FindInputOrThrow(NMR::InputNames::B); +} + +IImplicitPort * CMatrixFromColumnsNode::GetInputC() +{ + return FindInputOrThrow(NMR::InputNames::C); +} + +IImplicitPort * CMatrixFromColumnsNode::GetInputD() +{ + return FindInputOrThrow(NMR::InputNames::D); +} + +IImplicitPort * CMatrixFromColumnsNode::GetOutputResult() +{ + return FindOutputOrThrow(NMR::OutputNames::result); +} + diff --git a/Source/API/lib3mf_matrixfromrowsnode.cpp b/Source/API/lib3mf_matrixfromrowsnode.cpp new file mode 100644 index 000000000..7f34568f9 --- /dev/null +++ b/Source/API/lib3mf_matrixfromrowsnode.cpp @@ -0,0 +1,75 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CMatrixFromRowsNode + +*/ + +#include "lib3mf_matrixfromrowsnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CMatrixFromRowsNode +**************************************************************************************************************************/ + +CMatrixFromRowsNode:: + CMatrixFromRowsNode(NMR::PModelImplicitNode pImplicitNode) + : CImplicitNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} + + +IImplicitPort * CMatrixFromRowsNode::GetInputA() +{ + return FindInputOrThrow(NMR::InputNames::A); +} + +IImplicitPort * CMatrixFromRowsNode::GetInputB() +{ + return FindInputOrThrow(NMR::InputNames::B); +} + +IImplicitPort * CMatrixFromRowsNode::GetInputC() +{ + return FindInputOrThrow(NMR::InputNames::C); +} + +IImplicitPort * CMatrixFromRowsNode::GetInputD() +{ + return FindInputOrThrow(NMR::InputNames::D); +} + +IImplicitPort * CMatrixFromRowsNode::GetOutputResult() +{ + return FindOutputOrThrow(NMR::OutputNames::result); +} + diff --git a/Source/API/lib3mf_matvecmultiplicationnode.cpp b/Source/API/lib3mf_matvecmultiplicationnode.cpp new file mode 100644 index 000000000..eb113be93 --- /dev/null +++ b/Source/API/lib3mf_matvecmultiplicationnode.cpp @@ -0,0 +1,48 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CMatVecMultiplicationNode + +*/ + +#include "lib3mf_matvecmultiplicationnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CMatVecMultiplicationNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CMatVecMultiplicationNode::CMatVecMultiplicationNode( + NMR::PModelImplicitNode pImplicitNode) + : CTwoInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_maxnode.cpp b/Source/API/lib3mf_maxnode.cpp new file mode 100644 index 000000000..f93b5e00b --- /dev/null +++ b/Source/API/lib3mf_maxnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CMaxNode + +*/ + +#include "lib3mf_maxnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CMaxNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CMaxNode::CMaxNode(NMR::PModelImplicitNode pImplicitNode) + : CTwoInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_meshnode.cpp b/Source/API/lib3mf_meshnode.cpp new file mode 100644 index 000000000..b919756aa --- /dev/null +++ b/Source/API/lib3mf_meshnode.cpp @@ -0,0 +1,64 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CMeshNode + +*/ + +#include "lib3mf_meshnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CMeshNode +**************************************************************************************************************************/ + +CMeshNode::CMeshNode(NMR::PModelImplicitNode pImplicitNode) + : CImplicitNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} + +IImplicitPort * CMeshNode::GetInputMesh() +{ + return FindInputOrThrow(NMR::InputNames::mesh); +} + +IImplicitPort * CMeshNode::GetInputPos() +{ + return FindInputOrThrow(NMR::InputNames::pos); +} + + +IImplicitPort * CMeshNode::GetOutputDistance() +{ + return FindOutputOrThrow(NMR::OutputNames::distance); +} + diff --git a/Source/API/lib3mf_meshobject.cpp b/Source/API/lib3mf_meshobject.cpp index 7c7e4f52c..ca2f92a2d 100644 --- a/Source/API/lib3mf_meshobject.cpp +++ b/Source/API/lib3mf_meshobject.cpp @@ -31,9 +31,12 @@ Abstract: This is a stub class definition of CMeshObject #include "lib3mf_interfaceexception.hpp" #include "lib3mf_beamlattice.hpp" +#include "lib3mf_volumedata.hpp" // Include custom headers here. #include "Common/MeshInformation/NMR_MeshInformation_Properties.h" +#include "Model/Classes/NMR_ModelVolumeData.h" +#include "Model/Classes/NMR_ModelResource.h" #include using namespace Lib3MF::Impl; @@ -379,6 +382,11 @@ bool CMeshObject::IsComponentsObject() return false; } +bool CMeshObject::IsLevelSetObject() +{ + return false; +} + bool CMeshObject::IsValid() { return meshObject()->isValid(); @@ -388,3 +396,32 @@ IBeamLattice* CMeshObject::BeamLattice() { return new CBeamLattice(meshObject(), meshObject()->getBeamLatticeAttributes()); } + +IVolumeData * CMeshObject::GetVolumeData() +{ + auto volumeData = meshObject()->getVolumeData(); + if (!volumeData) + { + return nullptr; + } + return new CVolumeData(std::dynamic_pointer_cast(meshObject()->getVolumeData())); +} + +void CMeshObject::SetVolumeData(IVolumeData* pTheVolumeData) +{ + NMR::CModel * pModel = meshObject()->getModel(); + if (pModel == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDOBJECT); + + NMR::PModelResource pResource = pModel->findResource(pTheVolumeData->GetResourceID()); + + if (pResource == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDOBJECT, "Referenced VolumeData Resource with ID " + std::to_string(pTheVolumeData->GetModelResourceID()) + " not found"); + + NMR::PModelVolumeData pVolumeData = std::dynamic_pointer_cast(pResource); + + if (pVolumeData == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDOBJECT, "Referenced Resource is not of type VolumeData"); + + meshObject()->setVolumeData(pVolumeData); +} \ No newline at end of file diff --git a/Source/API/lib3mf_minnode.cpp b/Source/API/lib3mf_minnode.cpp new file mode 100644 index 000000000..1dce2a395 --- /dev/null +++ b/Source/API/lib3mf_minnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CMinNode + +*/ + +#include "lib3mf_minnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CMinNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CMinNode::CMinNode(NMR::PModelImplicitNode pImplicitNode) +: CTwoInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_model.cpp b/Source/API/lib3mf_model.cpp index 69f57312f..8bffb590f 100644 --- a/Source/API/lib3mf_model.cpp +++ b/Source/API/lib3mf_model.cpp @@ -60,7 +60,15 @@ Abstract: This is a stub class definition of CModel #include "lib3mf_multipropertygroupiterator.hpp" #include "lib3mf_packagepart.hpp" #include "lib3mf_keystore.hpp" - +#include "lib3mf_image3d.hpp" +#include "lib3mf_imagestack.hpp" +#include "lib3mf_image3diterator.hpp" +#include "lib3mf_implicitfunction.hpp" +#include "lib3mf_functioniterator.hpp" +#include "lib3mf_functionfromimage3d.hpp" +#include "lib3mf_volumedata.hpp" +#include "lib3mf_levelset.hpp" +#include "lib3mf_levelsetiterator.hpp" // Include custom headers here. #include "Model/Classes/NMR_ModelMeshObject.h" @@ -69,6 +77,11 @@ Abstract: This is a stub class definition of CModel #include "Model/Classes/NMR_ModelColorGroup.h" #include "Model/Classes/NMR_ModelTexture2DGroup.h" #include "Model/Classes/NMR_ModelMultiPropertyGroup.h" +#include "Model/Classes/NMR_ModelImageStack.h" +#include "Model/Classes/NMR_ModelImplicitFunction.h" +#include "Model/Classes/NMR_ModelFunctionFromImage3D.h" +#include "Model/Classes/NMR_ModelVolumeData.h" +#include "Model/Classes/NMR_ModelLevelSetObject.h" #include "Common/NMR_SecureContentTypes.h" #include "lib3mf_utils.hpp" @@ -84,6 +97,22 @@ CModel::CModel() m_model = std::make_shared(); } +void CModel::mergeModel(NMR::CModel& sourceModel, + NMR::CModel& targetModel) +{ + NMR::UniqueResourceIDMapping oldToNewUniqueResourceIDs; + targetModel.mergeModelAttachments(&sourceModel); + targetModel.mergeTextures2D(&sourceModel, oldToNewUniqueResourceIDs); + targetModel.mergeBaseMaterials(&sourceModel, oldToNewUniqueResourceIDs); + targetModel.mergeColorGroups(&sourceModel, oldToNewUniqueResourceIDs); + targetModel.mergeTexture2DGroups(&sourceModel, oldToNewUniqueResourceIDs); + targetModel.mergeCompositeMaterials(&sourceModel, oldToNewUniqueResourceIDs); + targetModel.mergeMultiPropertyGroups(&sourceModel, oldToNewUniqueResourceIDs); + targetModel.mergeImage3Ds(&sourceModel, oldToNewUniqueResourceIDs); + targetModel.mergeFunctions(&sourceModel, oldToNewUniqueResourceIDs); + targetModel.mergeMetaData(&sourceModel); +} + NMR::CModel& CModel::model() { return *m_model; @@ -131,6 +160,31 @@ IResource* CModel::createIResourceFromModelResource(NMR::PModelResource pResourc return new CSliceStack(p); } + if (auto p = std::dynamic_pointer_cast(pResource)) { + return new CImageStack(p); + } + if (auto p = std::dynamic_pointer_cast(pResource)) { + return new CImage3D(p); + } + + if (auto p= std::dynamic_pointer_cast(pResource)) { + return new CImplicitFunction(p); + } + + if(auto p = std::dynamic_pointer_cast( + pResource)) + { + return new CFunctionFromImage3D(p); + } + + if (auto p = std::dynamic_pointer_cast(pResource)) { + return new CVolumeData(p); + } + + if (auto p = std::dynamic_pointer_cast(pResource)) { + return new CLevelSet(p); + } + if (bFailIfUnkownClass) throw ELib3MFInterfaceException(NMR_ERROR_UNKNOWNMODELRESOURCE); @@ -280,6 +334,17 @@ ISliceStack * CModel::GetSliceStackByID(const Lib3MF_uint32 nUniqueResourceID) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDSLICESTACKRESOURCE); } +ILevelSet* CModel::GetLevelSetByID(const Lib3MF_uint32 nUniqueResourceID) +{ + NMR::PModelResource pResource = model().findResource(nUniqueResourceID); + if (dynamic_cast(pResource.get())) { + return new CLevelSet(std::dynamic_pointer_cast(pResource)); + } + else + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDLEVELSET); + +} + ITexture2DGroup * CModel::GetTexture2DGroupByID(const Lib3MF_uint32 nUniqueResourceID) { NMR::PModelResource pResource = model().findResource(nUniqueResourceID); @@ -499,6 +564,9 @@ IModel * CModel::MergeToModel () newModel.mergeTexture2DGroups(&model(), oldToNewUniqueResourceIDs); newModel.mergeCompositeMaterials(&model(), oldToNewUniqueResourceIDs); newModel.mergeMultiPropertyGroups(&model(), oldToNewUniqueResourceIDs); + newModel.mergeImage3Ds(&model(), oldToNewUniqueResourceIDs); + newModel.mergeFunctions(&model(), oldToNewUniqueResourceIDs); + newModel.mergeMetaData(&model()); pMesh->patchMeshInformationResources(oldToNewUniqueResourceIDs); @@ -515,6 +583,15 @@ IModel * CModel::MergeToModel () return pOutModel.release(); } +void CModel::MergeFromModel(IModel* pModelInstance) +{ + CModel* pLib3MFModel = dynamic_cast (pModelInstance); + if (!pLib3MFModel) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + + mergeModel(pLib3MFModel->model(), model()); +} + IMeshObject * CModel::AddMeshObject () { NMR::ModelResourceID NewResourceID = model().generateResourceID(); @@ -744,11 +821,43 @@ Lib3MF::sBox CModel::GetOutbox() return s; } -IKeyStore * Lib3MF::Impl::CModel::GetKeyStore() { +IImageStack * CModel::AddImageStack(const Lib3MF_uint32 nSizeX, const Lib3MF_uint32 nSizeY, const Lib3MF_uint32 nSheetCount) +{ + NMR::PModelImageStack pResource = NMR::CModelImageStack::make(model().generateResourceID(), &model(), nSizeX, nSizeY, nSheetCount); + model().addResource(pResource); + + return new CImageStack(pResource); +} + +IImageStack* CModel::GetImageStackByID(const Lib3MF_uint32 nUniqueResourceID) +{ + NMR::PModelImageStack pImageStackResource = model().findImageStack(nUniqueResourceID); + if (pImageStackResource) { + return new CImageStack(pImageStackResource); + } + else + throw ELib3MFInterfaceException(LIB3MF_ERROR_RESOURCENOTFOUND); +} + +IImage3DIterator * CModel::GetImage3Ds() +{ + auto pResult = std::unique_ptr(new CImage3DIterator()); + Lib3MF_uint32 nImage3DCount = model().getImage3DCount(); + + for (Lib3MF_uint32 nIdx = 0; nIdx < nImage3DCount; nIdx++) { + auto resource = model().getImage3DResource(nIdx); + pResult->addResource(resource); + } + return pResult.release(); +} + +IKeyStore * Lib3MF::Impl::CModel::GetKeyStore() +{ return new CKeyStore(m_model); } -void Lib3MF::Impl::CModel::SetRandomNumberCallback(Lib3MF::RandomNumberCallback pTheCallback, Lib3MF_pvoid pUserData) { +void Lib3MF::Impl::CModel::SetRandomNumberCallback(Lib3MF::RandomNumberCallback pTheCallback, Lib3MF_pvoid pUserData) +{ if (nullptr == pTheCallback) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); NMR::CryptoRandGenDescriptor descriptor; @@ -764,3 +873,76 @@ void Lib3MF::Impl::CModel::SetRandomNumberCallback(Lib3MF::RandomNumberCallback m_model->setCryptoRandCallback(descriptor); } +IFunctionIterator * CModel::GetFunctions() +{ + auto pResult = std::unique_ptr(new CFunctionIterator()); + Lib3MF_uint32 nFunctionCount = model().getFunctionCount(); + + for (Lib3MF_uint32 nIdx = 0; nIdx < nFunctionCount; nIdx++) { + auto resource = model().getFunctionResource(nIdx); + pResult->addResource(resource); + } + return pResult.release(); +} + +IImplicitFunction* CModel::AddImplicitFunction() +{ + NMR::ModelResourceID NewResourceID = model().generateResourceID(); + NMR::PModelImplicitFunction pNewResource = std::make_shared(NewResourceID, &model()); + + model().addResource(pNewResource); + + return new CImplicitFunction(pNewResource); +} + +IFunctionFromImage3D* CModel::AddFunctionFromImage3D(IImage3D* pImage3DInstance) +{ + NMR::ModelResourceID NewResourceID = model().generateResourceID(); + NMR::PModelFunctionFromImage3D pNewResource = std::make_shared(NewResourceID, &model()); + pNewResource->setImage3DUniqueResourceID(pImage3DInstance->GetUniqueResourceID()); + model().addResource(pNewResource); + auto newFunc = new CFunctionFromImage3D(pNewResource); + return newFunc; +} + + +IVolumeData * CModel::AddVolumeData() +{ + NMR::ModelResourceID NewResourceID = model().generateResourceID(); + NMR::PModelVolumeData pNewResource = std::make_shared(NewResourceID, &model()); + + model().addResource(pNewResource); + + return new CVolumeData(pNewResource); +} + +ILevelSet* CModel::AddLevelSet() +{ + NMR::ModelResourceID NewResourceID = model().generateResourceID(); + NMR::PModelLevelSetObject pNewResource = std::make_shared(NewResourceID, &model()); + + model().addResource(pNewResource); + + return new CLevelSet(pNewResource); +} + +ILevelSetIterator * CModel::GetLevelSets() +{ + auto pResult = std::unique_ptr(new CLevelSetIterator()); + Lib3MF_uint32 nObjectsCount = model().getObjectCount(); + + for (Lib3MF_uint32 nIdx = 0; nIdx < nObjectsCount; nIdx++) { + auto resource = model().getObjectResource(nIdx); + if (dynamic_cast(resource.get())) + pResult->addResource(resource); + } + return pResult.release(); +} + +void CModel::RemoveResource(IResource* pResource) +{ + CResource* pLib3MFResource = dynamic_cast (pResource); + if (!pLib3MFResource) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDRESOURCE); + model().removeResource(pLib3MFResource->resource()); +} diff --git a/Source/API/lib3mf_modnode.cpp b/Source/API/lib3mf_modnode.cpp new file mode 100644 index 000000000..bc59edb53 --- /dev/null +++ b/Source/API/lib3mf_modnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2024 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CModNode + +*/ + +#include "lib3mf_modnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CModNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CModNode::CModNode(NMR::PModelImplicitNode pImplicitNode) + : CTwoInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_multiplicationnode.cpp b/Source/API/lib3mf_multiplicationnode.cpp new file mode 100644 index 000000000..3004465df --- /dev/null +++ b/Source/API/lib3mf_multiplicationnode.cpp @@ -0,0 +1,48 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CMultiplicationNode + +*/ + +#include "lib3mf_multiplicationnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CMultiplicationNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CMultiplicationNode::CMultiplicationNode( + NMR::PModelImplicitNode pImplicitNode) + : CTwoInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_nodeiterator.cpp b/Source/API/lib3mf_nodeiterator.cpp new file mode 100644 index 000000000..52b994214 --- /dev/null +++ b/Source/API/lib3mf_nodeiterator.cpp @@ -0,0 +1,281 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CNodeIterator + +*/ + +#include "lib3mf_nodeiterator.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. +#include "lib3mf_absnode.hpp" +#include "lib3mf_additionnode.hpp" +#include "lib3mf_arccosnode.hpp" +#include "lib3mf_arcsinnode.hpp" +#include "lib3mf_arctan2node.hpp" +#include "lib3mf_arctannode.hpp" +#include "lib3mf_ceilnode.hpp" +#include "lib3mf_clampnode.hpp" +#include "lib3mf_composematrixnode.hpp" +#include "lib3mf_composevectornode.hpp" +#include "lib3mf_constantnode.hpp" +#include "lib3mf_constmatnode.hpp" +#include "lib3mf_constvecnode.hpp" +#include "lib3mf_coshnode.hpp" +#include "lib3mf_cosnode.hpp" +#include "lib3mf_crossnode.hpp" +#include "lib3mf_decomposevectornode.hpp" +#include "lib3mf_divisionnode.hpp" +#include "lib3mf_dotnode.hpp" +#include "lib3mf_expnode.hpp" +#include "lib3mf_floornode.hpp" +#include "lib3mf_fmodnode.hpp" +#include "lib3mf_fractnode.hpp" +#include "lib3mf_functioncallnode.hpp" +#include "lib3mf_inversenode.hpp" +#include "lib3mf_lengthnode.hpp" +#include "lib3mf_log10node.hpp" +#include "lib3mf_log2node.hpp" +#include "lib3mf_lognode.hpp" +#include "lib3mf_matrixfromcolumnsnode.hpp" +#include "lib3mf_matrixfromrowsnode.hpp" +#include "lib3mf_matvecmultiplicationnode.hpp" +#include "lib3mf_maxnode.hpp" +#include "lib3mf_meshnode.hpp" +#include "lib3mf_minnode.hpp" +#include "lib3mf_multiplicationnode.hpp" +#include "lib3mf_pownode.hpp" +#include "lib3mf_resourceidnode.hpp" +#include "lib3mf_roundnode.hpp" +#include "lib3mf_selectnode.hpp" +#include "lib3mf_signnode.hpp" +#include "lib3mf_sinhnode.hpp" +#include "lib3mf_sinnode.hpp" +#include "lib3mf_sqrtnode.hpp" +#include "lib3mf_subtractionnode.hpp" +#include "lib3mf_tanhnode.hpp" +#include "lib3mf_tannode.hpp" +#include "lib3mf_transposenode.hpp" +#include "lib3mf_unsignedmeshnode.hpp" +#include "lib3mf_vectorfromscalarnode.hpp" +#include "lib3mf_modnode.hpp" + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CNodeIterator +**************************************************************************************************************************/ + +IImplicitNode * CNodeIterator::GetCurrent() +{ + throwIfInvalidIndex(); + auto pModelNode = m_pNodes->at(static_cast(getCurrentIndex())); + auto pNode = implicitNodeFromModelImplicitNode(pModelNode); + if (!pNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + return pNode; +} + +// enum class eImplicitNodeType : Lib3MF_int32 { +// Addition = 1, /** Adds to values (scalar or vector) */ +// Subtraction = 2, /** Subtracts two values (scalar or vector) */ +// Multiplication = 3, /** Multiplies two values (scalar or vector) */ +// Division = 4, /** Divides two values (scalar or vector) */ +// Constant = 5, /** A constant scalar value */ +// ConstVec = 6, /** A constant vector value */ +// ConstMat = 7, /** A constant matrix value */ +// ComposeVector = 8, /** Creates a vector from three scalar values */ +// DecomposeVector = 9, /** Decomposes a vector into three scalar values */ +// ComposeMatrix = 10, /** Creates a matrix from nine scalar values */ +// ComposeMatrixFromColumnVectors = 11, /** Creates a matrix from three column vector values */ +// ComposeMatrixFromRowVectors = 12, /** Creates a matrix from three row vector values */ +// Dot = 13, /** Calculates the dot product of two vector values */ +// Cross = 14, /** Calculates the cross product of two vector values */ +// MatVecMultiplication = 15, /** Multiplies a matrix with a vector */ +// Transpose = 16, /** Transposes a matrix */ +// Inverse = 17, /** Computes the inverse of a matrix */ +// Sinus = 18, /** Calculates the sinus */ +// Cosinus = 19, /** Calculates the cosinus */ +// Tan = 20, /** Calculates the tangent */ +// ArcSin = 21, /** Calculates the arcsinus */ +// ArcCos = 22, /** Calculates the arccosinus */ +// ArcTan = 23, /** Calculates the arctangent */ +// ArcTan2 = 24, /** Calculates the arctangent */ +// Min = 25, /** Calculates the minimum tow values */ +// Max = 26, /** Calculates the maximum of two values */ +// Abs = 27, /** Calcul the absolute value */ +// Fmod = 28, /** Calculates the modulo of two values */ +// Pow = 29, /** Calculates the power A^B */ +// Sqrt = 30, /** Calculates the square root */ +// Exp = 31, /** Exponential function */ +// Log = 32, /** Natural logarithmus */ +// Log2 = 33, /** Logarithmus to the base 2 */ +// Log10 = 34, /** Logarithmus to the base 10 */ +// Select = 35, /** If A is less B returns C, else D */ +// Clamp = 36, /** Clamps the input value to min and max */ +// Sinh = 37, /** Calculates the hyperbolic sine */ +// Cosh = 38, /** Calculates the hyperbolic cosine */ +// Tanh = 39, /** Calculates the hyperbolic tangent */ +// Round = 40, /** Rounds a scalar value to the nearest integer */ +// Ceil = 41, /** Rounds a scalar value up to the nearest integer */ +// Floor = 42, /** Rounds a scalar value down to the nearest integer */ +// Sign = 43, /** Returns the sign */ +// Fract = 44, /** Returns the fractional part */ +// FunctionCall = 45, /** Calls a function */ +// Mesh = 46, /** Calculates the signed distance to a mesh */ +// Length = 47, /** Calculates the length of a vector */ +// Resource = 48 /** Selects a resource (function, mesh etc.) */ +// }; + +IImplicitNode* Lib3MF::Impl::CNodeIterator::implicitNodeFromModelImplicitNode( + NMR::PModelImplicitNode pNode) +{ + if (!pNode) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + + + switch (pNode->getNodeType()) + { + case eImplicitNodeType::Addition: + return new CAdditionNode(pNode); + case eImplicitNodeType::Subtraction: + return new CSubtractionNode(pNode); + case eImplicitNodeType::Multiplication: + return new CMultiplicationNode(pNode); + case eImplicitNodeType::Division: + return new CDivisionNode(pNode); + case eImplicitNodeType::Constant: + return new CConstantNode(pNode); + case eImplicitNodeType::ConstVec: + return new CConstVecNode(pNode); + case eImplicitNodeType::ConstMat: + return new CConstMatNode(pNode); + case eImplicitNodeType::ComposeVector: + return new CComposeVectorNode(pNode); + case eImplicitNodeType::VectorFromScalar: + return new CVectorFromScalarNode(pNode); + case eImplicitNodeType::DecomposeVector: + return new CDecomposeVectorNode(pNode); + case eImplicitNodeType::ComposeMatrix: + return new CComposeMatrixNode(pNode); + case eImplicitNodeType::MatrixFromColumns: + return new CMatrixFromColumnsNode(pNode); + case eImplicitNodeType::MatrixFromRows: + return new CMatrixFromRowsNode(pNode); + case eImplicitNodeType::Dot: + return new CDotNode(pNode); + case eImplicitNodeType::Cross: + return new CCrossNode(pNode); + case eImplicitNodeType::MatVecMultiplication: + return new CMatVecMultiplicationNode(pNode); + case eImplicitNodeType::Transpose: + return new CTransposeNode(pNode); + case eImplicitNodeType::Inverse: + return new CInverseNode(pNode); + case eImplicitNodeType::Sinus: + return new CSinNode(pNode); + case eImplicitNodeType::Cosinus: + return new CCosNode(pNode); + case eImplicitNodeType::Tan: + return new CTanNode(pNode); + case eImplicitNodeType::ArcSin: + return new CArcSinNode(pNode); + case eImplicitNodeType::ArcCos: + return new CArcCosNode(pNode); + case eImplicitNodeType::ArcTan: + return new CArcTanNode(pNode); + case eImplicitNodeType::ArcTan2: + return new CArcTan2Node(pNode); + case eImplicitNodeType::Min: + return new CMinNode(pNode); + case eImplicitNodeType::Max: + return new CMaxNode(pNode); + case eImplicitNodeType::Abs: + return new CAbsNode(pNode); + case eImplicitNodeType::Fmod: + return new CFmodNode(pNode); + case eImplicitNodeType::Pow: + return new CPowNode(pNode); + case eImplicitNodeType::Sqrt: + return new CSqrtNode(pNode); + case eImplicitNodeType::Exp: + return new CExpNode(pNode); + case eImplicitNodeType::Log: + return new CLogNode(pNode); + case eImplicitNodeType::Log2: + return new CLog2Node(pNode); + case eImplicitNodeType::Log10: + return new CLog10Node(pNode); + case eImplicitNodeType::Select: + return new CSelectNode(pNode); + case eImplicitNodeType::Clamp: + return new CClampNode(pNode); + case eImplicitNodeType::Sinh: + return new CSinhNode(pNode); + case eImplicitNodeType::Cosh: + return new CCoshNode(pNode); + case eImplicitNodeType::Tanh: + return new CTanhNode(pNode); + case eImplicitNodeType::Round: + return new CRoundNode(pNode); + case eImplicitNodeType::Ceil: + return new CCeilNode(pNode); + case eImplicitNodeType::Floor: + return new CFloorNode(pNode); + case eImplicitNodeType::Sign: + return new CSignNode(pNode); + case eImplicitNodeType::Fract: + return new CFractNode(pNode); + case eImplicitNodeType::FunctionCall: + return new CFunctionCallNode(pNode); + case eImplicitNodeType::Mesh: + return new CMeshNode(pNode); + case eImplicitNodeType::UnsignedMesh: + return new CUnsignedMeshNode(pNode); + case eImplicitNodeType::Length: + return new CLengthNode(pNode); + case eImplicitNodeType::ConstResourceID: + return new CResourceIdNode(pNode); + case eImplicitNodeType::Mod: + return new CModNode(pNode); + + default: + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + +} + +Lib3MF::Impl::CNodeIterator::CNodeIterator(NMR::PImplicitNodes pNodes) + : m_pNodes(pNodes) +{ +} + +Lib3MF_uint64 Lib3MF::Impl::CNodeIterator::Count() +{ + return static_cast(m_pNodes->size()); +} diff --git a/Source/API/lib3mf_object.cpp b/Source/API/lib3mf_object.cpp index aa87cecd7..12ef901c5 100644 --- a/Source/API/lib3mf_object.cpp +++ b/Source/API/lib3mf_object.cpp @@ -32,6 +32,7 @@ Abstract: This is a stub class definition of CObject #include "lib3mf_interfaceexception.hpp" #include "lib3mf_meshobject.hpp" +#include "lib3mf_levelset.hpp" #include "lib3mf_componentsobject.hpp" #include "lib3mf_metadatagroup.hpp" #include "lib3mf_slicestack.hpp" @@ -39,6 +40,7 @@ Abstract: This is a stub class definition of CObject // Include custom headers here. #include "Model/Classes/NMR_ModelMeshObject.h" +#include "Model/Classes/NMR_ModelLevelSetObject.h" #include "Model/Classes/NMR_ModelComponentsObject.h" using namespace Lib3MF::Impl; @@ -65,6 +67,11 @@ IObject* CObject::fnCreateObjectFromModelResource(NMR::PModelResource pResource, return new CMeshObject(pResource); } + NMR::CModelLevelSetObject * PILevelSet = dynamic_cast (pResource.get()); + if (PILevelSet) { + return new CLevelSet(pResource); + } + NMR::CModelComponentsObject * pComponentsResource = dynamic_cast (pResource.get()); if (pComponentsResource) { return new CComponentsObject(pResource); @@ -124,6 +131,13 @@ bool CObject::IsComponentsObject () throw ELib3MFInterfaceException(LIB3MF_ERROR_SHOULDNOTBECALLED); } +bool CObject::IsLevelSetObject() +{ + // overwritten by child class + throw ELib3MFInterfaceException(LIB3MF_ERROR_SHOULDNOTBECALLED); +} + + IMeshObject * CObject::AsMeshObject() { if (dynamic_cast(resource().get())) diff --git a/Source/API/lib3mf_oneinputnode.cpp b/Source/API/lib3mf_oneinputnode.cpp new file mode 100644 index 000000000..94bcc4d89 --- /dev/null +++ b/Source/API/lib3mf_oneinputnode.cpp @@ -0,0 +1,57 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of COneInputNode + +*/ + +#include "lib3mf_oneinputnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of COneInputNode +**************************************************************************************************************************/ + +IImplicitPort * COneInputNode::GetInputA() +{ + return FindInputOrThrow(NMR::InputNames::A); +} + +IImplicitPort * COneInputNode::GetOutputResult() +{ + return FindOutputOrThrow(NMR::OutputNames::result); +} + +COneInputNode::COneInputNode( + NMR::PModelImplicitNode pImplicitNode) : CImplicitNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_pownode.cpp b/Source/API/lib3mf_pownode.cpp new file mode 100644 index 000000000..28716b148 --- /dev/null +++ b/Source/API/lib3mf_pownode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CPowNode + +*/ + +#include "lib3mf_pownode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CPowNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CPowNode::CPowNode(NMR::PModelImplicitNode pImplicitNode) + : CTwoInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_resource.cpp b/Source/API/lib3mf_resource.cpp index d06de188c..d05afdda8 100644 --- a/Source/API/lib3mf_resource.cpp +++ b/Source/API/lib3mf_resource.cpp @@ -46,12 +46,24 @@ using namespace Lib3MF::Impl; NMR::PModelResource CResource::resource() { - if (m_pResource.get()==nullptr) + if (m_pResource.get() == nullptr) throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDOBJECT); return m_pResource; } +NMR::CModel* CResource::model() +{ + if (m_pResource.get() == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDOBJECT); + + + if (m_pResource->getModel() == nullptr) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDMODEL); + + return m_pResource->getModel(); +} + CResource::CResource(NMR::PModelResource pResource) { if (pResource.get() == nullptr) diff --git a/Source/API/lib3mf_resourceidnode.cpp b/Source/API/lib3mf_resourceidnode.cpp new file mode 100644 index 000000000..8d7ac3cd4 --- /dev/null +++ b/Source/API/lib3mf_resourceidnode.cpp @@ -0,0 +1,63 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CResourceIdNode + +*/ + +#include "lib3mf_resourceidnode.hpp" +#include "lib3mf_interfaceexception.hpp" +#include "lib3mf_resource.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CResourceIdNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CResourceIdNode::CResourceIdNode( + NMR::PModelImplicitNode pImplicitNode) : CImplicitNode(std::move(pImplicitNode)) +{ +} + +void CResourceIdNode::SetResource(IResource* pResource) +{ + m_pImplicitNode->setModelResourceID(pResource->GetModelResourceID()); +} + +IResource * CResourceIdNode::GetResource() +{ + return new CResource(m_pImplicitNode->getResource()); +} + +IImplicitPort * CResourceIdNode::GetOutputValue() +{ + return FindOutputOrThrow(NMR::OutputNames::value); +} + diff --git a/Source/API/lib3mf_roundnode.cpp b/Source/API/lib3mf_roundnode.cpp new file mode 100644 index 000000000..fcff1e87f --- /dev/null +++ b/Source/API/lib3mf_roundnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CRoundNode + +*/ + +#include "lib3mf_roundnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CRoundNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CRoundNode::CRoundNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_selectnode.cpp b/Source/API/lib3mf_selectnode.cpp new file mode 100644 index 000000000..1c251135f --- /dev/null +++ b/Source/API/lib3mf_selectnode.cpp @@ -0,0 +1,62 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CSelectNode + +*/ + +#include "lib3mf_selectnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CSelectNode +**************************************************************************************************************************/ + +IImplicitPort * CSelectNode::GetInputB() +{ + return FindInputOrThrow(NMR::InputNames::B); +} + +IImplicitPort * CSelectNode::GetInputC() +{ + return FindInputOrThrow(NMR::InputNames::C); +} + +IImplicitPort * CSelectNode::GetInputD() +{ + return FindInputOrThrow(NMR::InputNames::D); +} + +Lib3MF::Impl::CSelectNode::CSelectNode(NMR::PModelImplicitNode pImplicitNode) +: COneInputNode{pImplicitNode} + { + CImplicitNode::m_pImplicitNode = pImplicitNode; + } diff --git a/Source/API/lib3mf_signnode.cpp b/Source/API/lib3mf_signnode.cpp new file mode 100644 index 000000000..5d9a72f9a --- /dev/null +++ b/Source/API/lib3mf_signnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CSignNode + +*/ + +#include "lib3mf_signnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CSignNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CSignNode::CSignNode(NMR::PModelImplicitNode pImplicitNode) +: COneInputNode{pImplicitNode} + { + CImplicitNode::m_pImplicitNode = pImplicitNode; + } diff --git a/Source/API/lib3mf_sinhnode.cpp b/Source/API/lib3mf_sinhnode.cpp new file mode 100644 index 000000000..4c8011dd4 --- /dev/null +++ b/Source/API/lib3mf_sinhnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CSinhNode + +*/ + +#include "lib3mf_sinhnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CSinhNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CSinhNode::CSinhNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_sinnode.cpp b/Source/API/lib3mf_sinnode.cpp new file mode 100644 index 000000000..ac3f2f77e --- /dev/null +++ b/Source/API/lib3mf_sinnode.cpp @@ -0,0 +1,48 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CSinNode + +*/ + +#include "lib3mf_sinnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. +#include "lib3mf_oneinputnode.hpp" + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CSinNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CSinNode::CSinNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} + diff --git a/Source/API/lib3mf_sqrtnode.cpp b/Source/API/lib3mf_sqrtnode.cpp new file mode 100644 index 000000000..d3e70daf2 --- /dev/null +++ b/Source/API/lib3mf_sqrtnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CSqrtNode + +*/ + +#include "lib3mf_sqrtnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CSqrtNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CSqrtNode::CSqrtNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_subtractionnode.cpp b/Source/API/lib3mf_subtractionnode.cpp new file mode 100644 index 000000000..63333a8b5 --- /dev/null +++ b/Source/API/lib3mf_subtractionnode.cpp @@ -0,0 +1,48 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CSubtractionNode + +*/ + +#include "lib3mf_subtractionnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CSubtractionNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CSubtractionNode::CSubtractionNode( + NMR::PModelImplicitNode pImplicitNode) + : CTwoInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_tanhnode.cpp b/Source/API/lib3mf_tanhnode.cpp new file mode 100644 index 000000000..7d78e0e9d --- /dev/null +++ b/Source/API/lib3mf_tanhnode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CTanhNode + +*/ + +#include "lib3mf_tanhnode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CTanhNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CTanhNode::CTanhNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_tannode.cpp b/Source/API/lib3mf_tannode.cpp new file mode 100644 index 000000000..d9b29e819 --- /dev/null +++ b/Source/API/lib3mf_tannode.cpp @@ -0,0 +1,47 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CTanNode + +*/ + +#include "lib3mf_tannode.hpp" + +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CTanNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CTanNode::CTanNode(NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_transposenode.cpp b/Source/API/lib3mf_transposenode.cpp new file mode 100644 index 000000000..ae4705ea5 --- /dev/null +++ b/Source/API/lib3mf_transposenode.cpp @@ -0,0 +1,48 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CTransposeNode + +*/ + +#include "lib3mf_transposenode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CTransposeNode +**************************************************************************************************************************/ + +Lib3MF::Impl::CTransposeNode::CTransposeNode( + NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_twoinputnode.cpp b/Source/API/lib3mf_twoinputnode.cpp new file mode 100644 index 000000000..ae97e136d --- /dev/null +++ b/Source/API/lib3mf_twoinputnode.cpp @@ -0,0 +1,54 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CTwoInputNode + +*/ + +#include "lib3mf_twoinputnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CTwoInputNode +**************************************************************************************************************************/ + +IImplicitPort * CTwoInputNode::GetInputB() +{ + return FindInput("B"); +} + + +Lib3MF::Impl::CTwoInputNode::CTwoInputNode( + NMR::PModelImplicitNode pImplicitNode) + : COneInputNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_unsignedmeshnode.cpp b/Source/API/lib3mf_unsignedmeshnode.cpp new file mode 100644 index 000000000..6d0f9a935 --- /dev/null +++ b/Source/API/lib3mf_unsignedmeshnode.cpp @@ -0,0 +1,63 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CUnsignedMeshNode + +*/ + +#include "lib3mf_unsignedmeshnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CUnsignedMeshNode +**************************************************************************************************************************/ +CUnsignedMeshNode:: + CUnsignedMeshNode(NMR::PModelImplicitNode pImplicitNode) + : CImplicitNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} + +IImplicitPort * CUnsignedMeshNode::GetInputMesh() +{ + return FindInputOrThrow(NMR::InputNames::mesh); +} + +IImplicitPort * CUnsignedMeshNode::GetInputPos() +{ + return FindInputOrThrow(NMR::InputNames::pos); +} + +IImplicitPort * CUnsignedMeshNode::GetOutputDistance() +{ + return FindOutputOrThrow(NMR::OutputNames::distance); +} + diff --git a/Source/API/lib3mf_utils.cpp b/Source/API/lib3mf_utils.cpp index c58611bdf..b58e01d05 100644 --- a/Source/API/lib3mf_utils.cpp +++ b/Source/API/lib3mf_utils.cpp @@ -57,7 +57,6 @@ sLib3MFTransform Lib3MF::MatrixToTransform(const NMR::NMATRIX3 matrix) return transform; } - eLib3MFEncryptionAlgorithm Lib3MF::translateEncryptionAlgorithm(const NMR::eKeyStoreEncryptAlgorithm algorithm) { if (NMR::eKeyStoreEncryptAlgorithm::AES256_GCM == algorithm) return eLib3MFEncryptionAlgorithm::AES256_GCM; @@ -80,8 +79,6 @@ NMR::eKeyStoreWrapAlgorithm Lib3MF::translateWrappingAlgorithm(const eLib3MFWrap throw ELib3MFInterfaceException(LIB3MF_ERROR_NOTIMPLEMENTED); } - - eLib3MFCompression Lib3MF::translateCompression(bool compression) { if (compression) return eLib3MFCompression::Deflate; @@ -90,4 +87,4 @@ eLib3MFCompression Lib3MF::translateCompression(bool compression) { bool Lib3MF::translateCompression(const eLib3MFCompression compression) { return eLib3MFCompression::Deflate == compression; -} \ No newline at end of file +} diff --git a/Source/API/lib3mf_vectorfromscalarnode.cpp b/Source/API/lib3mf_vectorfromscalarnode.cpp new file mode 100644 index 000000000..2f313a755 --- /dev/null +++ b/Source/API/lib3mf_vectorfromscalarnode.cpp @@ -0,0 +1,48 @@ +/*++ + +Copyright (C) 2023 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CVectorFromScalarNode + +*/ + +#include "lib3mf_vectorfromscalarnode.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CVectorFromScalarNode +**************************************************************************************************************************/ + +CVectorFromScalarNode:: + CVectorFromScalarNode(NMR::PModelImplicitNode pImplicitNode) + : CImplicitNode{pImplicitNode} +{ + CImplicitNode::m_pImplicitNode = pImplicitNode; +} diff --git a/Source/API/lib3mf_volumedata.cpp b/Source/API/lib3mf_volumedata.cpp new file mode 100644 index 000000000..adac4da5c --- /dev/null +++ b/Source/API/lib3mf_volumedata.cpp @@ -0,0 +1,161 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CVolumeData + +*/ + +#include "lib3mf_volumedata.hpp" +#include "lib3mf_interfaceexception.hpp" + +#include "lib3mf_volumedataproperty.hpp" +#include "lib3mf_volumedatacolor.hpp" +#include "lib3mf_volumedatacomposite.hpp" + +// Include custom headers here. +#include "Model/Classes/NMR_ModelMeshObject.h" +#include "Model/Classes/NMR_ModelResource.h" +#include "Model/Classes/NMR_ModelFunction.h" + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CVolumeData +**************************************************************************************************************************/ + + +CVolumeData::CVolumeData(NMR::PModelResource pResource) + : CResource(pResource) +{ + if (!pResource.get()) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + + m_pVolumeData = std::dynamic_pointer_cast(pResource); + if (!m_pVolumeData) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); +} + + +IVolumeDataComposite * CVolumeData::GetComposite() +{ + auto pComposite = m_pVolumeData->getComposite(); + if (!pComposite) { + return nullptr; + } + return new CVolumeDataComposite(pComposite); +} + +IVolumeDataComposite * CVolumeData::CreateNewComposite() +{ + auto pComposite = m_pVolumeData->createComposite(); + if (!pComposite) { + return nullptr; + } + return new CVolumeDataComposite(pComposite); +} + +void CVolumeData::RemoveComposite() +{ + m_pVolumeData->removeComposite(); +} + +IVolumeDataColor * CVolumeData::GetColor() +{ + auto pColor = m_pVolumeData->getColor(); + if (!pColor) { + return nullptr; + } + return new CVolumeDataColor(pColor); +} + +void CVolumeData::RemoveColor() +{ + m_pVolumeData->removeColor(); +} + +Lib3MF_uint32 CVolumeData::GetPropertyCount() +{ + return m_pVolumeData->getPropertyCount(); +} + +IVolumeDataProperty * CVolumeData::GetProperty(const Lib3MF_uint32 nIndex) +{ + NMR::PVolumeDataProperty pProperty = m_pVolumeData->getProperty(nIndex); + if (!pProperty) { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + return new CVolumeDataProperty(pProperty); +} + +void CVolumeData::RemoveProperty(const Lib3MF_uint32 nIndex) +{ + auto pProperty = m_pVolumeData->getProperty(nIndex); + if (!pProperty) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + m_pVolumeData->removeProperty(pProperty->getName()); +} + + +IVolumeDataColor* Lib3MF::Impl::CVolumeData::CreateNewColor( + IFunction* pTheFunction) +{ + NMR::CModel* pModel = m_pVolumeData->getModel(); + + NMR::PModelResource pResource = pModel->findResource(pTheFunction->GetUniqueResourceID()); + NMR::PModelFunction pFunction = std::dynamic_pointer_cast(pResource); + + if (!pFunction) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + + NMR::PVolumeDataColor pColor = m_pVolumeData->createColor(pFunction); + if(!pColor) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + return new CVolumeDataColor(pColor); +} + +IVolumeDataProperty * Lib3MF::Impl::CVolumeData::AddPropertyFromFunction(const std::string & sName, IFunction * pTheFunction) +{ + NMR::CModel* pModel = m_pVolumeData->getModel(); + + NMR::PModelResource pResource = pModel->findResource(pTheFunction->GetUniqueResourceID()); + NMR::PModelFunction pFunction = std::dynamic_pointer_cast(pResource); + + if (!pFunction) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + + NMR::PVolumeDataProperty pProperty = m_pVolumeData->addProperty(sName, pFunction); + if(!pProperty) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + } + return new CVolumeDataProperty(pProperty); +} diff --git a/Source/API/lib3mf_volumedatacolor.cpp b/Source/API/lib3mf_volumedatacolor.cpp new file mode 100644 index 000000000..f6c6c2ac1 --- /dev/null +++ b/Source/API/lib3mf_volumedatacolor.cpp @@ -0,0 +1,48 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CVolumeDataColor + +*/ + +#include "lib3mf_volumedatacolor.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CVolumeDataColor +**************************************************************************************************************************/ + +CVolumeDataColor::CVolumeDataColor(NMR::PVolumeDataColor pColor) + : CFunctionReference(pColor) +{ + +} + diff --git a/Source/API/lib3mf_volumedatacomposite.cpp b/Source/API/lib3mf_volumedatacomposite.cpp new file mode 100644 index 000000000..0a73086f7 --- /dev/null +++ b/Source/API/lib3mf_volumedatacomposite.cpp @@ -0,0 +1,84 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CVolumeDataComposite + +*/ + +#include "lib3mf_volumedatacomposite.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CVolumeDataComposite +**************************************************************************************************************************/ + +CVolumeDataComposite::CVolumeDataComposite(NMR::PVolumeDataComposite pComposite): + m_pVolumeDataComposite(pComposite) +{ + +} + +NMR::PVolumeDataComposite CVolumeDataComposite::volumeDataComposite() +{ + if (!m_pVolumeDataComposite) + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM); + return m_pVolumeDataComposite; +} + +IBaseMaterialGroup * CVolumeDataComposite::GetBaseMaterialGroup() +{ + throw ELib3MFInterfaceException(LIB3MF_ERROR_NOTIMPLEMENTED); +} + +void CVolumeDataComposite::SetBaseMaterialGroup(IBaseMaterialGroup* pBaseMaterialGroupInstance) +{ + throw ELib3MFInterfaceException(LIB3MF_ERROR_NOTIMPLEMENTED); +} + +Lib3MF_uint32 CVolumeDataComposite::GetMaterialMappingCount() +{ + throw ELib3MFInterfaceException(LIB3MF_ERROR_NOTIMPLEMENTED); +} + +IMaterialMapping * CVolumeDataComposite::GetMaterialMapping(const Lib3MF_uint32 nIndex) +{ + throw ELib3MFInterfaceException(LIB3MF_ERROR_NOTIMPLEMENTED); +} + +IMaterialMapping * CVolumeDataComposite::AddMaterialMapping(const Lib3MF::sTransform Transform) +{ + throw ELib3MFInterfaceException(LIB3MF_ERROR_NOTIMPLEMENTED); +} + +void CVolumeDataComposite::RemoveMaterialMapping(const Lib3MF_uint32 nIndex) +{ + throw ELib3MFInterfaceException(LIB3MF_ERROR_NOTIMPLEMENTED); +} + diff --git a/Source/API/lib3mf_volumedataproperty.cpp b/Source/API/lib3mf_volumedataproperty.cpp new file mode 100644 index 000000000..68f2fceb0 --- /dev/null +++ b/Source/API/lib3mf_volumedataproperty.cpp @@ -0,0 +1,69 @@ +/*++ + +Copyright (C) 2019 3MF Consortium (Original Author) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: This is a stub class definition of CVolumeDataProperty + +*/ + +#include "lib3mf_volumedataproperty.hpp" +#include "lib3mf_interfaceexception.hpp" + +// Include custom headers here. + + +using namespace Lib3MF::Impl; + +/************************************************************************************************************************* + Class definition of CVolumeDataProperty +**************************************************************************************************************************/ + +CVolumeDataProperty::CVolumeDataProperty(NMR::PVolumeDataProperty pProperty) + : CFunctionReference(pProperty) +{ +} + +NMR::PVolumeDataProperty CVolumeDataProperty::asVolumeDataProperty() +{ + NMR::PVolumeDataProperty pProperty = std::dynamic_pointer_cast(m_pFunctionReference); + if (pProperty) + return pProperty; + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDCAST); +} + +std::string CVolumeDataProperty::GetName() +{ + return asVolumeDataProperty()->getName(); +} + +void CVolumeDataProperty::SetIsRequired(const bool bIsRequired) +{ + asVolumeDataProperty()->setIsRequired(bIsRequired); +} + +bool CVolumeDataProperty::IsRequired() +{ + return asVolumeDataProperty()->isRequired(); +} \ No newline at end of file diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 2d94b2c24..27973c844 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -21,229 +21,16 @@ set(SRCS_PLATFORM Source/Common/Platform/NMR_Platform.cpp Source/Common/Platform/NMR_ImportStream_Native.cpp Source/Common/Platform/NMR_ExportStream_Native.cpp - Source/Common/Platform/NMR_ExportStream_ZIP.cpp + Source/Common/Platform/NMR_ExportStream_ZIP.cpp ) +file(GLOB_RECURSE SOURCES LIST_DIRECTORIES false CONFIGURE_DEPENDS Source/*.cpp) # Recursively get all .cpp files, the false is to not follow symlinks + set(SRCS_COMMON ${SRCS_PLATFORM} ${ZLIB_FILES} ${CPPBASE64_FILES} -Source/API/lib3mf.cpp -Source/API/lib3mf_attachment.cpp -Source/API/lib3mf_base.cpp -Source/API/lib3mf_basematerialgroup.cpp -Source/API/lib3mf_basematerialgroupiterator.cpp -Source/API/lib3mf_beamlattice.cpp -Source/API/lib3mf_beamset.cpp -Source/API/lib3mf_builditem.cpp -Source/API/lib3mf_builditemiterator.cpp -Source/API/lib3mf_colorgroup.cpp -Source/API/lib3mf_colorgroupiterator.cpp -Source/API/lib3mf_component.cpp -Source/API/lib3mf_compositematerials.cpp -Source/API/lib3mf_compositematerialsiterator.cpp -Source/API/lib3mf_componentsobject.cpp -Source/API/lib3mf_componentsobjectiterator.cpp -Source/API/lib3mf_meshobject.cpp -Source/API/lib3mf_meshobjectiterator.cpp -Source/API/lib3mf_metadata.cpp -Source/API/lib3mf_metadatagroup.cpp -Source/API/lib3mf_multipropertygroup.cpp -Source/API/lib3mf_multipropertygroupiterator.cpp -Source/API/lib3mf_contentencryptionparams.cpp -Source/API/lib3mf_accessright.cpp -Source/API/lib3mf_consumer.cpp -Source/API/lib3mf_resourcedata.cpp -Source/API/lib3mf_resourcedatagroup.cpp -Source/API/lib3mf_keystore.cpp -Source/API/lib3mf_model.cpp -Source/API/lib3mf_object.cpp -Source/API/lib3mf_objectiterator.cpp -Source/API/lib3mf_packagepart.cpp -Source/API/lib3mf_reader.cpp -Source/API/lib3mf_resource.cpp -Source/API/lib3mf_resourceiterator.cpp -Source/API/lib3mf_slice.cpp -Source/API/lib3mf_slicestack.cpp -Source/API/lib3mf_slicestackiterator.cpp -Source/API/lib3mf_texture2d.cpp -Source/API/lib3mf_texture2dgroup.cpp -Source/API/lib3mf_texture2dgroupiterator.cpp -Source/API/lib3mf_texture2diterator.cpp -Source/API/lib3mf_writer.cpp -Source/API/lib3mf_utils.cpp -Source/Common/3MF_ProgressMonitor.cpp -Source/Common/Math/NMR_Matrix.cpp -Source/Common/Math/NMR_PairMatchingTree.cpp -Source/Common/Math/NMR_Vector.cpp -Source/Common/Math/NMR_VectorTree.cpp -Source/Common/MeshExport/NMR_MeshExporter.cpp -Source/Common/MeshExport/NMR_MeshExporter_STL.cpp -Source/Common/MeshImport/NMR_MeshImporter.cpp -Source/Common/MeshImport/NMR_MeshImporter_STL.cpp -Source/Common/MeshInformation/NMR_MeshInformation.cpp -Source/Common/MeshInformation/NMR_MeshInformationContainer.cpp -Source/Common/MeshInformation/NMR_MeshInformationFactory.cpp -Source/Common/MeshInformation/NMR_MeshInformationHandler.cpp -Source/Common/MeshInformation/NMR_MeshInformation_Properties.cpp -Source/Common/Mesh/NMR_Mesh.cpp -Source/Common/Mesh/NMR_BeamLattice.cpp -Source/Common/Mesh/NMR_MeshBuilder.cpp -Source/Common/NMR_Exception.cpp -Source/Common/NMR_Exception_Windows.cpp -Source/Common/NMR_ModelWarnings.cpp -Source/Common/NMR_StringUtils.cpp -Source/Common/NMR_SecureContext.cpp -Source/Common/NMR_UUID.cpp -Source/Common/OPC/NMR_OpcPackagePart.cpp -Source/Common/OPC/NMR_OpcPackageRelationship.cpp -Source/Common/OPC/NMR_OpcPackageReader.cpp -Source/Common/OPC/NMR_OpcPackageContentTypesReader.cpp -Source/Common/OPC/NMR_OpcPackageRelationshipReader.cpp -Source/Common/OPC/NMR_OpcPackageWriter.cpp -Source/Common/Platform/NMR_XmlReader_Native.cpp -Source/Common/Platform/NMR_EncryptionHeader.cpp -Source/Common/Platform/NMR_ExportStream.cpp -Source/Common/Platform/NMR_ExportStream_Callback.cpp -Source/Common/Platform/NMR_ExportStream_Compressed.cpp -Source/Common/Platform/NMR_ExportStream_Encrypted.cpp -Source/Common/Platform/NMR_ExportStream_Memory.cpp -Source/Common/Platform/NMR_ExportStream_Dummy.cpp -Source/Common/Platform/NMR_ExportStream_ZIP.cpp -Source/Common/Platform/NMR_ImportStream_Callback.cpp -Source/Common/Platform/NMR_ImportStream_Compressed.cpp -Source/Common/Platform/NMR_ImportStream_Memory.cpp -Source/Common/Platform/NMR_ImportStream_Shared_Memory.cpp -Source/Common/Platform/NMR_ImportStream_Unique_Memory.cpp -Source/Common/Platform/NMR_ImportStream_ZIP.cpp -Source/Common/Platform/NMR_ImportStream_Encrypted.cpp -Source/Common/Platform/NMR_PortableZIPWriter.cpp -Source/Common/Platform/NMR_PortableZIPWriterEntry.cpp -Source/Common/Platform/NMR_Time.cpp -Source/Common/Platform/NMR_XmlReader.cpp -Source/Common/Platform/NMR_XmlWriter.cpp -Source/Common/Platform/NMR_XmlWriter_Native.cpp -Source/Model/Classes/NMR_PackageResourceID.cpp -Source/Model/Classes/NMR_Model.cpp -Source/Model/Classes/NMR_ModelAttachment.cpp -Source/Model/Classes/NMR_ModelBaseMaterial.cpp -Source/Model/Classes/NMR_ModelBaseMaterials.cpp -Source/Model/Classes/NMR_ModelContext.cpp -Source/Model/Classes/NMR_ModelColorGroup.cpp -Source/Model/Classes/NMR_ModelCompositeMaterials.cpp -Source/Model/Classes/NMR_ModelBuildItem.cpp -Source/Model/Classes/NMR_ModelComponent.cpp -Source/Model/Classes/NMR_ModelComponentsObject.cpp -Source/Model/Classes/NMR_ModelMeshBeamLatticeAttributes.cpp -Source/Model/Classes/NMR_ModelMeshObject.cpp -Source/Model/Classes/NMR_ModelMetaData.cpp -Source/Model/Classes/NMR_ModelMetaDataGroup.cpp -Source/Model/Classes/NMR_ModelMultiPropertyGroup.cpp -Source/Model/Classes/NMR_ModelObject.cpp -Source/Model/Classes/NMR_ModelResource.cpp -Source/Model/Classes/NMR_ModelTexture2D.cpp -Source/Model/Classes/NMR_ModelTexture2DGroup.cpp -Source/Model/Classes/NMR_ModelSlice.cpp -Source/Model/Classes/NMR_ModelSliceStack.cpp -Source/Model/Classes/NMR_KeyStore.cpp -Source/Model/Classes/NMR_KeyStoreConsumer.cpp -Source/Model/Classes/NMR_KeyStoreAccessRight.cpp -Source/Model/Classes/NMR_KeyStoreFactory.cpp -Source/Model/Classes/NMR_KeyStoreResourceData.cpp -Source/Model/Classes/NMR_KeyStoreResourceDataGroup.cpp -Source/Model/Classes/NMR_KeyStoreCEKParams.cpp -Source/Model/Reader/BeamLattice1702/NMR_ModelReaderNode_BeamLattice1702_Ball.cpp -Source/Model/Reader/BeamLattice1702/NMR_ModelReaderNode_BeamLattice1702_BallRef.cpp -Source/Model/Reader/BeamLattice1702/NMR_ModelReaderNode_BeamLattice1702_Balls.cpp -Source/Model/Reader/BeamLattice1702/NMR_ModelReaderNode_BeamLattice1702_Beam.cpp -Source/Model/Reader/BeamLattice1702/NMR_ModelReaderNode_BeamLattice1702_Beams.cpp -Source/Model/Reader/BeamLattice1702/NMR_ModelReaderNode_BeamLattice1702_BeamLattice.cpp -Source/Model/Reader/BeamLattice1702/NMR_ModelReaderNode_BeamLattice1702_BeamSet.cpp -Source/Model/Reader/BeamLattice1702/NMR_ModelReaderNode_BeamLattice1702_BeamSets.cpp -Source/Model/Reader/BeamLattice1702/NMR_ModelReaderNode_BeamLattice1702_Ref.cpp -Source/Model/Reader/NMR_ModelReader.cpp -Source/Model/Reader/NMR_ModelReaderNode.cpp -Source/Model/Reader/NMR_ModelReaderNode_ModelBase.cpp -Source/Model/Reader/NMR_ModelReaderNode_KeyStoreBase.cpp -Source/Model/Reader/NMR_ModelReader_3MF.cpp -Source/Model/Reader/NMR_ModelReader_3MF_Native.cpp -Source/Model/Reader/NMR_ModelReader_ColorMapping.cpp -Source/Model/Reader/NMR_ModelReader_InstructionElement.cpp -Source/Model/Reader/NMR_ModelReader_STL.cpp -Source/Model/Reader/NMR_ModelReader_TexCoordMapping.cpp -Source/Model/Reader/NMR_KeyStoreOpcPackageReader.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_BaseMaterial.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_BaseMaterials.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Build.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_BuildItem.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Color.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Colors.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Component.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Components.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Composite.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_CompositeMaterials.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Mesh.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_MetaData.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_MetaDataGroup.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Multi.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_MultiProperties.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Object.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Resources.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Tex2Coord.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Tex2DGroup.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Texture2D.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Triangle.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Triangles.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Vertex.cpp -Source/Model/Reader/v100/NMR_ModelReaderNode100_Vertices.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_Build.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_BuildItem.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_Color.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_Component.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_Components.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_Material.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_Mesh.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_Object.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_Resources.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_Texture.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_TextureVertex.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_TextureVertices.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_Triangle.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_Triangles.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_Vertex.cpp -Source/Model/Reader/v093/NMR_ModelReaderNode093_Vertices.cpp -Source/Model/Reader/Slice1507/NMR_ModelReader_Slice1507_Polygon.cpp -Source/Model/Reader/Slice1507/NMR_ModelReader_Slice1507_Segment.cpp -Source/Model/Reader/Slice1507/NMR_ModelReader_Slice1507_Slice.cpp -Source/Model/Reader/Slice1507/NMR_ModelReader_Slice1507_SliceRef.cpp -Source/Model/Reader/Slice1507/NMR_ModelReader_Slice1507_SliceRefModel.cpp -Source/Model/Reader/Slice1507/NMR_ModelReader_Slice1507_SliceRefResources.cpp -Source/Model/Reader/Slice1507/NMR_ModelReader_Slice1507_SliceStack.cpp -Source/Model/Reader/Slice1507/NMR_ModelReader_Slice1507_Vertex.cpp -Source/Model/Reader/Slice1507/NMR_ModelReader_Slice1507_Vertices.cpp -Source/Model/Reader/SecureContent101/NMR_ModelReaderNode_KeyStore.cpp -Source/Model/Reader/SecureContent101/NMR_ModelReaderNode_KeyStoreCipherValue.cpp -Source/Model/Reader/SecureContent101/NMR_ModelReaderNode_KeyStoreKEKParams.cpp -Source/Model/Reader/SecureContent101/NMR_ModelReaderNode_KeyStoreCEKParams.cpp -Source/Model/Reader/SecureContent101/NMR_ModelReaderNode_KeyStoreConsumer.cpp -Source/Model/Reader/SecureContent101/NMR_ModelReaderNode_KeyStoreAccessRight.cpp -Source/Model/Reader/NMR_ModelReaderNode_StringValue.cpp -Source/Model/Reader/SecureContent101/NMR_ModelReaderNode_KeyStoreResourceData.cpp -Source/Model/Reader/SecureContent101/NMR_ModelReaderNode_KeyStoreResourceDataGroup.cpp -Source/Model/Writer/NMR_KeyStoreOpcPackageWriter.cpp -Source/Model/Writer/NMR_ModelWriter.cpp -Source/Model/Writer/NMR_ModelWriterNode.cpp -Source/Model/Writer/NMR_ModelWriterNode_ModelBase.cpp -Source/Model/Writer/NMR_ModelWriterNode_KeyStoreBase.cpp -Source/Model/Writer/NMR_ModelWriter_3MF.cpp -Source/Model/Writer/NMR_ModelWriter_3MF_Native.cpp -Source/Model/Writer/NMR_ModelWriter_ColorMapping.cpp -Source/Model/Writer/NMR_ModelWriter_STL.cpp -Source/Model/Writer/NMR_ModelWriter_TexCoordMapping.cpp -Source/Model/Writer/NMR_ModelWriter_TexCoordMappingContainer.cpp -Source/Model/Writer/SecureContent101/NMR_ModelWriterNode_KeyStore.cpp -Source/Model/Writer/v100/NMR_ModelWriterNode100_Mesh.cpp -Source/Model/Writer/v100/NMR_ModelWriterNode100_Model.cpp +${SOURCES} ) # FILELISTVARIABLE must be the name of a variable that holds a list of source-file paths relative to ${CMAKE_CURRENT_SOURCE_DIR} diff --git a/Source/Common/Graph/DirectedGraph.cpp b/Source/Common/Graph/DirectedGraph.cpp new file mode 100644 index 000000000..a37614cf1 --- /dev/null +++ b/Source/Common/Graph/DirectedGraph.cpp @@ -0,0 +1,103 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification,276529 are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#include "Common/Graph/DirectedGraph.h" + +#include + +namespace NMR::common::graph +{ + DirectedGraph::DirectedGraph(size_t const size) + : IDirectedGraph(size), + m_size(size), + m_graphData((m_size + 1) * (m_size + 1), false) + { + } + + void DirectedGraph::addDependency(Identifier id, Identifier idOfDependency) + { + if(id == idOfDependency) + { + return; + } + auto const index = id * m_size + idOfDependency; + m_graphData[index] = true; + } + + void DirectedGraph::removeDependency(Identifier id, + Identifier idOfDependency) + { + auto const index = id * m_size + idOfDependency; + m_graphData[index] = false; + } + + bool DirectedGraph::isDirectlyDependingOn( + Identifier id, Identifier dependencyInQuestion) const + { + auto const index = id * m_size + dependencyInQuestion; + return m_graphData[index]; + } + + size_t DirectedGraph::getSize() const + { + return m_size; + } + + void DirectedGraph::removeVertex(Identifier id) + { + auto const iterElemToRemove = + std::find(std::begin(m_vertices), std::end(m_vertices), id); + if(iterElemToRemove == std::end(m_vertices)) + { + return; + } + m_vertices.erase(iterElemToRemove); + + for(auto vertex : m_vertices) + { + removeDependency(id, vertex); + removeDependency(vertex, id); + } + } + + auto DirectedGraph::getVertices() const -> const DependencySet& + { + return m_vertices; + } + + void DirectedGraph::addVertex(Identifier id) + { + m_vertices.insert(id); + } + + auto DirectedGraph::hasPredecessors(Identifier id) const -> bool + { + return !m_predecessors[id].empty(); + } +} // namespace NMR::common::graph diff --git a/Source/Common/Graph/GraphAlgorithms.cpp b/Source/Common/Graph/GraphAlgorithms.cpp new file mode 100644 index 000000000..23980d9a4 --- /dev/null +++ b/Source/Common/Graph/GraphAlgorithms.cpp @@ -0,0 +1,133 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification,276529 +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#include "Common/Graph/GraphAlgorithms.h" +#include "Common/Graph/IDirectedGraph.h" + +#include +#include +#include +#include + +namespace NMR::common::graph +{ + bool isCyclicUtil(const IDirectedGraph & graph, Identifier node, std::vector & visited, std::vector & recStack) + { + if (!visited[node]) + { + visited[node] = true; + recStack[node] = true; + + for (Identifier dep = 0u; dep < static_cast(graph.getSize()); ++dep) + { + if (graph.isDirectlyDependingOn(node, dep)) + { + if (!visited[dep] && isCyclicUtil(graph, dep, visited, recStack)) + { + return true; + } + else if (recStack[dep]) + { + return true; + } + } + } + } + recStack[node] = false; + return false; + } + + bool isCyclic(const IDirectedGraph & graph) + { + std::vector visited(graph.getSize(), false); + std::vector recStack(graph.getSize(), false); + + for (Identifier id = 0u; id < static_cast(graph.getSize()); ++id) + { + if (isCyclicUtil(graph, id, visited, recStack)) + { + return true; + } + } + return false; + } + + VertexList topologicalSort(const IDirectedGraph & graph) + { + if (isCyclic(graph)) + { + return {}; + } + + // tsort based on DFS + enum class NodeType + { + CHILD, + PARENT + }; + std::stack> nodesToVisit; + std::vector visited(graph.getSize(), false); + VertexList topologicalOrder; + + for (Identifier id = 0u; id < static_cast(graph.getSize()); ++id) + { + if (!visited[id]) + { + nodesToVisit.push({NodeType::CHILD, id}); + + while (!nodesToVisit.empty()) + { + auto [nodeType, nodeId] = nodesToVisit.top(); + nodesToVisit.pop(); + + if (nodeType == NodeType::PARENT) + { + topologicalOrder.push_back(nodeId); + continue; + } + + visited[nodeId] = true; + nodesToVisit.push({NodeType::PARENT, nodeId}); + + for (Identifier dep = 0u; dep < static_cast(graph.getSize()); ++dep) + { + if (!visited[dep]) + { + if (graph.isDirectlyDependingOn(nodeId, dep)) + { + nodesToVisit.push({NodeType::CHILD, dep}); + } + } + } + + } + } + } + return topologicalOrder; + } +} // namespace gladius::nodes::graph diff --git a/Source/Common/Mesh/NMR_BeamLattice.cpp b/Source/Common/Mesh/NMR_BeamLattice.cpp index ae5a4f15e..00a1b59b0 100644 --- a/Source/Common/Mesh/NMR_BeamLattice.cpp +++ b/Source/Common/Mesh/NMR_BeamLattice.cpp @@ -26,7 +26,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Abstract: -NMR_MeshBeamLattice.h implements the class CMeshBeamLattice. +NMR_MeshBeamLattice.cpp implements the class CMeshBeamLattice. --*/ diff --git a/Source/Common/Mesh/NMR_Mesh.cpp b/Source/Common/Mesh/NMR_Mesh.cpp index b02d3dcea..e2fdb20a4 100644 --- a/Source/Common/Mesh/NMR_Mesh.cpp +++ b/Source/Common/Mesh/NMR_Mesh.cpp @@ -547,7 +547,7 @@ namespace NMR { try { addBall(getNode(ballData[iBall].m_nodeindex), ballData[iBall].m_radius); } - catch (CNMRException) {} + catch (CNMRException &) {} } delete [] ballData; diff --git a/Source/Model/Classes/NMR_ModelTextureAttachment.cpp b/Source/Common/Mesh/NMR_VolumeDataBoundary.cpp similarity index 73% rename from Source/Model/Classes/NMR_ModelTextureAttachment.cpp rename to Source/Common/Mesh/NMR_VolumeDataBoundary.cpp index de15961b5..8a268740d 100644 --- a/Source/Model/Classes/NMR_ModelTextureAttachment.cpp +++ b/Source/Common/Mesh/NMR_VolumeDataBoundary.cpp @@ -26,26 +26,28 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Abstract: -NMR_ModelTextureAttachment.cpp implements the Model Texture Attachment Class. +NMR_VolumeDataBoundary.cpp implements the class CVolumeDataBoundary. --*/ -#include "Model/Classes/NMR_ModelTextureAttachment.h" -#include "Model/Classes/NMR_ModelConstants.h" -#include "Common/NMR_Exception.h" +#include "Common/Mesh/NMR_VolumeDataBoundary.h" +#include "Model/Classes/NMR_ModelFunction.h" namespace NMR { - CModelTextureAttachment::CModelTextureAttachment(_In_ CModel * pModel, _In_ const std::wstring sPathURI, _In_ PImportStream pStream) - : CModelAttachment(pModel, sPathURI, PACKAGE_TEXTURE_RELATIONSHIP_TYPE, pStream) + CVolumeDataBoundary::CVolumeDataBoundary(PModelFunction pFunction) + : CFunctionReference(pFunction) { - + } - CModelTextureAttachment::~CModelTextureAttachment() + bool CVolumeDataBoundary::getMeshBBoxOnly() { - + return m_meshBBoxOnly; } + void CVolumeDataBoundary::setMeshBBoxOnly(bool bMeshBBoxOnly) + { + m_meshBBoxOnly = bMeshBBoxOnly; + } } - diff --git a/Source/Common/Mesh/NMR_VolumeDataColor.cpp b/Source/Common/Mesh/NMR_VolumeDataColor.cpp new file mode 100644 index 000000000..47494c38c --- /dev/null +++ b/Source/Common/Mesh/NMR_VolumeDataColor.cpp @@ -0,0 +1,42 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_VolumeDataColor.cpp implements the class CVolumeDataColor. + +--*/ + +#include "Common/Mesh/NMR_VolumeDataColor.h" + +namespace NMR { + + CVolumeDataColor::CVolumeDataColor(PModelFunction pFunction) + : CFunctionReference(pFunction) + { + } + +} diff --git a/Source/Common/Mesh/NMR_VolumeDataComposite.cpp b/Source/Common/Mesh/NMR_VolumeDataComposite.cpp new file mode 100644 index 000000000..014830934 --- /dev/null +++ b/Source/Common/Mesh/NMR_VolumeDataComposite.cpp @@ -0,0 +1,74 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_VolumeComposite.cpp implements the class CVolumeDataComposite. + +--*/ + +#include "Common/Mesh/NMR_VolumeDataComposite.h" + +namespace NMR { + + CVolumeDataComposite::CVolumeDataComposite() + { + + } + + NMR::PModelBaseMaterialResource CVolumeDataComposite::getBaseMaterialGroup() + { + return m_pBaseMaterialGroup; + } + + void CVolumeDataComposite::setBaseMaterialGroup(PModelBaseMaterialResource pBaseMaterialGroup) + { + m_pBaseMaterialGroup = pBaseMaterialGroup; + } + + nfUint32 CVolumeDataComposite::materialMappingCount() const + { + return (nfUint32)m_vctFunctionReferences.size(); + } + + PFunctionReference CVolumeDataComposite::getMaterialMapping(nfUint32 nIndex) + { + if (nIndex >= materialMappingCount()) + throw CNMRException(NMR_ERROR_INVALIDINDEX); + return m_vctFunctionReferences[nIndex]; + } + + PFunctionReference CVolumeDataComposite::addMaterialMapping(PModelFunction pFunction) + { + PFunctionReference pFunctionReference = std::make_shared(pFunction); + m_vctFunctionReferences.push_back(pFunctionReference); + return pFunctionReference; + } + + void CVolumeDataComposite::removeMaterialMapping(nfUint32) + {} + +} diff --git a/Source/Common/Mesh/NMR_VolumeDataProperty.cpp b/Source/Common/Mesh/NMR_VolumeDataProperty.cpp new file mode 100644 index 000000000..c41e1737e --- /dev/null +++ b/Source/Common/Mesh/NMR_VolumeDataProperty.cpp @@ -0,0 +1,70 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_VolumeDataProperty.cpp implements the class CVolumeDataProperty. + +--*/ + +#include "Common/Mesh/NMR_VolumeDataProperty.h" + +#include "Model/Classes/NMR_ModelFunction.h" + +namespace NMR +{ + + CVolumeDataProperty::CVolumeDataProperty(PModelFunction pFunction) + : CFunctionReference(pFunction), m_sName({}), m_bIsRequired(true) + { + } + + CVolumeDataProperty::CVolumeDataProperty(PModelFunction pFunction, + std::string sName) + : CFunctionReference(pFunction), m_sName(sName), m_bIsRequired(true) + { + } + + std::string CVolumeDataProperty::getName() + { + return m_sName; + } + + void CVolumeDataProperty::setName(std::string sPropertyName) + { + m_sName = sPropertyName; + } + + bool CVolumeDataProperty::isRequired() + { + return m_bIsRequired; + } + + void CVolumeDataProperty::setIsRequired(bool bIsRequired) + { + m_bIsRequired = bIsRequired; + } +} // namespace NMR diff --git a/Source/Common/MeshImport/NMR_MeshImporter_STL.cpp b/Source/Common/MeshImport/NMR_MeshImporter_STL.cpp index f99bbdfa0..7de693b82 100644 --- a/Source/Common/MeshImport/NMR_MeshImporter_STL.cpp +++ b/Source/Common/MeshImport/NMR_MeshImporter_STL.cpp @@ -127,7 +127,7 @@ namespace NMR { std::array aSTLHeader; nfUint32 nFaceCount = 0; - nfUint32 nGlobalColor = 0xffffffff; + // nfUint32 nGlobalColor = 0xffffffff; pStream->readIntoBuffer(&aSTLHeader[0], 80, true); pStream->readIntoBuffer((nfByte*)&nFaceCount, sizeof(nFaceCount), true); @@ -138,14 +138,14 @@ namespace NMR { if (nFaceCount > NMR_MESH_MAXFACECOUNT) throw CNMRException(NMR_ERROR_INVALIDFACECOUNT); - std::string sHeaderString(std::begin(aSTLHeader), std::end(aSTLHeader)); - std::size_t nFound = sHeaderString.find("COLOR="); - if (nFound != std::string::npos) { - if (nFound <= 76) { - nGlobalColor = ((nfUint32)aSTLHeader[nFound + 6]) + (((nfUint32)aSTLHeader[nFound + 7]) << 8) + (((nfUint32)aSTLHeader[nFound + 8]) << 16) + - (((nfUint32)aSTLHeader[nFound + 9]) << 24); - } - } + // std::string sHeaderString(std::begin(aSTLHeader), std::end(aSTLHeader)); + // std::size_t nFound = sHeaderString.find("COLOR="); + // if (nFound != std::string::npos) { + // if (nFound <= 76) { + // nGlobalColor = ((nfUint32)aSTLHeader[nFound + 6]) + (((nfUint32)aSTLHeader[nFound + 7]) << 8) + (((nfUint32)aSTLHeader[nFound + 8]) << 16) + + // (((nfUint32)aSTLHeader[nFound + 9]) << 24); + // } + // } nfUint32 nNodeIdx; MESHNODE * pNodes[3]; @@ -193,7 +193,8 @@ namespace NMR { throw CNMRException(NMR_ERROR_INVALIDCOORDINATES); if (bIsValid) { - MESHFACE * pFace = pMesh->addFace(pNodes[0], pNodes[1], pNodes[2]); + pMesh->addFace(pNodes[0], pNodes[1], pNodes[2]); + // MESHFACE * pFace = pMesh->addFace(pNodes[0], pNodes[1], pNodes[2]); //if (pProperties) { // nfUint32 nRed = (nfUint32) ((nfFloat) (Facet.m_attribute & 0x1f) / (255.0f / 31.0f)); // nfUint32 nGreen = (nfUint32)((nfFloat)((Facet.m_attribute >> 5) & 0x1f) / (255.0f / 31.0f)); diff --git a/Source/Common/NMR_Exception.cpp b/Source/Common/NMR_Exception.cpp index 6f5187159..8a45470a1 100644 --- a/Source/Common/NMR_Exception.cpp +++ b/Source/Common/NMR_Exception.cpp @@ -36,15 +36,9 @@ Each exception is identified via a global ErrorCode #include namespace NMR { - - CNMRException::CNMRException(_In_ nfError errorcode) : std::exception() - { - m_errorcode = errorcode; - } - - const char * CNMRException::what() const throw () + std::string errorCodeToMessage(nfError errorcode) { - switch (m_errorcode) { + switch (errorcode) { // Success / user interaction (0x0XXX) case NMR_USERABORTED: return "The called function was aborted by the user"; // General error codes (0x1XXX) @@ -438,6 +432,82 @@ namespace NMR { case NMR_ERROR_KEYSTOREUNSUPPORTEDALGORITHM: return "The algorithm attribute is unsupported"; case NMR_ERROR_KEYSTORETOOMANYELEMENTS: return "Too many elements added to a keystore tree"; + case NMR_ERROR_INVALIDIMAGE3DSIZE: return "Invalid Image3D Size"; + case NMR_ERROR_TOOMANYCHANNELSELECTORS: return "Too many channel selectors"; + case NMR_ERROR_TOOMANYVOLUMETRICCHANNELS: return "Too many volumetric channels"; + case NMR_ERROR_COULDNOTMAPPACKAGEID: return "Could not map package ID"; + case NMR_ERROR_DUPLICATEVOLUMETRICCHANNEL: return "Duplicate volumetric channel"; + case NMR_ERROR_COULDNOTREMOVEVOLUMETRICLAYER: return "Could not remove volumetric layer"; + case NMR_ERROR_COULDNOTREINDEXVOLUMETRICLAYER: return "Could not reindex volumetric layer"; + case NMR_ERROR_COULDNOTREINDEXCHANNELSELECTOR: return "Could not reindex channel selector"; + case NMR_ERROR_DUPLICATEIMAGE3DNAME: return "Duplicate Image3D Name"; + case NMR_ERROR_DUPLICATEIMAGESTACKSIZE: return "Duplicate Image3D Size"; + case NMR_ERROR_DUPLICATEIMAGESTACKSHEETCOUNT: return "Duplicate Image3D Sheet count"; + case NMR_ERROR_MISSINGIMAGESTACKSIZE: return "Missing 3D Image Size"; + case NMR_ERROR_MISSINGIMAGESTACKSHEETCOUNT: return "Missing 3D Image Sheetcount"; + case NMR_ERROR_MISSINGIMAGE3DNAME: return "Missing 3D Image Name"; + case NMR_ERROR_INVALIDIMAGSHEETCOUNT: return "Invalid Image3D Sheet Count"; + case NMR_ERROR_IMAGESHEETNOTFOUND: return "Image 3D Sheet not found"; + case NMR_ERROR_TOOMANYIMAGESHEETS: return "Too many Image3D sheets"; + case NMR_ERROR_MISSINGIMAGE3DSHEETPATH: return "Missing Image3D sheet path"; + case NMR_ERROR_DUPLICATEVOLUMETRICBACKGROUND: return "Duplicate Volumetric Background"; + case NMR_ERROR_INVALIDVOLUMETRICBACKGROUND: return "Invalid Volumetric Background"; + case NMR_ERROR_MISSINGVOLUMETRICDSTCHANNELNAME: return "Missing Volumetric DstChannel Name"; + case NMR_ERROR_MISSINGVOLUMETRICLAYERBLENDMETHOD: return "Missing Volumetric Layer Blend Method"; + case NMR_ERROR_DUPLICATEVOLUMETRICBLENDMETHOD: return "Duplicate Volumetric Blend Method"; + case NMR_ERROR_MISSINGVOLUMETRICLAYERTRANSFORM: return "Missing Volumetric Layer Transform"; + case NMR_ERROR_DUPLICATEVOLUMETRICTRANSFORM: return "Duplicate Volumetric Transform"; + case NMR_ERROR_DUPLICATEVOLUMETRICSRCALPHA: return "Duplicate Volumetric Src Alpha"; + case NMR_ERROR_INVALIDVOLUMETRICSRCALPHA: return "Invalid Volumetric Src Alpha"; + case NMR_ERROR_DUPLICATEVOLUMETRICDSTALPHA: return "Duplicate Volumetric Dst Alpha"; + case NMR_ERROR_INVALIDVOLUMETRICDSTALPHA: return "Invalid Volumetric Dst Alpha"; + case NMR_ERROR_DUPLICATEMASKCHANNELSELECTOR: return "Duplicate Mask Channel Selector"; + case NMR_ERROR_DUPLICATEVOLUMETRICMINVALUE: return "Duplicate Volumetric Min Value"; + case NMR_ERROR_INVALIDVOLUMETRICMINVALUE: return "Invalid Volumetric Min Value"; + case NMR_ERROR_DUPLICATEVOLUMETRICMAXVALUE: return "Duplicate Volumetric Max Value"; + case NMR_ERROR_INVALIDVOLUMETRICMAXVALUE: return "Invalid Volumetric Max Value"; + case NMR_ERROR_MISSINGCHANNELSELECTORID: return "Missing Channel Selector ID"; + case NMR_ERROR_MISSINGCHANNELSELECTORTILESTYLE: return "Missing Channel Selector TileStyle"; + case NMR_ERROR_DUPLICATEVOLUMETRICTILESTYLE: return "Duplicate Volumetric TileStyle"; + case NMR_ERROR_DUPLICATEVOLUMETRICFILTER: return "Duplicate Volumetric Filter"; + case NMR_ERROR_DUPLICATEVOLUMETRICSOURCECHANNEL: return "Duplicate Volumetric Source Channel"; + case NMR_ERROR_DUPLICATEVOLUMETRICDESTINATIONCHANNEL: return "Duplicate Volumetric Destination Channel"; + case NMR_ERROR_DUPLICATEVOLUMEDATABOUNDARY: return "Duplicate VolumeData Levelset"; + case NMR_ERROR_DUPLICATEVOLUMEDATATRANSFORM: return "Duplicate VolumeData Transform"; + case NMR_ERROR_DUPLICATEVOLUMEDATACHANNEL: return "Duplicate VolumeData Channel"; + case NMR_ERROR_DUPLICATEVOLUMEDATAFIELDID: return "Duplicate VolumeData VolumetricStackID"; + case NMR_ERROR_DUPLICATEVOLUMEDATASOLIDTHRESHOLD: return "Duplicate VolumeData Solid Threshold"; + case NMR_ERROR_MISSINGVOLUMEDATACHANNEL: return "Missing VolumeData Channel"; + case NMR_ERROR_MISSINGVOLUMEDATAFIELDID: return "Missing VolumeData VolumetricStackID"; + case NMR_ERROR_INVALIDVOLUMEDATASOLIDTHRESHOLD: return "Invalid VolumeData Solid Threshold"; + case NMR_ERROR_DUPLICATEVOLUMEDATAPROPERTY: return "Duplicate VolumeData Property"; + case NMR_ERROR_MISSINGVOLUMEDATAPROPERTYNAME: return "Missing VolumeData Property"; + case NMR_ERROR_MISSINGVOLUMETRICSRCALPHA: return "Missing Volumetric Source Alpha"; + case NMR_ERROR_MISSINGVOLUMETRICDSTALPHA: return "Missing Volumetric Destination Alpha"; + case NMR_ERROR_MISSING_ATTRIBUTE_SCALARFIELDCOMPOSED: return "Missing attribute in a ScalarFieldComposed element"; + case NMR_ERROR_DUPLICATE_ATTRIBUTE_SCALARFIELDCOMPOSED: return "Duplicate attribute in a ScalarFieldComposed element"; + case NMR_ERROR_MISSING_ATTRIBUTE_VECTOR3DFIELDCOMPOSED: return "Missing attribute in a Vector3DFieldComposed element"; + case NMR_ERROR_DUPLICATE_ATTRIBUTE_VECTOR3DFIELDCOMPOSED: return "Duplicate attribute in a Vector3DFieldComposed element"; + case NMR_ERROR_UNKNOWN_NODETYPE_IMPLICITMODEL: return "Unknown node type in implicit model"; + case NMR_ERROR_IMPLICIT_FUNCTION_INVALID_SOURCE_NODE : return "Invalid source node in implicit function"; + case NMR_ERROR_IMPLICIT_FUNCTION_INVALID_TARGET_NODE : return "Invalid target node in implicit function"; + case NMR_ERROR_IMPLICIT_FUNCTION_INVALID_SOURCE_PORT : return "Invalid source port in implicit function"; + case NMR_ERROR_IMPLICIT_FUNCTION_INVALID_TARGET_PORT : return "Invalid target port in implicit function"; + case NMR_ERROR_IMPLICIT_FUNCTION_INVALID_PORT_TYPE : return "Invalid port type in implicit function"; + case NMR_ERROR_IMPLICIT_PORT_DOES_NOT_EXIST : return "The port does not exist"; + case NMR_ERROR_DUPLICATE_VOLUMEDATA_MESHBBOXONLY : return "Duplicate VolumeData MeshBBoxOnly"; + case NMR_ERROR_DUPLICATE_VOLUMEDATA_MINFEATURESIZE : return "Duplicate VolumeData MinFeatureSize"; + case NMR_ERROR_IMPLICIT_FUNCTION_CYCLIC_GRAPH : return "Cyclic graph in implicit function"; + case NMR_ERROR_DUPLICATE_VOLUMEDATA_FALLBACKVALUE : return "Duplicate VolumeData FallbackValue"; + + case NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_FUNCTION_ID: return "Duplicate attribute functionid in levelset element"; + case NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_CHANNEL: return "Duplicate attribute channel in levelset element"; + case NMR_ERROR_DUPLICATE_BOUNDARY_SHAOE_FALLBACKVALUE: return "Duplicate attribute fallbackvalue in levelset element"; + case NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_TRANSFORM: return "Duplicate attribute transform in levelset element"; + case NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_MIN_FEATURE_SIZE: return "Duplicate attribute minfeaturesize in levelset element"; + case NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_FALLBACK_VALUE: return "Duplicate attribute fallbackvalue in levelset element"; + case NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_VOLUME_ID: return "Duplicate attribute volumeid in levelset element"; + // XML Parser Error Constants(0x9XXX) case NMR_ERROR_XMLPARSER_INVALIDATTRIBVALUE: return "Invalid XML attribute value"; case NMR_ERROR_XMLPARSER_INVALIDPARSERESULT: return "Invalid XML parse result"; @@ -481,6 +551,23 @@ namespace NMR { } } + CNMRException::CNMRException(_In_ nfError errorcode) : m_errorcode(errorcode), std::exception() + { + m_message = errorCodeToMessage(errorcode); + } + + CNMRException::CNMRException(nfError errorcode, + const std::string& message): m_errorcode(errorcode), m_message(message) + { + m_message = errorCodeToMessage(errorcode) + ": " + message; + } + + const char* CNMRException::what() const throw() + { + return m_message.c_str(); + + } + nfError CNMRException::getErrorCode() const { return m_errorcode; diff --git a/Source/Common/NMR_FunctionReference.cpp b/Source/Common/NMR_FunctionReference.cpp new file mode 100644 index 000000000..602d5f5d1 --- /dev/null +++ b/Source/Common/NMR_FunctionReference.cpp @@ -0,0 +1,108 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +This file implements the CFunctionReference class, which represents a reference +to a function resource in a 3D Manufacturing Format (3MF) file. The class +provides methods for setting and getting the unique resource ID of the +referenced function. + +--*/ + +#include "Common/NMR_FunctionReference.h" + +#include "Model/Classes/NMR_ModelFunction.h" + +namespace NMR +{ + CFunctionReference::CFunctionReference(UniqueResourceID functionResourceId) + : m_pFunctionResourceID(functionResourceId) + { + } + + CFunctionReference::CFunctionReference(PModelFunction pFunction) + : m_pFunctionResourceID( + pFunction ? pFunction->getPackageResourceID()->getUniqueID() : 0) + { + } + + void CFunctionReference::setFunctionResourceID(UniqueResourceID functionID) + { + m_pFunctionResourceID = functionID; + } + + UniqueResourceID CFunctionReference::getFunctionResourceID() const + { + return m_pFunctionResourceID; + } + + void NMR::CFunctionReference::setChannelName(std::string outputPortName) + { + m_outputPortName = std::move(outputPortName); + } + + std::string const& NMR::CFunctionReference::getChannelName() const + { + return m_outputPortName; + } + + void CFunctionReference::setTransform(NMR::NMATRIX3 transform) + { + m_transform = transform; + m_bHasTransform = true; + } + + bool CFunctionReference::hasTransform() const + { + return m_bHasTransform; + } + + NMR::NMATRIX3 CFunctionReference::getTransform() const + { + return m_transform; + } + + void CFunctionReference::setMinFeatureSize(double minFeatureSize) + { + m_minFeatureSize = minFeatureSize; + } + + double CFunctionReference::getMinFeatureSize() const + { + return m_minFeatureSize; + } + + void CFunctionReference::setFallBackValue(double fallBackValue) + { + m_fallBackValue = fallBackValue; + } + + double CFunctionReference::getFallBackValue() const + { + return m_fallBackValue; + } +} // namespace NMR diff --git a/Source/Common/NMR_StringUtils.cpp b/Source/Common/NMR_StringUtils.cpp index 81dad377b..d07b7d3c5 100644 --- a/Source/Common/NMR_StringUtils.cpp +++ b/Source/Common/NMR_StringUtils.cpp @@ -38,6 +38,7 @@ correctly and Exception-safe #include #include #include +#include namespace NMR { diff --git a/Source/Common/Platform/NMR_ImportStream_ZIP.cpp b/Source/Common/Platform/NMR_ImportStream_ZIP.cpp index 2ef6ba2ec..589116be5 100644 --- a/Source/Common/Platform/NMR_ImportStream_ZIP.cpp +++ b/Source/Common/Platform/NMR_ImportStream_ZIP.cpp @@ -35,7 +35,7 @@ This is a stream class for importing from a libZIP object. #include "Common/Platform/NMR_ImportStream_Unique_Memory.h" #include "Common/NMR_Exception.h" #include "Common/NMR_Exception_Windows.h" -#include +#include #include namespace NMR { diff --git a/Source/Model/Classes/NMR_ImplicitNodeTypes.cpp b/Source/Model/Classes/NMR_ImplicitNodeTypes.cpp new file mode 100644 index 000000000..6d2599f50 --- /dev/null +++ b/Source/Model/Classes/NMR_ImplicitNodeTypes.cpp @@ -0,0 +1,522 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#include "Model/Classes/NMR_ImplicitNodeTypes.h" + +#include "Common/NMR_Exception.h" +#include "Model/Classes/NMR_ModelImplicitNode.h" +#include "lib3mf_interfaceexception.hpp" + +namespace NMR +{ + namespace implicit + { + + NodeType::NodeType(std::string const& name, + AllowedInputOutputs const& allowedInputOutputs) + : m_name(name), m_allowedInputOutputs(allowedInputOutputs) + { + } + + std::string const& NodeType::getName() const + { + return m_name; + } + + AllowedInputOutputs const& NodeType::getAllowedInputOutputs() const + { + return m_allowedInputOutputs; + } + + using namespace Lib3MF; + NodeTypes::NodeTypes() + { + static AllowedInputOutputs const twoParameterSameDimensions{ + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, + In{{"A", eImplicitPortType::Scalar}, + {"B", eImplicitPortType::Scalar}}, + Out{{"result", eImplicitPortType::Scalar}}}, + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::VectorToVector, + In{{"A", eImplicitPortType::Vector}, + {"B", eImplicitPortType::Vector}}, + Out{{"result", eImplicitPortType::Vector}}}, + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::MatrixToMatrix, + In{{"A", eImplicitPortType::Matrix}, + {"B", eImplicitPortType::Matrix}}, + Out{{"result", eImplicitPortType::Matrix}}}}; + + static AllowedInputOutputs const oneParameterFunctionSameDimensions{ + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, + In{{"A", eImplicitPortType::Scalar}}, + Out{{"result", eImplicitPortType::Scalar}}}, + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::VectorToVector, + In{{"A", eImplicitPortType::Vector}}, + Out{{"result", eImplicitPortType::Vector}}}, + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::MatrixToMatrix, + In{{"A", eImplicitPortType::Matrix}}, + Out{{"result", eImplicitPortType::Matrix}}}}; + + m_nodeTypes = NodeTypesMap{ + {eImplicitNodeType::Addition, + {"addition", twoParameterSameDimensions}}, + {eImplicitNodeType::Subtraction, + {"subtraction", twoParameterSameDimensions}}, + {eImplicitNodeType::Constant, + {"constant", + {InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, In{}, + Out{{"value", eImplicitPortType::Scalar}}}}}}, + {eImplicitNodeType::Multiplication, + {"multiplication", twoParameterSameDimensions}}, + {eImplicitNodeType::Division, + {"division", twoParameterSameDimensions}}, + {eImplicitNodeType::ConstVec, + { + "constvec", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, In{}, + Out{{"vector", eImplicitPortType::Vector}}}, + }, + }}, + {eImplicitNodeType::ConstMat, + { + "constmat", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, In{}, + Out{{"matrix", eImplicitPortType::Matrix}}}, + }, + }}, + {eImplicitNodeType::ComposeVector, + { + "composevector", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"x", eImplicitPortType::Scalar}, + {"y", eImplicitPortType::Scalar}, + {"z", eImplicitPortType::Scalar}}, + Out{{"result", eImplicitPortType::Vector}}}, + }, + }}, + {eImplicitNodeType::DecomposeVector, + { + "decomposevector", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"A", eImplicitPortType::Vector}}, + Out{{"x", eImplicitPortType::Scalar}, + {"y", eImplicitPortType::Scalar}, + {"z", eImplicitPortType::Scalar}}}, + }, + }}, + {eImplicitNodeType::ComposeMatrix, + {"composematrix", // 4x4 + {InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"m00", eImplicitPortType::Scalar}, + {"m01", eImplicitPortType::Scalar}, + {"m02", eImplicitPortType::Scalar}, + {"m03", eImplicitPortType::Scalar}, + {"m10", eImplicitPortType::Scalar}, + {"m11", eImplicitPortType::Scalar}, + {"m12", eImplicitPortType::Scalar}, + {"m13", eImplicitPortType::Scalar}, + {"m20", eImplicitPortType::Scalar}, + {"m21", eImplicitPortType::Scalar}, + {"m22", eImplicitPortType::Scalar}, + {"m23", eImplicitPortType::Scalar}, + {"m30", eImplicitPortType::Scalar}, + {"m31", eImplicitPortType::Scalar}, + {"m32", eImplicitPortType::Scalar}, + {"m33", eImplicitPortType::Scalar}}, + Out{{"result", eImplicitPortType::Matrix}}}}}}, + {eImplicitNodeType::MatrixFromColumns, + {"matrixfromcolumns", // 4x4 + {InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"A", eImplicitPortType::Vector}, + {"B", eImplicitPortType::Vector}, + {"C", eImplicitPortType::Vector}, + {"D", eImplicitPortType::Vector}}, + Out{{"result", eImplicitPortType::Matrix}}}}}}, + {eImplicitNodeType::MatrixFromRows, + { + "matrixfromrows", // 4x4 + {InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"A", eImplicitPortType::Vector}, + {"B", eImplicitPortType::Vector}, + {"C", eImplicitPortType::Vector}, + {"D", eImplicitPortType::Vector}}, + Out{{"result", eImplicitPortType::Matrix}}}}, + }}, + {eImplicitNodeType::Dot, + {"dot", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"A", eImplicitPortType::Vector}, + {"B", eImplicitPortType::Vector}}, + Out{{"result", eImplicitPortType::Scalar}}}, + }}}, + {eImplicitNodeType::Cross, + {"cross", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"A", eImplicitPortType::Vector}, + {"B", eImplicitPortType::Vector}}, + Out{{"result", eImplicitPortType::Vector}}}, + }}}, + {eImplicitNodeType::MatVecMultiplication, + {"matvecmultiplication", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"A", eImplicitPortType::Matrix}, + {"B", eImplicitPortType::Vector}}, + Out{{"result", eImplicitPortType::Vector}}}, + }}}, + {eImplicitNodeType::Transpose, + {"transpose", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"A", eImplicitPortType::Matrix}}, + Out{{"result", eImplicitPortType::Matrix}}}, + }}}, + {eImplicitNodeType::Inverse, + {"inverse", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"A", eImplicitPortType::Matrix}}, + Out{{"result", eImplicitPortType::Matrix}}}, + }}}, + {eImplicitNodeType::Sinus, + {"sin", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Cosinus, + {"cos", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Tan, + {"tan", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::ArcSin, + {"asin", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::ArcCos, + {"acos", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::ArcTan, + {"atan", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::ArcTan2, + {"atan2", twoParameterSameDimensions}}, + {eImplicitNodeType::Min, {"min", twoParameterSameDimensions}}, + {eImplicitNodeType::Max, {"max", twoParameterSameDimensions}}, + {eImplicitNodeType::Abs, + {"abs", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Fmod, {"fmod", twoParameterSameDimensions}}, + {eImplicitNodeType::Mod, {"mod", twoParameterSameDimensions}}, + {eImplicitNodeType::Pow, {"pow", twoParameterSameDimensions}}, + {eImplicitNodeType::Sqrt, + {"sqrt", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Exp, + {"exp", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Log, + {"log", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Log2, + {"log2", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Log10, + {"log10", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Cosh, + {"cosh", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Sinh, + {"sinh", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Tanh, + {"tanh", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Round, + {"round", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Ceil, + {"ceil", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Floor, + {"floor", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Sign, + {"sign", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Fract, + {"fract", oneParameterFunctionSameDimensions}}, + {eImplicitNodeType::Select, + {"select", // result = A < B ? C : D + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, + In{{"A", eImplicitPortType::Scalar}, + {"B", eImplicitPortType::Scalar}, + {"C", eImplicitPortType::Scalar}, + {"D", eImplicitPortType::Scalar}}, + Out{{"result", eImplicitPortType::Scalar}}}, + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::VectorToVector, + In{{"A", eImplicitPortType::Vector}, + {"B", eImplicitPortType::Vector}, + {"C", eImplicitPortType::Vector}, + {"D", eImplicitPortType::Vector}}, + Out{{"result", eImplicitPortType::Vector}}}, + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::MatrixToMatrix, + In{{"A", eImplicitPortType::Matrix}, + {"B", eImplicitPortType::Matrix}, + {"C", eImplicitPortType::Matrix}, + {"D", eImplicitPortType::Matrix}}, + Out{{"result", eImplicitPortType::Matrix}}}, + + }}}, + {eImplicitNodeType::Clamp, // result = min(max(A, min), max) + {"clamp", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, + In{{"A", eImplicitPortType::Scalar}, + {"min", eImplicitPortType::Scalar}, + {"max", eImplicitPortType::Scalar}}, + Out{{"result", eImplicitPortType::Scalar}}}, + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::VectorToVector, + In{{"A", eImplicitPortType::Vector}, + {"min", eImplicitPortType::Vector}, + {"max", eImplicitPortType::Vector}}, + Out{{"result", eImplicitPortType::Vector}}}, + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::MatrixToMatrix, + In{{"A", eImplicitPortType::Matrix}, + {"min", eImplicitPortType::Matrix}, + {"max", eImplicitPortType::Matrix}}, + Out{{"result", eImplicitPortType::Matrix}}}, + }}}, + {eImplicitNodeType::Length, + {"length", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"A", eImplicitPortType::Vector}}, + Out{{"result", eImplicitPortType::Scalar}}}, + }}}, + {eImplicitNodeType::VectorFromScalar, + {"vectorfromscalar", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"A", eImplicitPortType::Scalar}}, + Out{{"result", eImplicitPortType::Vector}}}, + }}}, + {eImplicitNodeType::ConstResourceID, + {"constresourceid", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, In{}, + Out{{"value", eImplicitPortType::ResourceID}}}, + }}}, + {eImplicitNodeType::Mesh, + {"mesh", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"pos", eImplicitPortType::Vector}, + {"mesh", eImplicitPortType::ResourceID}}, + Out{{"distance", eImplicitPortType::Scalar}}}, + }}}, + {eImplicitNodeType::UnsignedMesh, + {"mesh", + { + InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"pos", eImplicitPortType::Vector}, + {"mesh", eImplicitPortType::ResourceID}}, + Out{{"distance", eImplicitPortType::Scalar}}}, + }}}, + {eImplicitNodeType::FunctionCall, + {"functioncall", + {InputOutputRule{ + Lib3MF::eImplicitNodeConfiguration::Default, + In{{"functionID", + eImplicitPortType::ResourceID}}, // not predefined + // besides the + // functionID + Out{} // not predefined + }}}}}; + } + + NodeType const& NodeTypes::getNodeType( + Lib3MF::eImplicitNodeType type) const + { + auto it = m_nodeTypes.find(type); + if(it == m_nodeTypes.end()) + { + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDNODECONFIGURATION, + "Unknown node type " + + std::to_string(static_cast(type))); + } + return it->second; + } + NodeTypesMap const& NodeTypes::getTypes() const + { + return m_nodeTypes; + } + + void NodeTypes::addExpectedPortsToNode( + NMR::CModelImplicitNode& node) const + { + auto const& nodeType = getNodeType(node.getNodeType()); + + if(nodeType.getAllowedInputOutputs().empty()) + { + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDNODECONFIGURATION, + "No known configuration for node type " + + std::to_string(static_cast(node.getNodeType()))); + } + applyInputOutputRuleToNode( + node, nodeType.getAllowedInputOutputs().front()); + } + + void NodeTypes::addExpectedPortsToNode( + NMR::CModelImplicitNode& node, + Lib3MF::eImplicitNodeConfiguration const configuration) const + { + if(configuration == Lib3MF::eImplicitNodeConfiguration::Default) + { + addExpectedPortsToNode(node); + return; + } + + auto const& nodeType = getNodeType(node.getNodeType()); + if(nodeType.getAllowedInputOutputs().empty()) + { + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDNODECONFIGURATION, + "No known configuration for node type " + + std::to_string(static_cast(node.getNodeType()))); + } + + if((nodeType.getAllowedInputOutputs().size() == 1u) && + configuration != Lib3MF::eImplicitNodeConfiguration::Default) + { + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDNODECONFIGURATION, + "Node type: " + + std::to_string(static_cast(node.getNodeType())) + + " only supports the default configuration"); + } + + for(auto const& rule : nodeType.getAllowedInputOutputs()) + { + if(rule.configuration == configuration) + { + applyInputOutputRuleToNode(node, rule); + return; + } + } + + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDNODECONFIGURATION, + "Node type: " + + std::to_string(static_cast(node.getNodeType())) + + " does not support configuration: " + + std::to_string(static_cast(configuration))); + } + + void NodeTypes::applyInputOutputRuleToNode( + NMR::CModelImplicitNode& node, InputOutputRule const& rule) const + { + for(auto const& input : rule.inputs) + { + auto inPort = node.addInput(input.first, input.first); + inPort->setType(input.second); + } + for(auto const& output : rule.outputs) + { + auto outPort = node.addOutput(output.first, output.first); + outPort->setType(output.second); + } + } + + bool NodeTypes::arePortsValidForNode( + NMR::CModelImplicitNode const& node) const + { + auto const& nodeType = getNodeType(node.getNodeType()); + for(auto const& rule : nodeType.getAllowedInputOutputs()) + { + if(arePortsValidForRule(node, rule)) + { + return true; + } + } + return false; + } + + bool NodeTypes::arePortsValidForRule( + NMR::CModelImplicitNode const& node, + InputOutputRule const& rule) const + { + for(auto const& input : rule.inputs) + { + auto inPort = node.findInput(input.first); + if(inPort == nullptr) + { + return false; + } + if(inPort->getType() != input.second) + { + return false; + } + } + + for(auto const& output : rule.outputs) + { + auto outPort = node.findOutput(output.first); + if(outPort == nullptr) + { + return false; + } + if(outPort->getType() != output.second) + { + return false; + } + } + + return true; + } + + } // namespace implicit + +} // namespace NMR diff --git a/Source/Model/Classes/NMR_Model.cpp b/Source/Model/Classes/NMR_Model.cpp index a2a957f16..65b5d45f0 100644 --- a/Source/Model/Classes/NMR_Model.cpp +++ b/Source/Model/Classes/NMR_Model.cpp @@ -45,9 +45,13 @@ A model is an in memory representation of the 3MF file. #include "Model/Classes/NMR_ModelCompositeMaterials.h" #include "Model/Classes/NMR_ModelMultiPropertyGroup.h" #include "Model/Classes/NMR_ModelTexture2D.h" +#include "Model/Classes/NMR_ModelImage3D.h" +#include "Model/Classes/NMR_ModelImageStack.h" #include "Model/Classes/NMR_ModelSliceStack.h" #include "Model/Classes/NMR_ModelMetaDataGroup.h" #include "Model/Classes/NMR_KeyStore.h" +#include "Model/Classes/NMR_ModelImplicitFunction.h" +#include "Model/Classes/NMR_ModelFunctionFromImage3D.h" #include "Common/Mesh/NMR_Mesh.h" #include "Common/MeshInformation/NMR_MeshInformation.h" @@ -396,22 +400,34 @@ namespace NMR { } } - ModelResourceID CModel::generateResourceID() - { - // Determine the initial resource ID - ModelResourceID currentResourceID = 1; - auto iIterator = m_ResourceMap.rbegin(); - if (iIterator != m_ResourceMap.rend()) { - currentResourceID = iIterator->first + 1; - } + // Retrieve a unique Resource ID + ModelResourceID CModel::generateResourceID() + { + ModelResourceID highestID = 0; + + if(m_ResourceMap.empty()) + { + return 1; + } + + // find the lowest unoccupied ModelResourceID + std::unordered_set occupiedIDs; + for(const auto &entry : m_ResourceMap) + { + occupiedIDs.insert( + entry.second->getPackageResourceID()->getModelResourceID()); + } - // Ensure the generated ID is unique - if(currentResourceID <= m_MaxResourceId) { - currentResourceID = m_MaxResourceId + 1; + ModelResourceID newResourceID = 1; + + // Loop until we find an unoccupied resource ID + while(occupiedIDs.find(newResourceID) != occupiedIDs.end()) + { + ++newResourceID; } - return currentResourceID; - } + return newResourceID; + } void CModel::updateUniqueResourceID(UniqueResourceID nOldID, UniqueResourceID nNewID) { @@ -541,6 +557,24 @@ namespace NMR { CModelSliceStack *pSliceStack = dynamic_cast(pResource.get()); if (pSliceStack != nullptr) m_SliceStackLookup.push_back(pResource); + + CModelImage3D* pImage3d = dynamic_cast(pResource.get()); + if (pImage3d != nullptr) + m_Image3DLookup.push_back(pResource); + + + CModelImplicitFunction* pImplicitFunction = dynamic_cast(pResource.get()); + if (pImplicitFunction != nullptr) + m_FunctionLookup.push_back(pResource); + + CModelFunctionFromImage3D* pFunctionFromImage3D = dynamic_cast(pResource.get()); + if (pFunctionFromImage3D != nullptr) + m_FunctionLookup.push_back(pResource); + + CModelVolumeData* pVolumeData = dynamic_cast(pResource.get()); + if (pVolumeData != nullptr) + m_VolumeDataLookup.push_back(pResource); + } // Clear all build items and Resources @@ -559,8 +593,12 @@ namespace NMR { m_SliceStackLookup.clear(); m_CompositeMaterialsLookup.clear(); m_MultiPropertyGroupLookup.clear(); + m_Image3DLookup.clear(); m_MetaDataGroup->clear(); + + m_FunctionLookup.clear(); + m_VolumeDataLookup.clear(); } _Ret_maybenull_ PModelBaseMaterialResource CModel::findBaseMaterial(_In_ PPackageResourceID pID) @@ -927,7 +965,225 @@ namespace NMR { oldToNewMapping[pTextureResource->getPackageResourceID()->getUniqueID()] = pNewTextureResource->getPackageResourceID()->getUniqueID(); } } - + + // Convenience functions for 3D Textures + PModelImage3D CModel::findImage3D(_In_ UniqueResourceID nResourceID) + { + PModelResource pResource = findResource(nResourceID); + if (pResource != nullptr) { + PModelImage3D pImage3DResource = std::dynamic_pointer_cast(pResource); + if (pImage3DResource.get() == nullptr) + throw CNMRException(NMR_ERROR_RESOURCETYPEMISMATCH); + return pImage3DResource; + } + return nullptr; + } + + // Convenience functions for 3D Textures + PModelImageStack CModel::findImageStack(_In_ UniqueResourceID nResourceID) + { + PModelResource pResource = findResource(nResourceID); + if (pResource != nullptr) { + PModelImageStack pImageStack = std::dynamic_pointer_cast(pResource); + if (pImageStack.get() == nullptr) + throw CNMRException(NMR_ERROR_RESOURCETYPEMISMATCH); + return pImageStack; + } + return nullptr; + } + + nfUint32 CModel::getImage3DCount() + { + return (nfUint32)m_Image3DLookup.size(); + } + + PModelResource CModel::getImage3DResource(_In_ nfUint32 nIndex) + { + nfUint32 nCount = getImage3DCount(); + if (nIndex >= nCount) + throw CNMRException(NMR_ERROR_INVALIDINDEX); + + return m_Image3DLookup[nIndex]; + + } + + CModelImage3D * CModel::getImage3D(_In_ nfUint32 nIndex) + { + CModelImage3D * pImage3D = dynamic_cast (getImage3DResource(nIndex).get()); + if (pImage3D == nullptr) + throw CNMRException(NMR_ERROR_RESOURCETYPEMISMATCH); + + return pImage3D; + + } + + void CModel::mergeImage3Ds(_In_ CModel * pSourceModel, _In_ UniqueResourceIDMapping& oldToNewMapping) + { + if (pSourceModel == nullptr) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + nfUint32 nCount = pSourceModel->getImage3DCount(); + nfUint32 nIndex; + + for (nIndex = 0; nIndex < nCount; nIndex++) + { + CModelImage3D* pOldImage3D = pSourceModel->getImage3D(nIndex); + if (pOldImage3D == nullptr) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + CModelImageStack* pOldImageStack = dynamic_cast(pOldImage3D); + if (pOldImageStack) + { + nfUint32 nSheetCount = pOldImageStack->getSheetCount();; + nfUint32 nIndex; + PModelImageStack pNewImageStack = CModelImageStack::make(generateResourceID(), this, pOldImageStack->getRowCount(), pOldImageStack->getColumnCount(), nSheetCount); + + for (nIndex = 0; nIndex < nSheetCount; nIndex++) { + PModelAttachment pSheet = pOldImageStack->getSheet(nIndex); + if (pSheet.get() != nullptr) { + PModelAttachment pNewSheet = findModelAttachment(pSheet->getPathURI()); + if (pNewSheet.get() == nullptr) + throw CNMRException(NMR_ERROR_ATTACHMENTNOTFOUND); + + pNewImageStack->setSheet(nIndex, pNewSheet); + } + } + + addResource(pNewImageStack); + + oldToNewMapping[pOldImageStack->getPackageResourceID()->getUniqueID()] = pNewImageStack->getPackageResourceID()->getUniqueID(); + } + else + { + throw CNMRException(NMR_ERROR_NOTIMPLEMENTED); + } + } + } + + void CModel::mergeFunctions(CModel *pSourceModel, + UniqueResourceIDMapping &oldToNewMapping) + { + if (pSourceModel == nullptr) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + nfUint32 previousTargetFunctionCount = getFunctionCount(); + + nfUint32 nCount = pSourceModel->getFunctionCount(); + nfUint32 nIndex; + + for (nIndex = 0; nIndex < nCount; nIndex++) + { + CModelFunctionFromImage3D *pOldFunctionFromImage3D = pSourceModel->getFunctionFromImage3D(nIndex); + CModelImplicitFunction *pOldImplicitFunction = pSourceModel->getImplicitFunction(nIndex); + + if (pOldFunctionFromImage3D) + { + PModelFunctionFromImage3D pNewFunctionFromImage3D = std::make_shared(*pOldFunctionFromImage3D); + auto newPkgId = generatePackageResourceID(currentPath(), generateResourceID()); + pNewFunctionFromImage3D->setModel(nullptr); // Hack: Allows us to set the package resource ID without updating the model + pNewFunctionFromImage3D->setPackageResourceID(newPkgId); + pNewFunctionFromImage3D->setModel(this); + + + // Update the referenced image3D resource ID + auto newIdIter = oldToNewMapping.find(pOldFunctionFromImage3D->getImage3DUniqueResourceID()); + if (newIdIter != oldToNewMapping.cend()) + { + auto const newId = findPackageResourceID(newIdIter->second); + if (!newId) + { + throw CNMRException(NMR_ERROR_RESOURCENOTFOUND); + } + pNewFunctionFromImage3D->setImage3DUniqueResourceID(newId->getUniqueID()); + } + else + { + throw CNMRException(NMR_ERROR_RESOURCENOTFOUND); + } + + addResource(pNewFunctionFromImage3D); + oldToNewMapping[pOldFunctionFromImage3D->getPackageResourceID()->getUniqueID()] = pNewFunctionFromImage3D->getPackageResourceID()->getUniqueID(); + } + else if (pOldImplicitFunction) + { + PModelImplicitFunction pNewImplicitFunction = std::make_shared(*pOldImplicitFunction); + + + auto newPkgId = generatePackageResourceID(currentPath(), generateResourceID()); + pNewImplicitFunction->setModel(nullptr); // Hack: Allows us to set the package resource ID without updating the model + pNewImplicitFunction->setPackageResourceID(newPkgId); + pNewImplicitFunction->setModel(this); + + for (auto &node : *pNewImplicitFunction->getNodes()) + { + node->setParent(pNewImplicitFunction.get()); + } + + addResource(pNewImplicitFunction); + oldToNewMapping[pOldImplicitFunction->getPackageResourceID()->getUniqueID()] = pNewImplicitFunction->getPackageResourceID()->getUniqueID(); + + // std::cout << "Merged implicit function (unique ids) " << pOldImplicitFunction->getPackageResourceID()->getUniqueID() << " to " << pNewImplicitFunction->getPackageResourceID()->getUniqueID() << std::endl; + + // std::cout << "Merged implicit function (model resource ids) " << pOldImplicitFunction->getPackageResourceID()->getModelResourceID() << " to " << pNewImplicitFunction->getPackageResourceID()->getModelResourceID() << std::endl; + } + else + { + throw CNMRException(NMR_ERROR_NOTIMPLEMENTED); + } + } + + nCount = getFunctionCount(); + + // loop over all newly added functions and update the references in ConstResourceID nodes + for (nIndex = previousTargetFunctionCount; nIndex < nCount; nIndex++) + { + CModelImplicitFunction * pImplicitFunction = getImplicitFunction(nIndex); + + for (auto & node : *pImplicitFunction->getNodes()) + { + if (node->getNodeType() == Lib3MF::eImplicitNodeType::ConstResourceID) + { + auto const oldId = pSourceModel->findPackageResourceID(pSourceModel->currentPath(), node->getModelResourceID()); + if (!oldId) + { + throw CNMRException(NMR_ERROR_RESOURCENOTFOUND, "Resource ID " + std::to_string(node->getModelResourceID()) + + " not found in source model, this might happen when the file contains forward references"); + } + + auto const newIdIter = oldToNewMapping.find(oldId->getUniqueID()); + if (newIdIter == oldToNewMapping.cend()) + { + throw CNMRException(NMR_ERROR_RESOURCENOTFOUND, "Resource ID " + std::to_string(oldId->getUniqueID()) + " not found in mapping"); + } + + auto const newId = findPackageResourceID(newIdIter->second); + if (!newId) + { + throw CNMRException(NMR_ERROR_RESOURCENOTFOUND); + } + + node->setModelResourceID(newId->getModelResourceID()); + + + // check if the resource is available + auto res = findResource(currentPath(), newId->getModelResourceID()); + if (!res) + { + throw CNMRException(NMR_ERROR_RESOURCENOTFOUND); + } + + auto resource = node->getResource(); + if (!resource) + { + throw CNMRException(NMR_ERROR_RESOURCENOTFOUND); + + } + } + } + } + + } + nfUint32 CModel::createHandle() { if (m_nHandleCounter >= NMR_MAXHANDLE) @@ -1233,7 +1489,34 @@ namespace NMR { return false; } - return false; + if(sExtension == XML_3MF_NAMESPACE_VOLUMETRICSPEC) + { + for(size_t i = 0; i < m_ObjectLookup.size(); i++) + { + CModelMeshObject *pMeshObject = + dynamic_cast( + m_ObjectLookup[i].get()); + if(pMeshObject == nullptr || + pMeshObject->getMesh() == nullptr) + continue; + + auto volumeData = pMeshObject->getVolumeData(); + if (!volumeData) + continue; + + if (volumeData->hasColor() || volumeData->getPropertyCount() > 0 || volumeData->hasComposite()) + { + return true; + } + } + } + + if (sExtension == XML_3MF_NAMESPACE_IMPLICITSPEC) + { + if (m_FunctionLookup.size() > 0) + return true; + } + return false; } nfUint32 CModel::getSliceStackCount() { @@ -1325,4 +1608,214 @@ namespace NMR { return size; } -} + ModelResourceID CModel::getMaxModelResourceID() + { + auto maxResourceID = std::max_element( + m_Resources.begin(), m_Resources.end(), + [](const PModelResource &a, const PModelResource &b) + { + return a->getPackageResourceID()->getModelResourceID() < + b->getPackageResourceID()->getModelResourceID(); + }); + if(maxResourceID == m_Resources.end()) return 0; + + return (*maxResourceID)->getPackageResourceID()->getModelResourceID(); + } + + PModelFunction CModel::findFunction(_In_ UniqueResourceID nResourceID) + { + for(size_t i = 0; i < m_FunctionLookup.size(); i++) + { + PModelFunction pFunction = + std::dynamic_pointer_cast( + m_FunctionLookup[i]); + if(pFunction->getPackageResourceID()->getUniqueID() == + nResourceID) + return pFunction; + } + return nullptr; + } + + nfUint32 CModel::getFunctionCount() { + return (nfUint32)m_FunctionLookup.size(); + } + + PModelResource CModel::getFunctionResource(_In_ nfUint32 nIndex) { + nfUint32 nCount = getFunctionCount(); + if (nIndex >= nCount) + throw CNMRException(NMR_ERROR_INVALIDINDEX); + + return m_FunctionLookup[nIndex]; + } + + CModelImplicitFunction* CModel::getImplicitFunction(_In_ nfUint32 nIndex) { + PModelResource pResource = getFunctionResource(nIndex); + if (pResource.get() == nullptr) + throw CNMRException(NMR_ERROR_INVALIDINDEX); + + return dynamic_cast(pResource.get()); + } + + CModelFunctionFromImage3D * CModel::getFunctionFromImage3D(nfUint32 nIndex) + { + PModelResource pResource = getFunctionResource(nIndex); + if (pResource.get() == nullptr) + throw CNMRException(NMR_ERROR_INVALIDINDEX); + + return dynamic_cast(pResource.get()); + } + + PModelVolumeData CModel::findVolumeData(UniqueResourceID nResourceID) + { + for(size_t i = 0; i < m_VolumeDataLookup.size(); i++) + { + PModelVolumeData pVolumeData = + std::dynamic_pointer_cast( + m_VolumeDataLookup[i]); + if(pVolumeData->getPackageResourceID()->getUniqueID() == + nResourceID) + return pVolumeData; + } + return nullptr; + } + + nfUint32 NMR::CModel::getVolumeDataCount() + { + return (nfUint32)m_VolumeDataLookup.size(); + } + + PModelResource CModel::getVolumeDataResource(nfUint32 nIndex) + { + nfUint32 nCount = getVolumeDataCount(); + if (nIndex >= nCount) + throw CNMRException(NMR_ERROR_INVALIDINDEX); + + return m_VolumeDataLookup[nIndex]; + } + + CModelVolumeData * CModel::getVolumeData(nfUint32 nIndex) + { + PModelResource pResource = getVolumeDataResource(nIndex); + if (pResource.get() == nullptr) + throw CNMRException(NMR_ERROR_INVALIDINDEX); + + return dynamic_cast(pResource.get()); + } + + + void CModel::removeResource(PModelResource pResource) + { + if (pResource.get() == nullptr) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + // Remove from resource list + auto resourceIterator = std::find(m_Resources.begin(), m_Resources.end(), pResource); + if (resourceIterator == m_Resources.end()) + { + throw CNMRException(NMR_ERROR_RESOURCENOTFOUND); + + } + + m_Resources.erase(resourceIterator); + + // Remove from Resource map + auto resourceMapIterator = m_ResourceMap.find(pResource->getPackageResourceID()->getUniqueID()); + if (resourceMapIterator == m_ResourceMap.end()) + { + throw CNMRException(NMR_ERROR_RESOURCENOTFOUND); + } + + m_ResourceMap.erase(resourceMapIterator); + + m_resourceHandler.removePackageResourceID(pResource->getPackageResourceID()); + + // Remove from specific resource lists + + auto objectIterator = std::find(m_ObjectLookup.begin(), m_ObjectLookup.end(), pResource); + if (objectIterator != m_ObjectLookup.end()) + { + m_ObjectLookup.erase(objectIterator); + return; + } + + auto baseMaterialIterator = std::find(m_BaseMaterialLookup.begin(), m_BaseMaterialLookup.end(), pResource); + if (baseMaterialIterator != m_BaseMaterialLookup.end()) + { + m_BaseMaterialLookup.erase(baseMaterialIterator); + return; + } + + auto textureIterator = std::find(m_TextureLookup.begin(), m_TextureLookup.end(), pResource); + if (textureIterator != m_TextureLookup.end()) + { + m_TextureLookup.erase(textureIterator); + return; + } + + auto sliceStackIterator = std::find(m_SliceStackLookup.begin(), m_SliceStackLookup.end(), pResource); + if (sliceStackIterator != m_SliceStackLookup.end()) + { + m_SliceStackLookup.erase(sliceStackIterator); + return; + } + + auto colorGroupIterator = std::find(m_ColorGroupLookup.begin(), m_ColorGroupLookup.end(), pResource); + if (colorGroupIterator != m_ColorGroupLookup.end()) + { + m_ColorGroupLookup.erase(colorGroupIterator); + return; + } + + auto texture2DGroupIterator = std::find(m_Texture2DGroupLookup.begin(), m_Texture2DGroupLookup.end(), pResource); + if (texture2DGroupIterator != m_Texture2DGroupLookup.end()) + { + m_Texture2DGroupLookup.erase(texture2DGroupIterator); + return; + } + + auto compositeMaterialsIterator = std::find(m_CompositeMaterialsLookup.begin(), m_CompositeMaterialsLookup.end(), pResource); + if (compositeMaterialsIterator != m_CompositeMaterialsLookup.end()) + { + m_CompositeMaterialsLookup.erase(compositeMaterialsIterator); + return; + } + + auto multiPropertyGroupIterator = std::find(m_MultiPropertyGroupLookup.begin(), m_MultiPropertyGroupLookup.end(), pResource); + if (multiPropertyGroupIterator != m_MultiPropertyGroupLookup.end()) + { + m_MultiPropertyGroupLookup.erase(multiPropertyGroupIterator); + return; + } + + auto image3DIterator = std::find(m_Image3DLookup.begin(), m_Image3DLookup.end(), pResource); + if (image3DIterator != m_Image3DLookup.end()) + { + m_Image3DLookup.erase(image3DIterator); + return; + } + + auto functionIterator = std::find(m_FunctionLookup.begin(), m_FunctionLookup.end(), pResource); + if (functionIterator != m_FunctionLookup.end()) + { + m_FunctionLookup.erase(functionIterator); + return; + } + + auto volumeDataIterator = std::find(m_VolumeDataLookup.begin(), m_VolumeDataLookup.end(), pResource); + if (volumeDataIterator != m_VolumeDataLookup.end()) + { + m_VolumeDataLookup.erase(volumeDataIterator); + return; + } + + auto levelSetObjectIterator = std::find(m_levelSetObjectLookup.begin(), m_levelSetObjectLookup.end(), pResource); + if (levelSetObjectIterator != m_levelSetObjectLookup.end()) + { + m_levelSetObjectLookup.erase(levelSetObjectIterator); + return; + } + + throw CNMRException(NMR_ERROR_RESOURCENOTFOUND); + } +} // namespace NMR + diff --git a/Source/Model/Classes/NMR_ModelAttachment.cpp b/Source/Model/Classes/NMR_ModelAttachment.cpp index 68e851d7f..d36f9d90b 100644 --- a/Source/Model/Classes/NMR_ModelAttachment.cpp +++ b/Source/Model/Classes/NMR_ModelAttachment.cpp @@ -82,6 +82,20 @@ namespace NMR { m_sRelationShipType = sRelationShipType; } + PModelAttachment CModelAttachment::cloneIntoNewModel(_In_ CModel * pModel, _In_ nfBool bCloneMemory) + { + PImportStream pNewStream; + if (m_pStream.get() != nullptr) { + if (bCloneMemory) { + pNewStream = m_pStream->copyToMemory(); + } + else { + pNewStream = m_pStream; + } + } + + return pModel->addAttachment (m_sPathURI, m_sRelationShipType, pNewStream); + } } diff --git a/Source/Model/Classes/NMR_ModelComponentsObject.cpp b/Source/Model/Classes/NMR_ModelComponentsObject.cpp index d77b8a369..b2f71f891 100644 --- a/Source/Model/Classes/NMR_ModelComponentsObject.cpp +++ b/Source/Model/Classes/NMR_ModelComponentsObject.cpp @@ -149,8 +149,26 @@ namespace NMR { void CModelComponentsObject::extendOutbox(_Out_ NOUTBOX3& vOutBox, _In_ const NMATRIX3 mAccumulatedMatrix) { - for (auto iIterator = m_Components.begin(); iIterator != m_Components.end(); iIterator++) { - (*iIterator)->getObject()->extendOutbox(vOutBox, fnMATRIX3_multiply(mAccumulatedMatrix, (*iIterator)->getTransform())); + for(auto & component : m_Components) + { + component->getObject()->extendOutbox(vOutBox, fnMATRIX3_multiply(mAccumulatedMatrix, component->getTransform())); } } -} + + ResourceDependencies CModelComponentsObject::getDependencies() + { + ResourceDependencies dependencies; + + for(auto & component : m_Components) + { + auto objectResource = component->getObject(); + + if (objectResource) + { + dependencies.push_back(objectResource->getPackageResourceID()); + } + } + + return dependencies; + } +} // namespace NMR diff --git a/Source/Model/Classes/NMR_ModelFunction.cpp b/Source/Model/Classes/NMR_ModelFunction.cpp new file mode 100644 index 000000000..6268beff6 --- /dev/null +++ b/Source/Model/Classes/NMR_ModelFunction.cpp @@ -0,0 +1,112 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification,276529 +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#include "Model/Classes/NMR_ModelFunction.h" + +#include "Common/NMR_Exception.h" + +namespace NMR +{ + + CModelFunction::CModelFunction(const ModelResourceID sID, CModel * pModel) + : CModelResource(sID, pModel) + { + m_inputs = std::make_shared(); + m_outputs = std::make_shared(); + } + + std::string const & CModelFunction::getDisplayName() const + { + return m_displayname; + } + + void CModelFunction::setDisplayName(std::string const & displayname) + { + m_displayname = displayname; + } + + PModelImplicitPort CModelFunction::addInput(const std::string & sPortIdentifier, + const std::string & sDisplayName, + const Lib3MF::eImplicitPortType ePortType) + { + auto newPort = + std::make_shared(sPortIdentifier, sDisplayName, ePortType); + m_inputs->push_back(newPort); + return newPort; + } + + PModelImplicitPort CModelFunction::addOutput(const std::string & sPortIdentifier, + const std::string & sDisplayName, + const Lib3MF::eImplicitPortType ePortType) + { + auto newPort = + std::make_shared(sPortIdentifier, sDisplayName, ePortType); + m_outputs->push_back(newPort); + return newPort; + } + + PPorts const& CModelFunction::getInputs() const + { + return m_inputs; + } + + PPorts const& CModelFunction::getOutputs() const + { + return m_outputs; + } + + PModelImplicitPort CModelFunction::findInput(const std::string & sIdentifier) const + { + for (auto & port : *m_inputs) + { + if (port->getIdentifier() == sIdentifier) + { + return port; + } + } + return {}; + } + + PModelImplicitPort CModelFunction::findOutput(const std::string & sIdentifier) const + { + for (auto & port : *m_outputs) + { + if (port->getIdentifier() == sIdentifier) + { + return port; + } + } + return {}; + } + + void CModelFunction::clear() + { + m_inputs->clear(); + m_outputs->clear(); + } +} diff --git a/Source/Model/Classes/NMR_ModelFunctionFromImage3D.cpp b/Source/Model/Classes/NMR_ModelFunctionFromImage3D.cpp new file mode 100644 index 000000000..d33ff3063 --- /dev/null +++ b/Source/Model/Classes/NMR_ModelFunctionFromImage3D.cpp @@ -0,0 +1,134 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification,276529 +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#include "Model/Classes/NMR_ModelFunctionFromImage3D.h" + +namespace NMR +{ + NMR::CModelFunctionFromImage3D::CModelFunctionFromImage3D(const ModelResourceID sID, + CModel * pModel) + : CModelFunction(sID, pModel) + { + } + + void CModelFunctionFromImage3D::setImage3DUniqueResourceID(const UniqueResourceID sID) + { + m_image3DUniqueResourceID = sID; + } + + UniqueResourceID CModelFunctionFromImage3D::getImage3DUniqueResourceID() + { + return m_image3DUniqueResourceID; + } + + void CModelFunctionFromImage3D::setImage3DModelResourceID( + const ModelResourceID modelResoureId) + { + auto * model = getModel(); + PModelResource pResource = model->findResource(model->currentPath(), modelResoureId); + if (pResource == nullptr) + throw CNMRException(NMR_ERROR_RESOURCENOTFOUND); + m_image3DUniqueResourceID = pResource->getPackageResourceID()->getUniqueID(); + } + + ModelResourceID CModelFunctionFromImage3D::getImage3DModelResourceID() + { + auto * model = getModel(); + PModelResource pResource = model->findResource(m_image3DUniqueResourceID); + if (pResource == nullptr) + throw CNMRException(NMR_ERROR_RESOURCENOTFOUND); + auto const modelResId = pResource->getPackageResourceID()->getModelResourceID(); + if (modelResId != 2) // for debugging only + { + return modelResId; + } + + return modelResId; + } + + void CModelFunctionFromImage3D::setTileStyleU( + const eModelTextureTileStyle tileStyleU) + { + m_tileStyleU = tileStyleU; + } + + eModelTextureTileStyle CModelFunctionFromImage3D::getTileStyleU() + { + return m_tileStyleU; + } + + void CModelFunctionFromImage3D::setTileStyleV(const eModelTextureTileStyle tileStyleV) + { + m_tileStyleV = tileStyleV; + } + + eModelTextureTileStyle CModelFunctionFromImage3D::getTileStyleV() + { + return m_tileStyleV; + } + + void CModelFunctionFromImage3D::setTileStyleW(const eModelTextureTileStyle tileStyleW) + { + m_tileStyleW = tileStyleW; + } + + eModelTextureTileStyle CModelFunctionFromImage3D::getTileStyleW() + { + return m_tileStyleW; + } + + void CModelFunctionFromImage3D::setFilter(const eModelTextureFilter filter) + { + m_filter = filter; + } + + eModelTextureFilter CModelFunctionFromImage3D::getFilter() + { + return m_filter; + } + + void CModelFunctionFromImage3D::setOffset(double offset) + { + m_offset = offset; + } + + double CModelFunctionFromImage3D::getOffset() + { + return m_offset; + } + + void CModelFunctionFromImage3D::setScale(double scale) + { + m_scale = scale; + } + + double CModelFunctionFromImage3D::getScale() + { + return m_scale; + } +} // namespace NMR \ No newline at end of file diff --git a/Source/Model/Classes/NMR_ModelImage3D.cpp b/Source/Model/Classes/NMR_ModelImage3D.cpp new file mode 100644 index 000000000..e243c8eb6 --- /dev/null +++ b/Source/Model/Classes/NMR_ModelImage3D.cpp @@ -0,0 +1,59 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_ModelImage3D.cpp implements a 3D image for the volumetric extension + +--*/ + +#include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_ModelImage3D.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_StringUtils.h" +#include +#include + +namespace NMR { + + + CModelImage3D::CModelImage3D(_In_ const ModelResourceID sID, _In_ CModel* pModel) + : CModelResource(sID, pModel) + { + + } + + std::string CModelImage3D::getName() const + { + return m_sName; + } + + void CModelImage3D::setName(_In_ std::string sName) + { + m_sName = sName; + } +} diff --git a/Source/Model/Classes/NMR_ModelImageStack.cpp b/Source/Model/Classes/NMR_ModelImageStack.cpp new file mode 100644 index 000000000..491f6a903 --- /dev/null +++ b/Source/Model/Classes/NMR_ModelImageStack.cpp @@ -0,0 +1,130 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_ModelImageStack.cpp implements an image stack for the volumetric extension + +--*/ + +#include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_ModelImageStack.h" +#include "Model/Classes/NMR_ModelAttachment.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_StringUtils.h" +#include +#include + +namespace NMR { + + CModelImageStack::CModelImageStack(_In_ const ModelResourceID sID, _In_ CModel* pModel, _In_ nfUint32 nRowCount, _In_ nfUint32 nColumCount, nfUint32 nSheetCount) + : CModelImage3D(sID, pModel), m_nRowCount(nRowCount), m_nColumnCount(nColumCount), m_nSheetCount(nSheetCount) + { + m_Sheets.resize(m_nSheetCount); + } + + PModelImageStack CModelImageStack::make(_In_ const ModelResourceID sID, _In_ CModel* pModel, _In_ nfUint32 nRowCount, _In_ nfUint32 nColumCount, nfUint32 nSheetCount) + { + if (!pModel) + throw CNMRException(NMR_ERROR_INVALIDPOINTER); + if (nRowCount > MAX_IMAGESTACK_SIZE) + throw CNMRException(NMR_ERROR_INVALIDIMAGE3DSIZE); + if (nColumCount > MAX_IMAGESTACK_SIZE) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + if (nSheetCount > MAX_IMAGESTACK_SIZE) + throw CNMRException(MAX_IMAGESTACK_SIZE); + + return std::make_shared(CModelImageStack(sID, pModel, nRowCount, nColumCount, nSheetCount)); + } + + nfUint32 CModelImageStack::getRowCount() const + { + return m_nRowCount; + } + + nfUint32 CModelImageStack::getColumnCount() const + { + return m_nColumnCount; + } + + nfUint32 CModelImageStack::getSheetCount() const + { + return m_nSheetCount; + } + + void CModelImageStack::setRowCount(nfUint32 nRowCount) + { + if ((nRowCount == 0) || (nRowCount > MAX_IMAGESTACK_SIZE)) + throw CNMRException(NMR_ERROR_INVALIDIMAGE3DSIZE); + m_nRowCount = nRowCount; + } + + void CModelImageStack::setColumnCount(nfUint32 nColumnCount) + { + if ((nColumnCount == 0) || (nColumnCount > MAX_IMAGESTACK_SIZE)) + throw CNMRException(NMR_ERROR_INVALIDIMAGE3DSIZE); + m_nColumnCount = nColumnCount; + } + + void CModelImageStack::setSheetCount(nfUint32 nSheetCount) + { + if ((nSheetCount == 0) || (nSheetCount > MAX_IMAGESTACK_SIZE)) + throw CNMRException(NMR_ERROR_INVALIDIMAGE3DSIZE); + m_nSheetCount = nSheetCount; + m_Sheets.resize(m_nSheetCount); + } + + void CModelImageStack::setSheet(nfUint32 nSheetIndex, PModelAttachment pAttachment) + { + if (!pAttachment.get()) + throw CNMRException(NMR_ERROR_INVALIDTEXTURE); + if (pAttachment->getRelationShipType() != PACKAGE_TEXTURE_RELATIONSHIP_TYPE) + throw CNMRException(NMR_ERROR_INVALIDRELATIONSHIPTYPEFORTEXTURE); + if (nSheetIndex >= m_nSheetCount) + throw CNMRException(NMR_ERROR_INVALIDINDEX); + + if (pAttachment->getModel() != getModel()) + throw CNMRException(NMR_ERROR_ATTACHMENTMODELMISMATCH); + + m_Sheets[nSheetIndex] = pAttachment; + } + + PModelAttachment CModelImageStack::getSheet(nfUint32 nSheetIndex) + { + if (nSheetIndex >= m_nSheetCount) + throw CNMRException(NMR_ERROR_INVALIDINDEX); + return m_Sheets[nSheetIndex]; + } + + PModelAttachment CModelImageStack::createSheet(nfUint32 nSheetIndex, const std::string& sPath, PImportStream pCopiedStream) + { + PModelAttachment pAttachment = getModel()->addAttachment(sPath, PACKAGE_TEXTURE_RELATIONSHIP_TYPE, pCopiedStream); + setSheet(nSheetIndex, pAttachment); + return pAttachment; + } + +} diff --git a/Source/Model/Classes/NMR_ModelImplicitFunction.cpp b/Source/Model/Classes/NMR_ModelImplicitFunction.cpp new file mode 100644 index 000000000..448ccb208 --- /dev/null +++ b/Source/Model/Classes/NMR_ModelImplicitFunction.cpp @@ -0,0 +1,475 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification,276529 +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#include "Model/Classes/NMR_ModelImplicitFunction.h" + +#include "Common/NMR_Exception.h" +#include "lib3mf_interfaceexception.hpp" +#include "lib3mf_types.hpp" +#include "Model/Classes/NMR_ImplicitNodeTypes.h" +#include "Model/Classes/NMR_ModelImplicitFunction.h" +#include "Model/Classes/NMR_ModelImplicitPort.h" +#include "Common/Graph/GraphAlgorithms.h" +#include "Common/Graph/DirectedGraph.h" + +#include +#include + +namespace NMR +{ + const implicit::NodeTypes CModelImplicitFunction::m_nodeTypes; + + CModelImplicitNode * + CModelImplicitFunction::findNode(const ImplicitIdentifier & sIdentifier) const + { + for (auto & node : *m_nodes) + { + if (node->getIdentifier() == sIdentifier) + { + return node.get(); + } + } + return nullptr; + } + + CModelImplicitFunction::CModelImplicitFunction(const ModelResourceID sID, + CModel* pModel) + : CModelFunction(sID, pModel) + { + m_nodes = std::make_shared(); + } + + std::string const & CModelImplicitFunction::getIdentifier() const + { + return m_identifier; + } + + void CModelImplicitFunction::setIdentifier(std::string const & identifier) + { + m_identifier = identifier; + } + + PModelImplicitNode CModelImplicitFunction::addNode(const Lib3MF::eImplicitNodeType eNodeType, + const Lib3MF::eImplicitNodeConfiguration eConfiguration, + const std::string & sIdentifier, + const std::string & sDisplayName, + const std::string & sTag) + { + auto node = std::make_shared(eNodeType, sIdentifier, sDisplayName, sTag, this); + + m_nodeTypes.addExpectedPortsToNode(*node, eConfiguration); + m_nodes->push_back(node); + return node; + } + + PModelImplicitNode CModelImplicitFunction::addNode(const Lib3MF::eImplicitNodeType eNodeType, const Lib3MF::eImplicitNodeConfiguration eConfiguration) + { + return addNode(eNodeType, eConfiguration, "", "", ""); + } + + PImplicitNodes NMR::CModelImplicitFunction::getNodes() const + { + return m_nodes; + } + + void NMR::CModelImplicitFunction::addLink( + const ImplicitIdentifier& sSourceNodeIdentifier, + const ImplicitIdentifier& sTargetNodeIdentifier) + + { + auto const sourceNodeName = extractNodeName(sSourceNodeIdentifier); + + PModelImplicitPort sourcePort; + if(sourceNodeName == "inputs") + { + auto const sourcePortName = extractPortName(sSourceNodeIdentifier); + sourcePort = findInput(sourcePortName); + } + else + { + auto const sourceNode = findNode(sourceNodeName); + if(sourceNode == nullptr) + { + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDPARAM, + "Source node " + sourceNodeName + " does not exist."); + } + auto const sourcePortName = extractPortName(sSourceNodeIdentifier); + if(sourcePortName.empty()) + { + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDPARAM, + "Source port " + sourcePortName + " of node " + + sourceNodeName + " does not exist."); + } + sourcePort = sourceNode->findOutput(sourcePortName); + } + if(!sourcePort) + { + throw CNMRException( + NMR_ERROR_IMPLICIT_FUNCTION_INVALID_SOURCE_PORT); + } + + auto const targetNodeName = extractNodeName(sTargetNodeIdentifier); + auto const targetPortName = extractPortName(sTargetNodeIdentifier); + NMR::PModelImplicitPort targetPort; + if(targetNodeName == "outputs") + { + targetPort = findOutput(targetPortName); + } + else + { + auto const targetNode = findNode(targetNodeName); + if(targetNode == nullptr) + { + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDPARAM, + "Target node " + targetNodeName + " does not exist."); + } + + if(targetPortName.empty()) + { + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDPARAM, + "Target port " + targetPortName + " of node " + + targetNodeName + " does not exist."); + } + + targetPort = targetNode->findInput(targetPortName); + } + + if(!targetPort) + { + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDPARAM, + "Target port " + targetPortName + " of node " + + targetNodeName + " does not exist."); + } + + if(sourcePort->getType() != targetPort->getType()) + { + std::string sourceNodeIdentifier = "function inputs"; + std::string targetNodeIdentifier = "function outputs"; + + if(sourcePort->getParent()) + { + sourceNodeIdentifier = sourcePort->getParent()->getIdentifier(); + } + + if(targetPort->getParent()) + { + targetNodeIdentifier = targetPort->getParent()->getIdentifier(); + } + + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INCOMPATIBLEPORTTYPES, + "Output " + sourcePort->getIdentifier() + " of node " + + sourceNodeIdentifier + " has type " + + std::to_string(static_cast(sourcePort->getType())) + + " while target input " + targetPort->getIdentifier() + + " of node " + targetNodeIdentifier + " has type " + + std::to_string(static_cast(targetPort->getType())) + + "."); + + } + + targetPort->setReferencedPort(sourcePort); + } + + void CModelImplicitFunction::addLink(PModelImplicitPort pSourcePort, + PModelImplicitPort pTargetPort) + { + if (!pSourcePort) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM, + "Source port is nullptr."); + } + + if (!pTargetPort) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM, + "Target port is nullptr."); + } + + if(pSourcePort->getType() != pTargetPort->getType()) + { + std::string sourceNodeIdentifier = "function inputs"; + std::string targetNodeIdentifier = "function outputs"; + + if(pSourcePort->getParent()) + { + sourceNodeIdentifier = pSourcePort->getParent()->getIdentifier(); + } + + if(pTargetPort->getParent()) + { + targetNodeIdentifier = pTargetPort->getParent()->getIdentifier(); + } + + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INCOMPATIBLEPORTTYPES, + "Output " + pSourcePort->getIdentifier() + " of node " + + sourceNodeIdentifier + " has type " + + std::to_string(static_cast(pSourcePort->getType())) + + " while target input " + pTargetPort->getIdentifier() + + " of node " + targetNodeIdentifier + " has type " + + std::to_string(static_cast(pTargetPort->getType())) + + "."); + } + + pTargetPort->setReferencedPort(pSourcePort); + } + + implicit::NodeTypes const& CModelImplicitFunction::getNodeTypes() const + { + return m_nodeTypes; + } + + void CModelImplicitFunction::removeNode( + ImplicitIdentifier const& sIdentifier) + { + auto node = findNode(sIdentifier); + if(node == nullptr) + { + throw CNMRException(NMR_ERROR_INVALIDPOINTER); + } + m_nodes->erase(std::remove_if(m_nodes->begin(), m_nodes->end(), + [node](PModelImplicitNode const& n) + { return n.get() == node; }), + m_nodes->end()); + } + + void CModelImplicitFunction::clear() + { + CModelFunction::clear(); + m_nodes->clear(); + } + + void CModelImplicitFunction::replaceResourceID(const ModelResourceID sOldID, + const ModelResourceID sNewID) + { + for (auto & node : *m_nodes) + { + if (node->getModelResourceID() == sOldID) + { + node->setModelResourceID(sNewID); + } + } + } + + + std::string extractNodeName(const ImplicitIdentifier& sIdentifier) + { + auto pos = sIdentifier.find_last_of("."); + if (pos == std::string::npos) + { + return ""; + } + return sIdentifier.substr(0, pos); + } + + std::string extractPortName(const ImplicitIdentifier & sIdentifier) + { + auto pos = sIdentifier.find_last_of("."); + if (pos == std::string::npos) + { + return sIdentifier; + } + return sIdentifier.substr(pos + 1); + } + + ImplicitIdentifier makeReferenceIdentifier(const ImplicitIdentifier & sNodeIdentifier, + const ImplicitIdentifier & sPortIdentifier) + { + if (sNodeIdentifier.empty()) + { + return "inputs." + sPortIdentifier; + } + return sNodeIdentifier + "." + sPortIdentifier; + } + + NMR::common::graph::DirectedGraph directedGraphFromNodes(const PImplicitNodes & nodes) + { + if (!nodes) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM, + "Nodes must not be nullptr."); + } + + using namespace NMR::common; + graph::DirectedGraph graph(nodes->size()+1); + + std::unordered_map identifierToIndex; + graph::Identifier InputsIndex = 0; + + graph::Identifier index = 1; + for (auto const& node : *nodes) + { + if (!node) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM, + "Node must not be nullptr."); + } + + auto const& identifier = node->getIdentifier(); + identifierToIndex[identifier] = index; + ++index; + } + + for (auto const& node : *nodes) + { + auto const& inputs = node->getInputs(); + + if (!inputs) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM, + "Inputs must not be nullptr."); + } + + for (auto const& input : *inputs) + { + auto const& sourcePort = input->getReferencedPort(); + if (sourcePort) + { + auto const& sourceNode = sourcePort->getParent(); + if (sourceNode) + { + auto const& sourceNodeIdentifier = sourceNode->getIdentifier(); + auto const& sourcePortIdentifier = sourcePort->getIdentifier(); + graph::Identifier const sourceIndex = identifierToIndex[sourceNodeIdentifier]; + graph::Identifier const targetIndex = identifierToIndex[node->getIdentifier()]; + if (sourceIndex >= graph.getSize()) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM, + "Source index " + std::to_string(sourceIndex) + " is out of range."); + } + + if (targetIndex >= graph.getSize()) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM, + "Target index " + std::to_string(targetIndex) + " is out of range."); + } + graph.addDependency(sourceIndex, targetIndex); + } + else + { + graph.addDependency(InputsIndex, identifierToIndex[node->getIdentifier()]); + } + } + + } + } + return graph; + } + + void CModelImplicitFunction::sortNodesTopologically() + { + using namespace NMR::common; + auto graph = directedGraphFromNodes(m_nodes); + auto const sortedIndices = NMR::common::graph::topologicalSort(graph); + if (sortedIndices.empty()) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_GRAPHISCYCLIC); + } + + PImplicitNodes sortedNodes = std::make_shared(); + sortedNodes->reserve(sortedIndices.size()); + + for (auto const & index : sortedIndices) + { + if (index == 0) + { + continue; + } + + auto nodeIndex = index - 1; + + if (nodeIndex >= m_nodes->size()) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM, + "Invalid node index " + std::to_string(nodeIndex) + ". Node index must be between 0 and " + std::to_string(m_nodes->size()) + "."); + } + + sortedNodes->push_back(m_nodes->at(nodeIndex)); + } + std::swap(m_nodes, sortedNodes); + } + + PModelImplicitPort + NMR::CModelImplicitFunction::findPort(const ImplicitIdentifier & sIdentifier) const + { + auto const nodeName = extractNodeName(sIdentifier); + auto const portName = extractPortName(sIdentifier); + if (nodeName == "inputs") + { + return findInput(portName); + } + auto const node = findNode(nodeName); + if (node == nullptr) + { + return {}; + } + if (portName.empty()) + { + return {}; + } + return node->findOutput(portName); + } + + ResourceDependencies CModelImplicitFunction::getDependencies() + { + ResourceDependencies dependencies; + for (auto const& node : *m_nodes) + { + if (!node) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM, + "Node must not be nullptr."); + } + if (node->getNodeType() == Lib3MF::eImplicitNodeType::ConstResourceID) + { + auto * model = getModel(); + if (!model) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM, + "Model must not be nullptr."); + } + + auto referendedResource = model->findResource(model->currentPath(), node->getModelResourceID()); + if (!referendedResource) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM, + "Referenced resource must not be nullptr."); + } + dependencies.push_back(referendedResource->getPackageResourceID()); + } + } + return dependencies; + } +} + diff --git a/Source/Model/Classes/NMR_ModelImplicitNode.cpp b/Source/Model/Classes/NMR_ModelImplicitNode.cpp new file mode 100644 index 000000000..1735a79e0 --- /dev/null +++ b/Source/Model/Classes/NMR_ModelImplicitNode.cpp @@ -0,0 +1,259 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#include "Model/Classes/NMR_ModelImplicitNode.h" + +#include "Common/NMR_Exception.h" +#include "Model/Classes/NMR_ImplicitNodeTypes.h" +#include "Model/Classes/NMR_ModelImplicitFunction.h" +#include "Model/Classes/NMR_ModelImplicitNode.h" + +#include + +namespace NMR +{ + + CModelImplicitNode::CModelImplicitNode(Lib3MF::eImplicitNodeType type, + ImplicitIdentifier const & identifier, + std::string const & displayname, + std::string const & tag, + CModelImplicitFunction * parent) + : m_type(type) + , m_identifier(identifier) + , m_displayname(displayname) + , m_tag(tag) + , m_parent(parent) + { + m_outputs = std::make_shared(); + m_inputs = std::make_shared(); + } + + CModelImplicitNode::CModelImplicitNode(Lib3MF::eImplicitNodeType type, + CModelImplicitFunction * parent) + : m_type(type) + , m_parent(parent) + { + m_outputs = std::make_shared(); + m_inputs = std::make_shared(); + } + + ImplicitIdentifier const & CModelImplicitNode::getIdentifier() const + { + return m_identifier; + } + + std::string const & CModelImplicitNode::getDisplayName() const + { + return m_displayname; + } + + void CModelImplicitNode::setIdentifier(ImplicitIdentifier const & identifier) + { + m_identifier = identifier; + } + + void CModelImplicitNode::setDisplayName(std::string const & displayname) + { + m_displayname = displayname; + } + + void NMR::CModelImplicitNode::setType(Lib3MF::eImplicitNodeType type) + { + m_type = type; + } + + void CModelImplicitNode::setTag(std::string const & tag) + { + m_tag = tag; + } + + std::string const & CModelImplicitNode::getTag() const + { + return m_tag; + } + + Lib3MF::eImplicitNodeType CModelImplicitNode::getNodeType() const + { + return m_type; + } + + PModelImplicitPort CModelImplicitNode::addInput(const std::string & sIdentifier, + const std::string & sDisplayName) + { + auto newPort = std::make_shared(this, sIdentifier, sDisplayName); + m_inputs->push_back(newPort); + return newPort; + } + + PModelImplicitPort CModelImplicitNode::addOutput(const std::string & sIdentifier, + const std::string & sDisplayName) + { + auto newPort = std::make_shared(this, sIdentifier, sDisplayName); + m_outputs->push_back(newPort); + return newPort; + } + + PPorts NMR::CModelImplicitNode::getInputs() const + { + return m_inputs; + } + + PPorts CModelImplicitNode::getOutputs() const + { + return m_outputs; + } + + PModelImplicitPort NMR::CModelImplicitNode::findInput(const std::string & sIdentifier) const + { + for (auto & port : *m_inputs) + { + if (port->getIdentifier() == sIdentifier) + { + return port; + } + } + return {}; + } + + PModelImplicitPort CModelImplicitNode::findOutput(const std::string & sIdentifier) const + { + for (auto & port : *m_outputs) + { + if (port->getIdentifier() == sIdentifier) + { + return port; + } + } + return {}; + } + + void NMR::CModelImplicitNode::setConstant(double value) + { + if (m_type != Lib3MF::eImplicitNodeType::Constant) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + m_constant = value; + } + double CModelImplicitNode::getConstant() const + { + if (m_type != Lib3MF::eImplicitNodeType::Constant) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + return m_constant; + } + + void NMR::CModelImplicitNode::setVector(const Lib3MF::sVector & value) + { + if (m_type != Lib3MF::eImplicitNodeType::ConstVec) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + m_vector = std::unique_ptr(new Lib3MF::sVector(value)); + } + + Lib3MF::sVector CModelImplicitNode::getVector() const + { + if (m_type != Lib3MF::eImplicitNodeType::ConstVec) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + if (!m_vector) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + return *m_vector; + } + + void CModelImplicitNode::setMatrix(const Lib3MF::sMatrix4x4 & value) + { + if (m_type != Lib3MF::eImplicitNodeType::ConstMat) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + m_matrix = std::unique_ptr(new Lib3MF::sMatrix4x4(value)); + } + + Lib3MF::sMatrix4x4 CModelImplicitNode::getMatrix() const + { + if (m_type != Lib3MF::eImplicitNodeType::ConstMat) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + if (!m_matrix) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + return *m_matrix; + } + + void CModelImplicitNode::setModelResourceID(ModelResourceID resourceID) + { + if (m_type != Lib3MF::eImplicitNodeType::ConstResourceID) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + m_modelResourceID = resourceID; + } + + ModelResourceID CModelImplicitNode::getModelResourceID() const + { + if (m_type != Lib3MF::eImplicitNodeType::ConstResourceID) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + return m_modelResourceID; + } + + PModelResource NMR::CModelImplicitNode::getResource() const + { + if (m_parent == nullptr) + { + return nullptr; + } + + auto model = m_parent->getModel(); + + if (model == nullptr) + { + return nullptr; + } + + return model->findResource(model->currentPath(), m_modelResourceID); + } + + bool CModelImplicitNode::arePortsValid() const + { + return m_parent->getNodeTypes().arePortsValidForNode(*this); + } + + void CModelImplicitNode::setGraphID(GraphID id) + { + m_graphId = id; + } + + GraphID CModelImplicitNode::getGraphID() const + { + return m_graphId; + } + + CModelImplicitFunction * CModelImplicitNode::getParent() const + { + return m_parent; + } + + void CModelImplicitNode::setParent(CModelImplicitFunction* parent) + { + m_parent = parent; + } +} // namespace NMR diff --git a/Source/Model/Classes/NMR_ModelImplicitPort.cpp b/Source/Model/Classes/NMR_ModelImplicitPort.cpp new file mode 100644 index 000000000..b97ce3054 --- /dev/null +++ b/Source/Model/Classes/NMR_ModelImplicitPort.cpp @@ -0,0 +1,161 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--*/ + +#include "Model/Classes/NMR_ModelImplicitPort.h" +#include "Model/Classes/NMR_ModelImplicitNode.h" +#include "Model/Classes/NMR_ModelImplicitFunction.h" +#include "Common/NMR_Exception.h" +#include "lib3mf_interfaceexception.hpp" + +namespace NMR +{ + CModelImplicitPort::CModelImplicitPort(CModelImplicitNode * parent, + ImplicitIdentifier const & identifier, + std::string const & displayname) + : m_parent(parent) + , m_identifier(identifier) + , m_displayname(displayname) + { + } + + CModelImplicitPort::CModelImplicitPort(ImplicitIdentifier const & identifier, + std::string const & displayname, + Lib3MF::eImplicitPortType type) + : m_identifier(identifier) + , m_displayname(displayname) + , m_type(type) + { + } + + ImplicitIdentifier const & CModelImplicitPort::getIdentifier() const + { + return m_identifier; + } + + std::string const & CModelImplicitPort::getDisplayName() const + { + return m_displayname; + } + + void CModelImplicitPort::setIdentifier(std::string const & identifier) + { + m_identifier = identifier; + } + + void CModelImplicitPort::setDisplayName(std::string const & displayname) + { + m_displayname = displayname; + } + + Lib3MF::eImplicitPortType CModelImplicitPort::getType() const + { + return m_type; + } + + void CModelImplicitPort::setType(Lib3MF::eImplicitPortType type) + { + m_type = type; + } + + ImplicitIdentifier CModelImplicitPort::getReference() const + { + if (!m_referencedPort) + { + updateReference(); + } + if (!m_referencedPort) + { + return m_reference; + } + + auto sourceParentNode = m_referencedPort->getParent(); + + if (!sourceParentNode) // Function input ports don't have a node as parent + { + return "inputs." + m_referencedPort->getIdentifier(); + } + + return makeReferenceIdentifier(sourceParentNode->getIdentifier(), m_referencedPort->getIdentifier()); + } + + void CModelImplicitPort::setReference(ImplicitIdentifier const & reference) + { + m_referencedPort.reset(); + m_reference = reference; + updateReference(); + } + + CModelImplicitNode * CModelImplicitPort::getParent() const + { + return m_parent; + } + + std::shared_ptr CModelImplicitPort::getReferencedPort() const + { + if (!m_referencedPort) + { + updateReference(); + } + if (!m_referencedPort) + { + std::string nodeName; + if (m_parent) + { + nodeName = m_parent->getIdentifier(); + } + else + { + nodeName = "inputs"; + } + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM, "Referenced port of port " + nodeName + "." + m_identifier + " is not set."); + } + return m_referencedPort; + } + + void CModelImplicitPort::setReferencedPort( + std::shared_ptr const & referencedPort) + { + m_referencedPort = referencedPort; + } + + void CModelImplicitPort::updateReference() const + { + if (!m_parent) + { + return; + } + + auto * function = m_parent->getParent(); + if (!function) + { + return; + } + + m_referencedPort = function->findPort(m_reference); + } +} //namespace NMR diff --git a/Source/Model/Classes/NMR_ModelLevelSetObject.cpp b/Source/Model/Classes/NMR_ModelLevelSetObject.cpp new file mode 100644 index 000000000..59eb36387 --- /dev/null +++ b/Source/Model/Classes/NMR_ModelLevelSetObject.cpp @@ -0,0 +1,200 @@ +/*++ + +Copyright (C) 2024 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_ModelLevelSetObject.cpp implements the Model LevelSet Object +Class. A model levelset object is an in memory representation of the 3MF +levelset object. + +--*/ + +#include "Model/Classes/NMR_ModelLevelSetObject.h" + +#include "Common/Math/NMR_PairMatchingTree.h" +#include "Common/Mesh/NMR_Mesh.h" +#include "Model/Classes/NMR_ModelMeshObject.h" +#include "Model/Classes/NMR_ModelObject.h" +#include "Model/Classes/NMR_ModelVolumeData.h" + +namespace NMR +{ + + CModelLevelSetObject::CModelLevelSetObject( + const ModelResourceID sID, CModel* pModel) + : CModelObject(sID, pModel) + { + } + + CModelLevelSetObject::~CModelLevelSetObject() {} + + void CModelLevelSetObject::mergeToMesh(CMesh* pMesh, + const NMATRIX3 mMatrix) + { + throw CNMRException(NMR_ERROR_NOTIMPLEMENTED); + } + + PModelMeshObject CModelLevelSetObject::getMesh() + { + return m_pMesh; + } + + void CModelLevelSetObject::setMesh(PModelMeshObject pMesh) + { + if(!pMesh) throw CNMRException(NMR_ERROR_INVALIDPARAM); + + m_pMesh = pMesh; + } + + nfBool CModelLevelSetObject::isValid() + { + return true; + } + + nfBool CModelLevelSetObject::hasSlices(nfBool bRecursive) + { + return (this->getSliceStack().get() != nullptr); + } + + nfBool CModelLevelSetObject::isValidForSlices( + const NMATRIX3& totalParentMatrix) + { + if(!this->getSliceStack().get()) + { + return true; + } + else + { + return fnMATRIX3_isplanar(totalParentMatrix); + } + } + + void CModelLevelSetObject::extendOutbox( + NOUTBOX3& vOutBox, const NMATRIX3 mAccumulatedMatrix) + { + throw CNMRException(NMR_ERROR_NOTIMPLEMENTED); + } + + PModelFunction CModelLevelSetObject::getFunction() + { + return m_pFunction; + } + + void CModelLevelSetObject::setFunction(PModelFunction pFunction) + { + if(!pFunction) throw CNMRException(NMR_ERROR_INVALIDPARAM); + + m_pFunction = pFunction; + } + + PModelVolumeData CModelLevelSetObject::getVolumeData() + { + return m_pVolumeData; + } + + void CModelLevelSetObject::setVolumeData( + _In_ PModelVolumeData pVolumeData) + { + if(!pVolumeData) throw CNMRException(NMR_ERROR_INVALIDPARAM); + + m_pVolumeData = pVolumeData; + } + + void CModelLevelSetObject::setChannelName(std::string outputPortName) + { + m_outputPortName = std::move(outputPortName); + } + + std::string const& CModelLevelSetObject::getChannelName() const + { + return m_outputPortName; + } + + void CModelLevelSetObject::setTransform(NMR::NMATRIX3 transform) + { + m_transform = transform; + m_bHasTransform = true; + } + + NMR::NMATRIX3 CModelLevelSetObject::getTransform() const + { + return m_transform; + } + + bool CModelLevelSetObject::hasTransform() const + { + return m_bHasTransform; + } + + void CModelLevelSetObject::setMinFeatureSize(double minFeatureSize) + { + m_minFeatureSize = minFeatureSize; + } + + double CModelLevelSetObject::getMinFeatureSize() const + { + return m_minFeatureSize; + } + + void CModelLevelSetObject::setFallBackValue(double fallBackValue) + { + m_fallBackValue = fallBackValue; + } + + double CModelLevelSetObject::getFallBackValue() const + { + return m_fallBackValue; + } + + void CModelLevelSetObject::setMeshBBoxOnly(bool bMeshBBoxOnly) + { + m_meshBBoxOnly = bMeshBBoxOnly; + } + + bool CModelLevelSetObject::getMeshBBoxOnly() const + { + return m_meshBBoxOnly; + } + + ResourceDependencies CModelLevelSetObject::getDependencies() + { + ResourceDependencies dependencies; + if (m_pFunction) + { + dependencies.push_back(m_pFunction->getPackageResourceID()); + } + + if (m_pVolumeData) + { + // concatenate dependencies + auto volumeDataDependencies = m_pVolumeData->getDependencies(); + dependencies.insert(dependencies.end(), volumeDataDependencies.begin(), volumeDataDependencies.end()); + } + + return dependencies; + } +} // namespace NMR + diff --git a/Source/Model/Classes/NMR_ModelMeshObject.cpp b/Source/Model/Classes/NMR_ModelMeshObject.cpp index 4829ea7ae..8100bd280 100644 --- a/Source/Model/Classes/NMR_ModelMeshObject.cpp +++ b/Source/Model/Classes/NMR_ModelMeshObject.cpp @@ -221,10 +221,35 @@ namespace NMR { m_pBeamLatticeAttributes = pBeamLatticeAttributes; } + PModelVolumeData CModelMeshObject::getVolumeData() + { + return m_pVolumeData; + } + + void CModelMeshObject::setVolumeData(_In_ PModelVolumeData pVolumeData) + { + if (!pVolumeData) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + m_pVolumeData = pVolumeData; + } + void CModelMeshObject::extendOutbox(_Out_ NOUTBOX3& vOutBox, _In_ const NMATRIX3 mAccumulatedMatrix) { m_pMesh->extendOutbox(vOutBox, mAccumulatedMatrix); } + + ResourceDependencies CModelMeshObject::getDependencies() + { + ResourceDependencies dependencies; + if(m_pVolumeData) + { + dependencies.push_back( + m_pVolumeData->getPackageResourceID()); + } + + return dependencies; + } } diff --git a/Source/Model/Classes/NMR_ModelMetaDataGroup.cpp b/Source/Model/Classes/NMR_ModelMetaDataGroup.cpp index a2608cab6..e3265d347 100644 --- a/Source/Model/Classes/NMR_ModelMetaDataGroup.cpp +++ b/Source/Model/Classes/NMR_ModelMetaDataGroup.cpp @@ -47,7 +47,6 @@ namespace NMR { m_MetaDataMap.clear(); } - PModelMetaData CModelMetaDataGroup::addMetaData(_In_ std::string sNameSpace, _In_ std::string sName, _In_ std::string sValue, _In_ std::string sType, _In_ nfBool bPreserve) { if (hasMetaData(composeNamespaceAndNameIntoKey(sNameSpace, sName))) { @@ -114,7 +113,11 @@ namespace NMR { std::string sName; std::string sValue; PModelMetaData metaData = pSourceMetaDataGroup->getMetaData(nIndex); - addMetaData(metaData->getNameSpace(), metaData->getName(), metaData->getValue(), metaData->getType(), metaData->getPreserve()); + + // only add metadata, if the key does not exist yet + if (!hasMetaData(metaData->getKey())) { + addMetaData(metaData->getNameSpace(), metaData->getName(), metaData->getValue(), metaData->getType(), metaData->getPreserve()); + } } } } diff --git a/Source/Model/Classes/NMR_ModelMultiPropertyGroup.cpp b/Source/Model/Classes/NMR_ModelMultiPropertyGroup.cpp index 6c6a31209..9170a6bf8 100644 --- a/Source/Model/Classes/NMR_ModelMultiPropertyGroup.cpp +++ b/Source/Model/Classes/NMR_ModelMultiPropertyGroup.cpp @@ -221,6 +221,7 @@ namespace NMR { switch (eBlendMethod) { case MODELBLENDMETHOD_MIX: return XML_3MF_ATTRIBUTE_MULTIPROPERTIES_BLENDMETHOD_MIX; case MODELBLENDMETHOD_MULTIPLY: return XML_3MF_ATTRIBUTE_MULTIPROPERTIES_BLENDMETHOD_MULTIPLY; + case MODELBLENDMETHOD_MASK: return XML_3MF_ATTRIBUTE_MULTIPROPERTIES_BLENDMETHOD_MASK; default: return XML_3MF_ATTRIBUTE_MULTIPROPERTIES_BLENDMETHOD_MIX; } @@ -229,9 +230,13 @@ namespace NMR { { if (sBlendMethod == XML_3MF_ATTRIBUTE_MULTIPROPERTIES_BLENDMETHOD_MIX) { return MODELBLENDMETHOD_MIX; - } else if (sBlendMethod == XML_3MF_ATTRIBUTE_MULTIPROPERTIES_BLENDMETHOD_MULTIPLY) { + } + else if (sBlendMethod == XML_3MF_ATTRIBUTE_MULTIPROPERTIES_BLENDMETHOD_MULTIPLY) { return MODELBLENDMETHOD_MULTIPLY; } + else if (sBlendMethod == XML_3MF_ATTRIBUTE_MULTIPROPERTIES_BLENDMETHOD_MASK) { + return MODELBLENDMETHOD_MASK; + } else { throw CNMRException(NMR_ERROR_INVALID_BLENDMETHOD_ATTRIBUTE); } diff --git a/Source/Model/Classes/NMR_ModelObject.cpp b/Source/Model/Classes/NMR_ModelObject.cpp index ccfd31e63..b1aa7da30 100644 --- a/Source/Model/Classes/NMR_ModelObject.cpp +++ b/Source/Model/Classes/NMR_ModelObject.cpp @@ -208,6 +208,4 @@ namespace NMR { if (nLevel >= m_nComponentDepthLevel) m_nComponentDepthLevel = nLevel; } - - } diff --git a/Source/Model/Classes/NMR_ModelResource.cpp b/Source/Model/Classes/NMR_ModelResource.cpp index c9a31d929..8776154a9 100644 --- a/Source/Model/Classes/NMR_ModelResource.cpp +++ b/Source/Model/Classes/NMR_ModelResource.cpp @@ -34,7 +34,7 @@ resource object. #include "Model/Classes/NMR_Model.h" #include "Model/Classes/NMR_ModelResource.h" -#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception.h" namespace NMR { @@ -64,8 +64,12 @@ namespace NMR { void CModelResource::setPackageResourceID(PPackageResourceID pID) { - m_pModel->updateUniqueResourceID(m_pPackageResourceID->getUniqueID(), pID->getUniqueID()); + if (m_pModel) + { + m_pModel->updateUniqueResourceID(m_pPackageResourceID->getUniqueID(), pID->getUniqueID()); + } m_pPackageResourceID = pID; + } _Ret_notnull_ CModel * CModelResource::getModel() @@ -73,6 +77,15 @@ namespace NMR { return m_pModel; } + void CModelResource::setModel(CModel* pModel) + { + m_pModel = pModel; + } + + ResourceDependencies CModelResource::getDependencies() + { + return {}; + } void CModelResource::clearResourceIndexMap() { diff --git a/Source/Model/Classes/NMR_ModelVolumeData.cpp b/Source/Model/Classes/NMR_ModelVolumeData.cpp new file mode 100644 index 000000000..b9689dc9d --- /dev/null +++ b/Source/Model/Classes/NMR_ModelVolumeData.cpp @@ -0,0 +1,229 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_ModelVolumeData.cpp implements the class CModelVolumeData. + +--*/ + +#include "Model/Classes/NMR_ModelVolumeData.h" + +#include "Model/Classes/NMR_ModelFunction.h" +#include "lib3mf_interfaceexception.hpp" + +namespace NMR +{ + CModelVolumeData::CModelVolumeData(ModelResourceID sResourceID, CModel * pModel) : CModelResource(sResourceID, pModel) + { + clear(); + } + + void CModelVolumeData::clear() + { + m_pComposite.reset(); + m_pColor.reset(); + m_mapProperties.clear(); + } + + nfBool CModelVolumeData::hasProperty(std::string sName) + { + std::map::iterator iIterator = m_mapProperties.find(sName); + return iIterator != m_mapProperties.end(); + } + + nfUint32 CModelVolumeData::getPropertyCount() const + { + return (nfUint32)m_mapProperties.size(); + } + + PVolumeDataProperty CModelVolumeData::getProperty(nfUint32 nIndex) + { + auto iIterator = m_mapProperties.begin(); + if (nIndex >= m_mapProperties.size()) + throw CNMRException(NMR_ERROR_INVALIDINDEX); + + while (nIndex > 0) { + nIndex--; + iIterator++; + } + return iIterator->second; + } + + PVolumeDataProperty CModelVolumeData::findProperty(std::string sName) + { + std::map::iterator iIterator = m_mapProperties.find(sName); + if (iIterator != m_mapProperties.end()) { + return iIterator->second; + } + return nullptr; + } + + void CModelVolumeData::addProperty(PVolumeDataProperty pProperty) + { + if (!pProperty) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + if (hasProperty(pProperty->getName())) { + throw CNMRException(NMR_ERROR_DUPLICATEVOLUMEDATAPROPERTY); + } + m_mapProperties.insert(std::make_pair(pProperty->getName(), pProperty)); + } + + PVolumeDataProperty CModelVolumeData::addProperty( + std::string sName, PModelFunction pfunction) + { + if(!pfunction) throw CNMRException(NMR_ERROR_INVALIDPARAM); + + if(hasProperty(sName)) + { + throw CNMRException( + NMR_ERROR_DUPLICATEVOLUMEDATAPROPERTY); + } + + PVolumeDataProperty pVolumeDataProperty = + std::make_shared(pfunction, sName); + m_mapProperties.insert(std::make_pair(pVolumeDataProperty->getName(), pVolumeDataProperty)); + return pVolumeDataProperty; + } + + void CModelVolumeData::removeProperty(std::string sName) + { + m_mapProperties.erase(sName); + } + + bool CModelVolumeData::hasColor() const + { + return m_pColor.get() != nullptr; + } + + void CModelVolumeData::setColor(PVolumeDataColor pColor) + { + if (!pColor) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + m_pColor = pColor; + } + + PVolumeDataColor CModelVolumeData::createColor(PModelFunction pfunction) + { + if(!pfunction) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + m_pColor = std::make_shared(pfunction); + return m_pColor; + } + + PVolumeDataColor CModelVolumeData::getColor() + { + return m_pColor; + } + + void CModelVolumeData::removeColor() + { + m_pColor.reset(); + } + + bool CModelVolumeData::hasComposite() const + { + return m_pComposite.get() != nullptr; + } + + + PVolumeDataComposite CModelVolumeData::getComposite() + { + return m_pComposite; + } + PVolumeDataComposite CModelVolumeData::createComposite(/* basematerialgroupd*/) + { + m_pComposite = std::make_shared(); + return m_pComposite; + } + + void CModelVolumeData::setComposite(PVolumeDataComposite pComposite) + { + if (!pComposite) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + m_pComposite = pComposite; + } + + void CModelVolumeData::removeComposite() + { + m_pComposite.reset(); + } + + ResourceDependencies CModelVolumeData::getDependencies() + { + ResourceDependencies dependencies; + + if (m_pColor) + { + dependencies.push_back(packageResourceIDFromResourceID(m_pColor->getFunctionResourceID())); + } + + for (auto iIterator = m_mapProperties.begin(); iIterator != m_mapProperties.end(); iIterator++) + { + PVolumeDataProperty pProperty = iIterator->second; + if (pProperty) + { + dependencies.push_back(packageResourceIDFromResourceID(pProperty->getFunctionResourceID())); + } + } + + if (m_pComposite) + { + for (nfUint32 i = 0u; i < m_pComposite->materialMappingCount(); i++) + { + dependencies.push_back(packageResourceIDFromResourceID(m_pComposite->getMaterialMapping(i)->getFunctionResourceID())); + } + + } + + return dependencies; + } + + PPackageResourceID + CModelVolumeData::packageResourceIDFromResourceID( + UniqueResourceID uniqueResourceID) + { + auto* model = getModel(); + if(!model) + { + throw ELib3MFInterfaceException(LIB3MF_ERROR_INVALIDPARAM, + "Model must not be nullptr."); + } + + auto referendedResource = model->findResource(uniqueResourceID); + if(!referendedResource) + { + throw ELib3MFInterfaceException( + LIB3MF_ERROR_INVALIDPARAM, + "Referenced resource must not be nullptr."); + } + + return referendedResource->getPackageResourceID(); + } +} // namespace NMR diff --git a/Source/Model/Classes/NMR_PackageResourceID.cpp b/Source/Model/Classes/NMR_PackageResourceID.cpp index 1d5dc9ad8..b8ecf168e 100644 --- a/Source/Model/Classes/NMR_PackageResourceID.cpp +++ b/Source/Model/Classes/NMR_PackageResourceID.cpp @@ -119,6 +119,13 @@ namespace NMR { PPackageModelPath CResourceHandler::findPackageModelPath(std::string sPath) { + if (!sPath.empty()) + { + if (sPath[0] != '/') + { + return nullptr; + } + } auto it = m_PathToModelPath.find(sPath); if (it != m_PathToModelPath.end()) { diff --git a/Source/Model/Reader/NMR_ModelReaderNode_ModelBase.cpp b/Source/Model/Reader/NMR_ModelReaderNode_ModelBase.cpp index 710ac8867..3fa8cf31e 100644 --- a/Source/Model/Reader/NMR_ModelReaderNode_ModelBase.cpp +++ b/Source/Model/Reader/NMR_ModelReaderNode_ModelBase.cpp @@ -85,7 +85,10 @@ namespace NMR { strcmp(sExtensionURI.c_str(), XML_3MF_NAMESPACE_PRODUCTIONSPEC) != 0 && strcmp(sExtensionURI.c_str(), XML_3MF_NAMESPACE_SLICESPEC) != 0 && strcmp(sExtensionURI.c_str(), XML_3MF_NAMESPACE_BEAMLATTICESPEC) != 0 && - strcmp(sExtensionURI.c_str(), XML_3MF_NAMESPACE_SECURECONTENTSPEC) != 0 ) + strcmp(sExtensionURI.c_str(), XML_3MF_NAMESPACE_SECURECONTENTSPEC) != 0 && + strcmp(sExtensionURI.c_str(), XML_3MF_NAMESPACE_VOLUMETRICSPEC) != 0 && + strcmp(sExtensionURI.c_str(), XML_3MF_NAMESPACE_IMPLICITSPEC) != 0 + ) { m_pWarnings->addWarning(NMR_ERROR_REQUIREDEXTENSIONNOTSUPPORTED, mrwInvalidMandatoryValue); } diff --git a/Source/Model/Reader/Volumetric2201/NMR_Implicit_PortType_Convert.cpp b/Source/Model/Reader/Volumetric2201/NMR_Implicit_PortType_Convert.cpp new file mode 100644 index 000000000..bdb3ed1fd --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_Implicit_PortType_Convert.cpp @@ -0,0 +1,126 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Helper methods for reading implicit ports + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_Implicit_PortType_Convert.h" +#include "Common/NMR_Exception.h" +#include + +namespace NMR +{ + namespace implicit + { + const char * portTypeToRefName(Lib3MF::eImplicitPortType type) + { + switch (type) + { + case Lib3MF::eImplicitPortType::Scalar: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_SCALAR_REF; + case Lib3MF::eImplicitPortType::Vector: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_VECTOR_REF; + case Lib3MF::eImplicitPortType::Matrix: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_MATRIX_REF; + case Lib3MF::eImplicitPortType::ResourceID: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_RESOURCE_REF; + default: + return "Invalid"; + } + } + + const char * portTypeToName(Lib3MF::eImplicitPortType type) + { + switch (type) + { + case Lib3MF::eImplicitPortType::Scalar: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_SCALAR; + case Lib3MF::eImplicitPortType::Vector: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_VECTOR; + case Lib3MF::eImplicitPortType::Matrix: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_MATRIX; + case Lib3MF::eImplicitPortType::ResourceID: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_RESOURCE_ID; + default: + return "Invalid"; + } + } + + bool portTypeFromRefName(std::string const & name, Lib3MF::eImplicitPortType & resultType) + { + if (name == XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_SCALAR_REF) + { + resultType = Lib3MF::eImplicitPortType::Scalar; + return true; + } + if (name == XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_VECTOR_REF) + { + resultType = Lib3MF::eImplicitPortType::Vector; + return true; + } + if (name == XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_MATRIX_REF) + { + resultType = Lib3MF::eImplicitPortType::Matrix; + return true; + } + if (name == XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_RESOURCE_REF) + { + resultType = Lib3MF::eImplicitPortType::ResourceID; + return true; + } + + return false; + } + + bool portTypeFromName(std::string const & name, Lib3MF::eImplicitPortType & resultType) + { + if (name == XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_SCALAR) + { + resultType = Lib3MF::eImplicitPortType::Scalar; + return true; + } + if (name == XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_VECTOR) + { + resultType = Lib3MF::eImplicitPortType::Vector; + return true; + } + if (name == XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_MATRIX) + { + resultType = Lib3MF::eImplicitPortType::Matrix; + return true; + } + if (name == XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_RESOURCE_ID) + { + resultType = Lib3MF::eImplicitPortType::ResourceID; + return true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_FunctionFromImage3D.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_FunctionFromImage3D.cpp new file mode 100644 index 000000000..b0f55f8e6 --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_FunctionFromImage3D.cpp @@ -0,0 +1,175 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for FunctionFormImage3D + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_FunctionFromImage3D.h" + +#include "Model/Classes/NMR_Model.h" +#include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_ModelFunctionFromImage3D.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" +#include "Common/NMR_StringUtils.h" + +namespace NMR +{ + NMR::CModelReaderNode_FunctionFromImage3D::CModelReaderNode_FunctionFromImage3D( + CModel * pModel, + + PModelWarnings pWarnings) + : CModelReaderNode(pWarnings) + , m_pModel(pModel) + { + __NMRASSERT(pModel); + } + + void CModelReaderNode_FunctionFromImage3D::parseXML(CXmlReader * pXMLReader) + { + __NMRASSERT(pXMLReader); + + // Parse name + parseName(pXMLReader); + + // Parse Attributes + parseAttributes(pXMLReader); + + // Create FunctionFromImage3D + m_pFunctionFromImage3D = + std::make_shared(m_nID, m_pModel); + m_pFunctionFromImage3D->setDisplayName(m_displayName); + m_pFunctionFromImage3D->setImage3DModelResourceID(m_imageModelResourceID); + m_pFunctionFromImage3D->setTileStyleU(m_tileStyleU); + m_pFunctionFromImage3D->setTileStyleV(m_tileStyleV); + m_pFunctionFromImage3D->setTileStyleW(m_tileStyleW); + m_pFunctionFromImage3D->setFilter(m_filter); + m_pFunctionFromImage3D->setOffset(m_offset); + m_pFunctionFromImage3D->setScale(m_scale); + + + // Parse Content + parseContent(pXMLReader); + + m_pModel->addResource(m_pFunctionFromImage3D); + } + + eModelTextureTileStyle fnStringToModelTextureTileStyle(const std::string & sValue) + { + if (sValue == XML_3MF_ATTRIBUTE_TEXTURE2D_TILESTYLE_WRAP) + { + return eModelTextureTileStyle::MODELTEXTURETILESTYLE_WRAP; + } + else if (sValue == XML_3MF_ATTRIBUTE_TEXTURE2D_TILESTYLE_MIRROR) + { + return eModelTextureTileStyle::MODELTEXTURETILESTYLE_MIRROR; + } + else if (sValue == XML_3MF_ATTRIBUTE_TEXTURE2D_TILESTYLE_CLAMP) + { + return eModelTextureTileStyle::MODELTEXTURETILESTYLE_CLAMP; + } + else if (sValue == XML_3MF_ATTRIBUTE_TEXTURE2D_TILESTYLE_NONE) + { + return eModelTextureTileStyle::MODELTEXTURETILESTYLE_NONE; + } + else + { + throw CNMRException(NMR_ERROR_INVALIDTILESTYLE); + } + } + + eModelTextureFilter fnStringToModelTextureFilter(const std::string & sValue) + { + if (sValue == XML_3MF_ATTRIBUTE_TEXTURE2D_FILTER_AUTO) + { + return eModelTextureFilter::MODELTEXTUREFILTER_AUTO; + } + else if (sValue == XML_3MF_ATTRIBUTE_TEXTURE2D_FILTER_LINEAR) + { + return eModelTextureFilter::MODELTEXTUREFILTER_LINEAR; + } + else if (sValue == XML_3MF_ATTRIBUTE_TEXTURE2D_FILTER_NEAREST) + { + return eModelTextureFilter::MODELTEXTUREFILTER_NEAREST; + } + else + { + throw CNMRException(NMR_ERROR_INVALIDFILTER); + } + } + + void CModelReaderNode_FunctionFromImage3D::OnAttribute(const nfChar * pAttributeName, + const nfChar * pAttributeValue) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_FUNCTION_ID) == 0) + { + m_nID = fnStringToUint32(pAttributeValue); + } + else if ((strcmp(pAttributeName, XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_IMAGE3DID_DEPRECATED) == 0) + || (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_IMAGE3DID) == 0)) + { + m_imageModelResourceID = fnStringToUint32(pAttributeValue); + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_FUNCTION_DISPLAY_NAME) == 0) + { + m_displayName = std::string{pAttributeValue}; + } + else if ((strcmp(pAttributeName, XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_OFFSET_DEPRECATED) == 0) + || (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_OFFSET) == 0)) + { + m_offset = fnStringToDouble(pAttributeValue); + } + else if ((strcmp(pAttributeName, XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_SCALE_DEPRECATED) == 0) + || (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_SCALE) == 0)) + { + m_scale = fnStringToDouble(pAttributeValue); + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_TILESTYLEU) == 0) + { + m_tileStyleU = fnStringToModelTextureTileStyle(pAttributeValue); + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_TILESTYLEV) == 0) + { + m_tileStyleV = fnStringToModelTextureTileStyle(pAttributeValue); + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_TILESTYLEW) == 0) + { + m_tileStyleW = fnStringToModelTextureTileStyle(pAttributeValue); + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_FILTER) == 0) + { + m_filter = fnStringToModelTextureFilter(pAttributeValue); + } + else + { + m_pWarnings->addException(CNMRException(NMR_ERROR_NAMESPACE_INVALID_ATTRIBUTE), + mrwInvalidOptionalValue); + } + } +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function.cpp new file mode 100644 index 000000000..e66102853 --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function.cpp @@ -0,0 +1,136 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for implicit function ressources + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Inputs.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Outputs.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node.h" + +#include "Model/Classes/NMR_ImplicitNodeTypes.h" +#include "Model/Classes/NMR_Model.h" +#include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_ModelImplicitFunction.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" +#include "Common/NMR_StringUtils.h" + +namespace NMR +{ + + const implicit::NodeTypes CModelReaderNode_ImplicitFunction::m_nodeTypes; + + NMR::CModelReaderNode_ImplicitFunction::CModelReaderNode_ImplicitFunction( + CModel * pModel, + + PModelWarnings pWarnings) + : CModelReaderNode(pWarnings) + , m_pModel(pModel) + { + __NMRASSERT(pModel); + } + + void CModelReaderNode_ImplicitFunction::parseXML(CXmlReader * pXMLReader) + { + __NMRASSERT(pXMLReader); + + // Parse name + parseName(pXMLReader); + + // Parse Attributes + parseAttributes(pXMLReader); + + // Create Implicit Function + m_pImplicitFunction = std::make_shared(m_nID, m_pModel); + m_pImplicitFunction->setDisplayName(m_displayName); + + // Parse Content + parseContent(pXMLReader); + + m_pModel->addResource(m_pImplicitFunction); + } + + void CModelReaderNode_ImplicitFunction::OnAttribute(const nfChar * pAttributeName, + const nfChar * pAttributeValue) + { + + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_FUNCTION_ID) == 0) + { + m_nID = fnStringToUint32(pAttributeValue); + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_FUNCTION_DISPLAY_NAME) == 0) + { + m_displayName = pAttributeValue; + } + } + void CModelReaderNode_ImplicitFunction::OnNSChildElement(const nfChar * pChildName, + const nfChar * pNameSpace, + CXmlReader * pXMLReader) + { + __NMRASSERT(pChildName); + __NMRASSERT(pXMLReader); + __NMRASSERT(pNameSpace); + + // inputs + if (strcmp(pChildName, XML_3MF_ELEMENT_IMPLICIT_FUNCTION_INPUT) == 0) + { + auto node = std::make_shared( + m_pImplicitFunction.get(), m_pWarnings); + node->parseXML(pXMLReader); + return; + } + + // output + if (strcmp(pChildName, XML_3MF_ELEMENT_IMPLICIT_FUNCTION_OUTPUT) == 0) + { + auto node = std::make_shared( + m_pImplicitFunction.get(), m_pWarnings); + node->parseXML(pXMLReader); + return; + } + + auto const & nodeTypes = m_nodeTypes.getTypes(); + + for (auto const & nodeType : nodeTypes) // maeh, no structured bindings in C++11 + { + // first is the node type, second is the node type info + if (strcmp(pChildName, nodeType.second.getName().c_str()) == 0) + { + auto implicitNode = m_pImplicitFunction->addNode(nodeType.first, Lib3MF::eImplicitNodeConfiguration::Default); + auto node = + NMR::CModelReaderNode_Implicit_Node(m_pModel, implicitNode.get(), m_pWarnings); + node.parseXML(pXMLReader); + + return; + } + } + } +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Input.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Input.cpp new file mode 100644 index 000000000..fc2c6a96e --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Input.cpp @@ -0,0 +1,95 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for a single input of a function for implicit modelling + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Input.h" + +#include "Model/Classes/NMR_Model.h" +#include "Model/Classes/NMR_ModelConstants.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" +#include "Common/NMR_StringUtils.h" + +namespace NMR +{ + CModelReaderNode_Implicit_Function_Input::CModelReaderNode_Implicit_Function_Input( + CModelImplicitFunction * pParentFunction, + PModelWarnings pWarnings, + Lib3MF::eImplicitPortType portType) + : CModelReaderNode(pWarnings) + , m_portType(portType) + { + + __NMRASSERT(pParentFunction); + m_pParentFunction = pParentFunction; + } + + void CModelReaderNode_Implicit_Function_Input::parseXML(CXmlReader * pXMLReader) + { + __NMRASSERT(pXMLReader); + + // Parse name + parseName(pXMLReader); + + // Parse Attributes + parseAttributes(pXMLReader); + + // Parse Content + parseContent(pXMLReader); + + // Create Implicit Port + createInput(); + } + + void CModelReaderNode_Implicit_Function_Input::OnAttribute(const nfChar * pAttributeName, + const nfChar * pAttributeValue) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_PORT_ID) == 0) + { + m_identifier = pAttributeValue; + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_PORT_DISPLAY_NAME) == 0) + { + m_displayName = pAttributeValue; + } + } + + void CModelReaderNode_Implicit_Function_Input::createInput() + { + auto input = m_pParentFunction->findInput(m_identifier); + if (!input) + { + input = m_pParentFunction->addInput(m_identifier, m_displayName, m_portType); + } + input->setDisplayName(m_displayName); + } + +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Inputs.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Inputs.cpp new file mode 100644 index 000000000..72c8125a4 --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Inputs.cpp @@ -0,0 +1,77 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for ports of a function for implicit modelling + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Inputs.h" +#include "Model/Reader/Volumetric2201/NMR_Implicit_PortType_Convert.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Input.h" + +#include "Model/Classes/NMR_Model.h" +#include "Model/Classes/NMR_ModelConstants.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" +#include "Common/NMR_StringUtils.h" + +namespace NMR +{ + CModelReaderNode_Implicit_Function_Inputs::CModelReaderNode_Implicit_Function_Inputs( + CModelImplicitFunction * pParentFunction, + PModelWarnings pWarnings) + : CModelReaderNode(pWarnings) + { + __NMRASSERT(pParentFunction); + m_pImplicitFunction = pParentFunction; + } + + void CModelReaderNode_Implicit_Function_Inputs::parseXML(_In_ CXmlReader * pXMLReader) + { + __NMRASSERT(pXMLReader); + + // Parse name + parseName(pXMLReader); + + // Parse Content + parseContent(pXMLReader); + } + + void CModelReaderNode_Implicit_Function_Inputs::OnNSChildElement(const nfChar * pChildName, + const nfChar * pNameSpace, + CXmlReader * pXMLReader) + { + Lib3MF::eImplicitPortType portType; + if (implicit::portTypeFromName(pChildName, portType)) + { + auto pXMLNode = std::make_shared( + m_pImplicitFunction, m_pWarnings, portType); + pXMLNode->parseXML(pXMLReader); + } + } +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Output.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Output.cpp new file mode 100644 index 000000000..34c42388b --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Output.cpp @@ -0,0 +1,102 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for an output element + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Output.h" + +#include "Model/Classes/NMR_Model.h" +#include "Model/Classes/NMR_ModelConstants.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" +#include "Common/NMR_StringUtils.h" + +#include + +namespace NMR +{ + CModelReaderNode_Implicit_Function_Output::CModelReaderNode_Implicit_Function_Output( + CModelImplicitFunction * pParentFunction, + PModelWarnings pWarnings, + Lib3MF::eImplicitPortType portType) + : CModelReaderNode(pWarnings) + , m_portType(portType) + { + + __NMRASSERT(pParentFunction); + m_pParentFunction = pParentFunction; + } + + void CModelReaderNode_Implicit_Function_Output::parseXML(CXmlReader * pXMLReader) + { + __NMRASSERT(pXMLReader); + + // Parse name + parseName(pXMLReader); + + // Parse Attributes + parseAttributes(pXMLReader); + + // Parse Content + parseContent(pXMLReader); + + // Create Port + createOutput(); + } + + void CModelReaderNode_Implicit_Function_Output::OnAttribute(const nfChar * pAttributeName, + const nfChar * pAttributeValue) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_PORT_ID) == 0) + { + m_identifier = pAttributeValue; + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_PORT_DISPLAY_NAME) == 0) + { + m_displayName = pAttributeValue; + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_PORT_REFERENCE) == 0) + { + m_reference = pAttributeValue; + } + } + + void CModelReaderNode_Implicit_Function_Output::createOutput() + { + auto output = m_pParentFunction->findOutput(m_identifier); + if (!output) + { + output = m_pParentFunction->addOutput(m_identifier, m_displayName, m_portType); + } + output->setDisplayName(m_displayName); + output->setReference(m_reference); + } + +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Outputs.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Outputs.cpp new file mode 100644 index 000000000..b148e1632 --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Outputs.cpp @@ -0,0 +1,78 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for inputs (arguments) of a function for implicit modelling + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Outputs.h" +#include "Model/Reader/Volumetric2201/NMR_Implicit_PortType_Convert.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function_Output.h" + +#include "Model/Classes/NMR_Model.h" +#include "Model/Classes/NMR_ModelConstants.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" +#include "Common/NMR_StringUtils.h" + +namespace NMR +{ + CModelReaderNode_Implicit_Function_Outputs::CModelReaderNode_Implicit_Function_Outputs( + CModelImplicitFunction * pParentFunction, + PModelWarnings pWarnings) + : CModelReaderNode(pWarnings) + { + __NMRASSERT(pParentFunction); + m_pImplicitFunction = pParentFunction; + } + + void CModelReaderNode_Implicit_Function_Outputs::parseXML(_In_ CXmlReader * pXMLReader) + { + __NMRASSERT(pXMLReader); + + // Parse name + parseName(pXMLReader); + + // Parse Content + parseContent(pXMLReader); + } + + void CModelReaderNode_Implicit_Function_Outputs::OnNSChildElement(const nfChar * pChildName, + const nfChar * pNameSpace, + CXmlReader * pXMLReader) + { + Lib3MF::eImplicitPortType portType; + if (implicit::portTypeFromRefName(pChildName, portType)) + { + auto XMLNode = + CModelReaderNode_Implicit_Function_Output(m_pImplicitFunction, m_pWarnings, portType); + + XMLNode.parseXML(pXMLReader); + } + } +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node.cpp new file mode 100644 index 000000000..36d072f29 --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node.cpp @@ -0,0 +1,173 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for nodes of graph representing a function for implicit modelling + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Inputs.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Outputs.h" + +#include "Model/Classes/NMR_Model.h" +#include "Model/Classes/NMR_ModelConstants.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" +#include "Common/NMR_StringUtils.h" + +#include + +namespace NMR +{ + CModelReaderNode_Implicit_Node::CModelReaderNode_Implicit_Node( + _In_ CModel * pModel, + _In_ CModelImplicitNode * pImplicitNode, + _In_ PModelWarnings pWarnings) + : CModelReaderNode(pWarnings) + { + __NMRASSERT(pModel); + __NMRASSERT(pImplicitNode); + + m_pModel = pModel; + m_pImplicitNode = pImplicitNode; + } + + void CModelReaderNode_Implicit_Node::parseXML(_In_ CXmlReader * pXMLReader) + { + __NMRASSERT(pXMLReader); + + // Parse name + parseName(pXMLReader); + + // Parse Attributes + parseAttributes(pXMLReader); + + // Parse Content + parseContent(pXMLReader); + } + + Lib3MF::sMatrix4x4 matFromString(std::string const & str) + { + Lib3MF::sMatrix4x4 mat; + std::stringstream ss(str); + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + if (!(ss >> mat.m_Field[i][j])) + { + throw CNMRException(NMR_ERROR_NOTENOUGHVALUESINMATRIXSTRING); + } + } + } + + // Check if there is any extra content in the input string + std::string extra; + if (ss >> extra && !extra.empty()) + { + throw CNMRException(NMR_ERROR_TOOMANYVALUESINMATRIXSTRING); + } + + return mat; + } + + void CModelReaderNode_Implicit_Node::OnAttribute(_In_z_ const nfChar * pAttributeName, + _In_z_ const nfChar * pAttributeValue) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_NODE_ID) == 0) + { + m_pImplicitNode->setIdentifier(pAttributeValue); + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_NODE_DISPLAY_NAME) == 0) + { + m_pImplicitNode->setDisplayName(pAttributeValue); + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_NODE_TAG) == 0) + { + m_pImplicitNode->setTag(pAttributeValue); + } + else if (m_pImplicitNode->getNodeType() == Lib3MF::eImplicitNodeType::Constant && + strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_NODE_VALUE) == 0) + { + m_pImplicitNode->setConstant(strtod(pAttributeValue, nullptr)); + } + else if (m_pImplicitNode->getNodeType() == Lib3MF::eImplicitNodeType::ConstVec) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_NODE_X) == 0) + { + m_vector.m_Coordinates[0] = strtod(pAttributeValue, nullptr); + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_NODE_Y) == 0) + { + m_vector.m_Coordinates[1] = strtod(pAttributeValue, nullptr); + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_NODE_Z) == 0) + { + m_vector.m_Coordinates[2] = strtod(pAttributeValue, nullptr); + } + m_pImplicitNode->setVector(m_vector); + } + else if (m_pImplicitNode->getNodeType() == Lib3MF::eImplicitNodeType::ConstMat) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_NODE_MATRIX) == 0) + { + m_pImplicitNode->setMatrix(matFromString(pAttributeValue)); + } + } + else if (m_pImplicitNode->getNodeType() == Lib3MF::eImplicitNodeType::ConstResourceID) + { + if ((strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_NODE_RESOURCE_ID_VALUE_DEPRECATED) == 0) + || (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_NODE_VALUE) == 0)) + { + m_pImplicitNode->setModelResourceID(std::stoi(pAttributeValue)); + } + } + } + + void NMR::CModelReaderNode_Implicit_Node::OnNSChildElement(_In_z_ const nfChar * pChildName, + _In_z_ const nfChar * pNameSpace, + _In_ CXmlReader * pXMLReader) + { + __NMRASSERT(pChildName); + __NMRASSERT(pXMLReader); + __NMRASSERT(pNameSpace); + + if (strcmp(pChildName, XML_3MF_ELEMENT_IMPLICIT_NODE_INPUT) == 0) + { + auto pXMLNode = + std::make_shared(m_pImplicitNode, m_pWarnings); + pXMLNode->parseXML(pXMLReader); + } + else if (strcmp(pChildName, XML_3MF_ELEMENT_IMPLICIT_NODE_OUTPUT) == 0) + { + auto pXMLNode = std::make_shared( + m_pImplicitNode, m_pWarnings); + pXMLNode->parseXML(pXMLReader); + } + } +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Inputs.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Inputs.cpp new file mode 100644 index 000000000..60302c43c --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Inputs.cpp @@ -0,0 +1,77 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for ports of a node of a graph representing a function for implicit modelling + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Inputs.h" +#include "Model/Reader/Volumetric2201/NMR_Implicit_PortType_Convert.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Port.h" + +#include "Model/Classes/NMR_Model.h" +#include "Model/Classes/NMR_ModelConstants.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" +#include "Common/NMR_StringUtils.h" + +namespace NMR +{ + CModelReaderNode_Implicit_Node_Inputs::CModelReaderNode_Implicit_Node_Inputs( + _In_ CModelImplicitNode * pParentNode, + _In_ PModelWarnings pWarnings) + : CModelReaderNode(pWarnings) + { + __NMRASSERT(pParentNode); + m_pImplicitNode = pParentNode; + } + + void CModelReaderNode_Implicit_Node_Inputs::parseXML(_In_ CXmlReader * pXMLReader) + { + __NMRASSERT(pXMLReader); + + // Parse name + parseName(pXMLReader); + + // Parse Content + parseContent(pXMLReader); + } + + void CModelReaderNode_Implicit_Node_Inputs::OnNSChildElement(const nfChar * pChildName, + const nfChar * pNameSpace, + CXmlReader * pXMLReader) + { + Lib3MF::eImplicitPortType portType; + if (implicit::portTypeFromRefName(pChildName, portType)) + { + auto pXMLNode = CModelReaderNode_Implicit_Port( + m_pImplicitNode, m_pWarnings, portType, ImplicitPortInOut::Input); + pXMLNode.parseXML(pXMLReader); + } + } +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Outputs.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Outputs.cpp new file mode 100644 index 000000000..2c4fec20d --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Outputs.cpp @@ -0,0 +1,78 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for output ports of a node + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Node_Outputs.h" +#include "Model/Reader/Volumetric2201/NMR_Implicit_PortType_Convert.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Port.h" + +#include "Model/Classes/NMR_Model.h" +#include "Model/Classes/NMR_ModelConstants.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" +#include "Common/NMR_StringUtils.h" + +namespace NMR +{ + CModelReaderNode_Implicit_Node_Outputs::CModelReaderNode_Implicit_Node_Outputs( + _In_ CModelImplicitNode * pParentNode, + _In_ PModelWarnings pWarnings) + : CModelReaderNode(pWarnings) + { + __NMRASSERT(pParentNode); + m_pImplicitNode = pParentNode; + } + + void CModelReaderNode_Implicit_Node_Outputs::parseXML(_In_ CXmlReader * pXMLReader) + { + __NMRASSERT(pXMLReader); + + // Parse name + parseName(pXMLReader); + + // Parse Content + parseContent(pXMLReader); + } + + void CModelReaderNode_Implicit_Node_Outputs::OnNSChildElement(const nfChar * pChildName, + const nfChar * pNameSpace, + CXmlReader * pXMLReader) + { + + Lib3MF::eImplicitPortType portType; + if (implicit::portTypeFromName(pChildName, portType)) + { + auto pXMLNode = CModelReaderNode_Implicit_Port( + m_pImplicitNode, m_pWarnings, portType, ImplicitPortInOut::Output); + pXMLNode.parseXML(pXMLReader); + } + } +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Port.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Port.cpp new file mode 100644 index 000000000..cfeba579b --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Port.cpp @@ -0,0 +1,119 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for a single port of a node of a graph representing a function for implicit modelling + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Port.h" + +#include "Model/Classes/NMR_Model.h" +#include "Model/Classes/NMR_ModelConstants.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" +#include "Common/NMR_StringUtils.h" + +namespace NMR +{ + CModelReaderNode_Implicit_Port::CModelReaderNode_Implicit_Port(CModelImplicitNode * pParentNode, + PModelWarnings pWarnings, + Lib3MF::eImplicitPortType portType, + ImplicitPortInOut inOut) + : CModelReaderNode(pWarnings) + , m_portType(portType), + m_inOut(inOut) + { + __NMRASSERT(pParentNode); + m_pParentNode = pParentNode; + } + + void CModelReaderNode_Implicit_Port::parseXML(CXmlReader * pXMLReader) + { + __NMRASSERT(pXMLReader); + + // Parse name + parseName(pXMLReader); + + // Parse Attributes + parseAttributes(pXMLReader); + + // Parse Content + parseContent(pXMLReader); + + // Create Implicit Port + switch (m_inOut) + { + case ImplicitPortInOut::Input: + createInput(); + break; + case ImplicitPortInOut::Output: + createOutput(); + break; + } + } + + void CModelReaderNode_Implicit_Port::OnAttribute(const nfChar * pAttributeName, + const nfChar * pAttributeValue) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_PORT_ID) == 0) + { + m_identifier = pAttributeValue; + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_PORT_DISPLAY_NAME) == 0) + { + m_displayName = pAttributeValue; + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMPLICIT_PORT_REFERENCE) == 0) + { + m_reference = pAttributeValue; + } + } + + void CModelReaderNode_Implicit_Port::createInput() + { + auto input = m_pParentNode->findInput(m_identifier); + if (!input) + { + input = m_pParentNode->addInput(m_identifier, m_displayName); + } + input->setType(m_portType); + input->setDisplayName(m_displayName); + input->setReference(m_reference); + } + + void NMR::CModelReaderNode_Implicit_Port::createOutput() + { + auto output = m_pParentNode->findOutput(m_identifier); + if (!output) + { + output = m_pParentNode->addOutput(m_identifier, m_displayName); + } + output->setType(m_portType); + output->setDisplayName(m_displayName); + } +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_LevelSet.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_LevelSet.cpp new file mode 100644 index 000000000..ee34fe482 --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_LevelSet.cpp @@ -0,0 +1,246 @@ +/*++ + +Copyright (C) 2024 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Reader for boundary shape objects + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_LevelSet.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" +#include "Common/NMR_StringUtils.h" +#include "Model/Classes/NMR_ModelLevelSetObject.h" +#include "Model/Classes/NMR_ModelMeshObject.h" +#include "Model/Classes/NMR_ModelResource.h" +#include "Model/Classes/NMR_ModelConstants.h" + +namespace NMR +{ + + NMR::CModelReaderNode_LevelSet::CModelReaderNode_LevelSet( + CModel * pModel, PModelLevelSetObject levelSet, + PModelWarnings pWarnings, PProgressMonitor pProgressMonitor) + : CModelReaderNode(pWarnings, pProgressMonitor), m_parentModel(pModel), m_pLevelSet(std::move(levelSet)) + { + + } + + void CModelReaderNode_LevelSet::parseXML(CXmlReader* pXMLReader) + { + __NMRASSERT(pXMLReader); + // Parse name + parseName(pXMLReader); + + // Parse Attributes + parseAttributes(pXMLReader); + + // Parse Content + parseContent(pXMLReader); + + PPackageResourceID functionPackageId = m_parentModel->findPackageResourceID( + m_parentModel->currentPath(), m_nFunctionID); + if(!functionPackageId.get()) + { + throw CNMRException(NMR_ERROR_UNKNOWNMODELRESOURCE); + } + + auto pFunction = m_parentModel->findFunction(functionPackageId->getUniqueID()); + if(!pFunction) + { + throw CNMRException(NMR_ERROR_INVALIDMODELRESOURCE); + } + + m_pLevelSet->setFunction(pFunction); + + PPackageResourceID meshPackageId = m_parentModel->findPackageResourceID( + m_parentModel->currentPath(), m_nMeshID); + + if(!meshPackageId.get()) + { + throw CNMRException(NMR_ERROR_UNKNOWNMODELRESOURCE); + } + + PModelResource pMeshResource = m_parentModel->findResource(meshPackageId); + + if(!pMeshResource) + { + throw CNMRException(NMR_ERROR_INVALIDMODELRESOURCE); + } + + PModelMeshObject pMeshObject = std::dynamic_pointer_cast(pMeshResource); + + if(!pMeshObject) + { + throw CNMRException(NMR_ERROR_INVALIDMODELRESOURCE); + } + + m_pLevelSet->setMesh(pMeshObject); + + if(m_bHasTransform) + { + m_pLevelSet->setTransform(m_Transform); + } + + if(m_bHasChannel) + { + m_pLevelSet->setChannelName(m_sChannel); + } + + if(m_bHasMeshBBoxOnly) + { + m_pLevelSet->setMeshBBoxOnly(m_meshBBoxOnly); + } + + if(m_bHasMinFeatureSize) + { + m_pLevelSet->setMinFeatureSize(m_dMinFeatureSize); + } + + if(m_bHasFallBackValue) + { + m_pLevelSet->setFallBackValue(m_dFallBackValue); + } + + if(m_bHasVolumeDataID) + { + PPackageResourceID volumePackageId = + m_parentModel->findPackageResourceID(m_parentModel->currentPath(), + m_nVolumeDataID); + + if(!volumePackageId.get()) + { + throw CNMRException(NMR_ERROR_UNKNOWNMODELRESOURCE); + } + + auto pVolumeData = m_parentModel->findVolumeData( + volumePackageId->getUniqueID()); + + m_pLevelSet->setVolumeData(pVolumeData); + } + } + + void CModelReaderNode_LevelSet::OnAttribute( + const nfChar* pAttributeName, const nfChar* pAttributeValue) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_ID) == 0) + { + m_resID = fnStringToUint32(pAttributeValue); + } + + if(strcmp(pAttributeName, + XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_FUNCTION_ID) == 0) + { + if(m_bHasFunctionID) + { + throw CNMRException( + NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_FUNCTION_ID); + } + m_bHasFunctionID = true; + m_nFunctionID = fnStringToUint32(pAttributeValue); + } + else if(strcmp(pAttributeName, + XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_CHANNEL) == 0) + { + if(m_bHasChannel) + { + throw CNMRException(NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_CHANNEL); + } + m_bHasChannel = true; + m_sChannel = pAttributeValue; + } + else if(strcmp(pAttributeName, + XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_TRANSFORM) == 0) + { + if(m_bHasTransform) + { + throw CNMRException( + NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_TRANSFORM); + } + m_bHasTransform = true; + m_Transform = fnMATRIX3_fromString(pAttributeValue); + } + else if(strcmp(pAttributeName, + XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_MIN_FEATURE_SIZE) == 0) + { + if(m_bHasMinFeatureSize) + { + throw CNMRException( + NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_MIN_FEATURE_SIZE); + } + m_bHasMinFeatureSize = true; + m_dMinFeatureSize = fnStringToDouble(pAttributeValue); + } + else if(strcmp(pAttributeName, + XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_MESH_BBOX_ONLY) == 0) + { + m_bHasMeshBBoxOnly = true; + m_meshBBoxOnly = !(std::string(pAttributeValue) == "false"); + } + else if(strcmp(pAttributeName, + XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_FALLBACK_VALUE) == 0) + { + if(m_bHasFallBackValue) + { + throw CNMRException( + NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_FALLBACK_VALUE); + } + m_bHasFallBackValue = true; + m_dFallBackValue = fnStringToDouble(pAttributeValue); + } + else if(strcmp(pAttributeName, + XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_MESH_ID) == 0) + { + if(m_bHasMeshID) + { + throw CNMRException( + NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_MESH_ID); + } + m_bHasMeshID = true; + m_nMeshID = fnStringToUint32(pAttributeValue); + } + else if(strcmp(pAttributeName, + XML_3MF_ATTRIBUTE_MESH_VOLUMEDATA) == 0) + { + if(m_bHasVolumeDataID) + { + throw CNMRException( + NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_VOLUME_ID); + } + m_bHasVolumeDataID = true; + m_nVolumeDataID = fnStringToUint32(pAttributeValue); + } + } + void CModelReaderNode_LevelSet::OnNSChildElement( + const nfChar* pChildName, const nfChar* pNameSpace, + CXmlReader* pXMLReader) + { + __NMRASSERT(pChildName); + __NMRASSERT(pXMLReader); + __NMRASSERT(pNameSpace); + } +} // namespace NMR diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Color.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Color.cpp new file mode 100644 index 000000000..e4c4eaa95 --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Color.cpp @@ -0,0 +1,156 @@ +/*++ + +Copyright (C) 2020 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +CModelReaderNode_Volumetric2201_Color.cpp covers the official 3MF volumetric extension. + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Color.h" + +#include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_ModelMeshObject.h" +#include "Model/Classes/NMR_ModelResource.h" +#include "Model/Classes/NMR_Model.h" + +#include "Common/NMR_StringUtils.h" +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" + +namespace NMR { + + + CModelReaderNode_Volumetric2201_Color::CModelReaderNode_Volumetric2201_Color(_In_ PModelWarnings pWarnings) + : CModelReaderNode(pWarnings) + { + } + + void CModelReaderNode_Volumetric2201_Color::parseXML(_In_ CXmlReader * pXMLReader) + { + // Parse name + parseName(pXMLReader); + + // Parse attribute + parseAttributes(pXMLReader); + + // Parse Content + parseContent(pXMLReader); + } + + PVolumeDataColor CModelReaderNode_Volumetric2201_Color::MakeColor(_In_ CModel* pModel) + { + if (!pModel) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + if (!m_bHasFieldID) { + throw CNMRException(NMR_ERROR_MISSINGVOLUMEDATAFIELDID); + } + + PPackageResourceID pID = pModel->findPackageResourceID(pModel->currentPath(), m_nFieldID); + if (!pID.get()) { + throw CNMRException(NMR_ERROR_UNKNOWNMODELRESOURCE); + } + + auto pColorFunction = pModel->findFunction(pID->getUniqueID()); + if (!pColorFunction.get()) { + throw CNMRException(NMR_ERROR_INVALIDMODELRESOURCE); + } + + PVolumeDataColor pColor = std::make_shared(pColorFunction); + + if (m_bHasTransform) + { + pColor->setTransform(m_Transform); + } + + if (m_bHasChannel) + { + pColor->setChannelName(m_sChannel); + } + + if (m_bHasMinFeatureSize) + { + pColor->setMinFeatureSize(m_dMinFeatureSize); + } + + if (m_bHasFallBackValue) + { + pColor->setFallBackValue(m_dFallBackValue); + } + return pColor; + } + + void CModelReaderNode_Volumetric2201_Color::OnAttribute(_In_z_ const nfChar * pAttributeName, _In_z_ const nfChar * pAttributeValue) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_VOLUMEDATA_TRANSFORM) == 0) { + if (m_bHasTransform) + throw CNMRException(NMR_ERROR_DUPLICATEVOLUMEDATATRANSFORM); + m_bHasTransform = true; + + m_Transform = fnMATRIX3_fromString(pAttributeValue); + } + + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_VOLUMEDATA_FUNCTIONID) == 0) { + if (m_bHasFieldID) + throw CNMRException(NMR_ERROR_DUPLICATEVOLUMEDATAFIELDID); + m_bHasFieldID = true; + + m_nFieldID = fnStringToUint32(pAttributeValue); + } + + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_VOLUMEDATA_CHANNEL) == 0) { + if (m_bHasChannel) + throw CNMRException(NMR_ERROR_DUPLICATEVOLUMEDATACHANNEL); + + m_bHasChannel = true; + m_sChannel = pAttributeValue; + } + + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_VOLUMEDATA_MINFEATURESIZE) == 0) { + if (m_bHasMinFeatureSize) + throw CNMRException(NMR_ERROR_DUPLICATE_VOLUMEDATA_MINFEATURESIZE); + + m_bHasMinFeatureSize = true; + m_dMinFeatureSize = fnStringToDouble(pAttributeValue); + } + + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_VOLUMEDATA_FALLBACKVALUE) == 0) { + if (m_bHasFallBackValue) + throw CNMRException(NMR_ERROR_DUPLICATE_VOLUMEDATA_FALLBACKVALUE); + + m_bHasFallBackValue = true; + m_dFallBackValue = fnStringToDouble(pAttributeValue); + } + } + + void CModelReaderNode_Volumetric2201_Color::OnNSChildElement(_In_z_ const nfChar * pChildName, _In_z_ const nfChar * pNameSpace, _In_ CXmlReader * pXMLReader) + { + __NMRASSERT(pChildName); + __NMRASSERT(pXMLReader); + __NMRASSERT(pNameSpace); + + } +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Image3D.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Image3D.cpp new file mode 100644 index 000000000..08eaffe1d --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Image3D.cpp @@ -0,0 +1,117 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +NMR_ModelReaderNode_Volumetric2201_Image3D.cpp covers the official 3MF volumetric extension. + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Image3D.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageStack.h" + +#include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_ModelImage3D.h" +#include "Model/Classes/NMR_ModelResource.h" +#include "Model/Classes/NMR_Model.h" + +#include "Common/NMR_StringUtils.h" +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" + +namespace NMR { + + + CModelReaderNode_Volumetric2201_Image3D::CModelReaderNode_Volumetric2201_Image3D(_In_ CModel * pModel, _In_ PModelWarnings pWarnings) + : CModelReaderNode(pWarnings), + m_pModel (pModel), + m_modelResourceId (0), + m_bHasName (false) + { + if (pModel == nullptr) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + } + + void CModelReaderNode_Volumetric2201_Image3D::parseXML(_In_ CXmlReader * pXMLReader) + { + // Parse name + parseName(pXMLReader); + + // Parse attribute + parseAttributes(pXMLReader); + + //if (!m_bHasName) + // m_pWarnings->addException(CNMRException(NMR_ERROR_MISSINGIMAGE3DNAME), mrwMissingMandatoryValue); + + if (m_modelResourceId == 0) + throw CNMRException(NMR_ERROR_MISSINGMODELRESOURCEID); + + // Parse Content + parseContent(pXMLReader); + + m_pModel->addResource(m_pImage3D); + } + + + void CModelReaderNode_Volumetric2201_Image3D::OnAttribute(_In_z_ const nfChar * pAttributeName, _In_z_ const nfChar * pAttributeValue) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMAGE3D_ID) == 0) { + if (m_modelResourceId != 0) + throw CNMRException(NMR_ERROR_DUPLICATERESOURCEID); + + // Convert to integer and make a input and range check! + m_modelResourceId = fnStringToUint32(pAttributeValue); + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMAGE3D_NAME) == 0) { + if (m_bHasName) + throw CNMRException(NMR_ERROR_DUPLICATEIMAGE3DNAME); + + m_bHasName = true; + m_sName = pAttributeName; + } + } + + void CModelReaderNode_Volumetric2201_Image3D::OnNSChildElement(_In_z_ const nfChar * pChildName, _In_z_ const nfChar * pNameSpace, _In_ CXmlReader * pXMLReader) + { + __NMRASSERT(pChildName); + __NMRASSERT(pXMLReader); + __NMRASSERT(pNameSpace); + + if (strcmp(pNameSpace, XML_3MF_NAMESPACE_VOLUMETRICSPEC) == 0) { + if (strcmp(pChildName, XML_3MF_ELEMENT_IMAGESTACK) == 0) + { + PModelImageStack pImageStack = CModelImageStack::make(m_modelResourceId, m_pModel, 0, 0, 0); + + PModelReaderNode_Volumetric2201_ImageStack pXMLNode = std::make_shared(m_pModel, pImageStack.get(), m_pWarnings); + pXMLNode->parseXML(pXMLReader); + + m_pImage3D = pImageStack; + } + else + m_pWarnings->addException(CNMRException(NMR_ERROR_NAMESPACE_INVALID_ELEMENT), mrwInvalidOptionalValue); + } + } + +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageSheet.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageSheet.cpp new file mode 100644 index 000000000..438770797 --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageSheet.cpp @@ -0,0 +1,77 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +NMR_ModelReaderNode_Volumetric2201_ImageSheet.cpp covers the official 3MF volumetric extension. + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageSheet.h" + +#include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_ModelMeshObject.h" +#include "Model/Classes/NMR_ModelResource.h" +#include "Model/Classes/NMR_Model.h" + +#include "Common/NMR_StringUtils.h" +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" + +namespace NMR { + + + CModelReaderNode_Volumetric2201_ImageSheet::CModelReaderNode_Volumetric2201_ImageSheet(_In_ PModelWarnings pWarnings) + : CModelReaderNode(pWarnings) + + { + } + + void CModelReaderNode_Volumetric2201_ImageSheet::parseXML(_In_ CXmlReader * pXMLReader) + { + // Parse name + parseName(pXMLReader); + + // Parse attribute + parseAttributes(pXMLReader); + + // Parse Content + parseContent(pXMLReader); + } + + + void CModelReaderNode_Volumetric2201_ImageSheet::OnAttribute(_In_z_ const nfChar * pAttributeName, _In_z_ const nfChar * pAttributeValue) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMAGESHEET_PATH) == 0) { + m_sPath = pAttributeValue; + } + } + + std::string CModelReaderNode_Volumetric2201_ImageSheet::getPath() + { + return m_sPath; + } + +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageStack.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageStack.cpp new file mode 100644 index 000000000..b2e453d5f --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageStack.cpp @@ -0,0 +1,150 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +NMR_ModelReaderNode_Volumetric2201_ImageStack.cpp covers the official 3MF volumetric extension. + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageStack.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_ImageSheet.h" + +#include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_Model.h" + +#include "Common/NMR_StringUtils.h" +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" + +namespace NMR { + + + CModelReaderNode_Volumetric2201_ImageStack::CModelReaderNode_Volumetric2201_ImageStack(_In_ CModel* pModel, _In_ CModelImageStack* pImageStack, _In_ PModelWarnings pWarnings) + : CModelReaderNode(pWarnings), + m_pModel(pModel), + m_pImageStack(pImageStack), + m_nRowCount(0), + m_nColumnCount(0), + m_nSheetCount(0), + m_nSheetIndex(0) + { + if (pModel == nullptr) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + if (m_pImageStack == nullptr) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + } + + void CModelReaderNode_Volumetric2201_ImageStack::parseXML(_In_ CXmlReader* pXMLReader) + { + // Parse name + parseName(pXMLReader); + + // Parse attribute + parseAttributes(pXMLReader); + + if (m_nRowCount == 0) + throw CNMRException(NMR_ERROR_MISSINGIMAGESTACKSIZE); + if (m_nColumnCount == 0) + throw CNMRException(NMR_ERROR_MISSINGIMAGESTACKSIZE); + if (m_nSheetCount == 0) + throw CNMRException(NMR_ERROR_MISSINGIMAGESTACKSHEETCOUNT); + + m_pImageStack->setRowCount(m_nRowCount); + m_pImageStack->setColumnCount(m_nColumnCount); + m_pImageStack->setSheetCount(m_nSheetCount); + + m_nSheetIndex = 0; + + // Parse Content + parseContent(pXMLReader); + + if (m_nSheetCount != m_nSheetIndex) + m_pWarnings->addException(CNMRException(NMR_ERROR_INVALIDIMAGSHEETCOUNT), mrwMissingMandatoryValue); + } + + + void CModelReaderNode_Volumetric2201_ImageStack::OnAttribute(_In_z_ const nfChar* pAttributeName, _In_z_ const nfChar* pAttributeValue) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMAGESTACK_ROWCOUNT) == 0) { + if (m_nRowCount != 0) + throw CNMRException(NMR_ERROR_DUPLICATEIMAGESTACKSIZE); + + // Convert to integer and make a input and range check! + m_nRowCount = fnStringToUint32(pAttributeValue); + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMAGESTACK_COLUMNCOUNT) == 0) { + if (m_nColumnCount != 0) + throw CNMRException(NMR_ERROR_DUPLICATEIMAGESTACKSIZE); + + // Convert to integer and make a input and range check! + m_nColumnCount = fnStringToUint32(pAttributeValue); + } + else if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_IMAGESTACK_SHEETCOUNT) == 0) { + if (m_nSheetCount != 0) + throw CNMRException(NMR_ERROR_DUPLICATEIMAGESTACKSHEETCOUNT); + + // Convert to integer and make a input and range check! + m_nSheetCount = fnStringToUint32(pAttributeValue); + } + } + + void CModelReaderNode_Volumetric2201_ImageStack::OnNSChildElement(_In_z_ const nfChar* pChildName, _In_z_ const nfChar* pNameSpace, _In_ CXmlReader* pXMLReader) + { + __NMRASSERT(pChildName); + __NMRASSERT(pXMLReader); + __NMRASSERT(pNameSpace); + + if (strcmp(pNameSpace, XML_3MF_NAMESPACE_VOLUMETRICSPEC) == 0) { + if (strcmp(pChildName, XML_3MF_ELEMENT_IMAGESHEET) == 0) + { + PModelReaderNode_Volumetric2201_ImageSheet pXMLNode = std::make_shared(m_pWarnings); + pXMLNode->parseXML(pXMLReader); + + std::string sPath = pXMLNode->getPath(); + if (sPath != "") { + + PModelAttachment pAttachment = m_pModel->findModelAttachment(sPath); + if (pAttachment.get() == nullptr) + m_pWarnings->addException(CNMRException(NMR_ERROR_IMAGESHEETNOTFOUND), mrwFatal); + + if (m_nSheetIndex >= m_nSheetCount) + m_pWarnings->addException(CNMRException(NMR_ERROR_TOOMANYIMAGESHEETS), mrwFatal); + + __NMRASSERT(m_pImageStack.get() != nullptr); + m_pImageStack->setSheet(m_nSheetIndex, pAttachment); + m_nSheetIndex++; + } + else + m_pWarnings->addException(CNMRException(NMR_ERROR_MISSINGIMAGE3DSHEETPATH), mrwMissingMandatoryValue); + + } + else + m_pWarnings->addException(CNMRException(NMR_ERROR_NAMESPACE_INVALID_ELEMENT), mrwInvalidOptionalValue); + } + } + + +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Property.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Property.cpp new file mode 100644 index 000000000..3548eedfd --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Property.cpp @@ -0,0 +1,185 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +CModelReaderNode_Volumetric2201_Property.cpp covers the official 3MF volumetric extension. + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Property.h" + +#include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_ModelMeshObject.h" +#include "Model/Classes/NMR_ModelResource.h" +#include "Model/Classes/NMR_Model.h" + +#include "Common/NMR_StringUtils.h" +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" + +namespace NMR { + + CModelReaderNode_Volumetric2201_Property::CModelReaderNode_Volumetric2201_Property(_In_ PModelWarnings pWarnings) + : CModelReaderNode(pWarnings) + { + + } + + void CModelReaderNode_Volumetric2201_Property::parseXML(_In_ CXmlReader * pXMLReader) + { + // Parse name + parseName(pXMLReader); + + // Parse attribute + parseAttributes(pXMLReader); + + // Parse Content + parseContent(pXMLReader); + } + + PVolumeDataProperty CModelReaderNode_Volumetric2201_Property::MakeProperty(_In_ CModel* pModel) + { + if (!pModel) + throw CNMRException(NMR_ERROR_INVALIDPARAM); + + if (!m_bHasFieldID) { + throw CNMRException(NMR_ERROR_MISSINGVOLUMEDATAFIELDID); + } + + if (!m_bHasName) { + throw CNMRException(NMR_ERROR_MISSINGVOLUMEDATAPROPERTYNAME); + } + + PPackageResourceID pID = pModel->findPackageResourceID(pModel->currentPath(), m_nFieldID); + if (!pID.get()) { + throw CNMRException(NMR_ERROR_UNKNOWNMODELRESOURCE); + } + + auto pFunction = pModel->findFunction(pID->getUniqueID()); + + NMR::PVolumeDataProperty pProperty; + if (pFunction) + { + pProperty = std::make_shared(pFunction, m_sName); + } + + if (!pProperty) { + throw CNMRException(NMR_ERROR_UNKNOWNMODELRESOURCE); + } + pProperty->setIsRequired(m_bRequired); + + if (m_bHasTransform) + { + pProperty->setTransform(m_Transform); + } + + if (m_bHasChannel) + { + pProperty->setChannelName(m_sChannel); + } + + if (m_bHasMinFeatureSize) + { + pProperty->setMinFeatureSize(m_dMinFeatureSize); + } + + if (m_bHasFallBackValue) + { + pProperty->setFallBackValue(m_dFallBackValue); + } + + return pProperty; + } + + void CModelReaderNode_Volumetric2201_Property::OnAttribute(_In_z_ const nfChar * pAttributeName, _In_z_ const nfChar * pAttributeValue) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_VOLUMEDATA_TRANSFORM) == 0) { + if (m_bHasTransform) + throw CNMRException(NMR_ERROR_DUPLICATEVOLUMEDATATRANSFORM); + + m_Transform = fnMATRIX3_fromString(pAttributeValue); + + m_bHasTransform = true; + } + + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_VOLUMEDATA_PROPERTY) == 0) { + if (m_bHasName) + throw CNMRException(NMR_ERROR_DUPLICATEVOLUMEDATAPROPERTY); + + m_bHasName = true; + + m_sName = pAttributeValue; + } + + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_VOLUMEDATA_FUNCTIONID) == 0) { + if (m_bHasFieldID) + throw CNMRException(NMR_ERROR_DUPLICATEVOLUMEDATAFIELDID); + + m_bHasFieldID = true; + + m_nFieldID = fnStringToUint32(pAttributeValue); + } + + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_VOLUMEDATA_PROPERTY_REQUIRED) == 0) { + + m_bHasRequired = true; + + m_bRequired = !(std::string(pAttributeValue) == "false"); + } + + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_VOLUMEDATA_CHANNEL) == 0) { + if (m_bHasChannel) + throw CNMRException(NMR_ERROR_DUPLICATEVOLUMEDATACHANNEL); + + m_bHasChannel = true; + m_sChannel = pAttributeValue; + } + + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_VOLUMEDATA_MINFEATURESIZE) == 0) { + if (m_bHasMinFeatureSize) + throw CNMRException(NMR_ERROR_DUPLICATE_VOLUMEDATA_MINFEATURESIZE); + + m_bHasMinFeatureSize = true; + m_dMinFeatureSize = strtod(pAttributeValue, nullptr); + } + + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_VOLUMEDATA_FALLBACKVALUE) == 0) { + if (m_bHasFallBackValue) + throw CNMRException(NMR_ERROR_DUPLICATE_VOLUMEDATA_FALLBACKVALUE); + + m_bHasFallBackValue = true; + m_dFallBackValue = fnStringToDouble(pAttributeValue); + } + } + + void CModelReaderNode_Volumetric2201_Property::OnNSChildElement(_In_z_ const nfChar * pChildName, _In_z_ const nfChar * pNameSpace, _In_ CXmlReader * pXMLReader) + { + __NMRASSERT(pChildName); + __NMRASSERT(pXMLReader); + __NMRASSERT(pNameSpace); + + } +} diff --git a/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_VolumeData.cpp b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_VolumeData.cpp new file mode 100644 index 000000000..9b40c58e7 --- /dev/null +++ b/Source/Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_VolumeData.cpp @@ -0,0 +1,138 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +NMR_ModelReaderNode_Volumetric2201_VolumeData.cpp covers the official 3MF +volumetric extension. + +--*/ + +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_VolumeData.h" + +#include "Common/NMR_Exception.h" +#include "Common/NMR_Exception_Windows.h" +#include "Common/NMR_StringUtils.h" +#include "Model/Classes/NMR_Model.h" +#include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_ModelMeshObject.h" +#include "Model/Classes/NMR_ModelResource.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Color.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Property.h" + +namespace NMR +{ + + CModelReaderNode_Volumetric2201_VolumeData:: + CModelReaderNode_Volumetric2201_VolumeData(CModel* pModel, + PModelWarnings pWarnings) + : CModelReaderNode(pWarnings), + m_pModel(pModel) + + { + if(pModel == nullptr) + { + throw CNMRException(NMR_ERROR_INVALIDPARAM); + } + } + + void CModelReaderNode_Volumetric2201_VolumeData::parseXML( + CXmlReader* pXMLReader) + { + // Parse name + parseName(pXMLReader); + + // Parse attribute + parseAttributes(pXMLReader); + + // parseContent needs m_pVolumeData to be initialized, and m_nID to be set by parseAttributes + m_pVolumeData = std::make_shared(m_nID, m_pModel); + // Parse Content + parseContent(pXMLReader); + + m_pModel->addResource(m_pVolumeData); + } + + void CModelReaderNode_Volumetric2201_VolumeData::OnAttribute( + const nfChar* pAttributeName, const nfChar* pAttributeValue) + { + if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_VOLUMEDATA_ID) == 0) { + if (m_nID != 0) + { + throw CNMRException(NMR_ERROR_DUPLICATERESOURCEID); + } + + // Convert to integer and make a input and range check! + m_nID = fnStringToUint32(pAttributeValue); + } + } + + void CModelReaderNode_Volumetric2201_VolumeData::OnNSChildElement( + const nfChar* pChildName, const nfChar* pNameSpace, + CXmlReader* pXMLReader) + { + __NMRASSERT(pChildName); + __NMRASSERT(pXMLReader); + __NMRASSERT(pNameSpace); + + if(strcmp(pNameSpace, XML_3MF_NAMESPACE_VOLUMETRICSPEC) == 0) + { + if(strcmp(pChildName, XML_3MF_ELEMENT_VOLUMETRIC_PROPERTY) == 0) + { + PModelReaderNode_Volumetric2201_Property pXMLNode = + std::make_shared( + m_pWarnings); + pXMLNode->parseXML(pXMLReader); + + PVolumeDataProperty pProperty = + pXMLNode->MakeProperty(m_pModel); + + if(m_pVolumeData->hasProperty(pProperty->getName()) == false) + { + m_pVolumeData->addProperty(pProperty); + } + else + { + throw CNMRException(NMR_ERROR_DUPLICATEVOLUMEDATAPROPERTY); + } + } + else if(strcmp(pChildName, XML_3MF_ELEMENT_VOLUMETRIC_COLOR) == 0) + { + PModelReaderNode_Volumetric2201_Color pXMLNode = + std::make_shared( + m_pWarnings); + pXMLNode->parseXML(pXMLReader); + + PVolumeDataColor pColor = pXMLNode->MakeColor(m_pModel); + m_pVolumeData->setColor(pColor); + } + else + m_pWarnings->addException( + CNMRException(NMR_ERROR_NAMESPACE_INVALID_ELEMENT), + mrwInvalidOptionalValue); + } + } + +} // namespace NMR diff --git a/Source/Model/Reader/v093/NMR_ModelReaderNode093_TextureVertex.cpp b/Source/Model/Reader/v093/NMR_ModelReaderNode093_TextureVertex.cpp index 96c4e32d0..a2184ca65 100644 --- a/Source/Model/Reader/v093/NMR_ModelReaderNode093_TextureVertex.cpp +++ b/Source/Model/Reader/v093/NMR_ModelReaderNode093_TextureVertex.cpp @@ -96,7 +96,11 @@ namespace NMR { if (strcmp(pAttributeName, XML_3MF_ATTRIBUTE_TEXTURE_V) == 0) { m_fV = fnStringToFloat(pAttributeValue); - if (std::isnan (m_fV)) +#ifdef __MINGW32__ + if (isNotANumber(m_fV)) +#else + if (std::isnan(m_fV)) +#endif throw CNMRException(NMR_ERROR_INVALIDMODELTEXTURECOORDINATES); if (fabs(m_fV) > XML_3MF_MAXIMUMCOORDINATEVALUE) throw CNMRException(NMR_ERROR_INVALIDMODELTEXTURECOORDINATES); diff --git a/Source/Model/Reader/v100/NMR_ModelReaderNode100_Mesh.cpp b/Source/Model/Reader/v100/NMR_ModelReaderNode100_Mesh.cpp index 16d2fcc23..35bad5fd0 100644 --- a/Source/Model/Reader/v100/NMR_ModelReaderNode100_Mesh.cpp +++ b/Source/Model/Reader/v100/NMR_ModelReaderNode100_Mesh.cpp @@ -35,17 +35,21 @@ A mesh reader model node is a parser for the mesh node of an XML Model Stream. #include "Model/Reader/v100/NMR_ModelReaderNode100_Vertices.h" #include "Model/Reader/v100/NMR_ModelReaderNode100_Triangles.h" #include "Model/Reader/BeamLattice1702/NMR_ModelReaderNode_BeamLattice1702_BeamLattice.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_VolumeData.h" #include "Model/Classes/NMR_ModelConstants.h" +#include "Model/Classes/NMR_ModelVolumeData.h" #include "Common/NMR_StringUtils.h" #include "Common/NMR_Exception.h" #include "Common/NMR_Exception_Windows.h" namespace NMR { - CModelReaderNode100_Mesh::CModelReaderNode100_Mesh(_In_ CModel * pModel, _In_ CMesh * pMesh, _In_ PModelWarnings pWarnings, + CModelReaderNode100_Mesh::CModelReaderNode100_Mesh(_In_ CModel * pModel, PModelMeshObject pMesh, _In_ PModelWarnings pWarnings, _In_ PProgressMonitor pProgressMonitor, _In_ PPackageResourceID pObjectLevelPropertyID, _In_ ModelResourceIndex nDefaultPropertyIndex) - : CModelReaderNode(pWarnings, pProgressMonitor) + : CModelReaderNode(pWarnings, pProgressMonitor), + m_pModel(pModel), + m_pMesh(pMesh) { __NMRASSERT(pMesh); __NMRASSERT(pModel); @@ -53,14 +57,14 @@ namespace NMR { m_pObjectLevelPropertyID = pObjectLevelPropertyID; m_nObjectLevelPropertyIndex = nDefaultPropertyIndex; - m_pMesh = pMesh; - m_pModel = pModel; - m_bHasClippingMeshID = false; m_nClippingMeshID = 0; m_eClipMode = eModelBeamLatticeClipMode::MODELBEAMLATTICECLIPMODE_NONE; m_bHasRepresentationMeshID = false; m_nRepresentationMeshID = 0; + + m_bHasVolumeDataID = false; + m_nVolumeDataID = 0; } void CModelReaderNode100_Mesh::parseXML(_In_ CXmlReader * pXMLReader) @@ -73,6 +77,23 @@ namespace NMR { // Parse Content parseContent(pXMLReader); + + if(m_bHasVolumeDataID) + { + PPackageResourceID volumePackageId = + m_pModel->findPackageResourceID(m_pModel->currentPath(), + m_nVolumeDataID); + + if(!volumePackageId.get()) + { + throw CNMRException(NMR_ERROR_UNKNOWNMODELRESOURCE); + } + + auto pVolumeData = m_pModel->findVolumeData( + volumePackageId->getUniqueID()); + + m_pMesh->setVolumeData(pVolumeData); + } } void CModelReaderNode100_Mesh::retrieveClippingInfo(_Out_ eModelBeamLatticeClipMode &eClipMode, _Out_ nfBool & bHasClippingMode, _Out_ ModelResourceID & nClippingMeshID) @@ -88,36 +109,59 @@ namespace NMR { nRepresentationMeshID = m_nRepresentationMeshID; } - void CModelReaderNode100_Mesh::OnAttribute(_In_z_ const nfChar * pAttributeName, _In_z_ const nfChar * pAttributeValue) + void CModelReaderNode100_Mesh::OnNSAttribute( + _In_z_ const nfChar *pAttributeName, + _In_z_ const nfChar *pAttributeValue, + _In_z_ const nfChar *pNameSpace) { __NMRASSERT(pAttributeName); __NMRASSERT(pAttributeValue); + __NMRASSERT(pNameSpace); + + if(strcmp(pNameSpace, XML_3MF_NAMESPACE_VOLUMETRICSPEC) == 0) + { + if(strcmp(pAttributeName, XML_3MF_ATTRIBUTE_MESH_VOLUMEDATA) == + 0) + { + if(m_bHasVolumeDataID) + { + throw CNMRException( + NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_VOLUME_ID); + } + m_bHasVolumeDataID = true; + m_nVolumeDataID = fnStringToUint32(pAttributeValue); + } + } } - void CModelReaderNode100_Mesh::OnNSChildElement(_In_z_ const nfChar * pChildName, _In_z_ const nfChar * pNameSpace, _In_ CXmlReader * pXMLReader) + void CModelReaderNode100_Mesh::OnNSChildElement(_In_z_ const nfChar * pChildName, _In_z_ const nfChar * pNameSpace, _In_ CXmlReader * pXMLReader) { __NMRASSERT(pChildName); __NMRASSERT(pXMLReader); __NMRASSERT(pNameSpace); + + NMR::CMesh *mesh = m_pMesh->getMesh(); + if (strcmp(pNameSpace, XML_3MF_NAMESPACE_CORESPEC100) == 0) { + if (strcmp(pChildName, XML_3MF_ELEMENT_VERTICES) == 0) { - if (m_pMesh->getNodeCount() % PROGRESS_READUPDATE == PROGRESS_READUPDATE - 1) { + if (mesh->getNodeCount() % PROGRESS_READUPDATE == PROGRESS_READUPDATE - 1) { m_pProgressMonitor->SetProgressIdentifier(ProgressIdentifier::PROGRESS_READMESH); m_pProgressMonitor->ReportProgressAndQueryCancelled(true); } - PModelReaderNode pXMLNode = std::make_shared(m_pMesh, m_pWarnings); + PModelReaderNode pXMLNode = std::make_shared(mesh, m_pWarnings); pXMLNode->parseXML(pXMLReader); } else if (strcmp(pChildName, XML_3MF_ELEMENT_TRIANGLES) == 0) { - if (m_pMesh->getFaceCount() % PROGRESS_READUPDATE == PROGRESS_READUPDATE - 1) { + if (mesh->getFaceCount() % PROGRESS_READUPDATE == PROGRESS_READUPDATE - 1) { m_pProgressMonitor->SetProgressIdentifier(ProgressIdentifier::PROGRESS_READMESH); m_pProgressMonitor->ReportProgressAndQueryCancelled(true); } - PModelReaderNode100_Triangles pXMLNode = std::make_shared(m_pModel, m_pMesh, m_pWarnings, + PModelReaderNode100_Triangles pXMLNode = std::make_shared(m_pModel, mesh, m_pWarnings, m_pObjectLevelPropertyID, m_nObjectLevelPropertyIndex); pXMLNode->parseXML(pXMLReader); if (m_pObjectLevelPropertyID && m_pObjectLevelPropertyID->getPackageModelPath() == 0) { @@ -139,7 +183,7 @@ namespace NMR { if (strcmp(pNameSpace, XML_3MF_NAMESPACE_BEAMLATTICESPEC) == 0) { if (strcmp(pChildName, XML_3MF_ELEMENT_BEAMLATTICE) == 0) { - PModelReaderNode_BeamLattice1702_BeamLattice pXMLNode = std::make_shared(m_pModel, m_pMesh, m_pWarnings); + PModelReaderNode_BeamLattice1702_BeamLattice pXMLNode = std::make_shared(m_pModel, mesh, m_pWarnings); pXMLNode->parseXML(pXMLReader); pXMLNode->retrieveClippingInfo(m_eClipMode, m_bHasClippingMeshID, m_nClippingMeshID); diff --git a/Source/Model/Reader/v100/NMR_ModelReaderNode100_MultiProperties.cpp b/Source/Model/Reader/v100/NMR_ModelReaderNode100_MultiProperties.cpp index 1b2fc75e5..4d65ec3be 100644 --- a/Source/Model/Reader/v100/NMR_ModelReaderNode100_MultiProperties.cpp +++ b/Source/Model/Reader/v100/NMR_ModelReaderNode100_MultiProperties.cpp @@ -143,7 +143,7 @@ namespace NMR { eModelBlendMethod method = MODELBLENDMETHOD_MIX; try { method = CModelMultiPropertyGroupResource::stringToBlendMethod(blendMethodString); - } catch (CNMRException e) { + } catch (CNMRException& e) { m_pWarnings->addException(e, mrwInvalidMandatoryValue); } m_pBlendMethods->push_back(method); diff --git a/Source/Model/Reader/v100/NMR_ModelReaderNode100_Object.cpp b/Source/Model/Reader/v100/NMR_ModelReaderNode100_Object.cpp index 504e42dc2..ef1d0d84f 100644 --- a/Source/Model/Reader/v100/NMR_ModelReaderNode100_Object.cpp +++ b/Source/Model/Reader/v100/NMR_ModelReaderNode100_Object.cpp @@ -36,6 +36,7 @@ Stream. #include "Model/Reader/v100/NMR_ModelReaderNode100_Mesh.h" #include "Model/Reader/v100/NMR_ModelReaderNode100_MetaDataGroup.h" #include "Model/Reader/v100/NMR_ModelReaderNode100_Components.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_LevelSet.h" #include "Model/Classes/NMR_ModelConstants.h" #include "Model/Classes/NMR_ModelMeshObject.h" @@ -236,7 +237,8 @@ namespace NMR { // Create Empty Mesh PMesh pMesh = std::make_shared(); // Create Mesh Object - m_pObject = std::make_shared(m_nID, m_pModel, pMesh); + PModelMeshObject meshObject = std::make_shared(m_nID, m_pModel, pMesh); + m_pObject = meshObject; // Set Object Type (might fail, if string is invalid) if (m_bHasType) { if (!m_pObject->setObjectTypeString(m_sType, false)) @@ -244,7 +246,7 @@ namespace NMR { } // Read Mesh - PModelReaderNode100_Mesh pXMLNode = std::make_shared(m_pModel, pMesh.get(), + PModelReaderNode100_Mesh pXMLNode = std::make_shared(m_pModel, meshObject, m_pWarnings, m_pProgressMonitor, m_pObjectLevelPropertyID, m_nObjectLevelPropertyIndex); pXMLNode->parseXML(pXMLReader); @@ -316,7 +318,28 @@ namespace NMR { } - } + if(strcmp(pNameSpace, XML_3MF_NAMESPACE_VOLUMETRICSPEC) == 0) //Seems really wiered that object types defined by extensions have to be handled here + { + if(strcmp(pChildName, XML_3MF_ELEMENT_BOUNDARY_SHAPE) == 0) + { + auto levelSet = std::make_shared(m_nID, m_pModel); + + PModelReaderNode pXMLNode = + std::make_shared( + m_pModel, levelSet, m_pWarnings, m_pProgressMonitor); + pXMLNode->parseXML(pXMLReader); + m_pObject = levelSet; + m_pModel->addResource(m_pObject); + + } + else + { + m_pWarnings->addException( + CNMRException(NMR_ERROR_NAMESPACE_INVALID_ELEMENT), + mrwInvalidOptionalValue); + } + } + } // Create the object-level property from m_nObjectLevelPropertyID, if defined void CModelReaderNode100_Object::createDefaultProperties() @@ -422,5 +445,4 @@ namespace NMR { } } } - } diff --git a/Source/Model/Reader/v100/NMR_ModelReaderNode100_Resources.cpp b/Source/Model/Reader/v100/NMR_ModelReaderNode100_Resources.cpp index fa23352de..5df4ddd9b 100644 --- a/Source/Model/Reader/v100/NMR_ModelReaderNode100_Resources.cpp +++ b/Source/Model/Reader/v100/NMR_ModelReaderNode100_Resources.cpp @@ -40,6 +40,11 @@ XML Model Stream. #include "Model/Reader/v100/NMR_ModelReaderNode100_CompositeMaterials.h" #include "Model/Reader/v100/NMR_ModelReaderNode100_MultiProperties.h" #include "Model/Reader/Slice1507/NMR_ModelReader_Slice1507_SliceStack.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_Image3D.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Implicit_Function.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_FunctionFromImage3D.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_LevelSet.h" +#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_VolumeData.h" #include "Model/Classes/NMR_ModelConstants.h" #include "Common/NMR_StringUtils.h" @@ -141,6 +146,36 @@ namespace NMR { m_pWarnings->addException(CNMRException(NMR_ERROR_NAMESPACE_INVALID_ELEMENT), mrwInvalidOptionalValue); } + if (strcmp(pNameSpace, XML_3MF_NAMESPACE_VOLUMETRICSPEC) == 0) { + if (strcmp(pChildName, XML_3MF_ELEMENT_IMAGE3D) == 0) { + PModelReaderNode pXMLNode = std::make_shared( + m_pModel, m_pWarnings); + pXMLNode->parseXML(pXMLReader); + } + else if (strcmp(pChildName, XML_3MF_ELEMENT_FUNCTION_FROM_IMAGE3D) == 0) + { + PModelReaderNode pXMLNode = std::make_shared( + m_pModel, m_pWarnings); + pXMLNode->parseXML(pXMLReader); + } if (strcmp(pChildName, XML_3MF_ELEMENT_VOLUMEDATA) == 0) + { + PModelReaderNode pXMLNode = std::make_shared( + m_pModel, m_pWarnings); + pXMLNode->parseXML(pXMLReader); + } + else + m_pWarnings->addException(CNMRException(NMR_ERROR_NAMESPACE_INVALID_ELEMENT), mrwInvalidOptionalValue); + } + + if (strcmp(pNameSpace, XML_3MF_NAMESPACE_IMPLICITSPEC) == 0) { + if ((strcmp(pChildName, XML_3MF_ELEMENT_IMPLICIT_FUNCTION_DEPRECATED) == 0) || (strcmp(pChildName, XML_3MF_ELEMENT_IMPLICIT_FUNCTION) == 0)) + { + PModelReaderNode_ImplicitFunction pXMLNode = std::make_shared(m_pModel, m_pWarnings); + pXMLNode->parseXML(pXMLReader); + } + else + m_pWarnings->addException(CNMRException(NMR_ERROR_NAMESPACE_INVALID_ELEMENT), mrwInvalidOptionalValue); + } } diff --git a/Source/Model/Writer/NMR_KeyStoreOpcPackageWriter.cpp b/Source/Model/Writer/NMR_KeyStoreOpcPackageWriter.cpp index a76059a62..49632d714 100644 --- a/Source/Model/Writer/NMR_KeyStoreOpcPackageWriter.cpp +++ b/Source/Model/Writer/NMR_KeyStoreOpcPackageWriter.cpp @@ -79,7 +79,7 @@ namespace NMR { } PModel const & model = m_pContext.model(); - if (!model->hasCryptoRandCallbak()) + if (!model->hasCryptoRandCallbak() && (keyStore->getResourceDataCount()>0)) m_pContext.warnings()->addWarning(NMR_ERROR_RNGCALLBACKNOTCRYPTOSTRONG, eModelWarningLevel::mrwInvalidOptionalValue); for (nfUint64 i = 0; i < keyStore->getResourceDataCount(); ++i) { PKeyStoreResourceData rd = keyStore->getResourceData(i); @@ -139,7 +139,7 @@ namespace NMR { ctx.m_sKekDecryptData.m_pAccessRight = ar; std::vector closedKey; //give consumer a chance to (re)encrypt this key - nfUint64 wrapped = ctx.m_fnWrap(key, closedKey, ctx.m_sKekDecryptData); + ctx.m_fnWrap(key, closedKey, ctx.m_sKekDecryptData); ar->setCipherValue(closedKey); } catch (CNMRException const & e) { if (ar->isNew()) { diff --git a/Source/Model/Writer/NMR_ModelWriterNode.cpp b/Source/Model/Writer/NMR_ModelWriterNode.cpp index 03ec812a4..82beb3093 100644 --- a/Source/Model/Writer/NMR_ModelWriterNode.cpp +++ b/Source/Model/Writer/NMR_ModelWriterNode.cpp @@ -83,8 +83,18 @@ namespace NMR { writeConstStringAttribute(pAttributeName, sStream.str().c_str()); } - void CModelWriterNode::writeUintAttribute(_In_z_ const nfChar * pAttributeName, _In_ nfUint32 nAttributeValue) + void CModelWriterNode::writePrefixedIntAttribute( + const nfChar* pPrefix, const nfChar* pAttributeName, + nfInt32 nAttributeValue) { + std::stringstream sStream; + sStream << nAttributeValue; + writeConstPrefixedStringAttribute(pPrefix, pAttributeName, sStream.str().c_str()); + } + + void CModelWriterNode::writeUintAttribute( + _In_z_ const nfChar* pAttributeName, _In_ nfUint32 nAttributeValue) + { std::stringstream sStream; sStream << nAttributeValue; writeConstStringAttribute(pAttributeName, sStream.str().c_str()); @@ -97,6 +107,13 @@ namespace NMR { writeConstStringAttribute(pAttributeName, sStream.str().c_str()); } + void CModelWriterNode::writeDoubleAttribute(_In_z_ const nfChar* pAttributeName, _In_ nfDouble dAttributeValue) + { + std::stringstream sStream; + sStream << dAttributeValue; + writeConstStringAttribute(pAttributeName, sStream.str().c_str()); + } + void CModelWriterNode::writeStartElement(_In_z_ const nfChar * pElementName) { m_pXMLWriter->WriteStartElement(nullptr, pElementName, nullptr); diff --git a/Source/Model/Writer/NMR_ModelWriterNode_Implicit.cpp b/Source/Model/Writer/NMR_ModelWriterNode_Implicit.cpp new file mode 100644 index 000000000..b718bd400 --- /dev/null +++ b/Source/Model/Writer/NMR_ModelWriterNode_Implicit.cpp @@ -0,0 +1,288 @@ +/*++ + +Copyright (C) 2023 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Writer node for implicit functions + +--*/ +#include "Model/Writer/NMR_ModelWriterNode_Implicit.h" +#include "Model/Classes/NMR_ImplicitNodeTypes.h" +#include "Common/NMR_Exception.h" +#include "lib3mf_types.hpp" + +#include + +namespace NMR +{ + const implicit::NodeTypes CModelWriterNode_Implicit::m_nodeTypes; + + CModelWriterNode_Implicit::CModelWriterNode_Implicit(CModel * pModel, + CXmlWriter * pXMLWriter, + PProgressMonitor pProgressMonitor) + : CModelWriterNode_ModelBase(pModel, pXMLWriter, pProgressMonitor) + { + } + + void CModelWriterNode_Implicit::writeImplicitFunctions() + { + nfUint32 const nCount = m_pModel->getFunctionCount(); + + for (nfUint32 nIndex = 0; nIndex < nCount; nIndex++) + { + m_pProgressMonitor->IncrementProgress(1); + CModelImplicitFunction * pFunction = m_pModel->getImplicitFunction(nIndex); + if (!pFunction) + { + continue; + } + + writeImplicitFunction(*pFunction); + } + } + + void CModelWriterNode_Implicit::writeImplicitFunction( + CModelImplicitFunction& function) + { + writeStartElementWithPrefix(XML_3MF_ELEMENT_IMPLICIT_FUNCTION, + XML_3MF_NAMESPACEPREFIX_IMPLICIT); + { + writeIntAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_FUNCTION_ID, + function.getPackageResourceID()->getModelResourceID()); + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_FUNCTION_DISPLAY_NAME, + function.getDisplayName()); + + writeImplicitFunctionElements(function); + } + writeFullEndElement(); + } + + void CModelWriterNode_Implicit::writeToXML() + { + throw CNMRException(NMR_ERROR_NOTIMPLEMENTED); + } + + void CModelWriterNode_Implicit::writeImplicitFunctionElements(CModelImplicitFunction & function) + { + writeImplicitFunctionInputs(*function.getInputs()); + + for (auto node : *function.getNodes()) + { + writeImplicitNode(*node); + } + + writeImplicitFunctionOutputs(*function.getOutputs()); + } + + std::string mat4x4ToString(Lib3MF::sMatrix4x4 const & mat) + { + std::stringstream outStream; + outStream << mat.m_Field[0][0] << " " << mat.m_Field[0][1] << " " << mat.m_Field[0][2] << " " + << mat.m_Field[0][3] << " " << mat.m_Field[1][0] << " " << mat.m_Field[1][1] << " " + << mat.m_Field[1][2] << " " << mat.m_Field[1][3] << " " << mat.m_Field[2][0] << " " + << mat.m_Field[2][1] << " " << mat.m_Field[2][2] << " " << mat.m_Field[2][3] << " " + << mat.m_Field[3][0] << " " << mat.m_Field[3][1] << " " << mat.m_Field[3][2] << " " + << mat.m_Field[3][3]; + return outStream.str(); + } + + + + void CModelWriterNode_Implicit::writeImplicitNode(CModelImplicitNode & node) + { + + auto name = m_nodeTypes.getNodeType(node.getNodeType()).getName(); + writeStartElementWithPrefix(name.c_str(), + XML_3MF_NAMESPACEPREFIX_IMPLICIT); + { + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_NODE_ID, node.getIdentifier()); + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_NODE_DISPLAY_NAME, + node.getDisplayName()); + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_NODE_TAG, + node.getTag()); + + if (node.getNodeType() == Lib3MF::eImplicitNodeType::Constant) + { + + writeDoubleAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_NODE_VALUE, node.getConstant()); + } + else if (node.getNodeType() == Lib3MF::eImplicitNodeType::ConstVec) + { + auto vec = node.getVector(); + writeDoubleAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_NODE_X, vec.m_Coordinates[0]); + writeDoubleAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_NODE_Y, vec.m_Coordinates[1]); + writeDoubleAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_NODE_Z, vec.m_Coordinates[2]); + } + else if (node.getNodeType() == Lib3MF::eImplicitNodeType::ConstMat) + { + auto const mat = node.getMatrix(); + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_NODE_MATRIX, mat4x4ToString(mat)); + } + else if(node.getNodeType() == Lib3MF::eImplicitNodeType::ConstResourceID) + { + auto resource = node.getResource(); + if (resource != nullptr) + { + writeIntAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_NODE_VALUE, resource->getPackageResourceID()->getModelResourceID()); + } + + } + + bool const isNodeWithoutInputs = node.getNodeType() == Lib3MF::eImplicitNodeType::Constant || + node.getNodeType() == Lib3MF::eImplicitNodeType::ConstVec || + node.getNodeType() == Lib3MF::eImplicitNodeType::ConstMat || + node.getNodeType() == Lib3MF::eImplicitNodeType::ConstResourceID; + + if (!isNodeWithoutInputs) // Certain node types are not allowed to have inputs, but may have been set by the producer + { + auto inputs = node.getInputs(); + if (!inputs->empty()) + { + writeStartElementWithPrefix(XML_3MF_ELEMENT_IMPLICIT_NODE_INPUT, + XML_3MF_NAMESPACEPREFIX_IMPLICIT); + { + writeImplicitInputs(*inputs); + } + writeFullEndElement(); + } + } + + writeStartElementWithPrefix(XML_3MF_ELEMENT_IMPLICIT_NODE_OUTPUT, + XML_3MF_NAMESPACEPREFIX_IMPLICIT); + { + auto outputs = node.getOutputs(); + writeImplicitOutputs(*outputs); + } + writeFullEndElement(); + } + writeFullEndElement(); + } + + const char * portTypeToRefName(Lib3MF::eImplicitPortType type) + { + switch (type) + { + case Lib3MF::eImplicitPortType::Scalar: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_SCALAR_REF; + case Lib3MF::eImplicitPortType::Vector: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_VECTOR_REF; + case Lib3MF::eImplicitPortType::Matrix: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_MATRIX_REF; + case Lib3MF::eImplicitPortType::ResourceID: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_RESOURCE_REF; + default: + return "Invalid"; + } + } + + void NMR::CModelWriterNode_Implicit::writeImplicitInputs(NMR::Ports & ports) + { + for (auto & port : ports) + { + writeStartElementWithPrefix(portTypeToRefName(port->getType()), + XML_3MF_NAMESPACEPREFIX_IMPLICIT); + { + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_PORT_ID, port->getIdentifier()); + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_PORT_DISPLAY_NAME, + port->getDisplayName()); + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_PORT_REFERENCE, + port->getReference()); + } + writeFullEndElement(); + } + } + + const char * portTypeToName(Lib3MF::eImplicitPortType type) + { + switch (type) + { + case Lib3MF::eImplicitPortType::Scalar: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_SCALAR; + case Lib3MF::eImplicitPortType::Vector: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_VECTOR; + case Lib3MF::eImplicitPortType::Matrix: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_MATRIX; + case Lib3MF::eImplicitPortType::ResourceID: + return XML_3MF_ELEMENT_IMPLICIT_PORT_TYPE_RESOURCE_ID; + default: + return "Invalid"; + } + } + + void CModelWriterNode_Implicit::writeImplicitFunctionInputs(NMR::Ports & ports) + { + writeStartElementWithPrefix(XML_3MF_ELEMENT_IMPLICIT_FUNCTION_INPUT, + XML_3MF_NAMESPACEPREFIX_IMPLICIT); + + for (auto & port : ports) + { + writeStartElementWithPrefix(portTypeToName(port->getType()), + XML_3MF_NAMESPACEPREFIX_IMPLICIT); + { + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_PORT_ID, port->getIdentifier()); + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_PORT_DISPLAY_NAME, + port->getDisplayName()); + } + writeFullEndElement(); + } + writeFullEndElement(); + } + + void CModelWriterNode_Implicit::writeImplicitFunctionOutputs(NMR::Ports & ports) + { + writeStartElementWithPrefix(XML_3MF_ELEMENT_IMPLICIT_FUNCTION_OUTPUT, + XML_3MF_NAMESPACEPREFIX_IMPLICIT); + + for (auto & port : ports) + { + writeStartElementWithPrefix(portTypeToRefName(port->getType()), + XML_3MF_NAMESPACEPREFIX_IMPLICIT); + { + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_PORT_ID, port->getIdentifier()); + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_PORT_DISPLAY_NAME, + port->getDisplayName()); + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_PORT_REFERENCE, + port->getReference()); + } + writeFullEndElement(); + } + writeFullEndElement(); + } + + void NMR::CModelWriterNode_Implicit::writeImplicitOutputs(NMR::Ports & ports) + { + for (auto & port : ports) + { + writeStartElementWithPrefix(portTypeToName(port->getType()), + XML_3MF_NAMESPACEPREFIX_IMPLICIT); + { + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_PORT_ID, port->getIdentifier()); + writeStringAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_PORT_DISPLAY_NAME, + port->getDisplayName()); + } + writeFullEndElement(); + } + } +} diff --git a/Source/Model/Writer/NMR_ModelWriterNode_LevelSet.cpp b/Source/Model/Writer/NMR_ModelWriterNode_LevelSet.cpp new file mode 100644 index 000000000..af5e573e5 --- /dev/null +++ b/Source/Model/Writer/NMR_ModelWriterNode_LevelSet.cpp @@ -0,0 +1,152 @@ +/*++ + +Copyright (C) 2024 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Writer node for LevelSet resources + +--*/ +#include "Model/Writer/NMR_ModelWriterNode_LevelSet.h" + +#include + +#include "Common/NMR_Exception.h" +#include "Model/Classes/NMR_ImplicitNodeTypes.h" +#include "Model/Classes/NMR_ModelLevelSetObject.h" +#include "Model/Classes/NMR_ModelMeshObject.h" +#include "lib3mf_types.hpp" + +namespace NMR +{ + CModelWriterNode_LevelSet::CModelWriterNode_LevelSet( + CModel* pModel, + CModelLevelSetObject * pLevelSet, + CXmlWriter* pXMLWriter, + PProgressMonitor pProgressMonitor) + : CModelWriterNode_ModelBase(pModel, pXMLWriter, pProgressMonitor), m_pLevelSet(pLevelSet) + { + } + + void CModelWriterNode_LevelSet::writeLevelSetResources() + { + nfUint32 const nCount = m_pModel->getObjectCount(); + + for(nfUint32 nIndex = 0; nIndex < nCount; nIndex++) + { + m_pProgressMonitor->IncrementProgress(1); + CModelLevelSetObject* pLevelSet = + dynamic_cast( + m_pModel->getObject(nIndex)); + if(!pLevelSet) + { + continue; + } + writeLevelSetResource(*pLevelSet); + } + } + + void CModelWriterNode_LevelSet::writeLevelSetResource( + CModelLevelSetObject& levelSet) + { + writeStartElementWithPrefix(XML_3MF_ELEMENT_BOUNDARY_SHAPE, XML_3MF_NAMESPACEPREFIX_VOLUMETRIC); + + auto function = levelSet.getFunction(); + if(!function) + { + throw CNMRException(NMR_ERROR_INVALIDMODELRESOURCE); + } + + PPackageResourceID functionPackageID = function->getPackageResourceID(); + + + + if(!functionPackageID) throw CNMRException(NMR_ERROR_INVALIDMODELRESOURCE); + writeIntAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_FUNCTIONID, + functionPackageID->getModelResourceID()); + + + PModelMeshObject mesh = levelSet.getMesh(); + if(!mesh) + { + throw CNMRException(NMR_ERROR_INVALIDMODELRESOURCE); + } + + PPackageResourceID meshPackageID = mesh->getPackageResourceID(); + if(!meshPackageID) + { + throw CNMRException(NMR_ERROR_INVALIDMODELRESOURCE); + } + writeIntAttribute(XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_MESH_ID, + meshPackageID->getModelResourceID()); + + if(!fnMATRIX3_isIdentity(levelSet.getTransform())) + { + writeStringAttribute(XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_TRANSFORM, + fnMATRIX3_toString(levelSet.getTransform())); + } + + if(!levelSet.getChannelName().empty()) + { + writeStringAttribute(XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_CHANNEL, + levelSet.getChannelName()); + } + else + { + writeStringAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_CHANNEL, + XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_CHANNEL_DEFAULT); + } + + writeStringAttribute(XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_MESH_BBOX_ONLY, + levelSet.getMeshBBoxOnly() ? "true" : "false"); + if(levelSet.getMinFeatureSize() != 0.0) + { + writeFloatAttribute(XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_MIN_FEATURE_SIZE, + float(levelSet.getMinFeatureSize())); + } + + if(levelSet.getFallBackValue() != 0.0) + { + writeFloatAttribute(XML_3MF_ATTRIBUTE_BOUNDARY_SHAPE_FALLBACK_VALUE, + float(levelSet.getFallBackValue())); + } + + auto pVolumeData = levelSet.getVolumeData(); + if (pVolumeData) { + PPackageResourceID pID = pVolumeData->getPackageResourceID(); + if (pID->getPath() != m_pModel->currentPath()) + throw CNMRException(NMR_ERROR_MODELRESOURCE_IN_DIFFERENT_MODEL); + writeIntAttribute(XML_3MF_ATTRIBUTE_LEVELSET_VOLUMEDATA, pID->getModelResourceID()); + } + writeFullEndElement(); + } + void CModelWriterNode_LevelSet::writeToXML() + { + if (m_pLevelSet) + { + writeLevelSetResource(*m_pLevelSet); + } + } + +} // namespace NMR diff --git a/Source/Model/Writer/NMR_ModelWriterNode_VolumeData.cpp b/Source/Model/Writer/NMR_ModelWriterNode_VolumeData.cpp new file mode 100644 index 000000000..84f6fd446 --- /dev/null +++ b/Source/Model/Writer/NMR_ModelWriterNode_VolumeData.cpp @@ -0,0 +1,181 @@ +/*++ + +Copyright (C) 2024 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: +Writer node for VolumeData resources + +--*/ +#include "Model/Writer/NMR_ModelWriterNode_VolumeData.h" +#include + +#include "Common/NMR_Exception.h" +#include "Model/Classes/NMR_ImplicitNodeTypes.h" +#include "lib3mf_types.hpp" + +namespace NMR +{ + CModelWriterNode_VolumeData::CModelWriterNode_VolumeData( + CModel* pModel, CXmlWriter* pXMLWriter, + PProgressMonitor pProgressMonitor) + : CModelWriterNode_ModelBase(pModel, pXMLWriter, pProgressMonitor) + { + } + + void CModelWriterNode_VolumeData::writeVolumeDataResources() + { + nfUint32 const nCount = m_pModel->getVolumeDataCount(); + + for(nfUint32 nIndex = 0; nIndex < nCount; nIndex++) + { + m_pProgressMonitor->IncrementProgress(1); + CModelVolumeData * pVolumeData = m_pModel->getVolumeData(nIndex); + if(!pVolumeData) + { + continue; + } + writeVolumeDataResource(*pVolumeData); + } + } + + void CModelWriterNode_VolumeData::writeToXML() + { + writeVolumeDataResources(); + } + + void CModelWriterNode_VolumeData::writeVolumeDataResource( + CModelVolumeData& volumeData) + { + writeStartElementWithPrefix(XML_3MF_ELEMENT_VOLUMEDATA, + XML_3MF_NAMESPACEPREFIX_VOLUMETRIC); + + writeIntAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_ID, volumeData.getPackageResourceID()->getModelResourceID()); + + if(volumeData.getPropertyCount()) + { + nfUint32 count = volumeData.getPropertyCount(); + + for(nfUint32 i = 0; i < count; i++) + { + PVolumeDataProperty pProperty = volumeData.getProperty(i); + if(pProperty) + { + writeProperty(*pProperty); + } + } + } + + if(volumeData.hasColor()) + { + PVolumeDataColor pColor = volumeData.getColor(); + if(pColor) + { + writeColor(*pColor); + } + } + + writeFullEndElement(); + } + + void CModelWriterNode_VolumeData::writeProperty( + CVolumeDataProperty& property) + { + writeStartElementWithPrefix(XML_3MF_ELEMENT_VOLUMETRIC_PROPERTY, + XML_3MF_NAMESPACEPREFIX_VOLUMETRIC); + writeStringAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_PROPERTY, + property.getName()); + if(!fnMATRIX3_isIdentity(property.getTransform())) + { + writeStringAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_TRANSFORM, + fnMATRIX3_toString(property.getTransform())); + } + PPackageResourceID pID = + m_pModel->findPackageResourceID(property.getFunctionResourceID()); + if(!pID) throw CNMRException(NMR_ERROR_INVALIDMODELRESOURCE); + writeIntAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_FUNCTIONID, + pID->getModelResourceID()); + if(!property.isRequired()) + writeStringAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_PROPERTY_REQUIRED, + "false"); + + if(!property.getChannelName().empty()) + { + writeStringAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_CHANNEL, + property.getChannelName()); + } + + if(property.getMinFeatureSize() != 0.0) + { + writeFloatAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_MINFEATURESIZE, + float(property.getMinFeatureSize())); + } + + if(property.getFallBackValue() != 0.0) + { + writeFloatAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_FALLBACKVALUE, + float(property.getFallBackValue())); + } + + writeEndElement(); + } + + void CModelWriterNode_VolumeData::writeColor(CVolumeDataColor& color) + { + writeStartElementWithPrefix(XML_3MF_ELEMENT_VOLUMETRIC_COLOR, + XML_3MF_NAMESPACEPREFIX_VOLUMETRIC); + + PPackageResourceID pID = + m_pModel->findPackageResourceID(color.getFunctionResourceID()); + if(!pID) throw CNMRException(NMR_ERROR_INVALIDMODELRESOURCE); + writeIntAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_FUNCTIONID, + pID->getModelResourceID()); + + if(!fnMATRIX3_isIdentity(color.getTransform())) + { + writeStringAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_TRANSFORM, + fnMATRIX3_toString(color.getTransform())); + } + + if(!color.getChannelName().empty()) + { + writeStringAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_CHANNEL, + color.getChannelName()); + } + + if(color.getMinFeatureSize() != 0.0) + { + writeFloatAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_MINFEATURESIZE, + float(color.getMinFeatureSize())); + } + + if(color.getFallBackValue() != 0.0) + { + writeFloatAttribute(XML_3MF_ATTRIBUTE_VOLUMEDATA_FALLBACKVALUE, + float(color.getFallBackValue())); + } + + writeEndElement(); + } +} // namespace NMR diff --git a/Source/Model/Writer/NMR_ModelWriter_3MF_OPC.cpp b/Source/Model/Writer/NMR_ModelWriter_3MF_OPC.cpp deleted file mode 100644 index 50f4d5bb2..000000000 --- a/Source/Model/Writer/NMR_ModelWriter_3MF_OPC.cpp +++ /dev/null @@ -1,226 +0,0 @@ -/*++ - -Copyright (C) 2019 3MF Consortium - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Abstract: - -NMR_ModelWriter_3MF_OPC.cpp implements the 3MF Model Writer Class -for Win32. This model writer exports the in memory represenation into a 3MF file, -using the Windows OPC Library Functions. - ---*/ - -#include "Model/Writer/NMR_ModelWriter_3MF_OPC.h" -#include "Model/Classes/NMR_ModelConstants.h" -#include "Common/Platform/NMR_ExportStream_COM.h" -#include "Common/NMR_Exception.h" -#include "Common/NMR_Exception_Windows.h" -#include "Common/Platform/NMR_XmlWriter.h" -#include "Common/Platform/NMR_XmlWriter_Native.h" -#include - -namespace NMR { - - CModelWriter_3MF_OPC::CModelWriter_3MF_OPC(_In_ PModel pModel) : CModelWriter_3MF(pModel) - { - m_nRelationIDCounter = 0; - } - - // These are OPC dependent functions - void CModelWriter_3MF_OPC::createPackage(_In_ CModel * pModel) - { - __NMRASSERT(pModel != nullptr); - - HRESULT hResult; - - m_nRelationIDCounter = 0; - - m_pPackagePartSet = nullptr; - m_pPackageRelationshipSet = nullptr; - m_pPackage = nullptr; - m_pFactory = nullptr; - - // Create OPC Factory - hResult = CoCreateInstance(__uuidof(OpcFactory), NULL, CLSCTX_INPROC_SERVER, __uuidof(IOpcFactory), (LPVOID*)&m_pFactory); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_OPCFACTORYCREATEFAILED, hResult); - - // Create OPC Package - hResult = m_pFactory->CreatePackage(&m_pPackage); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_OPCPACKAGECREATEFAILED, hResult); - - // Read OPC Package Part Set - hResult = m_pPackage->GetPartSet(&m_pPackagePartSet); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_OPCPARTSETREADFAILED, hResult); - - // Read OPC Relationship Set - hResult = m_pPackage->GetRelationshipSet(&m_pPackageRelationshipSet); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_OPCRELATIONSHIPSETREADFAILED, hResult); - - CComPtr pModelPart = createOPCModelPart(PACKAGE_3D_MODEL_URI, PACKAGE_3D_MODEL_CONTENT_TYPE, pModel); - addRelationshipToPackage(m_pPackageRelationshipSet, PACKAGE_START_PART_RELATIONSHIP_TYPE, pModelPart); - } - - void CModelWriter_3MF_OPC::releasePackage() - { - m_pPackagePartSet = nullptr; - m_pPackageRelationshipSet = nullptr; - m_pPackage = nullptr; - m_pFactory = nullptr; - } - - void CModelWriter_3MF_OPC::writePackageToStream(_In_ PExportStream pStream) - { - __NMRASSERT(m_pPackage != nullptr); - __NMRASSERT(m_pFactory != nullptr); - if (pStream.get() == nullptr) - throw CNMRException(NMR_ERROR_INVALIDPARAM); - - // Cast to COM Streams - CExportStream_COM * pCOMExportStream = dynamic_cast (pStream.get()); - if (pCOMExportStream == nullptr) - throw CNMRException(NMR_ERROR_INVALIDSTREAMTYPE); - CComPtr pCOMStream = pCOMExportStream->getCOMStream(); - - HRESULT hResult = m_pFactory->WritePackageToStream(m_pPackage, OPC_WRITE_DEFAULT, pCOMStream); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_COULDNOTWRITEOPCPACKAGETOSTREAM, hResult); - } - - CComPtr CModelWriter_3MF_OPC::createOPCPart(_In_ LPCWSTR pwszUriString, _In_ LPCWSTR pwszContentType) - { - __NMRASSERT(pwszUriString != nullptr); - __NMRASSERT(pwszContentType != nullptr); - __NMRASSERT(m_pFactory != nullptr); - __NMRASSERT(m_pPackagePartSet != nullptr); - HRESULT hResult; - - CComPtr pPartUri; - hResult = m_pFactory->CreatePartUri(pwszUriString, &pPartUri); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_COULDNOTCREATEOPCPARTURI, hResult); - - CComPtr pPart; - hResult = m_pPackagePartSet->CreatePart(pPartUri, pwszContentType, OPC_COMPRESSION_MAXIMUM, &pPart); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_COULDNOTCREATEOPCPART, hResult); - - CComPtr pContentStream; - hResult = pPart->GetContentStream(&pContentStream); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_OPCCOULDNOTGETCONTENTSTREAM, hResult); - - ULARGE_INTEGER nSize; - nSize.HighPart = 0; - nSize.LowPart = 0; - hResult = pContentStream->SetSize(nSize); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_OPCCOULDNOTRESIZESTREAM, hResult); - - LARGE_INTEGER nPosition; - nPosition.HighPart = 0; - nPosition.LowPart = 0; - hResult = pContentStream->Seek(nPosition, STREAM_SEEK_SET, nullptr); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_OPCCOULDNOTSEEKSTREAM, hResult); - - return pPart; - } - - CComPtr CModelWriter_3MF_OPC::createOPCPartFromStream(_In_ LPCWSTR pwszUriString, _In_ LPCWSTR pwszContentType, _In_ IStream * pStream) - { - __NMRASSERT(pwszUriString != nullptr); - __NMRASSERT(pwszContentType != nullptr); - __NMRASSERT(pStream != nullptr); - HRESULT hResult; - - CComPtr pPart = createOPCPart(pwszUriString, pwszContentType); - CComPtr pContentStream; - hResult = pPart->GetContentStream(&pContentStream); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_OPCCOULDNOTGETCONTENTSTREAM, hResult); - - ULARGE_INTEGER nMaxSize; - nMaxSize.HighPart = 0xffffffff; - nMaxSize.LowPart = 0xffffffff; - hResult = pStream->CopyTo(pContentStream, nMaxSize, nullptr, nullptr); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_OPCCOULDNOTCOPYSTREAM, hResult); - - return pPart; - } - - CComPtr CModelWriter_3MF_OPC::createOPCModelPart(_In_ LPCWSTR pwszUriString, _In_ LPCWSTR pwszContentType, _In_ CModel * pModel) - { - __NMRASSERT(pwszUriString != nullptr); - __NMRASSERT(pwszContentType != nullptr); - __NMRASSERT(pModel != nullptr); - HRESULT hResult; - - CComPtr pPart = createOPCPart(pwszUriString, pwszContentType); - CComPtr pContentStream; - hResult = pPart->GetContentStream(&pContentStream); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_OPCCOULDNOTGETCONTENTSTREAM, hResult); - - PExportStream pExportStream = std::make_shared(pContentStream); - PXmlWriter_Native pXMLWriter = std::make_shared(pExportStream); - writeModelStream(pXMLWriter.get(), pModel); - - return pPart; - } - - CComPtr CModelWriter_3MF_OPC::addRelationshipToPackage(_In_ IOpcRelationshipSet * pRelationshipSet, _In_ LPCWSTR pwszRelationshipType, _In_ IOpcPart * pOPCPart) - { - __NMRASSERT(pRelationshipSet != nullptr); - __NMRASSERT(pwszRelationshipType != nullptr); - __NMRASSERT(pOPCPart != nullptr); - HRESULT hResult; - - // Create Unique ID String - std::wstringstream sStream; - sStream << L"rel" << m_nRelationIDCounter; - m_nRelationIDCounter++; - std::wstring sID = sStream.str(); - - // Create Uri - CComPtr pPartUri; - hResult = pOPCPart->GetName(&pPartUri); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_COULDNOTRETRIEVEOPCPARTNAME, hResult); - - // Create Relationship - CComPtr pRelationship; - hResult = pRelationshipSet->CreateRelationship(sID.c_str(), pwszRelationshipType, pPartUri, OPC_URI_TARGET_MODE_INTERNAL, &pRelationship); - if (hResult != S_OK) - throw CNMRException_Windows(NMR_ERROR_COULDNOTCREATEOPCRELATIONSHIP, hResult); - - return pRelationship; - } - -} diff --git a/Source/Model/Writer/v100/NMR_ModelWriterNode100_Mesh.cpp b/Source/Model/Writer/v100/NMR_ModelWriterNode100_Mesh.cpp index 1889288d9..0cdeb444a 100644 --- a/Source/Model/Writer/v100/NMR_ModelWriterNode100_Mesh.cpp +++ b/Source/Model/Writer/v100/NMR_ModelWriterNode100_Mesh.cpp @@ -51,7 +51,7 @@ This is the class for exporting the 3mf mesh node. namespace NMR { CModelWriterNode100_Mesh::CModelWriterNode100_Mesh(_In_ CModelMeshObject * pModelMeshObject, _In_ CXmlWriter * pXMLWriter, _In_ PProgressMonitor pProgressMonitor, - _In_ PMeshInformation_PropertyIndexMapping pPropertyIndexMapping, _In_ int nPosAfterDecPoint, _In_ nfBool bWriteMaterialExtension, _In_ nfBool bWriteBeamLatticeExtension) + _In_ PMeshInformation_PropertyIndexMapping pPropertyIndexMapping, _In_ int nPosAfterDecPoint, _In_ nfBool bWriteMaterialExtension, _In_ nfBool bWriteBeamLatticeExtension, _In_ nfBool bWriteVolumetricExtension) :CModelWriterNode_ModelBase(pModelMeshObject->getModel(), pXMLWriter, pProgressMonitor), m_nPosAfterDecPoint(nPosAfterDecPoint), m_nPutDoubleFactor((nfInt64)(pow(10, CModelWriterNode100_Mesh::m_nPosAfterDecPoint))) { __NMRASSERT(pModelMeshObject != nullptr); @@ -60,6 +60,7 @@ namespace NMR { m_bWriteMaterialExtension = bWriteMaterialExtension; m_bWriteBeamLatticeExtension = bWriteBeamLatticeExtension; + m_bWriteVolumetricExtension = bWriteVolumetricExtension; m_pModelMeshObject = pModelMeshObject; m_pPropertyIndexMapping = pPropertyIndexMapping; @@ -130,6 +131,19 @@ namespace NMR { writeStartElement(XML_3MF_ELEMENT_MESH); m_pProgressMonitor->SetProgressIdentifier(ProgressIdentifier::PROGRESS_WRITENODES); + + // Write id of referenced volume data, if any + if (m_bWriteVolumetricExtension) { + auto pVolumeData = m_pModelMeshObject->getVolumeData(); + if (pVolumeData) { + PPackageResourceID pID = pVolumeData->getPackageResourceID(); + if (pID->getPath() != m_pModel->currentPath()) + throw CNMRException(NMR_ERROR_MODELRESOURCE_IN_DIFFERENT_MODEL); + writePrefixedIntAttribute(XML_3MF_NAMESPACEPREFIX_VOLUMETRIC, XML_3MF_ATTRIBUTE_MESH_VOLUMEDATA, pID->getModelResourceID()); + } + } + + // Write Vertices writeStartElement(XML_3MF_ELEMENT_VERTICES); for (nNodeIndex = 0; nNodeIndex < nNodeCount; nNodeIndex++) { diff --git a/Source/Model/Writer/v100/NMR_ModelWriterNode100_Model.cpp b/Source/Model/Writer/v100/NMR_ModelWriterNode100_Model.cpp index fdf97fa43..35b9965de 100644 --- a/Source/Model/Writer/v100/NMR_ModelWriterNode100_Model.cpp +++ b/Source/Model/Writer/v100/NMR_ModelWriterNode100_Model.cpp @@ -33,6 +33,7 @@ This is the class for exporting the 3mf model stream root node. #include "Model/Writer/v100/NMR_ModelWriterNode100_Mesh.h" #include "Model/Writer/v100/NMR_ModelWriterNode100_Model.h" +#include "Model/Writer/v100/NMR_ResourceDependencySorter.h" #include "Model/Classes/NMR_ModelAttachment.h" #include "Model/Classes/NMR_ModelBuildItem.h" @@ -41,6 +42,9 @@ This is the class for exporting the 3mf model stream root node. #include "Model/Classes/NMR_ModelColorGroup.h" #include "Model/Classes/NMR_ModelTexture2D.h" #include "Model/Classes/NMR_ModelTexture2DGroup.h" +#include "Model/Classes/NMR_ModelImage3D.h" +#include "Model/Classes/NMR_ModelImageStack.h" +#include "Model/Classes/NMR_ModelFunctionFromImage3D.h" #include "Model/Classes/NMR_ModelCompositeMaterials.h" #include "Model/Classes/NMR_ModelMultiPropertyGroup.h" #include "Model/Classes/NMR_ModelMeshObject.h" @@ -50,10 +54,18 @@ This is the class for exporting the 3mf model stream root node. #include "Common/NMR_Exception_Windows.h" #include "Common/NMR_StringUtils.h" #include "Common/MeshInformation/NMR_MeshInformation_Properties.h" +#include "Common/Graph/DirectedGraph.h" +#include "Common/Graph/GraphAlgorithms.h" #include "Model/Classes/NMR_ModelConstants_Slices.h" +#include "Model/Classes/NMR_ModelImplicitFunction.h" +#include "Model/Classes/NMR_ModelLevelSetObject.h" +#include "Model/Classes/NMR_ModelVolumeData.h" +#include "Model/Writer/NMR_ModelWriterNode_Implicit.h" +#include "Model/Writer/NMR_ModelWriterNode_LevelSet.h" +#include "Model/Writer/NMR_ModelWriterNode_VolumeData.h" -#include "Common/3MF_ProgressMonitor.h" +#include "Common/3MF_ProgressMonitor.h" namespace NMR { @@ -70,6 +82,8 @@ namespace NMR { m_bWriteSecureContentExtension = true; m_bWriteBaseMaterials = true; m_bWriteObjects = true; + m_bWriteVolumetricExtension = true; + m_bWriteImplicitExtension = true; m_bWriteCustomNamespaces = true; @@ -161,6 +175,24 @@ namespace NMR { } } + if (m_bWriteVolumetricExtension) { + writeConstPrefixedStringAttribute(XML_3MF_ATTRIBUTE_XMLNS, XML_3MF_NAMESPACEPREFIX_VOLUMETRIC, XML_3MF_NAMESPACE_VOLUMETRICSPEC); + if (m_pModel->RequireExtension(XML_3MF_NAMESPACE_VOLUMETRICSPEC)) { + if (sRequiredExtensions.size() > 0) + sRequiredExtensions = sRequiredExtensions + " "; + sRequiredExtensions = sRequiredExtensions + XML_3MF_NAMESPACEPREFIX_VOLUMETRIC; + } + } + + if (m_bWriteImplicitExtension) { + writeConstPrefixedStringAttribute(XML_3MF_ATTRIBUTE_XMLNS, XML_3MF_NAMESPACEPREFIX_IMPLICIT, XML_3MF_NAMESPACE_IMPLICITSPEC); + if (m_pModel->RequireExtension(XML_3MF_NAMESPACE_IMPLICITSPEC)) { + if (sRequiredExtensions.size() > 0) + sRequiredExtensions = sRequiredExtensions + " "; + sRequiredExtensions = sRequiredExtensions + XML_3MF_NAMESPACEPREFIX_IMPLICIT; + } + } + if (m_bWriteCustomNamespaces) { nfUint32 nNSCount = m_pXMLWriter->GetNamespaceCount(); for (nfUint32 iNSCount = 0; iNSCount < nNSCount; iNSCount++) { @@ -190,35 +222,54 @@ namespace NMR { CModelTexture2DResource * pTexture2D = m_pModel->getTexture2D(nTextureIndex); - writeStartElementWithPrefix(XML_3MF_ELEMENT_TEXTURE2D, XML_3MF_NAMESPACEPREFIX_MATERIAL); + writeTexture2D(pTexture2D); + } - assertResourceIsInCurrentPath(pTexture2D->getPackageResourceID()); - writeIntAttribute(XML_3MF_ATTRIBUTE_TEXTURE2D_ID, pTexture2D->getPackageResourceID()->getModelResourceID()); - writeStringAttribute(XML_3MF_ATTRIBUTE_TEXTURE2D_PATH, pTexture2D->getAttachment()->getPathURI()); - writeStringAttribute(XML_3MF_ATTRIBUTE_TEXTURE2D_CONTENTTYPE, pTexture2D->getContentTypeString()); - - if (pTexture2D->getTileStyleU() != MODELTEXTURETILESTYLE_WRAP) - writeStringAttribute(XML_3MF_ATTRIBUTE_TEXTURE2D_TILESTYLEU, CModelTexture2DResource::tileStyleToString(pTexture2D->getTileStyleU())); - if (pTexture2D->getTileStyleV() != MODELTEXTURETILESTYLE_WRAP) - writeStringAttribute(XML_3MF_ATTRIBUTE_TEXTURE2D_TILESTYLEV, CModelTexture2DResource::tileStyleToString(pTexture2D->getTileStyleV())); - if (pTexture2D->getFilter() != MODELTEXTUREFILTER_AUTO) - writeStringAttribute(XML_3MF_ATTRIBUTE_TEXTURE2D_FILTER, CModelTexture2DResource::filterToString(pTexture2D->getFilter())); - - if (pTexture2D->hasBox2D()) { - nfFloat fU, fV, fWidth, fHeight; - pTexture2D->getBox2D(fU, fV, fWidth, fHeight); - writeStringAttribute(XML_3MF_ATTRIBUTE_TEXTURE2D_BOX, - std::to_string(fU) + " " + std::to_string(fV) + " " + std::to_string(fWidth) + " " + std::to_string(fHeight)); - } - - writeEndElement(); + } + void CModelWriterNode100_Model::writeTexture2D( + CModelTexture2DResource *pTexture2D) + { + writeStartElementWithPrefix(XML_3MF_ELEMENT_TEXTURE2D, + XML_3MF_NAMESPACEPREFIX_MATERIAL); + + assertResourceIsInCurrentPath(pTexture2D->getPackageResourceID()); + writeIntAttribute( + XML_3MF_ATTRIBUTE_TEXTURE2D_ID, + pTexture2D->getPackageResourceID()->getModelResourceID()); + writeStringAttribute(XML_3MF_ATTRIBUTE_TEXTURE2D_PATH, + pTexture2D->getAttachment()->getPathURI()); + writeStringAttribute(XML_3MF_ATTRIBUTE_TEXTURE2D_CONTENTTYPE, + pTexture2D->getContentTypeString()); + + if(pTexture2D->getTileStyleU() != MODELTEXTURETILESTYLE_WRAP) + writeStringAttribute(XML_3MF_ATTRIBUTE_TEXTURE2D_TILESTYLEU, + CModelTexture2DResource::tileStyleToString( + pTexture2D->getTileStyleU())); + if(pTexture2D->getTileStyleV() != MODELTEXTURETILESTYLE_WRAP) + writeStringAttribute(XML_3MF_ATTRIBUTE_TEXTURE2D_TILESTYLEV, + CModelTexture2DResource::tileStyleToString( + pTexture2D->getTileStyleV())); + if(pTexture2D->getFilter() != MODELTEXTUREFILTER_AUTO) + writeStringAttribute(XML_3MF_ATTRIBUTE_TEXTURE2D_FILTER, + CModelTexture2DResource::filterToString( + pTexture2D->getFilter())); + + if(pTexture2D->hasBox2D()) + { + nfFloat fU, fV, fWidth, fHeight; + pTexture2D->getBox2D(fU, fV, fWidth, fHeight); + writeStringAttribute( + XML_3MF_ATTRIBUTE_TEXTURE2D_BOX, + std::to_string(fU) + " " + std::to_string(fV) + " " + + std::to_string(fWidth) + " " + std::to_string(fHeight)); } + writeEndElement(); } - void CModelWriterNode100_Model::writeModelMetaData() - { + void CModelWriterNode100_Model::writeModelMetaData() + { if (m_bIsRootModel) { nfUint32 nMetaDataCount = m_pModel->getMetaDataCount(); @@ -240,42 +291,56 @@ namespace NMR { m_pProgressMonitor->IncrementProgress(1); CModelBaseMaterialResource * pBaseMaterial = m_pModel->getBaseMaterial(nMaterialIndex); + writeBaseMaterial(pBaseMaterial); + } - pBaseMaterial->buildResourceIndexMap(); + } - assertResourceIsInCurrentPath(pBaseMaterial->getPackageResourceID()); - ModelResourceID nResourceID = pBaseMaterial->getPackageResourceID()->getModelResourceID(); + void CModelWriterNode100_Model::writeBaseMaterial( + CModelBaseMaterialResource *pBaseMaterial) + { + pBaseMaterial->buildResourceIndexMap(); - writeStartElement(XML_3MF_ELEMENT_BASEMATERIALS); - // Write Object ID (mandatory) - writeIntAttribute(XML_3MF_ATTRIBUTE_BASEMATERIALS_ID, nResourceID); + assertResourceIsInCurrentPath( + pBaseMaterial->getPackageResourceID()); + ModelResourceID nResourceID = + pBaseMaterial->getPackageResourceID()->getModelResourceID(); - nfUint32 nElementCount = pBaseMaterial->getCount(); + writeStartElement(XML_3MF_ELEMENT_BASEMATERIALS); + // Write Object ID (mandatory) + writeIntAttribute(XML_3MF_ATTRIBUTE_BASEMATERIALS_ID, nResourceID); - UniqueResourceID nUniqueResourceID = pBaseMaterial->getPackageResourceID()->getUniqueID(); + nfUint32 nElementCount = pBaseMaterial->getCount(); - for (nfUint32 j = 0; j < nElementCount; j++) { - ModelPropertyID nPropertyID; - if (!pBaseMaterial->mapResourceIndexToPropertyID(j, nPropertyID)) { - throw CNMRException(NMR_ERROR_INVALIDPROPERTYRESOURCEID); - } - PModelBaseMaterial pElement = pBaseMaterial->getBaseMaterial(nPropertyID); - - m_pPropertyIndexMapping->registerPropertyID(nUniqueResourceID, pElement->getPropertyID(), j); + UniqueResourceID nUniqueResourceID = + pBaseMaterial->getPackageResourceID()->getUniqueID(); - writeStartElement(XML_3MF_ELEMENT_BASE); - writeStringAttribute(XML_3MF_ATTRIBUTE_BASEMATERIAL_NAME, pElement->getName()); - writeStringAttribute(XML_3MF_ATTRIBUTE_BASEMATERIAL_DISPLAYCOLOR, pElement->getDisplayColorString()); - writeEndElement(); + for(nfUint32 j = 0; j < nElementCount; j++) + { + ModelPropertyID nPropertyID; + if(!pBaseMaterial->mapResourceIndexToPropertyID(j, nPropertyID)) + { + throw CNMRException(NMR_ERROR_INVALIDPROPERTYRESOURCEID); } - - writeFullEndElement(); + PModelBaseMaterial pElement = + pBaseMaterial->getBaseMaterial(nPropertyID); + + m_pPropertyIndexMapping->registerPropertyID( + nUniqueResourceID, pElement->getPropertyID(), j); + + writeStartElement(XML_3MF_ELEMENT_BASE); + writeStringAttribute(XML_3MF_ATTRIBUTE_BASEMATERIAL_NAME, + pElement->getName()); + writeStringAttribute( + XML_3MF_ATTRIBUTE_BASEMATERIAL_DISPLAYCOLOR, + pElement->getDisplayColorString()); + writeEndElement(); } + writeFullEndElement(); } - - void CModelWriterNode100_Model::writeSliceStacks() { + void CModelWriterNode100_Model::writeSliceStacks() { nfUint32 nSliceStackCount = m_pModel->getSliceStackCount(); for (nfUint32 nSliceStackIndex = 0; nSliceStackIndex < nSliceStackCount; nSliceStackIndex++) { @@ -376,116 +441,191 @@ namespace NMR { { std::list objectList = m_pModel->getSortedObjectList(); - for (auto iIterator = objectList.begin(); iIterator != objectList.end(); iIterator++) { - CModelObject * pObject = *iIterator; - - PPackageModelPath pPath = pObject->getPackageResourceID()->getPackageModelPath(); - if (m_pModel->currentModelPath()->getPath() != pPath->getPath()) + for(auto iIterator = objectList.begin(); + iIterator != objectList.end(); iIterator++) + { + CModelObject *pObject = *iIterator; + if (!pObject) { - continue; + throw CNMRException(NMR_ERROR_INVALIDMODEL); } + writeObject(*pObject); + } + } - m_pProgressMonitor->SetProgressIdentifier(ProgressIdentifier::PROGRESS_WRITEOBJECTS); - m_pProgressMonitor->IncrementProgress(1); - m_pProgressMonitor->ReportProgressAndQueryCancelled(true); - - writeStartElement(XML_3MF_ELEMENT_OBJECT); - // Write Object ID (mandatory) - writeIntAttribute(XML_3MF_ATTRIBUTE_OBJECT_ID, pObject->getPackageResourceID()->getModelResourceID()); - - // Write Object Name (optional) - std::string sObjectName = pObject->getName(); - if (sObjectName.length() > 0) - writeStringAttribute(XML_3MF_ATTRIBUTE_OBJECT_NAME, sObjectName); - - // Write Object Partnumber (optional) - std::string sObjectPartNumber = pObject->getPartNumber(); - if (sObjectPartNumber.length() > 0) - writeStringAttribute(XML_3MF_ATTRIBUTE_OBJECT_PARTNUMBER, sObjectPartNumber); + void CModelWriterNode100_Model::writeObject(CModelObject &object) + { + PPackageModelPath pPath = + object.getPackageResourceID()->getPackageModelPath(); + if(m_pModel->currentModelPath()->getPath() != pPath->getPath()) + { + return; + } - // Write Object Type (optional) - writeStringAttribute(XML_3MF_ATTRIBUTE_OBJECT_TYPE, pObject->getObjectTypeString()); + m_pProgressMonitor->SetProgressIdentifier( + ProgressIdentifier::PROGRESS_WRITEOBJECTS); + m_pProgressMonitor->IncrementProgress(1); + m_pProgressMonitor->ReportProgressAndQueryCancelled(true); + + writeStartElement(XML_3MF_ELEMENT_OBJECT); + // Write Object ID (mandatory) + writeIntAttribute( + XML_3MF_ATTRIBUTE_OBJECT_ID, + object.getPackageResourceID()->getModelResourceID()); + + // Write Object Name (optional) + std::string sObjectName = object.getName(); + if(sObjectName.length() > 0) + writeStringAttribute(XML_3MF_ATTRIBUTE_OBJECT_NAME, + sObjectName); + + // Write Object Partnumber (optional) + std::string sObjectPartNumber = object.getPartNumber(); + if(sObjectPartNumber.length() > 0) + writeStringAttribute(XML_3MF_ATTRIBUTE_OBJECT_PARTNUMBER, + sObjectPartNumber); + + // Write Object Type (optional) + writeStringAttribute(XML_3MF_ATTRIBUTE_OBJECT_TYPE, + object.getObjectTypeString()); + + // Write Object Thumbnail (optional) + PModelAttachment pThumbnail = object.getThumbnailAttachment(); + if(pThumbnail) + { + PModelAttachment pModelAttachment = + m_pModel->findModelAttachment(pThumbnail->getPathURI()); + if(!pModelAttachment) + throw CNMRException(NMR_ERROR_NOTEXTURESTREAM); + if(!((pModelAttachment->getRelationShipType() == + PACKAGE_TEXTURE_RELATIONSHIP_TYPE) || + (pModelAttachment->getRelationShipType() == + PACKAGE_THUMBNAIL_RELATIONSHIP_TYPE))) + throw CNMRException(NMR_ERROR_NOTEXTURESTREAM); + + writeStringAttribute(XML_3MF_ATTRIBUTE_OBJECT_THUMBNAIL, + pThumbnail->getPathURI()); + } - // Write Object Thumbnail (optional) - PModelAttachment pThumbnail = pObject->getThumbnailAttachment(); - if (pThumbnail) { - PModelAttachment pModelAttachment = m_pModel->findModelAttachment(pThumbnail->getPathURI()); - if (!pModelAttachment) - throw CNMRException(NMR_ERROR_NOTEXTURESTREAM); - if (!((pModelAttachment->getRelationShipType() == PACKAGE_TEXTURE_RELATIONSHIP_TYPE) || (pModelAttachment->getRelationShipType() == PACKAGE_THUMBNAIL_RELATIONSHIP_TYPE))) - throw CNMRException(NMR_ERROR_NOTEXTURESTREAM); + if(m_bWriteProductionExtension) + { + if(!object.uuid().get()) + throw CNMRException(NMR_ERROR_MISSINGUUID); + writePrefixedStringAttribute(XML_3MF_NAMESPACEPREFIX_PRODUCTION, + XML_3MF_PRODUCTION_UUID, + object.uuid()->toString()); + } - writeStringAttribute(XML_3MF_ATTRIBUTE_OBJECT_THUMBNAIL, pThumbnail->getPathURI()); + // Slice extension content + if(m_bWriteSliceExtension) + { + if(object.getSliceStack().get()) + { + assertResourceIsInCurrentPath( + object.getSliceStack()->getPackageResourceID()); + writePrefixedStringAttribute( + XML_3MF_NAMESPACEPREFIX_SLICE, + XML_3MF_ATTRIBUTE_OBJECT_SLICESTACKID, + fnUint32ToString(object.getSliceStack() + ->getPackageResourceID() + ->getModelResourceID())); } - - if (m_bWriteProductionExtension) { - if (!pObject->uuid().get()) - throw CNMRException(NMR_ERROR_MISSINGUUID); - writePrefixedStringAttribute(XML_3MF_NAMESPACEPREFIX_PRODUCTION, XML_3MF_PRODUCTION_UUID, pObject->uuid()->toString()); + if(object.slicesMeshResolution() != + MODELSLICESMESHRESOLUTION_FULL) + { + writePrefixedStringAttribute( + XML_3MF_NAMESPACEPREFIX_SLICE, + XML_3MF_ATTRIBUTE_OBJECT_MESHRESOLUTION, + XML_3MF_VALUE_OBJECT_MESHRESOLUTION_LOW); } + } - // Slice extension content - if (m_bWriteSliceExtension) { - if (pObject->getSliceStack().get()) { - assertResourceIsInCurrentPath(pObject->getSliceStack()->getPackageResourceID()); - writePrefixedStringAttribute(XML_3MF_NAMESPACEPREFIX_SLICE, XML_3MF_ATTRIBUTE_OBJECT_SLICESTACKID, - fnUint32ToString(pObject->getSliceStack()->getPackageResourceID()->getModelResourceID())); - } - if (pObject->slicesMeshResolution() != MODELSLICESMESHRESOLUTION_FULL) { - writePrefixedStringAttribute(XML_3MF_NAMESPACEPREFIX_SLICE, XML_3MF_ATTRIBUTE_OBJECT_MESHRESOLUTION, - XML_3MF_VALUE_OBJECT_MESHRESOLUTION_LOW); - } - } + // Check if object is a mesh Object + CModelMeshObject *pMeshObject = + dynamic_cast(&object); + if(pMeshObject) + { + // Prepare Object Level Property ID and Index + UniqueResourceID nObjectLevelPropertyID = 0; + ModelResourceIndex nObjectLevelPropertyIndex = 0; + CMesh *pMesh = pMeshObject->getMesh(); - // Check if object is a mesh Object - CModelMeshObject * pMeshObject = dynamic_cast (pObject); - if (pMeshObject) { - // Prepare Object Level Property ID and Index - UniqueResourceID nObjectLevelPropertyID = 0; - ModelResourceIndex nObjectLevelPropertyIndex = 0; - CMesh* pMesh = pMeshObject->getMesh(); - - if (pMesh) { - CMeshInformationHandler * pMeshInformationHandler = pMesh->getMeshInformationHandler(); - if (pMeshInformationHandler) { - // Get generic property handler - CMeshInformation *pInformation = pMeshInformationHandler->getInformationByType(0, emiProperties); - if (pInformation) { - auto pProperties = dynamic_cast (pInformation); - NMR::MESHINFORMATION_PROPERTIES * pDefaultData = (NMR::MESHINFORMATION_PROPERTIES*)pProperties->getDefaultData(); - if (pDefaultData && pDefaultData->m_nUniqueResourceID != 0) { - nObjectLevelPropertyID = pDefaultData->m_nUniqueResourceID; - nObjectLevelPropertyIndex = m_pPropertyIndexMapping->mapPropertyIDToIndex(nObjectLevelPropertyID, pDefaultData->m_nPropertyIDs[0]); - } + if(pMesh) + { + CMeshInformationHandler *pMeshInformationHandler = + pMesh->getMeshInformationHandler(); + if(pMeshInformationHandler) + { + // Get generic property handler + CMeshInformation *pInformation = + pMeshInformationHandler->getInformationByType( + 0, emiProperties); + if(pInformation) + { + auto pProperties = + dynamic_cast( + pInformation); + NMR::MESHINFORMATION_PROPERTIES *pDefaultData = + (NMR::MESHINFORMATION_PROPERTIES *) + pProperties->getDefaultData(); + if(pDefaultData && + pDefaultData->m_nUniqueResourceID != 0) + { + nObjectLevelPropertyID = + pDefaultData->m_nUniqueResourceID; + nObjectLevelPropertyIndex = + m_pPropertyIndexMapping + ->mapPropertyIDToIndex( + nObjectLevelPropertyID, + pDefaultData->m_nPropertyIDs[0]); } } } - // Write Object Level Attributes (only for meshes) - if (nObjectLevelPropertyID != 0) { - ModelResourceID nPropertyModelResourceID = m_pModel->findPackageResourceID(nObjectLevelPropertyID)->getModelResourceID(); - writeIntAttribute(XML_3MF_ATTRIBUTE_OBJECT_PID, nPropertyModelResourceID); - writeIntAttribute(XML_3MF_ATTRIBUTE_OBJECT_PINDEX, nObjectLevelPropertyIndex); - } } + // Write Object Level Attributes (only for meshes) + if(nObjectLevelPropertyID != 0) + { + ModelResourceID nPropertyModelResourceID = + m_pModel->findPackageResourceID(nObjectLevelPropertyID) + ->getModelResourceID(); + writeIntAttribute(XML_3MF_ATTRIBUTE_OBJECT_PID, + nPropertyModelResourceID); + writeIntAttribute(XML_3MF_ATTRIBUTE_OBJECT_PINDEX, + nObjectLevelPropertyIndex); + } + } - writeMetaDataGroup(pObject->metaDataGroup()); + writeMetaDataGroup(object.metaDataGroup()); - if (pMeshObject) { - CModelWriterNode100_Mesh ModelWriter_Mesh(pMeshObject, m_pXMLWriter, m_pProgressMonitor, - m_pPropertyIndexMapping, m_nDecimalPrecision, m_bWriteMaterialExtension, m_bWriteBeamLatticeExtension); + if(pMeshObject) + { + CModelWriterNode100_Mesh ModelWriter_Mesh( + pMeshObject, m_pXMLWriter, m_pProgressMonitor, + m_pPropertyIndexMapping, m_nDecimalPrecision, + m_bWriteMaterialExtension, m_bWriteBeamLatticeExtension, + m_bWriteVolumetricExtension); - ModelWriter_Mesh.writeToXML(); - } + ModelWriter_Mesh.writeToXML(); + } - // Check if object is a component Object - CModelComponentsObject * pComponentObject = dynamic_cast (pObject); - if (pComponentObject) { - writeComponentsObject(pComponentObject); - } + // Check if object is a component Object + CModelComponentsObject *pComponentObject = + dynamic_cast(&object); + if(pComponentObject) + { + writeComponentsObject(pComponentObject); + } - writeFullEndElement(); + CModelLevelSetObject *pLevelSet = + dynamic_cast(&object); + if(pLevelSet) + { + CModelWriterNode_LevelSet ModelWriter_LevelSet( + m_pModel, pLevelSet, m_pXMLWriter, m_pProgressMonitor); + ModelWriter_LevelSet.writeToXML(); } + writeFullEndElement(); } void CModelWriterNode100_Model::writeMetaData(_In_ PModelMetaData pMetaData) @@ -542,36 +682,43 @@ namespace NMR { CModelColorGroupResource * pColorGroup = m_pModel->getColorGroup(nIndex); - pColorGroup->buildResourceIndexMap(); + writeColor(pColorGroup); + } + } - assertResourceIsInCurrentPath(pColorGroup->getPackageResourceID()); - ModelResourceID nResourceID = pColorGroup->getPackageResourceID()->getModelResourceID(); + void CModelWriterNode100_Model::writeColor( + CModelColorGroupResource *pColorGroup) + { + pColorGroup->buildResourceIndexMap(); - writeStartElementWithPrefix(XML_3MF_ELEMENT_COLORGROUP, XML_3MF_NAMESPACEPREFIX_MATERIAL); - // Write Object ID (mandatory) - writeIntAttribute(XML_3MF_ATTRIBUTE_COLORS_ID, nResourceID); + assertResourceIsInCurrentPath(pColorGroup->getPackageResourceID()); + ModelResourceID nResourceID = pColorGroup->getPackageResourceID()->getModelResourceID(); - nfUint32 nElementCount = pColorGroup->getCount(); + writeStartElementWithPrefix(XML_3MF_ELEMENT_COLORGROUP, XML_3MF_NAMESPACEPREFIX_MATERIAL); + // Write Object ID (mandatory) + writeIntAttribute(XML_3MF_ATTRIBUTE_COLORS_ID, nResourceID); - UniqueResourceID nUniqueResourceID = pColorGroup->getPackageResourceID()->getUniqueID(); - for (nfUint32 j = 0; j < nElementCount; j++) { - ModelPropertyID nPropertyID; - if (!pColorGroup->mapResourceIndexToPropertyID(j, nPropertyID)) { - throw CNMRException(NMR_ERROR_INVALIDPROPERTYRESOURCEID); - } - nfColor pElement = pColorGroup->getColor(nPropertyID); - - m_pPropertyIndexMapping->registerPropertyID(nUniqueResourceID, nPropertyID, j); + nfUint32 nElementCount = pColorGroup->getCount(); - writeStartElementWithPrefix(XML_3MF_ELEMENT_COLOR, XML_3MF_NAMESPACEPREFIX_MATERIAL); - writeStringAttribute(XML_3MF_ATTRIBUTE_COLORS_COLOR, fnColorToString(pElement)); - writeEndElement(); + UniqueResourceID nUniqueResourceID = pColorGroup->getPackageResourceID()->getUniqueID(); + for (nfUint32 j = 0; j < nElementCount; j++) { + ModelPropertyID nPropertyID; + if (!pColorGroup->mapResourceIndexToPropertyID(j, nPropertyID)) { + throw CNMRException(NMR_ERROR_INVALIDPROPERTYRESOURCEID); } + nfColor pElement = pColorGroup->getColor(nPropertyID); - writeFullEndElement(); + m_pPropertyIndexMapping->registerPropertyID(nUniqueResourceID, nPropertyID, j); + + writeStartElementWithPrefix(XML_3MF_ELEMENT_COLOR, XML_3MF_NAMESPACEPREFIX_MATERIAL); + writeStringAttribute(XML_3MF_ATTRIBUTE_COLORS_COLOR, fnColorToString(pElement)); + writeEndElement(); } + + writeFullEndElement(); } + void CModelWriterNode100_Model::writeTex2Coords() { nfUint32 nGroupCount = m_pModel->getTexture2DGroupCount(); @@ -735,34 +882,157 @@ namespace NMR { } } - void CModelWriterNode100_Model::writeMultiProperties() + void CModelWriterNode100_Model::writeImage3Ds() { - nfUint32 nCount = m_pModel->getMultiPropertyGroupCount(); + nfUint32 nCount = m_pModel->getImage3DCount(); for (nfUint32 nIndex = 0; nIndex < nCount; nIndex++) { + CModelImage3D * pImage3DResource = m_pModel->getImage3D(nIndex); + + if (!pImage3DResource) + { + throw CNMRException(NMR_ERROR_INVALID_RESOURCE_INDEX, "Invalid Image3D resource index."); + } + writeImage3D(*pImage3DResource); + } + + } + + void CModelWriterNode100_Model::writeImage3D(CModelImage3D &pImage3D) + { + writeStartElementWithPrefix(XML_3MF_ELEMENT_IMAGE3D, XML_3MF_NAMESPACEPREFIX_VOLUMETRIC); + writeIntAttribute(XML_3MF_ATTRIBUTE_IMAGE3D_ID, pImage3D.getPackageResourceID()->getModelResourceID()); + if (!pImage3D.getName().empty()) + writeStringAttribute(XML_3MF_ATTRIBUTE_IMAGE3D_NAME, pImage3D.getName()); + + if (CModelImageStack* pImageStack = dynamic_cast(&pImage3D)) + { + writeStartElementWithPrefix(XML_3MF_ELEMENT_IMAGESTACK, XML_3MF_NAMESPACEPREFIX_VOLUMETRIC); + + nfUint32 nSheetCount = pImageStack->getSheetCount(); + writeIntAttribute(XML_3MF_ATTRIBUTE_IMAGESTACK_ROWCOUNT, pImageStack->getRowCount()); + writeIntAttribute(XML_3MF_ATTRIBUTE_IMAGESTACK_COLUMNCOUNT, pImageStack->getColumnCount()); + writeIntAttribute(XML_3MF_ATTRIBUTE_IMAGESTACK_SHEETCOUNT, nSheetCount); + + for (nfUint32 nSheetIndex = 0; nSheetIndex < nSheetCount; nSheetIndex++) { + auto pSheet = pImageStack->getSheet(nSheetIndex); + writeStartElementWithPrefix(XML_3MF_ELEMENT_IMAGESHEET, XML_3MF_NAMESPACEPREFIX_VOLUMETRIC); + if (pSheet.get() != nullptr) { + writeStringAttribute(XML_3MF_ATTRIBUTE_IMAGESHEET_PATH, pSheet->getPathURI()); + } + writeEndElement(); + } + + writeFullEndElement(); + } + else + { + throw CNMRException(-1); // TODO NMR_ERROR_UNKNOWN_IMAGE3D_TYPE + } + + writeFullEndElement(); + } + + + void CModelWriterNode100_Model::writeFunctionsFromImage3D() + { + nfUint32 nCount = m_pModel->getFunctionCount(); + + for (nfUint32 nIndex = 0u; nIndex < nCount; nIndex++) + { + auto funcFromImg3D = m_pModel->getFunctionFromImage3D(nIndex); + if (!funcFromImg3D) + { + continue; + } + + writeFunctionFromImage3D(*funcFromImg3D); + } + } + + void CModelWriterNode100_Model::writeFunctionFromImage3D( + CModelFunctionFromImage3D & functionFromImage3D) + { + writeStartElementWithPrefix(XML_3MF_ELEMENT_FUNCTION_FROM_IMAGE3D, + XML_3MF_NAMESPACEPREFIX_VOLUMETRIC); + writeIntAttribute(XML_3MF_ATTRIBUTE_IMPLICIT_FUNCTION_ID, + functionFromImage3D.getPackageResourceID() + ->getModelResourceID()); + writeStringAttribute( + XML_3MF_ATTRIBUTE_IMPLICIT_FUNCTION_DISPLAY_NAME, + functionFromImage3D.getDisplayName()); + writeIntAttribute( + XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_IMAGE3DID, + functionFromImage3D.getImage3DModelResourceID()); + writeDoubleAttribute( + XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_OFFSET, + functionFromImage3D.getOffset()); + writeDoubleAttribute(XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_SCALE, + functionFromImage3D.getScale()); + writeStringAttribute( + XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_TILESTYLEU, + CModelTexture2DResource::tileStyleToString( + functionFromImage3D.getTileStyleU())); + writeStringAttribute( + XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_TILESTYLEV, + CModelTexture2DResource::tileStyleToString( + functionFromImage3D.getTileStyleV())); + writeStringAttribute( + XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_TILESTYLEW, + CModelTexture2DResource::tileStyleToString( + functionFromImage3D.getTileStyleW())); + writeStringAttribute( + XML_3MF_ATTRIBUTE_FUNTCTION_FROM_IMAGE3D_FILTER, + CModelTexture2DResource::filterToString( + functionFromImage3D.getFilter())); + writeFullEndElement(); + } + + void CModelWriterNode100_Model::writeImplicitFunctions() + { + CModelWriterNode_Implicit implicitWriter(m_pModel, m_pXMLWriter, m_pProgressMonitor); + implicitWriter.writeImplicitFunctions(); + } + + void CModelWriterNode100_Model::writeVolumeData() + { + CModelWriterNode_VolumeData volumeWriter(m_pModel, m_pXMLWriter, + m_pProgressMonitor); + volumeWriter.writeToXML(); + } + + void CModelWriterNode100_Model::writeMultiProperties() + { + nfUint32 nCount = m_pModel->getMultiPropertyGroupCount(); + + for (nfUint32 nIndex = 0; nIndex < nCount; nIndex++) + { m_pProgressMonitor->IncrementProgress(1); - CModelMultiPropertyGroupResource * pMultiPropertyGroup = m_pModel->getMultiPropertyGroup(nIndex); + CModelMultiPropertyGroupResource * pMultiPropertyGroup = + m_pModel->getMultiPropertyGroup(nIndex); pMultiPropertyGroup->buildResourceIndexMap(); - writeStartElementWithPrefix(XML_3MF_ELEMENT_MULTIPROPERTIES, XML_3MF_NAMESPACEPREFIX_MATERIAL); + writeStartElementWithPrefix(XML_3MF_ELEMENT_MULTIPROPERTIES, + XML_3MF_NAMESPACEPREFIX_MATERIAL); writeMultiPropertyAttributes(pMultiPropertyGroup); - + writeMultiPropertyMultiElements(pMultiPropertyGroup); writeFullEndElement(); } } - void CModelWriterNode100_Model::writeResources() + void CModelWriterNode100_Model::writeResources() { writeStartElement(XML_3MF_ELEMENT_RESOURCES); if (m_bIsRootModel) { - if (m_bWriteBaseMaterials) + // First we write all Resources, that have no dependencies to other resources + if (m_bWriteBaseMaterials) writeBaseMaterials(); if (m_bWriteMaterialExtension) { @@ -775,9 +1045,29 @@ namespace NMR { if (m_bWriteSliceExtension) { writeSliceStacks(); } - if (m_bWriteObjects) - writeObjects(); - } + + // Create topological order of resources + CResourceDependencySorter sorter(m_pModel); + auto sortedResources = sorter.sort(); + + for(auto &resId : sortedResources) + { + if(resId->getPath() != m_pModel->currentPath()) + { + continue; + } + auto pResource = + m_pModel->findResource(resId->getUniqueID()); + + if(!pResource) + { + throw CNMRException( + NMR_ERROR_INVALID_RESOURCE_INDEX, + "Invalid Resource"); + } + writeResource(pResource.get()); + } + } else { if (m_bWriteSliceExtension) { writeSliceStacks(); @@ -790,6 +1080,51 @@ namespace NMR { writeFullEndElement(); } + void CModelWriterNode100_Model::writeResource(CModelResource *pResource) + { + if (!pResource) + { + throw CNMRException(NMR_ERROR_INVALIDPARAM, "Invalid Resource"); + } + CModelWriterNode_Implicit implicitWriter(m_pModel, m_pXMLWriter, m_pProgressMonitor); + CModelWriterNode_VolumeData volumeWriter(m_pModel, m_pXMLWriter, m_pProgressMonitor); + + CModelImage3D * pImage3DResource = dynamic_cast(pResource); + if (pImage3DResource) + { + writeImage3D(*pImage3DResource); + return; + } + + CModelFunctionFromImage3D * pFunctionFromImage3DResource = dynamic_cast(pResource); + if (pFunctionFromImage3DResource) + { + writeFunctionFromImage3D(*pFunctionFromImage3DResource); + return; + } + + CModelImplicitFunction * pImplicitFunctionResource = dynamic_cast(pResource); + if (pImplicitFunctionResource) + { + implicitWriter.writeImplicitFunction(*pImplicitFunctionResource); + return; + } + + CModelVolumeData * pVolumeDataResource = dynamic_cast(pResource); + if (pVolumeDataResource) + { + volumeWriter.writeVolumeDataResource(*pVolumeDataResource); + return; + } + + CModelObject * pObject = dynamic_cast(pResource); + if (pObject) + { + writeObject(*pObject); + return; + } + } + void CModelWriterNode100_Model::writeBuild() { writeStartElement(XML_3MF_ELEMENT_BUILD); diff --git a/Source/Model/Writer/v100/NMR_ResourceDependencySorter.cpp b/Source/Model/Writer/v100/NMR_ResourceDependencySorter.cpp new file mode 100644 index 000000000..b7e39678e --- /dev/null +++ b/Source/Model/Writer/v100/NMR_ResourceDependencySorter.cpp @@ -0,0 +1,125 @@ +/*++ + +Copyright (C) 2024 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +NMR_ResourcDependencySorter resolves the dependencies between resources by +sorting them topologically. +--*/ + +#include "Model/Writer/v100/NMR_ResourceDependencySorter.h" + +#include "Common/Graph/DirectedGraph.h" +#include "Common/Graph/GraphAlgorithms.h" +#include "Model/Classes/NMR_Model.h" +#include "Model/Classes/NMR_ModelResource.h" + +namespace NMR +{ + + CResourceDependencySorter::CResourceDependencySorter(CModel* pModel) + : m_pModel(pModel) + { + buildIndexMaps(); + } + + TopologicalSortResult CResourceDependencySorter::sort() + { + // gather list of resources that are standalone + TopologicalSortResult sortedResources; + + for(nfUint32 i = 0; i < m_pModel->getResourceCount(); i++) + { + auto pResource = m_pModel->getResource(i); + if(pResource->getDependencies().empty()) + { + sortedResources.push_back( + pResource->getPackageResourceID()); + } + } + + auto graph = buildGraph(); + if (common::graph::isCyclic(graph)) + { + throw CNMRException(NMR_ERROR_INVALIDPARAM, "Cyclic dependency between resources detected"); + } + auto sortedIndices = common::graph::topologicalSort( + buildGraph()); // only contains resources that have or are a + // dependency + + for (auto index : sortedIndices) + { + + auto modelResourceID = indexToModelResourceID(index); + if (std::find(sortedResources.begin(), sortedResources.end(), modelResourceID) == sortedResources.end()) { + sortedResources.push_back(modelResourceID); + } + } + return sortedResources; + } + + common::graph::DirectedGraph CResourceDependencySorter::buildGraph() + { + common::graph::DirectedGraph graph(m_pModel->getResourceCount()); + + for(nfUint32 i = 0; i < m_pModel->getResourceCount(); i++) + { + auto pResource = m_pModel->getResource(i); + auto dependencies = pResource->getDependencies(); + for(auto dependency : dependencies) + { + auto dependencyIndex = modelResourceIDToIndex(dependency); + graph.addDependency(i, dependencyIndex); + } + } + + return graph; + } + + void CResourceDependencySorter::buildIndexMaps() + { + for(nfUint32 i = 0; i < m_pModel->getResourceCount(); i++) + { + auto pResource = m_pModel->getResource(i); + m_indexToResourceID[i] = + pResource->getPackageResourceID(); + m_resourceIDToIndex[pResource->getPackageResourceID()] = i; + } + } + + PPackageResourceID CResourceDependencySorter::indexToModelResourceID( + size_t index) const + { + return m_indexToResourceID.at(index); + } + + size_t CResourceDependencySorter::modelResourceIDToIndex( + PPackageResourceID resourceID) const + { + return m_resourceIDToIndex.at(resourceID); + } + +} // namespace NMR \ No newline at end of file diff --git a/Tests/CPP_Bindings/CMakeLists.txt b/Tests/CPP_Bindings/CMakeLists.txt index 89aa33ae8..63daeeff4 100644 --- a/Tests/CPP_Bindings/CMakeLists.txt +++ b/Tests/CPP_Bindings/CMakeLists.txt @@ -35,8 +35,11 @@ set(SRCS_UNITTEST ./Source/Writer.cpp ./Source/TextureProperty.cpp ./Source/TextureResources.cpp + ./Source/UnitTest_Utilities.cpp ./Source/v093.cpp + ./Source/Volumetric.cpp ./Source/Wrapper.cpp + ./Source/Writer.cpp ) set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_BINARY_DIR}) diff --git a/Tests/CPP_Bindings/Include/UnitTest_Utilities.h b/Tests/CPP_Bindings/Include/UnitTest_Utilities.h index f85707144..bbd09a01c 100644 --- a/Tests/CPP_Bindings/Include/UnitTest_Utilities.h +++ b/Tests/CPP_Bindings/Include/UnitTest_Utilities.h @@ -74,46 +74,70 @@ class Lib3MFTest : public ::testing::Test { } static Lib3MF::PWrapper wrapper; }; - -inline std::vector ReadFileIntoBuffer(std::string sFileName) +namespace Lib3MF { - // Read the file fully into a memory buffer - std::ifstream file(sFileName, std::ios::binary | std::ios::ate); - std::streamsize size = file.tellg(); - file.seekg(0, std::ios::beg); - // Memory buffer - std::vector buffer(static_cast(size)); - file.read((char*)buffer.data(), size); - return buffer; -} + namespace helper + { + bool directoryExists(std::string& path); -inline void WriteBufferToFile(std::vector const & buffer, std::string sFileName) -{ - std::ofstream file(sFileName, std::ios::binary); - for (Lib3MF_uint8 cByte: buffer) { - file.put(cByte); - } - file.close(); -} + void comparePorts( + Lib3MF::PImplicitPortIterator const& portIterator1, + Lib3MF::PImplicitPortIterator const& portIterator2, + bool ignoreReference = false); -inline sLib3MFTransform getIdentityTransform() -{ - sLib3MFTransform t; - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 3; j++) - t.m_Fields[i][j] = 0 + 1.0f * (i==j); - } - return t; -} + void compareImplicitFunctions( + PImplicitFunction const& function1, + PImplicitFunction const& function2); -inline void CompareColors(Lib3MF::sColor c1, Lib3MF::sColor c2) -{ - EXPECT_EQ(c1.m_Alpha, c2.m_Alpha); - EXPECT_EQ(c1.m_Red, c2.m_Red); - EXPECT_EQ(c1.m_Green, c2.m_Green); - EXPECT_EQ(c1.m_Blue, c2.m_Blue); -} + void compareFunctionsFromImage3D(Lib3MF::PModel model1, + PFunctionFromImage3D const& function1, + Lib3MF::PModel model2, + PFunctionFromImage3D const& function2); + + void compareFunctions(Lib3MF::PModel model1, + PFunction const& function1, + Lib3MF::PModel model2, + PFunction const& function2); + + void CompareColors(Lib3MF::sColor c1, Lib3MF::sColor c2); + + void CompareTransforms(Lib3MF::sTransform t1, + Lib3MF::sTransform t2); + + void CompareFunctionReferences(Lib3MF::PModel modelA, + Lib3MF::PFunctionReference A, + Lib3MF::PModel modelB, + Lib3MF::PFunctionReference B); + + void CompareImage3Ds(Lib3MF::PModel modelA, Lib3MF::PImage3D i1, + Lib3MF::PModel modelB, + Lib3MF::PImage3D i2); + void CompareImageStacks(Lib3MF::PImageStack i1, + Lib3MF::PImageStack i2); + + void CompareVolumeData(Lib3MF::PModel modelA, + Lib3MF::PVolumeData A, + Lib3MF::PModel modelB, + Lib3MF::PVolumeData B); + + + /** + * @brief Calcutes the transform from the mesh coordinates to the normalized UVW space + * @param mesh Mesh to calculate the transform for + * @return Transform from mesh coordinates to UVW space + */ + Lib3MF::sTransform ComputeTransformFromMeshCoordinatesToUVW(Lib3MF::PMeshObject mesh); + + Lib3MF::PLevelSet getFirstLevelSet(Lib3MF::PModel model); + + } // namespace helper +} // namespace Lib3MF + +std::vector ReadFileIntoBuffer(std::string sFileName); +void WriteBufferToFile(std::vector const & buffer, std::string sFileName); + +sLib3MFTransform getIdentityTransform(); template struct PositionedVector @@ -125,7 +149,7 @@ struct PositionedVector static void writeCallback(Lib3MF_uint64 nByteData, Lib3MF_uint64 nNumBytes, Lib3MF_pvoid pUserData) { PositionedVector* buffer = reinterpret_cast*> ((void*)(pUserData)); T* pData = (T*)(nByteData); - for (int i = 0; i < nNumBytes; i++) { + for (Lib3MF_uint64 i = 0; i < nNumBytes; i++) { if (buffer->pos == buffer->vec.size()) { buffer->vec.push_back(*pData); } @@ -143,7 +167,7 @@ struct PositionedVector static void readCallback(Lib3MF_uint64 nByteData, Lib3MF_uint64 nNumBytes, Lib3MF_pvoid pUserData) { PositionedVector* buffer = reinterpret_cast*> ((void*)(pUserData)); T* pData = (T*)(nByteData); - for (int i = 0; i < nNumBytes; i++) { + for (Lib3MF_uint64 i = 0u; i < nNumBytes; i++) { if (buffer->pos < buffer->vec.size()) { *pData = buffer->vec[(size_t)buffer->pos]; } @@ -162,38 +186,10 @@ struct PositionedVector }; -inline sLib3MFPosition fnCreateVertex(float x, float y, float z) -{ - sLib3MFPosition result; - result.m_Coordinates[0] = x; - result.m_Coordinates[1] = y; - result.m_Coordinates[2] = z; - return result; -} - -inline sLib3MFTriangle fnCreateTriangle(int v0, int v1, int v2) -{ - sLib3MFTriangle result; - result.m_Indices[0] = v0; - result.m_Indices[1] = v1; - result.m_Indices[2] = v2; - return result; -} - - +sLib3MFPosition fnCreateVertex(float x, float y, float z); +sLib3MFTriangle fnCreateTriangle(int v0, int v1, int v2); void fnCreateBox(std::vector &vctVertices, std::vector &vctTriangles); - -inline void CheckReaderWarnings(Lib3MF::PReader reader, Lib3MF_uint32 nWarnings) -{ - EXPECT_EQ(reader->GetWarningCount(), nWarnings); - for (Lib3MF_uint32 iWarning = 0; iWarning < reader->GetWarningCount(); iWarning++) - { - Lib3MF_uint32 nErrorCode; - std::string sWarning = reader->GetWarning(iWarning, nErrorCode); - EXPECT_TRUE(true) << iWarning << ": " << nErrorCode << ", " << sWarning; - } -} - +void CheckReaderWarnings(Lib3MF::PReader reader, Lib3MF_uint32 nWarnings); #endif //__NMR_UNITTEST_UTILITIES diff --git a/Tests/CPP_Bindings/Source/BeamLattice.cpp b/Tests/CPP_Bindings/Source/BeamLattice.cpp index 2d9e8ede8..7ca63dabd 100644 --- a/Tests/CPP_Bindings/Source/BeamLattice.cpp +++ b/Tests/CPP_Bindings/Source/BeamLattice.cpp @@ -152,7 +152,7 @@ namespace Lib3MF TEST_F(BeamLattice, BallMode) { - beamLattice->SetBallOptions(eBeamLatticeBallMode::None, 1.2); + beamLattice->SetBallOptions(eBeamLatticeBallMode::BeamLatticeBallModeNone, 1.2); sBeam beam; beam.m_Radii[0] = 1.0; @@ -272,7 +272,7 @@ namespace Lib3MF beamLattice->AddBeam(beam); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } @@ -291,7 +291,7 @@ namespace Lib3MF beamLattice->SetBeam(0, beam); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } @@ -299,7 +299,7 @@ namespace Lib3MF try { beamLattice->SetBallOptions(eBeamLatticeBallMode::All, 0.0); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } @@ -316,7 +316,7 @@ namespace Lib3MF beamLattice->SetBall(0, ball); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } @@ -326,7 +326,7 @@ namespace Lib3MF beamLattice->AddBall(ball); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } } @@ -420,7 +420,7 @@ namespace Lib3MF beamLattice->SetBeams(beams); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } @@ -463,7 +463,7 @@ namespace Lib3MF beamLattice->SetBalls(balls); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } } @@ -501,14 +501,14 @@ namespace Lib3MF mesh->SetType(eObjectType::Support); ASSERT_FALSE(true) << "Could set eObjectTypeSupport"; } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } try { mesh->SetType(eObjectType::Other); ASSERT_FALSE(true) << "Could set eObjectTypeOther"; } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } } @@ -530,7 +530,7 @@ namespace Lib3MF beamLattice->AddBeam(beam); ASSERT_FALSE(true) << "Could add beam on eObjectTypeSupport"; } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } } diff --git a/Tests/CPP_Bindings/Source/BeamSets.cpp b/Tests/CPP_Bindings/Source/BeamSets.cpp index dee81a577..05bd4c789 100644 --- a/Tests/CPP_Bindings/Source/BeamSets.cpp +++ b/Tests/CPP_Bindings/Source/BeamSets.cpp @@ -121,7 +121,7 @@ namespace Lib3MF beamSet->SetIdentifier(ident1); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } } @@ -159,7 +159,7 @@ namespace Lib3MF beamSet->SetReferences(references); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } @@ -191,7 +191,7 @@ namespace Lib3MF beamSet->SetBallReferences(ballReferences); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } diff --git a/Tests/CPP_Bindings/Source/BuildItems.cpp b/Tests/CPP_Bindings/Source/BuildItems.cpp index 1b3b9f290..81b8c7ce1 100644 --- a/Tests/CPP_Bindings/Source/BuildItems.cpp +++ b/Tests/CPP_Bindings/Source/BuildItems.cpp @@ -97,7 +97,7 @@ namespace Lib3MF buildItem2->SetUUID(uuidString); ASSERT_TRUE(false) << "Duplicate UUIDs must fail"; } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } } @@ -118,9 +118,7 @@ namespace Lib3MF ASSERT_TRUE(buildItem->HasObjectTransform()); auto newTransformation = buildItem->GetObjectTransform(); - for (int i = 0; i < 4; i++) - for (int j = 0; j < 3; j++) - ASSERT_EQ(transformation.m_Fields[i][j], newTransformation.m_Fields[i][j]); + Lib3MF::helper::CompareTransforms(transformation, newTransformation); } TEST_F(BuildItems, TestItem) diff --git a/Tests/CPP_Bindings/Source/MetaData.cpp b/Tests/CPP_Bindings/Source/MetaData.cpp index 1e132b9e2..b99335ffa 100644 --- a/Tests/CPP_Bindings/Source/MetaData.cpp +++ b/Tests/CPP_Bindings/Source/MetaData.cpp @@ -59,7 +59,7 @@ namespace Lib3MF metaDataGroup->AddMetaData("", "NoStandardName", "TheTitle", "xs:string", true); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } } @@ -117,7 +117,7 @@ namespace Lib3MF metaDataGroup->AddMetaData("", "Title", "TheTitle", "xs:string", true); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } } @@ -129,7 +129,7 @@ namespace Lib3MF md->SetName("INVALIDNAME"); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } } @@ -141,7 +141,7 @@ namespace Lib3MF md->SetNameSpace(""); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } } @@ -152,7 +152,7 @@ namespace Lib3MF auto md = metaDataGroup->AddMetaData("ANameSpace", "", "TheTitle", "xs:string", true); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } @@ -160,7 +160,7 @@ namespace Lib3MF auto md = metaDataGroup->AddMetaData("ANameSpace", "SomeName", "TheTitle", "", true); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } @@ -169,7 +169,7 @@ namespace Lib3MF md->SetName(""); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } @@ -177,7 +177,7 @@ namespace Lib3MF md->SetType(""); ASSERT_FALSE(true); } - catch (ELib3MFException) { + catch (ELib3MFException&) { ASSERT_TRUE(true); } } diff --git a/Tests/CPP_Bindings/Source/Model.cpp b/Tests/CPP_Bindings/Source/Model.cpp index 75768635a..67af619a9 100644 --- a/Tests/CPP_Bindings/Source/Model.cpp +++ b/Tests/CPP_Bindings/Source/Model.cpp @@ -175,4 +175,92 @@ namespace Lib3MF ASSERT_EQ(oldID, newId); } + TEST_F(Model, RemoveResource_MaterialGroup) + { + auto baseMaterial = m_pModel->AddBaseMaterialGroup(); + Lib3MF_uint32 id = baseMaterial->GetResourceID(); + m_pModel->RemoveResource(baseMaterial.get()); + + /// Now the resource should be gone + EXPECT_EQ(m_pModel->GetBaseMaterialGroups()->Count(), 0); + EXPECT_THROW(m_pModel->GetBaseMaterialGroupByID(id), Lib3MF::ELib3MFException); + } + + TEST_F(Model, RemoveResource_MeshObject) + { + auto meshObject = m_pModel->AddMeshObject(); + Lib3MF_uint32 id = meshObject->GetResourceID(); + m_pModel->RemoveResource(meshObject.get()); + + /// Now the resource should be gone + EXPECT_EQ(m_pModel->GetMeshObjects()->Count(), 0); + EXPECT_THROW(m_pModel->GetMeshObjectByID(id), Lib3MF::ELib3MFException); + } + + TEST_F(Model, RemoveResource_ComponentsObject) + { + auto componentsObject = m_pModel->AddComponentsObject(); + Lib3MF_uint32 id = componentsObject->GetResourceID(); + m_pModel->RemoveResource(componentsObject.get()); + + /// Now the resource should be gone + EXPECT_EQ(m_pModel->GetComponentsObjects()->Count(), 0); + EXPECT_THROW(m_pModel->GetComponentsObjectByID(id), Lib3MF::ELib3MFException); + } + + TEST_F(Model, RemoveResource_ColorGroup) + { + auto colorGroup = m_pModel->AddColorGroup(); + Lib3MF_uint32 id = colorGroup->GetResourceID(); + m_pModel->RemoveResource(colorGroup.get()); + + /// Now the resource should be gone + EXPECT_EQ(m_pModel->GetColorGroups()->Count(), 0); + EXPECT_THROW(m_pModel->GetColorGroupByID(id), Lib3MF::ELib3MFException); + } + + TEST_F(Model, RemoveResource_MultiPropertyGroup) + { + auto multiPropertyGroup = m_pModel->AddMultiPropertyGroup(); + Lib3MF_uint32 id = multiPropertyGroup->GetResourceID(); + m_pModel->RemoveResource(multiPropertyGroup.get()); + + /// Now the resource should be gone + EXPECT_EQ(m_pModel->GetMultiPropertyGroups()->Count(), 0); + EXPECT_THROW(m_pModel->GetMultiPropertyGroupByID(id), Lib3MF::ELib3MFException); + + } + + TEST_F(Model, RemoveResource_SliceStack) + { + auto sliceStack = m_pModel->AddSliceStack(0.); + Lib3MF_uint32 id = sliceStack->GetResourceID(); + m_pModel->RemoveResource(sliceStack.get()); + + /// Now the resource should be gone + EXPECT_EQ(m_pModel->GetSliceStacks()->Count(), 0); + EXPECT_THROW(m_pModel->GetSliceStackByID(id), Lib3MF::ELib3MFException); + } + + TEST_F(Model, RemoveResource_LevelSet) + { + auto levelSet = m_pModel->AddLevelSet(); + Lib3MF_uint32 id = levelSet->GetResourceID(); + m_pModel->RemoveResource(levelSet.get()); + + /// Now the resource should be gone + EXPECT_EQ(m_pModel->GetLevelSets()->Count(), 0); + EXPECT_THROW(m_pModel->GetLevelSetByID(id), Lib3MF::ELib3MFException); + } + + TEST_F(Model, RemoveResource_Function) + { + auto function = m_pModel->AddImplicitFunction(); + Lib3MF_uint32 id = function->GetResourceID(); + m_pModel->RemoveResource(function.get()); + + /// Now the resource should be gone + EXPECT_EQ(m_pModel->GetFunctions()->Count(), 0); + EXPECT_THROW(m_pModel->GetResourceByID(id), Lib3MF::ELib3MFException); + } } diff --git a/Tests/CPP_Bindings/Source/Properties.cpp b/Tests/CPP_Bindings/Source/Properties.cpp index 8ff16e45d..8802ddd56 100644 --- a/Tests/CPP_Bindings/Source/Properties.cpp +++ b/Tests/CPP_Bindings/Source/Properties.cpp @@ -115,6 +115,7 @@ namespace Lib3MF TEST_F(Properties, ObjectLevelPropertiesWriteRead) { + using namespace Lib3MF::helper; auto baseMaterialGroup = model->AddBaseMaterialGroup(); auto someMaterial = baseMaterialGroup->AddMaterial("SomeMaterial", wrapper->RGBAToColor(100, 200, 150, 255)); auto anotherMaterial = baseMaterialGroup->AddMaterial("AnotherMaterial", wrapper->RGBAToColor(100, 200, 150, 255)); @@ -163,6 +164,7 @@ namespace Lib3MF // Copy-pasted from the previous test ("ObjectLevelPropertiesWriteRead"), but adds metadata to the mesh TEST_F(Properties, ObjectLevelPropertiesWriteRead_WithMetaData) { + using namespace Lib3MF::helper; auto baseMaterialGroup = model->AddBaseMaterialGroup(); auto someMaterial = baseMaterialGroup->AddMaterial("SomeMaterial", wrapper->RGBAToColor(100, 200, 150, 255)); auto anotherMaterial = baseMaterialGroup->AddMaterial("AnotherMaterial", wrapper->RGBAToColor(100, 200, 150, 255)); @@ -433,6 +435,7 @@ namespace Lib3MF TEST_F(Properties_Color, WriteRead) { + using namespace Lib3MF::helper; auto writer = model->QueryWriter("3mf"); std::vector buffer; writer->WriteToBuffer(buffer); diff --git a/Tests/CPP_Bindings/Source/Reader.cpp b/Tests/CPP_Bindings/Source/Reader.cpp index 867f5927e..f36b23e5a 100644 --- a/Tests/CPP_Bindings/Source/Reader.cpp +++ b/Tests/CPP_Bindings/Source/Reader.cpp @@ -33,6 +33,8 @@ UnitTest_Reader.cpp: Defines Unittests for the Reader classes #include "UnitTest_Utilities.h" #include "lib3mf_implicit.hpp" +#include + namespace Lib3MF { class Reader : public Lib3MFTest { @@ -66,18 +68,9 @@ namespace Lib3MF ASSERT_NO_THROW(model->AddMeshObject()); ASSERT_NO_THROW(model->AddMeshObject()); ASSERT_NO_THROW(model->AddMeshObject()); - std::vector resourceIDs; - std::vector modelResourceIDs; - std::vector expectedModelResourceIDs({2,3,5,6,7}); - std::vector expectedResourceIDs({2,3,4,5,6}); + auto objectIterator = model->GetObjects(); - while (objectIterator->MoveNext()) { - auto object = objectIterator->GetCurrentObject(); - modelResourceIDs.push_back(object->GetModelResourceID()); - resourceIDs.push_back(object->GetResourceID()); - } - ASSERT_EQ(modelResourceIDs, expectedModelResourceIDs); - ASSERT_EQ(resourceIDs, expectedResourceIDs); + EXPECT_EQ(objectIterator->Count(), 5); } TEST_F(Reader, 3MFReadFromFileAndAddComponents) @@ -87,18 +80,9 @@ namespace Lib3MF ASSERT_NO_THROW(model->AddComponentsObject()); ASSERT_NO_THROW(model->AddComponentsObject()); ASSERT_NO_THROW(model->AddComponentsObject()); - std::vector resourceIDs; - std::vector modelResourceIDs; - std::vector expectedModelResourceIDs({2,3,4,5,6,7,8,9}); - std::vector expectedResourceIDs({1,2,3,4,5,6,7,8}); + auto objectIterator = model->GetObjects(); - while (objectIterator->MoveNext()) { - auto object = objectIterator->GetCurrentObject(); - modelResourceIDs.push_back(object->GetModelResourceID()); - resourceIDs.push_back(object->GetResourceID()); - } - ASSERT_EQ(modelResourceIDs, expectedModelResourceIDs); - ASSERT_EQ(resourceIDs, expectedResourceIDs); + EXPECT_EQ(objectIterator->Count(), 8); } TEST_F(Reader, STLReadFromFile) @@ -216,4 +200,4 @@ namespace Lib3MF reader->ReadFromFile(sTestFilesPath + "/Reader/" + "cam_51476_test.3mf"); CheckReaderWarnings(Reader::reader3MF, 0); } -} +} \ No newline at end of file diff --git a/Tests/CPP_Bindings/Source/SliceStack.cpp b/Tests/CPP_Bindings/Source/SliceStack.cpp index b2d265ecc..cc1118949 100644 --- a/Tests/CPP_Bindings/Source/SliceStack.cpp +++ b/Tests/CPP_Bindings/Source/SliceStack.cpp @@ -297,7 +297,7 @@ namespace Lib3MF EXPECT_TRUE(std::fabs(A->GetBottomZ() - B->GetBottomZ()) < 1e-5); EXPECT_TRUE(A->GetOwnPath() == B->GetOwnPath()); ASSERT_EQ(A->GetSliceCount(), B->GetSliceCount()); - for (int i = 0; i < A->GetSliceCount(); i++) { + for (Lib3MF_uint64 i = 0u; i < A->GetSliceCount(); i++) { auto slice = A->GetSlice(i); auto readSlice = B->GetSlice(i); @@ -306,7 +306,7 @@ namespace Lib3MF } ASSERT_EQ(A->GetSliceRefCount(), B->GetSliceRefCount()); - for (int i = 0; i < A->GetSliceRefCount(); i++) { + for (Lib3MF_uint64 i = 0u; i < A->GetSliceRefCount(); i++) { auto sliceRef = A->GetSliceStackReference(i); auto readSliceRef = B->GetSliceStackReference(i); diff --git a/Tests/CPP_Bindings/Source/UnitTest_Utilities.cpp b/Tests/CPP_Bindings/Source/UnitTest_Utilities.cpp index d10906953..0de134d80 100644 --- a/Tests/CPP_Bindings/Source/UnitTest_Utilities.cpp +++ b/Tests/CPP_Bindings/Source/UnitTest_Utilities.cpp @@ -35,7 +35,329 @@ UnitTest_Utilities.cpp: Implementtion of Utilities for UnitTests Lib3MF::PWrapper Lib3MFTest::wrapper; -void fnCreateBox(std::vector &vctVertices, std::vector &vctTriangles) { +namespace Lib3MF +{ + namespace helper + { + bool directoryExists(std::string& path) + { + struct stat info; + if(stat(path.c_str(), &info) != 0) + return false; + else if(info.st_mode & S_IFDIR) + return true; + else + return false; + } + + void comparePorts(Lib3MF::PImplicitPortIterator const& portIterator1, + Lib3MF::PImplicitPortIterator const& portIterator2, + bool ignoreReference) + { + ASSERT_EQ(portIterator1->Count(), portIterator2->Count()); + while(portIterator1->MoveNext()) + { + EXPECT_TRUE(portIterator2->MoveNext()); + + auto port1 = portIterator1->GetCurrent(); + auto port2 = portIterator2->GetCurrent(); + + EXPECT_EQ(port1->GetIdentifier(), port2->GetIdentifier()); + EXPECT_EQ(port1->GetType(), port2->GetType()); + EXPECT_EQ(port1->GetDisplayName(), port2->GetDisplayName()); + if(!ignoreReference) + { + EXPECT_EQ(port1->GetReference(), port2->GetReference()); + } + } + EXPECT_FALSE(portIterator2->MoveNext()); + } + + void compareImplicitFunctions(PImplicitFunction const& function1, + PImplicitFunction const& function2) + { + EXPECT_EQ(function1->GetDisplayName(), function2->GetDisplayName()); + EXPECT_EQ(function1->GetModelResourceID(), + function2->GetModelResourceID()); + + auto nodeIterator1 = function1->GetNodes(); + auto nodeIterator2 = function2->GetNodes(); + ASSERT_EQ(nodeIterator1->Count(), nodeIterator2->Count()); + while(nodeIterator1->MoveNext()) + { + EXPECT_TRUE(nodeIterator2->MoveNext()); + + auto node1 = nodeIterator1->GetCurrent(); + auto node2 = nodeIterator2->GetCurrent(); + + EXPECT_TRUE(node1->AreTypesValid()); + EXPECT_TRUE(node2->AreTypesValid()); + + EXPECT_EQ(node1->GetIdentifier(), node2->GetIdentifier()); + EXPECT_EQ(node1->GetNodeType(), node2->GetNodeType()); + EXPECT_EQ(node1->GetDisplayName(), node2->GetDisplayName()); + + + // if(constantNode1 != nullptr && constantNode2 != nullptr) + if (node1->GetNodeType() == Lib3MF::eImplicitNodeType::Constant) + { + auto constantNode1 = std::dynamic_pointer_cast(node1); + auto constantNode2 = std::dynamic_pointer_cast(node2); + ASSERT_NE(constantNode1, nullptr); + EXPECT_EQ(constantNode1->GetConstant(), constantNode2->GetConstant()); + } + + comparePorts(node1->GetInputs(), node2->GetInputs(), false); + comparePorts(node1->GetOutputs(), node2->GetOutputs(), + true); // ignore reference + } + EXPECT_FALSE(nodeIterator2->MoveNext()); + + auto inputs1 = function1->GetInputs(); + auto inputs2 = function2->GetInputs(); + ASSERT_EQ(inputs1->Count(), inputs2->Count()); + while(inputs1->MoveNext()) + { + EXPECT_TRUE(inputs2->MoveNext()); + EXPECT_EQ(inputs1->GetCurrent()->GetDisplayName(), + inputs2->GetCurrent()->GetDisplayName()); + EXPECT_EQ(inputs1->GetCurrent()->GetIdentifier(), + inputs2->GetCurrent()->GetIdentifier()); + EXPECT_EQ(inputs1->GetCurrent()->GetType(), + inputs2->GetCurrent()->GetType()); + } + EXPECT_FALSE(inputs2->MoveNext()); + + auto outputs1 = function1->GetOutputs(); + auto outputs2 = function2->GetOutputs(); + ASSERT_EQ(outputs1->Count(), outputs2->Count()); + while(outputs1->MoveNext()) + { + EXPECT_TRUE(outputs2->MoveNext()); + EXPECT_EQ(outputs1->GetCurrent()->GetDisplayName(), + outputs2->GetCurrent()->GetDisplayName()); + EXPECT_EQ(outputs1->GetCurrent()->GetIdentifier(), + outputs2->GetCurrent()->GetIdentifier()); + EXPECT_EQ(outputs1->GetCurrent()->GetType(), + outputs2->GetCurrent()->GetType()); + } + EXPECT_FALSE(outputs2->MoveNext()); + } + + void compareFunctionsFromImage3D(Lib3MF::PModel model1, + PFunctionFromImage3D const& function1, + Lib3MF::PModel model2, + PFunctionFromImage3D const& function2) + { + EXPECT_EQ(function1->GetDisplayName(), function2->GetDisplayName()); + EXPECT_EQ(function1->GetModelResourceID(), + function2->GetModelResourceID()); + + EXPECT_EQ(function1->GetFilter(), function2->GetFilter()); + + eTextureTileStyle eTileStyleU1, eTileStyleV1, eTileStyleW1; + eTextureTileStyle eTileStyleU2, eTileStyleV2, eTileStyleW2; + function1->GetTileStyles(eTileStyleU1, eTileStyleV1, eTileStyleW1); + function2->GetTileStyles(eTileStyleU2, eTileStyleV2, eTileStyleW2); + EXPECT_EQ(eTileStyleU1, eTileStyleU2); + EXPECT_EQ(eTileStyleV1, eTileStyleV2); + EXPECT_EQ(eTileStyleW1, eTileStyleW2); + + EXPECT_EQ(function1->GetOffset(), function2->GetOffset()); + EXPECT_EQ(function1->GetScale(), function2->GetScale()); + + CompareImage3Ds(model1, function1->GetImage3D(), model2, function2->GetImage3D()); + } + + void compareFunctions(Lib3MF::PModel model1, PFunction const& function1, + Lib3MF::PModel model2, PFunction const& function2) + { + PImplicitFunction implicitFunction1 = + std::dynamic_pointer_cast(function1); + + PImplicitFunction implicitFunction2 = + std::dynamic_pointer_cast(function2); + + if(implicitFunction1 != nullptr && implicitFunction2 != nullptr) + { + compareImplicitFunctions(implicitFunction1, implicitFunction2); + } + else + { + PFunctionFromImage3D functionFromImage3D1 = + std::dynamic_pointer_cast(function1); + + PFunctionFromImage3D functionFromImage3D2 = + std::dynamic_pointer_cast(function2); + + compareFunctionsFromImage3D(model1, functionFromImage3D1, + model2, functionFromImage3D2); + } + } + + void CompareColors(Lib3MF::sColor c1, Lib3MF::sColor c2) + { + EXPECT_EQ(c1.m_Alpha, c2.m_Alpha); + EXPECT_EQ(c1.m_Red, c2.m_Red); + EXPECT_EQ(c1.m_Green, c2.m_Green); + EXPECT_EQ(c1.m_Blue, c2.m_Blue); + } + + void CompareTransforms(Lib3MF::sTransform t1, Lib3MF::sTransform t2) + { + for(int i = 0; i < 4; i++) + for(int j = 0; j < 3; j++) + ASSERT_EQ(t1.m_Fields[i][j], t2.m_Fields[i][j]); + } + + void CompareFunctionReferences(Lib3MF::PModel modelA, + Lib3MF::PFunctionReference A, + Lib3MF::PModel modelB, + Lib3MF::PFunctionReference B) + { + ASSERT_EQ(A == nullptr, B == nullptr); + if(A != nullptr && B != nullptr) + { + Lib3MF::PResource fieldResourceA = + modelA->GetResourceByID(A->GetFunctionResourceID()); + Lib3MF::PResource fieldResourceB = + modelB->GetResourceByID(B->GetFunctionResourceID()); + + auto functionA = std::dynamic_pointer_cast( + fieldResourceA); + auto functionB = std::dynamic_pointer_cast( + fieldResourceB); + + CompareTransforms(A->GetTransform(), B->GetTransform()); + + ASSERT_EQ(functionA == nullptr, functionB == nullptr); + if(functionA != nullptr && functionB != nullptr) + { + Lib3MF::helper::compareFunctions(modelA, functionA, modelB, functionB); + } + } + } + + void CompareImage3Ds(Lib3MF::PModel modelA, Lib3MF::PImage3D imgA, + Lib3MF::PModel modelB, Lib3MF::PImage3D imbB) + { + ASSERT_EQ(imgA->GetName(), imbB->GetName()); + ASSERT_EQ(imgA->IsImageStack(), imbB->IsImageStack()); + if(imgA->IsImageStack()) + { + Lib3MF::PImageStack stackA = + modelA->GetImageStackByID(imgA->GetUniqueResourceID()); + Lib3MF::PImageStack stackB = + modelB->GetImageStackByID(imbB->GetUniqueResourceID()); + + CompareImageStacks(stackA, stackB); + } + } + + void CompareImageStacks(Lib3MF::PImageStack i1, Lib3MF::PImageStack i2) + { + ASSERT_EQ(i1->GetColumnCount(), i2->GetColumnCount()); + ASSERT_EQ(i1->GetRowCount(), i2->GetRowCount()); + ASSERT_EQ(i1->GetSheetCount(), i2->GetSheetCount()); + for(Lib3MF_uint32 i = 0; i < i1->GetSheetCount(); i++) + { + Lib3MF::PAttachment attachment1 = i1->GetSheet(i); + Lib3MF::PAttachment attachment2 = i2->GetSheet(i); + + ASSERT_EQ(attachment1->GetPath(), attachment2->GetPath()); + ASSERT_EQ(attachment1->GetStreamSize(), + attachment2->GetStreamSize()); + } + } + + void CompareVolumeData(Lib3MF::PModel modelA, Lib3MF::PVolumeData A, + Lib3MF::PModel modelB, Lib3MF::PVolumeData B) + { + ASSERT_EQ(A->GetColor() == nullptr, B->GetColor() == nullptr); + if(A->GetColor()) + { + CompareFunctionReferences(modelA, A->GetColor(), modelB, + B->GetColor()); + } + + ASSERT_EQ(A->GetPropertyCount(), B->GetPropertyCount()); + for(Lib3MF_uint32 i = 0; i < A->GetPropertyCount(); i++) + { + auto propertyA = A->GetProperty(i); + auto propertyB = B->GetProperty(i); + ASSERT_EQ(propertyA->GetName(), propertyB->GetName()); + ASSERT_EQ(propertyA->IsRequired(), propertyB->IsRequired()); + CompareFunctionReferences(modelA, propertyA, modelB, propertyB); + } + // TODO + return; + // ASSERT_EQ(A->GetComposite() == nullptr, B->GetComposite() == + // nullptr); if (A->GetComposite() != nullptr) + //{ + // auto compositeA = A->GetComposite(); + // auto compositeB = B->GetComposite(); + ////CompareBaseMaterialGroups(compositeA->GetBaseMaterialGroup(), + ///compositeB->GetBaseMaterialGroup()); + // ASSERT_EQ(compositeA->GetMaterialMappingCount(), + // compositeB->GetMaterialMappingCount()); for (Lib3MF_uint32 i = 0; + // i < compositeA->GetMaterialMappingCount(); i++) + //{ + // auto materialMappingA = compositeA->GetMaterialMapping(i); + // auto materialMappingB = compositeB->GetMaterialMapping(i); + // CompareScalarFieldReferences(modelA, materialMappingA, modelB, + //materialMappingB); + // } + //} + } + + Lib3MF::sTransform ComputeTransformFromMeshCoordinatesToUVW( + Lib3MF::PMeshObject mesh) + { + // 1. Get the bounding box of the mesh + Lib3MF::sBox box = mesh->GetOutbox(); + + + EXPECT_GT(box.m_MaxCoordinate[0] - box.m_MinCoordinate[0], 0.f); + EXPECT_GT(box.m_MaxCoordinate[1] - box.m_MinCoordinate[1], 0.f); + EXPECT_GT(box.m_MaxCoordinate[2] - box.m_MinCoordinate[2], 0.f); + + // 2. Calculate the transform + Lib3MF::sTransform transform = getIdentityTransform(); + + + // scaling + transform.m_Fields[0][0] = 1.0f / (box.m_MaxCoordinate[0] - + box.m_MinCoordinate[0]); + transform.m_Fields[1][1] = 1.0f / (box.m_MaxCoordinate[1] - + box.m_MinCoordinate[1]); + transform.m_Fields[2][2] = 1.0f / (box.m_MaxCoordinate[2] - + box.m_MinCoordinate[2]); + + // translation + transform.m_Fields[3][0] = -box.m_MinCoordinate[0] * transform.m_Fields[0][0]; + transform.m_Fields[3][1] = -box.m_MinCoordinate[1] * transform.m_Fields[1][1]; + transform.m_Fields[3][2] = -box.m_MinCoordinate[2] * transform.m_Fields[2][2]; + + return transform; + } + + Lib3MF::PLevelSet getFirstLevelSet(Lib3MF::PModel model) + { + auto iterator = model->GetLevelSets(); + if(iterator->MoveNext()) + { + return iterator->GetCurrentLevelSet(); + } + return {}; + } + + + } // namespace helper +} // namespace Lib3MF + +void fnCreateBox(std::vector& vctVertices, + std::vector& vctTriangles) + { float fSizeX = 100.0f; float fSizeY = 100.0f; float fSizeZ = 100.0f; @@ -69,3 +391,64 @@ void fnCreateBox(std::vector &vctVertices, std::vector ReadFileIntoBuffer(std::string sFileName) +{ + // Read the file fully into a memory buffer + std::ifstream file(sFileName, std::ios::binary | std::ios::ate); + std::streamsize size = file.tellg(); + file.seekg(0, std::ios::beg); + // Memory buffer + std::vector buffer(static_cast(size)); + file.read((char*)buffer.data(), size); + return buffer; +} + +void WriteBufferToFile(std::vector const& buffer, std::string sFileName) +{ + std::ofstream file(sFileName, std::ios::binary); + for (Lib3MF_uint8 cByte : buffer) { + file.put(cByte); + } + file.close(); +} + +sLib3MFTransform getIdentityTransform() +{ + sLib3MFTransform t; + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 3; j++) + t.m_Fields[i][j] = 0 + 1.0f * (i == j); + } + return t; +} + + + +sLib3MFPosition fnCreateVertex(float x, float y, float z) +{ + sLib3MFPosition result; + result.m_Coordinates[0] = x; + result.m_Coordinates[1] = y; + result.m_Coordinates[2] = z; + return result; +} + +sLib3MFTriangle fnCreateTriangle(int v0, int v1, int v2) +{ + sLib3MFTriangle result; + result.m_Indices[0] = v0; + result.m_Indices[1] = v1; + result.m_Indices[2] = v2; + return result; +} + +void CheckReaderWarnings(Lib3MF::PReader reader, Lib3MF_uint32 nWarnings) +{ + EXPECT_EQ(reader->GetWarningCount(), nWarnings); + for (Lib3MF_uint32 iWarning = 0; iWarning < reader->GetWarningCount(); iWarning++) + { + Lib3MF_uint32 nErrorCode; + std::string sWarning = reader->GetWarning(iWarning, nErrorCode); + EXPECT_TRUE(true) << iWarning << ": " << nErrorCode << ", " << sWarning; + } +} diff --git a/Tests/CPP_Bindings/Source/Volumetric.cpp b/Tests/CPP_Bindings/Source/Volumetric.cpp new file mode 100644 index 000000000..9c5291ced --- /dev/null +++ b/Tests/CPP_Bindings/Source/Volumetric.cpp @@ -0,0 +1,1897 @@ +/*++ + +Copyright (C) 2019 3MF Consortium + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Abstract: + +Vulometric.cpp: Defines Unittests for the Volumetric extension + +--*/ + +#include "UnitTest_Utilities.h" +#include "lib3mf_implicit.hpp" + +namespace Lib3MF +{ + namespace helper + { + PImplicitFunction createGyroidFunction(CModel& model) + { + PImplicitFunction gyroidFunction = model.AddImplicitFunction(); + + gyroidFunction->SetDisplayName("gyroid"); + + auto functionArgument = gyroidFunction->AddInput( + "pos", "position", Lib3MF::eImplicitPortType::Vector); + + auto decomposePos = gyroidFunction->AddDecomposeVectorNode( + "decomposePos", "decompose pos", "group_a"); + + auto inputPos = gyroidFunction->FindInput("pos"); + auto decomposePosInput = decomposePos->GetInputA(); + gyroidFunction->AddLink(inputPos, decomposePosInput); + + auto composeYZX = gyroidFunction->AddComposeVectorNode( + "composeYZX", "compose yzx", "group_a"); + + auto composeYZXInputX = composeYZX->GetInputX(); + auto decomposePosOutputZ = decomposePos->GetOutputZ(); + gyroidFunction->AddLink(decomposePosOutputZ, composeYZXInputX); + + auto composeYZXInputY = composeYZX->GetInputY(); + auto decomposePosOutputY = decomposePos->GetOutputY(); + gyroidFunction->AddLink(decomposePosOutputY, composeYZXInputY); + + auto composeYZXInputZ = composeYZX->GetInputZ(); + auto decomposePosOutputX = decomposePos->GetOutputX(); + gyroidFunction->AddLink(decomposePosOutputX, composeYZXInputZ); + + // Add the nodes and links for the gyroid + // (dot(sin(pos), cos(composeYZX)) + auto sinNode = gyroidFunction->AddSinNode( + "sin", Lib3MF::eImplicitNodeConfiguration::VectorToVector, + "sinus", "group_a"); + + auto posArg = gyroidFunction->FindInput("pos"); + auto sinInputA = sinNode->GetInputA(); + gyroidFunction->AddLink(posArg, sinInputA); + + auto cosNode = gyroidFunction->AddCosNode( + "cos", Lib3MF::eImplicitNodeConfiguration::VectorToVector, + "cosinus", "group_a"); + + auto cosInputA = cosNode->GetInputA(); + auto composeYZXOutput = composeYZX->GetOutputResult(); + gyroidFunction->AddLink(composeYZXOutput, cosInputA); + + auto dotNode = + gyroidFunction->AddDotNode("dot", "dot product", "group_a"); + + auto sinOutput = sinNode->GetOutputResult(); + auto dotInputA = dotNode->GetInputA(); + gyroidFunction->AddLink(sinOutput, dotInputA); + + auto cosOutput = cosNode->GetOutputResult(); + auto dotInputB = dotNode->GetInputB(); + gyroidFunction->AddLink(cosOutput, dotInputB); + + auto output = gyroidFunction->AddOutput( + "shape", "signed distance to the surface", + Lib3MF::eImplicitPortType::Scalar); + + auto dotOutput = dotNode->GetOutputResult(); + gyroidFunction->AddLink(dotOutput, output); + + return gyroidFunction; + } + + PImplicitNode findNodeByName(PImplicitFunction const& function, + std::string const& name) + { + auto nodes = function->GetNodes(); + while(nodes->MoveNext()) + { + if(nodes->GetCurrent()->GetIdentifier() == name) + { + return nodes->GetCurrent(); + } + } + return PImplicitNode(); + } + + // inputnames have the format "node.input" + std::string extractNodeName(std::string const& inputName) + { + auto pos = inputName.find("."); + if(pos == std::string::npos) + { + return inputName; + } + return inputName.substr(0, pos); + } + + bool isTopologiallySorted(PImplicitFunction const& function) + { + std::vector nodeNames; + + { + auto nodes = function->GetNodes(); + while(nodes->MoveNext()) + { + nodeNames.push_back(nodes->GetCurrent()->GetIdentifier()); + } + } + + auto nodes2 = function->GetNodes(); + while(nodes2->MoveNext()) + { + auto node = nodes2->GetCurrent(); + auto inputs = node->GetInputs(); + while(inputs->MoveNext()) + { + auto input = inputs->GetCurrent(); + auto inputName = input->GetReference(); + auto dependencyNodeName = extractNodeName(inputName); + if(dependencyNodeName == "inputs") + { + continue; + } + auto iter = std::find(nodeNames.begin(), nodeNames.end(), + dependencyNodeName); + if(iter == nodeNames.end()) + { + return false; + } + } + } + return true; + } + + } // namespace helper + + class Volumetric : public ::testing::Test + { + protected: + virtual void SetUp() + { + if(!helper::directoryExists(OutFolder)) + { + ASSERT_TRUE(CreateDir(OutFolder.c_str())) + << L"Could not create folder."; + } + model = wrapper->CreateModel(); + loadPyramid(); + writer3MF = model->QueryWriter("3mf"); + writerSTL = model->QueryWriter("stl"); + } + virtual void TearDown() + { + model.reset(); + writer3MF.reset(); + writerSTL.reset(); + } + + void loadPyramid() + { + model = wrapper->CreateModel(); + auto reader = model->QueryReader("3mf"); + reader->ReadFromFile(InFolder + "Pyramid.3mf"); + } + + PModel model; + PWriter writer3MF; + PWriter writerSTL; + + static std::string InFolder; + static std::string OutFolder; + + static void SetUpTestCase() { wrapper = CWrapper::loadLibrary(); } + static PWrapper wrapper; + + PImageStack SetupSheetsFromFile(); + PMeshObject GetMesh(); + }; + PWrapper Volumetric::wrapper; + std::string Volumetric::InFolder(sTestFilesPath + "/Volumetric/"); + std::string Volumetric::OutFolder(sOutFilesPath + "/Volumetric/"); + + PImageStack Volumetric::SetupSheetsFromFile() + { + PImageStack pImageStack = model->AddImageStack(821, 819, 11); + for(int i = 0; i < 11; i++) + { + std::string sNumber = "_"; + int k = i + 1; + if(k < 10) + { + sNumber = sNumber + "0"; + } + sNumber = sNumber + std::to_string(k); + + pImageStack->CreateSheetFromFile( + i, "/volume/layer" + sNumber + ".png", + InFolder + "img" + sNumber + ".png"); + } + return pImageStack; + } + + PMeshObject Volumetric::GetMesh() + { + auto meshes = model->GetMeshObjects(); + meshes->MoveNext(); + return meshes->GetCurrentMeshObject(); + } + + TEST_F(Volumetric, AddFunction_NumberOfFunctionsIncreases) + { + auto resourceIteratorBefore = model->GetResources(); + EXPECT_EQ(resourceIteratorBefore->Count(), 2); + auto functionIteratorBefore = model->GetFunctions(); + EXPECT_EQ(functionIteratorBefore->Count(), 0); + PImplicitFunction newFunction = model->AddImplicitFunction(); + std::string const displayName = "test"; + newFunction->SetDisplayName(displayName); + + auto resourceIteratorAfter = model->GetResources(); + EXPECT_EQ(resourceIteratorAfter->Count(), 3); + + auto functionIterator = model->GetFunctions(); + ASSERT_EQ(functionIterator->Count(), 1); + + EXPECT_TRUE(functionIterator->MoveNext()); + EXPECT_EQ(functionIterator->GetCurrentFunction()->GetDisplayName(), + displayName); + EXPECT_FALSE(functionIterator->MoveNext()); + } + + TEST_F(Volumetric, AddFunction_AddedFunctionAreWrittenTo3mfFile) + { + PImplicitFunction newFunction = model->AddImplicitFunction(); + std::string const displayName = "test"; + newFunction->SetDisplayName(displayName); + auto const expectedResourceId = newFunction->GetModelResourceID(); + + writer3MF->WriteToFile(Volumetric::OutFolder + "AddFunction.3mf"); + + PModel ioModel = wrapper->CreateModel(); + PReader ioReader = ioModel->QueryReader("3mf"); + ioReader->ReadFromFile(Volumetric::OutFolder + "AddFunction.3mf"); + + auto functionIterator = ioModel->GetFunctions(); + ASSERT_EQ(functionIterator->Count(), 1); + + EXPECT_TRUE(functionIterator->MoveNext()); + EXPECT_EQ(functionIterator->GetCurrentFunction()->GetDisplayName(), + displayName); + EXPECT_EQ(functionIterator->GetCurrentFunction()->GetModelResourceID(), + expectedResourceId); + EXPECT_FALSE(functionIterator->MoveNext()); + } + + // Function with an "addition" node + TEST_F(Volumetric, + AddFunction_AddedFunctionWithAdditionNodeAreWrittenTo3mfFile) + { + PImplicitFunction newFunction = model->AddImplicitFunction(); + std::string const displayName = "test"; + newFunction->SetDisplayName(displayName); + auto const expectedResourceId = newFunction->GetModelResourceID(); + + // Add an addition node + auto node = newFunction->AddAdditionNode( + "addition_1", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, + "addition 1", "group_a"); + + // Check if the node is added + { + auto nodeIterator = newFunction->GetNodes(); + ASSERT_EQ(nodeIterator->Count(), 1); + EXPECT_TRUE(nodeIterator->MoveNext()); + EXPECT_EQ(nodeIterator->GetCurrent()->GetIdentifier(), + node->GetIdentifier()); + } + // Write to file + writer3MF->WriteToFile(Volumetric::OutFolder + + "AddFunctionWithAdditionNode.3mf"); + + // Read from file + PModel ioModel = wrapper->CreateModel(); + PReader ioReader = ioModel->QueryReader("3mf"); + ioReader->ReadFromFile(Volumetric::OutFolder + + "AddFunctionWithAdditionNode.3mf"); + + // Check the function + auto functionIterator = ioModel->GetFunctions(); + ASSERT_EQ(functionIterator->Count(), 1); + + // // Check the addtion node + EXPECT_TRUE(functionIterator->MoveNext()); + EXPECT_EQ(functionIterator->GetCurrentFunction()->GetModelResourceID(), + expectedResourceId); + + PImplicitFunction currentImplicitFunction = + std::dynamic_pointer_cast( + functionIterator->GetCurrentFunction()); + ASSERT_NE(currentImplicitFunction, nullptr); + + auto nodeIterator = currentImplicitFunction->GetNodes(); + ASSERT_EQ(nodeIterator->Count(), 1); + EXPECT_TRUE(nodeIterator->MoveNext()); + EXPECT_EQ(nodeIterator->GetCurrent()->GetNodeType(), + Lib3MF::eImplicitNodeType::Addition); + EXPECT_EQ(nodeIterator->GetCurrent()->GetDisplayName(), "addition 1"); + + EXPECT_FALSE(functionIterator->MoveNext()); + } + + // Function with multiple nodes and links between them + TEST_F(Volumetric, AddFunction_MultipleNodesAndLinksAreWrittenTo3mfFile) + { + PImplicitFunction newFunction = model->AddImplicitFunction(); + std::string const displayName = "test"; + newFunction->SetDisplayName(displayName); + auto const expectedResourceId = newFunction->GetModelResourceID(); + + auto functionArgument = newFunction->AddInput( + "pos", "position", Lib3MF::eImplicitPortType::Vector); + + // Add some nodes + + auto addNode = newFunction->AddAdditionNode( + "addition_1", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, + "addition 1", "group_a"); + auto subNode = newFunction->AddSubtractionNode( + "substraction_1", + Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, + "substraction 1", "group_a"); + auto mulNode = newFunction->AddMultiplicationNode( + "multiplication_1", + Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, + "multiplication 1", "group_a"); + + // Add some links + auto outputResult = addNode->GetOutputResult(); + auto inputA = subNode->GetInputA(); + newFunction->AddLink(outputResult, inputA); + + // Alternative way to add links + mulNode->FindInput("A")->SetReference("addition_1.result"); + + auto output = + newFunction->AddOutput("shape", "signed distance to the surface", + Lib3MF::eImplicitPortType::Scalar); + + auto subNodeOutputResult = subNode->GetOutputResult(); + newFunction->AddLink(subNodeOutputResult, output); + + auto theMesh = GetMesh(); + // auto volumeData = theMesh->VolumeData(); + // auto theBoundary = volumeData->CreateNewBoundary(newFunction.get()); + auto theBoundary = model->AddLevelSet(); + theBoundary->SetMesh(theMesh); + theBoundary->SetFunction(newFunction.get()); + + // Write to file + writer3MF->WriteToFile(Volumetric::OutFolder + + "AddFunctionWithMultipleNodesAndLinks.3mf"); + + // Read from file + PModel ioModel = wrapper->CreateModel(); + PReader ioReader = ioModel->QueryReader("3mf"); + ioReader->ReadFromFile(Volumetric::OutFolder + + "AddFunctionWithMultipleNodesAndLinks.3mf"); + + // Check the function + auto functionIterator = ioModel->GetFunctions(); + ASSERT_EQ(functionIterator->Count(), 1); + + // Check the nodes + EXPECT_TRUE(functionIterator->MoveNext()); + EXPECT_EQ(functionIterator->GetCurrentFunction()->GetModelResourceID(), + expectedResourceId); + + // Compare the functions + helper::compareFunctions(model, newFunction, ioModel, + functionIterator->GetCurrentFunction()); + } + + // Function with constant node + TEST_F(Volumetric, ImplicitSphere) + { + PImplicitFunction newFunction = model->AddImplicitFunction(); + newFunction->SetDisplayName("sphere"); + auto const expectedResourceId = newFunction->GetModelResourceID(); + + auto functionArgument = newFunction->AddInput( + "pos", "position", Lib3MF::eImplicitPortType::Vector); + + // Add some nodes + + + auto constNode = newFunction->AddConstantNode( + "radius", "radius of the spehere", "group_a"); + constNode->SetConstant(20.0); + + auto constVecNode = newFunction->AddConstVecNode( + "vector_1", "translation vector", "group_a"); + constVecNode->SetVector({60.23456, 72.34567, 23.45678}); + + auto subNode = newFunction->AddSubtractionNode( + "translate_1", Lib3MF::eImplicitNodeConfiguration::VectorToVector, + "Translation", "group_a"); + + auto posInput = newFunction->FindInput("pos"); + auto subInputA = subNode->GetInputA(); + newFunction->AddLink(posInput, subInputA); + + auto subInputB = subNode->GetInputB(); + auto constVecOutput = constVecNode->GetOutputVector(); + newFunction->AddLink(constVecOutput, subInputB); + + auto distanceToSpehereNode = newFunction->AddLengthNode( + "distance_1", "distance to sphere", "group_a"); + + newFunction->AddLink(subNode->GetOutputResult().get(), + distanceToSpehereNode->GetInputA().get()); + + // Substract radius from distance + auto subNode2 = newFunction->AddSubtractionNode( + "distance_2", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, + "distance to sphere", "group_a"); + + auto distanceToSphereOutput = distanceToSpehereNode->GetOutputResult(); + auto subNode2InputA = subNode2->GetInputA(); + newFunction->AddLink(distanceToSphereOutput, subNode2InputA); + + + auto radiusOutput = constNode->GetOutputValue(); + auto subNode2InputB = subNode2->GetInputB(); + newFunction->AddLink(radiusOutput, subNode2InputB); + + auto output = + newFunction->AddOutput("shape", "signed distance to the surface", + Lib3MF::eImplicitPortType::Scalar); + output->SetReference("distance_2.result"); + + auto theMesh = GetMesh(); + auto theBoundary = model->AddLevelSet(); + theBoundary->SetMesh(theMesh); + theBoundary->SetFunction(newFunction.get()); + theBoundary->SetFallBackValue(-1.2345); + + // Write to file + writer3MF->WriteToFile(Volumetric::OutFolder + "ImplicitSphere.3mf"); + + // // Read from file + PModel ioModel = wrapper->CreateModel(); + PReader ioReader = ioModel->QueryReader("3mf"); + ioReader->ReadFromFile(Volumetric::OutFolder + "ImplicitSphere.3mf"); + + // // Check the function + auto functionIterator = ioModel->GetFunctions(); + ASSERT_EQ(functionIterator->Count(), 1); + + // Check the nodes + EXPECT_TRUE(functionIterator->MoveNext()); + EXPECT_EQ(functionIterator->GetCurrentFunction()->GetModelResourceID(), + expectedResourceId); + + // Get the first Mesh of ioModel + auto meshesFromWrittenFile = ioModel->GetMeshObjects(); + meshesFromWrittenFile->MoveNext(); + auto meshFromWrittenFile = + meshesFromWrittenFile->GetCurrentMeshObject(); + + // Check the fallback value + auto boundaryFromWrittenFile = helper::getFirstLevelSet(ioModel); + EXPECT_EQ(boundaryFromWrittenFile->GetFallBackValue(), -1.2345); + + // Compare the functions + helper::compareFunctions(model, newFunction, ioModel, + functionIterator->GetCurrentFunction()); + } + + TEST_F(Volumetric, ImplicitGyroid) + { + PImplicitFunction newFunction = helper::createGyroidFunction(*model); + + auto theMesh = GetMesh(); + auto theBoundary = model->AddLevelSet(); + theBoundary->SetFunction(newFunction.get()); + theBoundary->SetMesh(theMesh); + + // write to file + writer3MF->WriteToFile(Volumetric::OutFolder + "ImplicitGyroid.3mf"); + + // read and compare + PModel ioModel = wrapper->CreateModel(); + PReader ioReader = ioModel->QueryReader("3mf"); + ioReader->ReadFromFile(Volumetric::OutFolder + "ImplicitGyroid.3mf"); + + // Check the function + auto functionIterator = ioModel->GetFunctions(); + ASSERT_EQ(functionIterator->Count(), 1); + + // Check the nodes + EXPECT_TRUE(functionIterator->MoveNext()); + + // Compare the functions + helper::compareFunctions(model, newFunction, ioModel, + functionIterator->GetCurrentFunction()); + } + + /** + * @brief Test case for adding an implicit function that references a mesh. + * + * @details + * This test case creates an implicit function that references a mesh and + writes it to a file. + * It then reads the file and compares the created function with the + original one. + * + + */ + TEST_F(Volumetric, AddImplicitFunction_FunctionReferencingAMesh_SameContent) + { + // Create a function + PImplicitFunction newFunction = model->AddImplicitFunction(); + newFunction->SetDisplayName("shell"); + + auto functionArgument = newFunction->AddInput( + "pos", "position", Lib3MF::eImplicitPortType::Vector); + + auto resourceNode = newFunction->AddResourceIdNode( + "meshResource", "mesh resource", "group_shell"); + + auto mesh = GetMesh(); + + resourceNode->SetResource(mesh.get()); + + // Create a mesh node + auto meshNode = newFunction->AddMeshNode("mesh", "mesh", "group_shell"); + + newFunction->AddLinkByNames("meshResource.value", "mesh.mesh"); + newFunction->AddLinkByNames("inputs.pos", "mesh.pos"); + + auto absNode = newFunction->AddAbsNode( + "abs", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, "abs", + "group_shell"); + + newFunction->AddLinkByNames("mesh.distance", "abs.A"); + + auto constScalarNode = newFunction->AddConstantNode( + "thickness", "thickness", "group_shell"); + constScalarNode->SetConstant(2.); + + auto subtractionNode = newFunction->AddSubtractionNode( + "subtraction", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, + "subtraction", "group_shell"); + + newFunction->AddLinkByNames("abs.result", "subtraction.A"); + newFunction->AddLinkByNames("thickness.value", "subtraction.B"); + + auto output = + newFunction->AddOutput("shape", "signed distance to the surface", + Lib3MF::eImplicitPortType::Scalar); + + output->SetReference("subtraction.result"); + + auto theMesh = GetMesh(); + auto theBoundary = model->AddLevelSet(); + theBoundary->SetMesh(theMesh); + theBoundary->SetFunction(std::dynamic_pointer_cast(newFunction)); + + theBoundary->SetMinFeatureSize(0.1); + theBoundary->SetChannelName("shape"); + + // write to file + writer3MF->WriteToFile(Volumetric::OutFolder + "ShellFromMesh.3mf"); + + // read and compare + PModel ioModel = wrapper->CreateModel(); + PReader ioReader = ioModel->QueryReader("3mf"); + ioReader->ReadFromFile(Volumetric::OutFolder + "ShellFromMesh.3mf"); + + // Check the function + auto functionIterator = ioModel->GetFunctions(); + ASSERT_EQ(functionIterator->Count(), 1); + + EXPECT_TRUE(functionIterator->MoveNext()); + + // Compare the functions + helper::compareFunctions(model, newFunction, ioModel, + functionIterator->GetCurrentFunction()); + } + + /** + * @brief Test fixture for the Volumetric class. + * + * This fixture tests the `AddImplicitFunction` method of the `Volumetric` + * class using the Gyroid function and verifies that the resulting content + * is the same as expected. + */ + TEST_F(Volumetric, AddImplicitFunction_GyroidFunction_SameContent) + { + // Create a gyroid function + PImplicitFunction gyroidFunction = helper::createGyroidFunction(*model); + + // Create a new implicit function + PImplicitFunction newFunction = model->AddImplicitFunction(); + newFunction->SetDisplayName("shell"); + + // Add an input to the new function + auto functionArgument = newFunction->AddInput( + "pos", "position", Lib3MF::eImplicitPortType::Vector); + + // Add a resource node to the new function + auto resourceNode = newFunction->AddResourceIdNode( + "meshResource", "mesh resource", "group_shell"); + + // Get the mesh + auto mesh = GetMesh(); + + // Set the resource for the resource node + resourceNode->SetResource(mesh.get()); + + // Create a mesh node + auto meshNode = newFunction->AddMeshNode("mesh", "mesh", "group_shell"); + + auto posInput = newFunction->FindInput("pos"); + auto meshNodeInputPos = meshNode->GetInputPos(); + newFunction->AddLink(posInput, meshNodeInputPos); + + auto resourceNodeOutputValue = resourceNode->GetOutputValue(); + auto meshNodeInputMesh = meshNode->GetInputMesh(); + newFunction->AddLink(resourceNodeOutputValue, meshNodeInputMesh); + + // Add an absolute value node + auto absNode = newFunction->AddAbsNode( + "abs", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, "abs", + "group_shell"); + + auto meshNodeOutputDistance = meshNode->GetOutputDistance(); + auto absNodeInputA = absNode->GetInputA(); + newFunction->AddLink(meshNodeOutputDistance, absNodeInputA); + + // Add a constant scalar node + auto constScalarNode = newFunction->AddConstantNode( + "thickness", "thickness", "group_shell"); + + constScalarNode->SetConstant(2.); + + // Add a subtraction node + auto subtractionNode = newFunction->AddSubtractionNode( + "subtraction", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, + "subtraction", "group_shell"); + + auto absNodeOutputResult = absNode->GetOutputResult(); + auto subtractionNodeInputA = subtractionNode->GetInputA(); + newFunction->AddLink(absNodeOutputResult, subtractionNodeInputA); + + auto constScalarNodeOutputValue = constScalarNode->GetOutputValue(); + auto subtractionNodeOutputResult = subtractionNode->GetOutputResult(); + newFunction->AddLink(constScalarNodeOutputValue, + subtractionNodeOutputResult); + + // Add an output to the new function + auto output = + newFunction->AddOutput("shape", "signed distance to the surface", + Lib3MF::eImplicitPortType::Scalar); + + // Add a function call node for the gyroid function + + auto gyroidNode = newFunction->AddFunctionCallNode("gyroid", "gyroid", + "group_gyroid"); + + // Add a resource node for the gyroid function + + auto funcitionIdNode = newFunction->AddResourceIdNode( + "gyroidID", "function resource", "group_gyroid"); + + funcitionIdNode->SetResource(gyroidFunction.get()); + + auto functionInput = gyroidNode->FindInput("functionID"); + ASSERT_TRUE(functionInput); + + newFunction->AddLinkByNames("gyroidID.value", "gyroid.functionID"); + + // Add inputs and outputs for the gyroid function + auto gyroidPosInput = gyroidNode->AddInput("pos", "position"); + gyroidPosInput->SetType(Lib3MF::eImplicitPortType::Vector); + + auto gyroidShapeOutput = + gyroidNode->AddOutput("shape", "signed distance to the surface"); + gyroidShapeOutput->SetType(Lib3MF::eImplicitPortType::Scalar); + + newFunction->AddLink(posInput, gyroidPosInput); + + // Add a max node + auto maxNode = newFunction->AddMaxNode( + "max", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, + "max - intersection", "group_shell"); + + auto maxNodeInputA = maxNode->GetInputA(); + newFunction->AddLink(gyroidShapeOutput, maxNodeInputA); + + auto maxNodeInputB = maxNode->GetInputB(); + newFunction->AddLink(subtractionNodeOutputResult, maxNodeInputB); + + // Set the output reference + output->SetReference("max.result"); + + // Add a boundary to the volume data + auto theMesh = GetMesh(); + auto theLevelSet = model->AddLevelSet(); + theLevelSet->SetMesh(theMesh); + theLevelSet->SetFunction(newFunction.get()); + theLevelSet->SetMinFeatureSize(0.1); + theLevelSet->SetChannelName("shape"); + + // Write the model to a file + writer3MF->WriteToFile(Volumetric::OutFolder + + "ShellWithGyroidSubfunction.3mf"); + + // Read the model from the file and compare it to the original model + PModel ioModel = wrapper->CreateModel(); + PReader ioReader = ioModel->QueryReader("3mf"); + ioReader->ReadFromFile(Volumetric::OutFolder + + "ShellWithGyroidSubfunction.3mf"); + + // Check the function + auto functionIterator = ioModel->GetFunctions(); + ASSERT_EQ(functionIterator->Count(), 2); + + EXPECT_TRUE(functionIterator->MoveNext()); + + // Compare the functions + helper::compareFunctions(model, gyroidFunction, ioModel, + functionIterator->GetCurrentFunction()); + EXPECT_TRUE(functionIterator->MoveNext()); + helper::compareFunctions(model, newFunction, ioModel, + functionIterator->GetCurrentFunction()); + } + + /** + * @brief Test case for creating and loading a function from an image3D + * color. + * + * @details This test case creates a model and loads a pyramid. It then + * creates a new image stack and sets up a function from the image3D. An + * implicit function is also created and its inputs and outputs are defined. + * A node is added to call the function from the image3D. The inputs and + * outputs of the called function are added manually. The color is set and a + * transformation is applied. The function is then written to a file. The + * file is read and the function is compared to the original function. + */ + TEST_F(Volumetric, CreateAndLoad_FunctionFromImage3dColor_SameContent) + { + // Create model and load pyramid + model = wrapper->CreateModel(); + auto reader = model->QueryReader("3mf"); + reader->ReadFromFile(InFolder + "Cube.3mf"); + + // Create a new image stack + auto pImage3D = SetupSheetsFromFile(); + + auto funcFromImage3d = model->AddFunctionFromImage3D(pImage3D.get()); + ASSERT_TRUE(funcFromImage3d); + funcFromImage3d->SetDisplayName("function from image3d"); + + funcFromImage3d->SetTileStyles(Lib3MF::eTextureTileStyle::Wrap, + Lib3MF::eTextureTileStyle::Clamp, + Lib3MF::eTextureTileStyle::Mirror); + + // Create a new implicit function + auto implicitFunction = model->AddImplicitFunction(); + ASSERT_TRUE(implicitFunction); + implicitFunction->SetDisplayName("implicit function"); + + // Add pos as input + auto posInput = implicitFunction->AddInput( + "pos", "position", Lib3MF::eImplicitPortType::Vector); + ASSERT_TRUE(posInput); + + // Add color as output + auto colorOutput = implicitFunction->AddOutput( + "color", "color", Lib3MF::eImplicitPortType::Vector); + ASSERT_TRUE(colorOutput); + + // Call a node to call the function from image3d + auto functionCallNode = implicitFunction->AddFunctionCallNode( + "functionCall", "functionCall", "group_functionCall"); + + auto functionIdNode = implicitFunction->AddResourceIdNode( + "functionID", "function resource", "group_functionCall"); + + functionIdNode->SetResource(funcFromImage3d.get()); + + auto functionInput = functionCallNode->GetInputFunctionID(); + ASSERT_TRUE(functionInput); + + EXPECT_EQ(functionInput->GetType(), + Lib3MF::eImplicitPortType::ResourceID); + + auto functionIdNodeOutputValue = functionIdNode->GetOutputValue(); + auto functionCallNodeInputFunctionID = + functionCallNode->GetInputFunctionID(); + implicitFunction->AddLink(functionIdNodeOutputValue, + functionCallNodeInputFunctionID); + // Currently you have to add the inputs and outputs of the called + // function manually. We should automate this. + + functionCallNode->AddInput("pos", "position") + ->SetType(Lib3MF::eImplicitPortType::Vector); + + functionCallNode->AddOutput("color", "signed distance to the surface") + ->SetType(Lib3MF::eImplicitPortType::Vector); + + implicitFunction->AddLinkByNames("inputs.pos", "functionCall.pos"); + implicitFunction->AddLinkByNames("functionCall.color", "outputs.color"); + + auto theMesh = GetMesh(); + auto volumeData = model->AddVolumeData(); + auto theColor = volumeData->CreateNewColor(implicitFunction.get()); + + theMesh->SetVolumeData(volumeData); + + // Set transformation + auto transformation = + helper::ComputeTransformFromMeshCoordinatesToUVW(theMesh); + theColor->SetTransform(transformation); + theColor->SetChannelName("color"); + theColor->SetMinFeatureSize(0.1); + + // Write to file + writer3MF = model->QueryWriter("3mf"); + writer3MF->WriteToFile(Volumetric::OutFolder + + "FunctionFromImage3D_Color.3mf"); + + // Read and compare + PModel ioModel = wrapper->CreateModel(); + PReader ioReader = ioModel->QueryReader("3mf"); + ioReader->ReadFromFile(Volumetric::OutFolder + + "FunctionFromImage3D_Color.3mf"); + + + // Assert + // get the first mesh of ioModel + auto meshesFromWrittenFile = ioModel->GetMeshObjects(); + meshesFromWrittenFile->MoveNext(); + auto meshFromWrittenFile = + meshesFromWrittenFile->GetCurrentMeshObject(); + + // Check if volumeData is a volume data + auto volumeDataFromFile = meshFromWrittenFile->GetVolumeData(); + ASSERT_TRUE(volumeDataFromFile); + + // Check if volumeDataFromFile is a volume data + auto volumeDataFromFileAsVolumeData = + std::dynamic_pointer_cast(volumeDataFromFile); + ASSERT_TRUE(volumeDataFromFileAsVolumeData); + + + // Check the function + auto functionIterator = ioModel->GetFunctions(); + ASSERT_EQ(functionIterator->Count(), 2); + + EXPECT_TRUE(functionIterator->MoveNext()); + auto functionFromFile = functionIterator->GetCurrentFunction(); + ASSERT_TRUE(functionFromFile); + + PFunctionFromImage3D funcFromFileAsImage3D = + std::dynamic_pointer_cast(functionFromFile); + + // Compare the functions + helper::compareFunctions(model, funcFromImage3d, ioModel, + functionFromFile); + } + + /** + * @brief Test case to create and load a function from an image3d and add a + * levelset to it. + * @details This test case creates a new image stack and adds a function + * from the image3d to the model. It then adds a levelset to the volume data + * and writes the model to a file. The test then reads the file, compares + * the function and levelset with the original and asserts that they are the + * same. + */ + TEST_F(Volumetric, CreateAndLoad_FunctionFromImage3dAddBoundary_SameContent) + { + model = wrapper->CreateModel(); + auto reader = model->QueryReader("3mf"); + reader->ReadFromFile(InFolder + "Cube.3mf"); + + // Create a new image stack + auto pImage3D = SetupSheetsFromFile(); + + auto funcFromImage3d = model->AddFunctionFromImage3D(pImage3D.get()); + ASSERT_TRUE(funcFromImage3d); + funcFromImage3d->SetDisplayName("function from image3d"); + + auto const funcImg3dId = funcFromImage3d->GetUniqueResourceID(); + funcFromImage3d->SetTileStyles(Lib3MF::eTextureTileStyle::Wrap, + Lib3MF::eTextureTileStyle::Clamp, + Lib3MF::eTextureTileStyle::Mirror); + + // add volume data + auto theMesh = GetMesh(); + auto volumeData = model->AddVolumeData(); + + + // Add boundary + auto boundary = model->AddLevelSet(); + boundary->SetMesh(theMesh); + boundary->SetFunction(funcFromImage3d.get()); + + boundary->SetTransform( + helper::ComputeTransformFromMeshCoordinatesToUVW(theMesh)); + boundary->SetChannelName("red"); + boundary->SetMeshBBoxOnly(true); + + // Write to file + writer3MF = model->QueryWriter("3mf"); + writer3MF->WriteToFile(Volumetric::OutFolder + "levlelset.3mf"); + + // Read and compare + PModel ioModel = wrapper->CreateModel(); + PReader ioReader = ioModel->QueryReader("3mf"); + ioReader->ReadFromFile(Volumetric::OutFolder + "levlelset.3mf"); + + // Check the function + auto functionIterator = ioModel->GetFunctions(); + ASSERT_EQ(functionIterator->Count(), 1); + + EXPECT_TRUE(functionIterator->MoveNext()); + auto functionFromFile = functionIterator->GetCurrentFunction(); + ASSERT_TRUE(functionFromFile); + + PFunctionFromImage3D funcFromFileAsImage3D = + std::dynamic_pointer_cast(functionFromFile); + + // Compare the functions + helper::compareFunctions(model, funcFromImage3d, ioModel, + functionFromFile); + + // Check the boundary + auto boundaryFromFile = helper::getFirstLevelSet(ioModel); + ASSERT_TRUE(boundaryFromFile); + EXPECT_EQ(boundaryFromFile->GetFunction()->GetModelResourceID(), funcImg3dId); + helper::CompareTransforms(boundary->GetTransform(), + boundaryFromFile->GetTransform()); + EXPECT_EQ(boundary->GetChannelName(), + boundaryFromFile->GetChannelName()); + EXPECT_EQ(boundary->GetMeshBBoxOnly(), + boundaryFromFile->GetMeshBBoxOnly()); + } + + /** + * @brief Test case for creating and loading a function from an image3d and + * adding a property with the same content. + * + * @details This test case creates a new model, reads a 3mf file into it, + * creates a new image stack, and adds a function from the image3d to the + * model. It then adds volume data to the mesh, adds a property from the + * function to the volume data, and writes the model to a file. The test + * then reads the file and compares the function and property to the + * original ones. + * + * @note This test requires the Cube.3mf file to be present in the InFolder + * directory and for the OutFolder directory to exist. + */ + TEST_F(Volumetric, CreateAndLoad_FunctionFromImage3dAddProperty_SameContent) + { + model = wrapper->CreateModel(); + auto reader = model->QueryReader("3mf"); + reader->ReadFromFile(InFolder + "Cube.3mf"); + + // Create a new image stack + auto pImage3D = SetupSheetsFromFile(); + + auto funcFromImage3d = model->AddFunctionFromImage3D(pImage3D.get()); + ASSERT_TRUE(funcFromImage3d); + funcFromImage3d->SetDisplayName("function from image3d"); + + auto const funcImg3dId = funcFromImage3d->GetUniqueResourceID(); + funcFromImage3d->SetTileStyles(Lib3MF::eTextureTileStyle::Wrap, + Lib3MF::eTextureTileStyle::Clamp, + Lib3MF::eTextureTileStyle::Mirror); + + // add volume data + auto theMesh = GetMesh(); + auto volumeData = model->AddVolumeData(); + theMesh->SetVolumeData(volumeData); + + // Add property + auto property = + volumeData->AddPropertyFromFunction("Temp", funcFromImage3d.get()); + property->SetTransform( + helper::ComputeTransformFromMeshCoordinatesToUVW(theMesh)); + std::string const ChannelName = "g"; + property->SetChannelName(ChannelName); + + // Write to file + writer3MF = model->QueryWriter("3mf"); + writer3MF->WriteToFile(Volumetric::OutFolder + "Property.3mf"); + + // Read and compare + PModel ioModel = wrapper->CreateModel(); + PReader ioReader = ioModel->QueryReader("3mf"); + ioReader->ReadFromFile(Volumetric::OutFolder + "Property.3mf"); + + // Check the function + auto functionIterator = ioModel->GetFunctions(); + ASSERT_EQ(functionIterator->Count(), 1); + + EXPECT_TRUE(functionIterator->MoveNext()); + auto functionFromFile = functionIterator->GetCurrentFunction(); + ASSERT_TRUE(functionFromFile); + + PFunctionFromImage3D funcFromFileAsImage3D = + std::dynamic_pointer_cast(functionFromFile); + + // Compare the functions + helper::compareFunctions(model, funcFromImage3d, ioModel, + functionFromFile); + + // Check the property + ASSERT_EQ(volumeData->GetPropertyCount(), 1); + auto propertyFromFile = volumeData->GetProperty(0); + ASSERT_TRUE(propertyFromFile); + EXPECT_EQ(propertyFromFile->GetFunctionResourceID(), funcImg3dId); + helper::CompareTransforms(property->GetTransform(), + propertyFromFile->GetTransform()); + EXPECT_EQ(property->GetChannelName(), ChannelName); + EXPECT_EQ(property->GetName(), propertyFromFile->GetName()); + } + + /** + * @brief Test case to verify that the MergeFromModel function merges a + * function from a source model into an empty target model. + * + * @details This test case creates an empty target model and a source model + * with a gyroid function. It then merges the source model into the target + * model and verifies that the gyroid function is present in the target + * model. + */ + TEST_F(Volumetric, MergeModel_FunctionIntoEmptyModel_ResourceIdsAreTheSame) + { + auto const targetModel = wrapper->CreateModel(); + auto const sourceModel = wrapper->CreateModel(); + + auto const gyroidFunction = helper::createGyroidFunction(*sourceModel); + + EXPECT_EQ(targetModel->GetFunctions()->Count(), 0u); + EXPECT_EQ(sourceModel->GetFunctions()->Count(), 1u); + + targetModel->MergeFromModel(sourceModel.get()); + + auto targetFunctionsIter = targetModel->GetFunctions(); + EXPECT_EQ(targetFunctionsIter->Count(), 1u); + + EXPECT_TRUE(targetFunctionsIter->MoveNext()); + auto const targetFunction = targetFunctionsIter->GetCurrentFunction(); + ASSERT_TRUE(targetFunction); + helper::compareFunctions(sourceModel, gyroidFunction, targetModel, + targetFunction); + } + + TEST_F( + Volumetric, + MergeModel_FunctionIntoModelContainingAFunction_ResourceIdsAreUpdated) + { + auto const targetModel = wrapper->CreateModel(); + auto const sourceModel = wrapper->CreateModel(); + + auto const gyroidFunction = helper::createGyroidFunction(*sourceModel); + + auto const targetGyroidFunction = + helper::createGyroidFunction(*targetModel); + + targetModel->MergeFromModel(sourceModel.get()); + + auto targetFunctionsIter = targetModel->GetFunctions(); + EXPECT_EQ(targetFunctionsIter->Count(), 2u); + + EXPECT_TRUE(targetFunctionsIter->MoveNext()); + auto const targetFunction = targetFunctionsIter->GetCurrentFunction(); + ASSERT_TRUE(targetFunction); + EXPECT_EQ(targetFunction->GetModelResourceID(), 1u); + + EXPECT_TRUE(targetFunctionsIter->MoveNext()); + auto const mergedFunction = targetFunctionsIter->GetCurrentFunction(); + ASSERT_TRUE(mergedFunction); + EXPECT_EQ(mergedFunction->GetModelResourceID(), 2u); + + // Save the target model to a file + writer3MF = targetModel->QueryWriter("3mf"); + writer3MF->WriteToFile(Volumetric::OutFolder + "TwoFunctions.3mf"); + } + + TEST_F(Volumetric, AddLink_InvalidTypes_ThrowsException) + { + auto const function = model->AddImplicitFunction(); + + auto const constVector = function->AddConstVecNode( + "constVector", "constVector", "group_constVector"); + + auto const scalarAdd = function->AddAdditionNode( + "scalarAdd", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, + "scalarAdd", "group_scalarAdd"); + + auto const inputA = scalarAdd->GetInputA(); + auto const vectorOutput = constVector->GetOutputVector(); + EXPECT_THROW(function->AddLink(inputA, vectorOutput), ELib3MFException); + } + + /** + * @brief Test case for sorting nodes topologically. The function creates a + * cyclic graph with three nodes and sets up circular dependencies between + * them. The test expects the function to throw an exception when trying to + * sort the nodes topologically. + * + * Graph structure: + * + * +--------+ + * | | + * v | + * +-------+ | + * | add1 | | + * +-------+ | + * ^ | + * | | + * +-----------+ | + * | constVec1 | | + * +-----------+ | + * | | + * v | + * +-------+ | + * | add2 | | + * +-------+ | + * ^ | + * | | + * +--------+ + * + */ + TEST_F(Volumetric, SortNodesTopologically_CyclicGraph_Throws) + { + auto const function = model->AddImplicitFunction(); + + function->AddInput("pos", "position", + Lib3MF::eImplicitPortType::Vector); + // Add nodes with circular dependencies + auto const constVec1 = + function->AddConstVecNode("constVec1", "constVec1", "group1"); + auto const add1 = function->AddAdditionNode( + "add1", Lib3MF::eImplicitNodeConfiguration::VectorToVector, "add1", + "group1"); + auto const add2 = function->AddAdditionNode( + "add2", Lib3MF::eImplicitNodeConfiguration::VectorToVector, "add2", + "group1"); + + // Set up circular dependencies + auto const vectorOutput = constVec1->GetOutputVector(); + auto const inputAdd1A = add1->GetInputA(); + auto const inputAdd1B = add1->GetInputB(); + + auto const inputAdd2A = add2->GetInputA(); + auto const inputAdd2B = add2->GetInputB(); + + auto const outputAdd1 = add1->GetOutputResult(); + auto const outputAdd2 = add2->GetOutputResult(); + function->AddLink(vectorOutput, inputAdd1A); + function->AddLink(outputAdd2, inputAdd1B); + function->AddLink(outputAdd1, inputAdd1A); + function->AddLink(vectorOutput, inputAdd2A); + function->AddLink(outputAdd1, inputAdd2B); + EXPECT_THROW(function->SortNodesTopologically(), ELib3MFException); + } + + TEST_F( + Volumetric, + Volumetric_SortNodesTopologically_ValidGraph_ResultIsTopologialSorted) + { + auto const function = helper::createGyroidFunction(*model); + + auto const nodes = function->GetNodes(); + auto const nodeCount = nodes->Count(); + ASSERT_EQ(nodeCount, 5u); + + function->SortNodesTopologically(); + + auto const sortedNodes = function->GetNodes(); + + auto const sortedNodeCount = sortedNodes->Count(); + + ASSERT_EQ(sortedNodeCount, nodeCount); + + // Check that the nodes are sorted topologically + EXPECT_TRUE(helper::isTopologiallySorted(function)); + } + + + + TEST_F(Volumetric, + Volumetric_Merge_FunctionsFromSourceModelIntoTargetModel_FunctionCountIncreases) + { + auto const targetModel = wrapper->CreateModel(); + auto const sourceModel = wrapper->CreateModel(); + + auto const gyroidFunction = helper::createGyroidFunction(*sourceModel); + + auto const targetGyroidFunction = + helper::createGyroidFunction(*targetModel); + + targetModel->MergeFromModel(sourceModel.get()); + + auto targetFunctionsIter = targetModel->GetFunctions(); + EXPECT_EQ(targetFunctionsIter->Count(), 2u); + } + + + TEST_F(Volumetric, + Volumetric_Merge_FunctionsFromLoadedModelIntoTargetModel_FunctionCountIncreases) + { + // load the source model + auto const sourceModel = wrapper->CreateModel(); + auto const reader = sourceModel->QueryReader("3mf"); + reader->ReadFromFile(InFolder + "SphereInACage.3mf"); + + auto sourceModelFunctionCount = sourceModel->GetFunctions()->Count(); + + auto const targetModel = wrapper->CreateModel(); + + auto const targetGyroidFunction = + helper::createGyroidFunction(*targetModel); + + targetModel->MergeFromModel(sourceModel.get()); + + auto targetFunctionsIter = targetModel->GetFunctions(); + EXPECT_EQ(targetFunctionsIter->Count(), sourceModelFunctionCount + 1); + } + void verifyFunctionResources(std::shared_ptr model) + { + auto functionIter = model->GetFunctions(); + while (functionIter->MoveNext()) + { + auto function = functionIter->GetCurrentFunction(); + ASSERT_TRUE(function); + auto implicitFunction = std::dynamic_pointer_cast(function); + if (implicitFunction) + { + auto res = model->GetResourceByID(implicitFunction->GetUniqueResourceID()); + ASSERT_TRUE(res); + + auto nodeIterator = implicitFunction->GetNodes(); + while (nodeIterator->MoveNext()) + { + auto node = nodeIterator->GetCurrent(); + ASSERT_TRUE(node); + + + if (node->GetNodeType() == Lib3MF::eImplicitNodeType::ConstResourceID) + { + auto resourceIdNode = std::dynamic_pointer_cast(node); + ASSERT_TRUE(resourceIdNode); + auto resource = resourceIdNode->GetResource(); + ASSERT_TRUE(resource); + } + } + } + } + + } + + TEST_F(Volumetric, + Volumetric_Merge_FunctionsFromLoadedModelIntoLoadedTargetModel_FunctionCountIncreases) + { + // load the source model + auto const sourceModel = wrapper->CreateModel(); + auto reader = sourceModel->QueryReader("3mf"); + reader->SetStrictModeActive(true); + reader->ReadFromFile(InFolder + "RadialRadiator.3mf"); + + auto sourceModelFunctionCount = sourceModel->GetFunctions()->Count(); + + auto const targetModel = wrapper->CreateModel(); + auto targetReader = targetModel->QueryReader("3mf"); + targetReader->SetStrictModeActive(true); + + targetReader->ReadFromFile(InFolder + "template.3mf"); + auto previousTargetFunctionCount = targetModel->GetFunctions()->Count(); + + EXPECT_NO_THROW(targetModel->MergeFromModel(sourceModel.get())); + + auto targetFunctionsIter = targetModel->GetFunctions(); + EXPECT_EQ(targetFunctionsIter->Count(), sourceModelFunctionCount + previousTargetFunctionCount); + + verifyFunctionResources(targetModel); + } + + + TEST_F(Volumetric, + Volumetric_Merge_FunctionsFromLoadedModelIntoLoadedTargetModelWithoutFunctions_VaildResourceReferences) + { + // load the source model + auto const sourceModel = wrapper->CreateModel(); + auto reader = sourceModel->QueryReader("3mf"); + reader->SetStrictModeActive(true); + reader->ReadFromFile(InFolder + "template.3mf"); + + auto sourceModelFunctionCount = sourceModel->GetFunctions()->Count(); + auto const targetModel = wrapper->CreateModel(); + auto targetReader = targetModel->QueryReader("3mf"); + targetReader->SetStrictModeActive(true); + + targetReader->ReadFromFile(InFolder + "Cube.3mf"); + auto previousTargetFunctionCount = targetModel->GetFunctions()->Count(); + + EXPECT_NO_THROW(targetModel->MergeFromModel(sourceModel.get())); + + verifyFunctionResources(targetModel); + } + + TEST_F(Volumetric, Volumetric_AddInputsToFunction_InputsAreAdded) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + auto const input = function->AddInput("pos", "position", Lib3MF::eImplicitPortType::Vector); + auto const input2 = function->AddInput("pos2", "position2", Lib3MF::eImplicitPortType::Vector); + auto const input3 = function->AddInput("pos3", "position3", Lib3MF::eImplicitPortType::Vector); + + auto const inputs = function->GetInputs(); + auto const inputCount = inputs->Count(); + ASSERT_EQ(inputCount, 3u); + + inputs->MoveNext(); + auto const inputPort = inputs->GetCurrent(); + ASSERT_TRUE(inputPort); + EXPECT_EQ(inputPort->GetIdentifier(), "pos"); + EXPECT_EQ(inputPort->GetDisplayName(), "position"); + EXPECT_EQ(inputPort->GetType(), Lib3MF::eImplicitPortType::Vector); + + + inputs->MoveNext(); + auto const inputPort2 = inputs->GetCurrent(); + ASSERT_TRUE(inputPort2); + EXPECT_EQ(inputPort2->GetIdentifier(), "pos2"); + EXPECT_EQ(inputPort2->GetDisplayName(), "position2"); + EXPECT_EQ(inputPort2->GetType(), Lib3MF::eImplicitPortType::Vector); + + inputs->MoveNext(); + auto const inputPort3 = inputs->GetCurrent(); + ASSERT_TRUE(inputPort3); + EXPECT_EQ(inputPort3->GetIdentifier(), "pos3"); + EXPECT_EQ(inputPort3->GetDisplayName(), "position3"); + EXPECT_EQ(inputPort3->GetType(), Lib3MF::eImplicitPortType::Vector); + + } + + TEST_F(Volumetric, Volumetric_RemoveFunctionInputs_InputsAreRemoved) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + auto const input = function->AddInput("pos", "position", Lib3MF::eImplicitPortType::Vector); + auto const input2 = function->AddInput("pos2", "position2", Lib3MF::eImplicitPortType::Vector); + auto const input3 = function->AddInput("pos3", "position3", Lib3MF::eImplicitPortType::Vector); + + auto const inputs = function->GetInputs(); + auto const inputCount = inputs->Count(); + ASSERT_EQ(inputCount, 3u); + + function->RemoveInput(input2); + + auto const inputsAfterRemoval = function->GetInputs(); + auto const inputCountAfterRemoval = inputsAfterRemoval->Count(); + ASSERT_EQ(inputCountAfterRemoval, 2u); + + inputsAfterRemoval->MoveNext(); + auto const inputPort = inputsAfterRemoval->GetCurrent(); + ASSERT_TRUE(inputPort); + EXPECT_EQ(inputPort->GetIdentifier(), "pos"); + EXPECT_EQ(inputPort->GetDisplayName(), "position"); + EXPECT_EQ(inputPort->GetType(), Lib3MF::eImplicitPortType::Vector); + + inputsAfterRemoval->MoveNext(); + auto const inputPort3 = inputsAfterRemoval->GetCurrent(); + ASSERT_TRUE(inputPort3); + EXPECT_EQ(inputPort3->GetIdentifier(), "pos3"); + EXPECT_EQ(inputPort3->GetDisplayName(), "position3"); + EXPECT_EQ(inputPort3->GetType(), Lib3MF::eImplicitPortType::Vector); + } + + TEST_F(Volumetric, Volumetric_AddOutputToFunction_OutputIsAdded) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + auto const output = function->AddOutput("shape", "signed distance to the surface", Lib3MF::eImplicitPortType::Scalar); + + auto const outputs = function->GetOutputs(); + auto const outputCount = outputs->Count(); + ASSERT_EQ(outputCount, 1u); + + outputs->MoveNext(); + auto const outputPort = outputs->GetCurrent(); + ASSERT_TRUE(outputPort); + EXPECT_EQ(outputPort->GetIdentifier(), "shape"); + EXPECT_EQ(outputPort->GetDisplayName(), "signed distance to the surface"); + EXPECT_EQ(outputPort->GetType(), Lib3MF::eImplicitPortType::Scalar); + } + + TEST_F(Volumetric, Volumetric_RemoveFunctionOutput_OutputIsRemoved) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + auto const output = function->AddOutput("shape", "signed distance to the surface", Lib3MF::eImplicitPortType::Scalar); + auto const output2 = function->AddOutput("shape2", "signed distance to the surface2", Lib3MF::eImplicitPortType::Scalar); + auto const output3 = function->AddOutput("shape3", "signed distance to the surface3", Lib3MF::eImplicitPortType::Scalar); + + auto const outputs = function->GetOutputs(); + auto const outputCount = outputs->Count(); + ASSERT_EQ(outputCount, 3u); + + function->RemoveOutput(output2); + + auto const outputsAfterRemoval = function->GetOutputs(); + auto const outputCountAfterRemoval = outputsAfterRemoval->Count(); + ASSERT_EQ(outputCountAfterRemoval, 2u); + + outputsAfterRemoval->MoveNext(); + auto const outputPort = outputsAfterRemoval->GetCurrent(); + ASSERT_TRUE(outputPort); + EXPECT_EQ(outputPort->GetIdentifier(), "shape"); + EXPECT_EQ(outputPort->GetDisplayName(), "signed distance to the surface"); + EXPECT_EQ(outputPort->GetType(), Lib3MF::eImplicitPortType::Scalar); + + outputsAfterRemoval->MoveNext(); + auto const outputPort3 = outputsAfterRemoval->GetCurrent(); + ASSERT_TRUE(outputPort3); + EXPECT_EQ(outputPort3->GetIdentifier(), "shape3"); + EXPECT_EQ(outputPort3->GetDisplayName(), "signed distance to the surface3"); + EXPECT_EQ(outputPort3->GetType(), Lib3MF::eImplicitPortType::Scalar); + } + + TEST_F(Volumetric, Volumetric_AddSinNodeToFunction_NodeIsAdded) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + + // add a scalar x input to the function + + auto const input = function->AddInput("x", "x", Lib3MF::eImplicitPortType::Scalar); + auto const output = function->AddOutput("result", "result", Lib3MF::eImplicitPortType::Scalar); + + auto const sinNode = function->AddSinNode("sin", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, "sinus", "group_a"); + + auto const sinInput = sinNode->GetInputA(); + auto const sinOutput = sinNode->GetOutputResult(); + + function->AddLink(input, sinInput); + + auto const nodes = function->GetNodes(); + auto const nodeCount = nodes->Count(); + ASSERT_EQ(nodeCount, 1u); + + nodes->MoveNext(); + auto const node = nodes->GetCurrent(); + ASSERT_TRUE(node); + EXPECT_EQ(node->GetNodeType(), Lib3MF::eImplicitNodeType::Sinus); + EXPECT_EQ(node->GetIdentifier(), "sin"); + EXPECT_EQ(node->GetDisplayName(), "sinus"); + EXPECT_EQ(node->GetTag(), "group_a"); + } + + TEST_F(Volumetric, Volumetric_AddCosNodeToFunction_NodeIsAdded) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + + // add a scalar x input to the function + + auto const input = function->AddInput("x", "x", Lib3MF::eImplicitPortType::Scalar); + auto const output = function->AddOutput("result", "result", Lib3MF::eImplicitPortType::Scalar); + + auto const cosNode = function->AddCosNode("cos", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, "cosinus", "group_a"); + + auto const cosInput = cosNode->GetInputA(); + auto const cosOutput = cosNode->GetOutputResult(); + + function->AddLink(input, cosInput); + + auto const nodes = function->GetNodes(); + auto const nodeCount = nodes->Count(); + ASSERT_EQ(nodeCount, 1u); + + nodes->MoveNext(); + auto const node = nodes->GetCurrent(); + ASSERT_TRUE(node); + EXPECT_EQ(node->GetNodeType(), Lib3MF::eImplicitNodeType::Cosinus); + EXPECT_EQ(node->GetIdentifier(), "cos"); + EXPECT_EQ(node->GetDisplayName(), "cosinus"); + EXPECT_EQ(node->GetTag(), "group_a"); + } + + TEST_F(Volumetric, Volumetric_AddTanNodeToFunction_NodeIsAdded) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + + // add a scalar x input to the function + + auto const input = function->AddInput("x", "x", Lib3MF::eImplicitPortType::Scalar); + auto const output = function->AddOutput("result", "result", Lib3MF::eImplicitPortType::Scalar); + + auto const tanNode = function->AddTanNode("tan", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, "tangens", "group_a"); + + auto const tanInput = tanNode->GetInputA(); + auto const tanOutput = tanNode->GetOutputResult(); + + function->AddLink(input, tanInput); + + auto const nodes = function->GetNodes(); + auto const nodeCount = nodes->Count(); + ASSERT_EQ(nodeCount, 1u); + + nodes->MoveNext(); + auto const node = nodes->GetCurrent(); + ASSERT_TRUE(node); + EXPECT_EQ(node->GetNodeType(), Lib3MF::eImplicitNodeType::Tan); + EXPECT_EQ(node->GetIdentifier(), "tan"); + EXPECT_EQ(node->GetDisplayName(), "tangens"); + EXPECT_EQ(node->GetTag(), "group_a"); + } + + TEST_F(Volumetric, Volumetric_AddSinhNodeToFunction_NodeIsAdded) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + + // add a scalar x input to the function + + auto const input = function->AddInput("x", "x", Lib3MF::eImplicitPortType::Scalar); + auto const output = function->AddOutput("result", "result", Lib3MF::eImplicitPortType::Scalar); + + auto const sinhNode = function->AddSinhNode("sinh", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, "sinus hyperbolicus", "group_a"); + + auto const sinhInput = sinhNode->GetInputA(); + auto const sinhOutput = sinhNode->GetOutputResult(); + + function->AddLink(input, sinhInput); + + auto const nodes = function->GetNodes(); + auto const nodeCount = nodes->Count(); + ASSERT_EQ(nodeCount, 1u); + + nodes->MoveNext(); + auto const node = nodes->GetCurrent(); + ASSERT_TRUE(node); + EXPECT_EQ(node->GetNodeType(), Lib3MF::eImplicitNodeType::Sinh); + EXPECT_EQ(node->GetIdentifier(), "sinh"); + EXPECT_EQ(node->GetDisplayName(), "sinus hyperbolicus"); + EXPECT_EQ(node->GetTag(), "group_a"); + } + + TEST_F(Volumetric, Volumetric_AddCoshNodeToFunction_NodeIsAdded) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + + // add a scalar x input to the function + + auto const input = function->AddInput("x", "x", Lib3MF::eImplicitPortType::Scalar); + auto const output = function->AddOutput("result", "result", Lib3MF::eImplicitPortType::Scalar); + + auto const coshNode = function->AddCoshNode("cosh", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, "cosinus hyperbolicus", "group_a"); + + auto const coshInput = coshNode->GetInputA(); + auto const coshOutput = coshNode->GetOutputResult(); + + function->AddLink(input, coshInput); + + auto const nodes = function->GetNodes(); + auto const nodeCount = nodes->Count(); + ASSERT_EQ(nodeCount, 1u); + + nodes->MoveNext(); + auto const node = nodes->GetCurrent(); + ASSERT_TRUE(node); + EXPECT_EQ(node->GetNodeType(), Lib3MF::eImplicitNodeType::Cosh); + EXPECT_EQ(node->GetIdentifier(), "cosh"); + EXPECT_EQ(node->GetDisplayName(), "cosinus hyperbolicus"); + EXPECT_EQ(node->GetTag(), "group_a"); + } + + TEST_F(Volumetric, Volumetric_AddTanhNodeToFunction_NodeIsAdded) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + + // add a scalar x input to the function + + auto const input = function->AddInput("x", "x", Lib3MF::eImplicitPortType::Scalar); + auto const output = function->AddOutput("result", "result", Lib3MF::eImplicitPortType::Scalar); + + auto const tanhNode = function->AddTanhNode("tanh", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, "tangens hyperbolicus", "group_a"); + + auto const tanhInput = tanhNode->GetInputA(); + auto const tanhOutput = tanhNode->GetOutputResult(); + + function->AddLink(input, tanhInput); + + auto const nodes = function->GetNodes(); + auto const nodeCount = nodes->Count(); + ASSERT_EQ(nodeCount, 1u); + + nodes->MoveNext(); + auto const node = nodes->GetCurrent(); + ASSERT_TRUE(node); + EXPECT_EQ(node->GetNodeType(), Lib3MF::eImplicitNodeType::Tanh); + EXPECT_EQ(node->GetIdentifier(), "tanh"); + EXPECT_EQ(node->GetDisplayName(), "tangens hyperbolicus"); + EXPECT_EQ(node->GetTag(), "group_a"); + } + + TEST_F(Volumetric, Volumetric_AddExpNodeToFunction_NodeIsAdded) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + + // add a scalar x input to the function + + auto const input = function->AddInput("x", "x", Lib3MF::eImplicitPortType::Scalar); + auto const output = function->AddOutput("result", "result", Lib3MF::eImplicitPortType::Scalar); + + auto const expNode = function->AddExpNode("exp", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, "exponential", "group_a"); + + auto const expInput = expNode->GetInputA(); + auto const expOutput = expNode->GetOutputResult(); + + function->AddLink(input, expInput); + + auto const nodes = function->GetNodes(); + auto const nodeCount = nodes->Count(); + ASSERT_EQ(nodeCount, 1u); + + nodes->MoveNext(); + auto const node = nodes->GetCurrent(); + ASSERT_TRUE(node); + EXPECT_EQ(node->GetNodeType(), Lib3MF::eImplicitNodeType::Exp); + EXPECT_EQ(node->GetIdentifier(), "exp"); + EXPECT_EQ(node->GetDisplayName(), "exponential"); + EXPECT_EQ(node->GetTag(), "group_a"); + } + + TEST_F(Volumetric, Volumetric_AddLogNodeToFunction_NodeIsAdded) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + + // add a scalar x input to the function + + auto const input = function->AddInput("x", "x", Lib3MF::eImplicitPortType::Scalar); + auto const output = function->AddOutput("result", "result", Lib3MF::eImplicitPortType::Scalar); + + auto const logNode = function->AddLogNode("log", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, "logarithm", "group_a"); + + auto const logInput = logNode->GetInputA(); + auto const logOutput = logNode->GetOutputResult(); + + function->AddLink(input, logInput); + + auto const nodes = function->GetNodes(); + auto const nodeCount = nodes->Count(); + ASSERT_EQ(nodeCount, 1u); + + nodes->MoveNext(); + auto const node = nodes->GetCurrent(); + ASSERT_TRUE(node); + EXPECT_EQ(node->GetNodeType(), Lib3MF::eImplicitNodeType::Log); + EXPECT_EQ(node->GetIdentifier(), "log"); + EXPECT_EQ(node->GetDisplayName(), "logarithm"); + EXPECT_EQ(node->GetTag(), "group_a"); + } + + TEST_F(Volumetric, Volumetric_AddAbsNodeToFunction_NodeIsAdded) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + + // add a scalar x input to the function + + auto const input = function->AddInput("x", "x", Lib3MF::eImplicitPortType::Scalar); + auto const output = function->AddOutput("result", "result", Lib3MF::eImplicitPortType::Scalar); + + auto const absNode = function->AddAbsNode("abs", Lib3MF::eImplicitNodeConfiguration::ScalarToScalar, "absolute value", "group_a"); + + auto const absInput = absNode->GetInputA(); + auto const absOutput = absNode->GetOutputResult(); + + function->AddLink(input, absInput); + + auto const nodes = function->GetNodes(); + auto const nodeCount = nodes->Count(); + ASSERT_EQ(nodeCount, 1u); + + nodes->MoveNext(); + auto const node = nodes->GetCurrent(); + ASSERT_TRUE(node); + EXPECT_EQ(node->GetNodeType(), Lib3MF::eImplicitNodeType::Abs); + EXPECT_EQ(node->GetIdentifier(), "abs"); + EXPECT_EQ(node->GetDisplayName(), "absolute value"); + EXPECT_EQ(node->GetTag(), "group_a"); + } + + TEST_F(Volumetric, Volumetric_AddComposeMatrixNode_NodeIsAdded) + { + //create a new model + auto const model = wrapper->CreateModel(); + + auto const function = model->AddImplicitFunction(); + + // add a vector input to the function + + auto const input = function->AddInput("v", "vector", Lib3MF::eImplicitPortType::Vector); + auto const output = function->AddOutput("result", "result", Lib3MF::eImplicitPortType::Matrix); + + auto const composeMatrixNode = function->AddComposeMatrixNode("composeMatrix", "compose matrix", "group_a"); + + auto const m00Node = function->AddConstantNode("m00", "m00", "group_a"); + m00Node->SetConstant(1.0f); + auto const m01Node = function->AddConstantNode("m01", "m01", "group_a"); + m01Node->SetConstant(0.0f); + auto const m02Node = function->AddConstantNode("m02", "m02", "group_a"); + m02Node->SetConstant(0.0f); + auto const m03Node = function->AddConstantNode("m03", "m03", "group_a"); + m03Node->SetConstant(0.0f); + + auto const m10Node = function->AddConstantNode("m10", "m10", "group_a"); + m10Node->SetConstant(0.0f); + auto const m11Node = function->AddConstantNode("m11", "m11", "group_a"); + m11Node->SetConstant(1.0f); + auto const m12Node = function->AddConstantNode("m12", "m12", "group_a"); + m12Node->SetConstant(0.0f); + auto const m13Node = function->AddConstantNode("m13", "m13", "group_a"); + m13Node->SetConstant(0.0f); + + auto const m20Node = function->AddConstantNode("m20", "m20", "group_a"); + m20Node->SetConstant(0.0f); + auto const m21Node = function->AddConstantNode("m21", "m21", "group_a"); + m21Node->SetConstant(0.0f); + auto const m22Node = function->AddConstantNode("m22", "m22", "group_a"); + m22Node->SetConstant(1.0f); + auto const m23Node = function->AddConstantNode("m23", "m23", "group_a"); + m23Node->SetConstant(0.0f); + + auto const m30Node = function->AddConstantNode("m30", "m30", "group_a"); + m30Node->SetConstant(0.0f); + auto const m31Node = function->AddConstantNode("m31", "m31", "group_a"); + m31Node->SetConstant(0.0f); + auto const m32Node = function->AddConstantNode("m32", "m32", "group_a"); + m32Node->SetConstant(0.0f); + auto const m33Node = function->AddConstantNode("m33", "m33", "group_a"); + m33Node->SetConstant(1.0f); + + auto const m00NodeOutput = m00Node->GetOutputValue(); + auto const m01NodeOutput = m01Node->GetOutputValue(); + auto const m02NodeOutput = m02Node->GetOutputValue(); + auto const m03NodeOutput = m03Node->GetOutputValue(); + auto const m10NodeOutput = m10Node->GetOutputValue(); + auto const m11NodeOutput = m11Node->GetOutputValue(); + auto const m12NodeOutput = m12Node->GetOutputValue(); + auto const m13NodeOutput = m13Node->GetOutputValue(); + auto const m20NodeOutput = m20Node->GetOutputValue(); + auto const m21NodeOutput = m21Node->GetOutputValue(); + auto const m22NodeOutput = m22Node->GetOutputValue(); + auto const m23NodeOutput = m23Node->GetOutputValue(); + auto const m30NodeOutput = m30Node->GetOutputValue(); + auto const m31NodeOutput = m31Node->GetOutputValue(); + auto const m32NodeOutput = m32Node->GetOutputValue(); + auto const m33NodeOutput = m33Node->GetOutputValue(); + + auto const composeMatrixInputM00 = composeMatrixNode->GetInputM00(); + auto const composeMatrixInputM01 = composeMatrixNode->GetInputM01(); + auto const composeMatrixInputM02 = composeMatrixNode->GetInputM02(); + auto const composeMatrixInputM03 = composeMatrixNode->GetInputM03(); + + auto const composeMatrixInputM10 = composeMatrixNode->GetInputM10(); + auto const composeMatrixInputM11 = composeMatrixNode->GetInputM11(); + auto const composeMatrixInputM12 = composeMatrixNode->GetInputM12(); + auto const composeMatrixInputM13 = composeMatrixNode->GetInputM13(); + + auto const composeMatrixInputM20 = composeMatrixNode->GetInputM20(); + auto const composeMatrixInputM21 = composeMatrixNode->GetInputM21(); + auto const composeMatrixInputM22 = composeMatrixNode->GetInputM22(); + auto const composeMatrixInputM23 = composeMatrixNode->GetInputM23(); + + auto const composeMatrixInputM30 = composeMatrixNode->GetInputM30(); + auto const composeMatrixInputM31 = composeMatrixNode->GetInputM31(); + auto const composeMatrixInputM32 = composeMatrixNode->GetInputM32(); + auto const composeMatrixInputM33 = composeMatrixNode->GetInputM33(); + + function->AddLink(m00NodeOutput, composeMatrixInputM00); + function->AddLink(m01NodeOutput, composeMatrixInputM01); + function->AddLink(m02NodeOutput, composeMatrixInputM02); + function->AddLink(m03NodeOutput, composeMatrixInputM03); + + function->AddLink(m10NodeOutput, composeMatrixInputM10); + function->AddLink(m11NodeOutput, composeMatrixInputM11); + function->AddLink(m12NodeOutput, composeMatrixInputM12); + function->AddLink(m13NodeOutput, composeMatrixInputM13); + + function->AddLink(m20NodeOutput, composeMatrixInputM20); + function->AddLink(m21NodeOutput, composeMatrixInputM21); + function->AddLink(m22NodeOutput, composeMatrixInputM22); + function->AddLink(m23NodeOutput, composeMatrixInputM23); + + function->AddLink(m30NodeOutput, composeMatrixInputM30); + function->AddLink(m31NodeOutput, composeMatrixInputM31); + function->AddLink(m32NodeOutput, composeMatrixInputM32); + function->AddLink(m33NodeOutput, composeMatrixInputM33); + + auto const composeMatrixOutput = composeMatrixNode->GetOutputResult(); + + function->AddLink(composeMatrixOutput, output); + + auto const nodes = function->GetNodes(); + auto const nodeCount = nodes->Count(); + ASSERT_EQ(nodeCount, 17u); + + nodes->MoveNext(); + auto const node = nodes->GetCurrent(); + ASSERT_TRUE(node); + EXPECT_EQ(node->GetNodeType(), Lib3MF::eImplicitNodeType::ComposeMatrix); + EXPECT_EQ(node->GetIdentifier(), "composeMatrix"); + EXPECT_EQ(node->GetDisplayName(), "compose matrix"); + EXPECT_EQ(node->GetTag(), "group_a"); + } + + + +} // namespace Lib3MF diff --git a/Tests/CPP_Bindings/Source/Volumetric.test.cpp b/Tests/CPP_Bindings/Source/Volumetric.test.cpp new file mode 100644 index 000000000..e69de29bb diff --git a/Tests/CPP_Bindings/Source/v093.cpp b/Tests/CPP_Bindings/Source/v093.cpp index eedf1f0f6..3e79c1a89 100644 --- a/Tests/CPP_Bindings/Source/v093.cpp +++ b/Tests/CPP_Bindings/Source/v093.cpp @@ -86,6 +86,7 @@ namespace Lib3MF TEST_F(ReaderV093, 3MFReadFromFile_Material) { + using namespace Lib3MF::helper; reader->ReadFromFile(sTestFilesPath + "/v093/" + "Material_093.3mf"); CheckReaderWarnings(reader, 1); diff --git a/Tests/TestFiles/Models/WithSomeResources.3mf b/Tests/TestFiles/Models/WithSomeResources.3mf index 7e215b032a4dd939b9040aae5b7e12151db2497e..857dda08028c92f71c8e15fe5b4f35e0ee1b12e4 100644 GIT binary patch delta 3103 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 aR=j}qs@Ju6z{{On84o@zgE|KW(EbCx8ytoJ diff --git a/Tests/TestFiles/Reader/PyramidVolume.3mf b/Tests/TestFiles/Reader/PyramidVolume.3mf new file mode 100644 index 0000000000000000000000000000000000000000..34c52ab935bd5977c427d8fffb24c837366ab6a4 GIT binary patch literal 3028 zcmb7G2{@GbA0NXokt;_d*V^b1Lo+OmTuY%`2}_fhn3*t+7`Nm|l>Bq#E=eS_DU}*Z zZdqwIky)ltZWC%OIa~YAXc!y+XZQC!@B4k<=l#y-^F4mw&u^>`bMuIUm@6n+){6D; z?ZypQq_LXyHwP$)FSgElyL)vx8u&802?P>Zc0js$`M6;TaMt~reeM5p)J1g3HcMO; z_!<~gB=(C<$s2SbN#5m><2xF!lu>HLnZ)rV0=b)zZCWeWQ_09-bnXk^&o8H9Ye7iT zH2o0@R&H)Z%sIq324OboMFh`$`Qd!}WKHCtZOn;}r{$Z(MvH5XD#DJ`YYBVV zyX*_f9C4IN&)j_RIdn(JW>F}vnJCE9e{~b77`$gVw_j5x?F0E<4WuhUryfe^gbfW_ z<8v97xkm)Y&CAT<@U&}L**aOjRjTVOC5T2Wt1Y8T?-w){N%8FX@3%K0g( z{Q(}V-&Xd>d^dE*mjpS%oy7W7`7c*I5HD@eNe$6dgPEy6>0|ZIkkxj^LOi2(SGM^{Ql5C*DoPaIhUN$j zV|ZH-4PMmP0y9bu$t&oBLTk}$k2}C-%&$=+n zr;=oda(upQjnMsuQ2b+8SlJKzn z?bUZX17h#g2E9QMzxwRJEe_11YcMmZZQ+X;dAkRC zCWB{a!Z-WQ#c3ZjL0AbnFUTIm?`{_QVCXHjdpP3gl>;QV-S*r_|Gy0Hc;9mI zOhp_RH819Av5~yo^(1xroYUI~Oo&^gb#I_UKqW3T`g~)WZF@uFVXlR}o#hr(hW&u? z2f7?ubzl1d1UR6qQB1nV{}|bzoVG`zdtk)yYa;Iezu>G*82Mq4+T$6Wu(M?0^03>A zS{oON52!$(4fkQ-`6fc%ZiMb~^B83$#rPuxKM6Zz9&4=xiI}i}iPc2YV3;Z77Et)J636%nB*| z;(k=ZxFA57EZG;Y$8pn#PwO%}!~LGm`0 zG*%^V4`@tySJ~Z7b*>hD;G#ZsP{^2JS4`mjjLJ{|PZkI?d-i$K?cNNT%;d@aN_WhP zO3@YJBNxE8Hk^aX0MX)RLAExrlEK2+T0~oUayHKO7Bc78fRNT zx8OL3(_xVL7+R0<_3%`IepUNN9o~epX4ip>FID$k87x@H<`vPBMZe%LMV)Qzb9M57 z95)18#`r#tPXqQd7g!&((IKq}ar7z{hdzE8DM*`5VIic62z}gLK$Wjpwen6$zq-?uN_I)0FAT}8@k9M9F z<=_OC)m+ZPw(&Ps7Mq4S3$&4_uz{Ib%&r2jN)ji9@3+`*2rg5x?Q-n@hGG|FC3Y4C zOU2fsU}y8+DIESm!4kgzN5Q6A?ZA5K$XTd(fMOl3T#qCHy<94`T_yRx&Ae;cd=rqJ zW!2%tO^RN|n_p~Zb(#IXin|>AT5aMCzG($_!@bEKfK_k^Qv(5!697pAo8%_*gaiEz Dil#H4 literal 0 HcmV?d00001 diff --git a/Tests/TestFiles/Volumetric/ColorMapRGB2D/img_01.png b/Tests/TestFiles/Volumetric/ColorMapRGB2D/img_01.png new file mode 100644 index 0000000000000000000000000000000000000000..bd8d7c78a30eeb49cc08291d8af9002ed4583087 GIT binary patch literal 443924 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 z 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%0DI#T47(A||^_ZkjbS#XPZ$)5)Z>{degW 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�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 literal 0 HcmV?d00001 diff --git a/Tests/TestFiles/Volumetric/Pyramid.3mf b/Tests/TestFiles/Volumetric/Pyramid.3mf new file mode 100644 index 0000000000000000000000000000000000000000..65efdb4c3275ef0038d33f5d1c01e695c9eb278b GIT binary patch literal 1730 zcmWIWW@gc4U|`??Vg`n-;+D7nLxBK;2!pYUzHv%!eoAVN9++fg5Mc0uC}nue1lGbZ zb=vv9*#-i~&ab>u?(j}B=kt7yUDLIK@~5tQ~nOufsBg1>zE`+9mzsgoHW%Xa5Rzhhsj zd)VtHb@9$ywewxuIwQIFB77}LZzBxz+;}4m-fuZ#w@^^cuISh{GuEKe%U8UlR!%&- zGk->`-?n$3-)An6{r2i$sz`H=Y4$pA-=pt-vw!}wOIX=F;rJv?yYMS_Qj-=lMz`&s zoVT!V$IBTHa%OxvHe*S;h|2wnvUaIV6Kl_f&s&9kUd+^c|Khx?zG^V9@v>*ZiW9hc z=HJyY57~5x*E&l4nxx#_e+wf|HT?A#kXahL?&*czS*H)~dt0>idFfM=Qp2 zyXb9tQZTEFwX@*s8@sb%Z>BN+eC1%%+sR(U8FO+w)6(hF>&>n{I>77br2jFK!Cj0) z>ZqLOVUCcRCYO2hmlRqE*F6%v?|*Pdugin#$VnHT1ShQIYFe=B!08N;LuY?fw64Aq zeRoPs%nbhn)qmxiwGS87Jg&@JkiX@4+E&izg3nvUIPTPZJm^=!GWqND-qw?$kM62o zlw$s_%l5@N!XVkfzU83Zt*Z@n9L%C(%vI89kJnFgi8jnuOz2jfZ79uuBk5$?nPbe` zA~s2G{@9>9t)}Pcj~cIOr)MXZ?z>?*@AibfPc7@NzyDOUM!GOlRq?UtQ`O=~l?B|c znJ*7<6l>24t(*DNQRV3!^G~-to}Q`9P2Z@Vb@kjj+q}#m&l#;-y0otIUp~W|?008P z&(7JuJSTN2q;8pX;l4?B`>M+yioIoxYS;NsKX>U&bNZ|M)Fl`2huq%J_TjC4 z07@p|>Xzz-WfEavCW&^=&nrpID~S)OEJ!Vm)vL(O0p*iv(ERZel1&)q23_5ZA-*21xsB`Iq$7$th>1n}oZtsss{z_pE z`=qD8gu!Itwi{tZ3)HG7wNIb@`qNuuCn1}jm6K!xYr?c<^6l}f>}a@?>Ga;T@aA@{ ztj`Oh1HQX{T;b!uw4_Ik?_^H+Q%)&c3!(MO<vu|JHO}sA6C@RlY1ki z4hubQVCcmcrREgt>w!p6sPQmDf@=#j)KdG;avd@dXgSZd&-upgyVsgJOujujy7~*N z)2_bdy{u%P13%$xl)SJln%yrX&KVkD>Qv}T3XvDUZZ4$ay1mhsi)wAk3p zpibjLiCU3ADT`YaRqI`PsuUI{J+p}{vl8#|s%ewkd&&H&@Vien{SRj|`o#WCaQ*z{ z3%luJKD}LfskbC`q8GopqdE840nwS!Q)Y;Fzl)mXV50S9ib_J|zmA)?cWn{c!K8mA zRq&rr(o>*^8JTn$aFwbuP@gpbX;465ma!5TWh_(+1G>qmNfF&-tO-*BBVnpCLySi^ z95trU4M&ML35>ySG8-x!^76IO@U>-A2 L7f3xQ^cWZbuwu$C literal 0 HcmV?d00001 diff --git a/Tests/TestFiles/Volumetric/RadialRadiator.3mf b/Tests/TestFiles/Volumetric/RadialRadiator.3mf new file mode 100644 index 0000000000000000000000000000000000000000..4572a8d00f68f1d3d2fe4d9d04fdb30c5dc5030e GIT binary patch literal 99199 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

q)o5c0`r!7sBNW*OB|JT|B~F%QByXH| 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 literal 0 HcmV?d00001 diff --git a/Tests/TestFiles/Volumetric/img_02.png b/Tests/TestFiles/Volumetric/img_02.png new file mode 100644 index 0000000000000000000000000000000000000000..17e00125d56ec96c0bae9d729c7619b5e65c246b GIT binary patch literal 58101 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 literal 0 HcmV?d00001 diff --git a/Tests/TestFiles/Volumetric/img_03.png b/Tests/TestFiles/Volumetric/img_03.png new file mode 100644 index 0000000000000000000000000000000000000000..e07ba384500a7967a82c83dceed9d0c4ad601a4c GIT binary patch literal 81805 zcmXteWmr`0_ccg&$AHq^Far{T!~jFXP%?B4jkHR4qjWb64bmW?pmWn5JH44 zp^GzmWeL@f3+Z zzh&t@pk7j%aY=-ZWpvBm2kh=mb@l~Xa1P%%to#Nbsgw#NyIN~P6;HKN1IET6*R{yY893J(xYWU#s43igc7388 znM?mqg}2d$_lU=FtH&9@9i(zA$_Q9UNkhDH`_txg)RI59uwpms=dr%)7i-2?y&xn! z?@ua=z+V{3s6iPhvke3FO3hiKxY~a9evet2C}&i?sB;%g^`1LHWacvci)S)KjHrJq z_TA8D$JYH4Bf}o&4gluT{Gv21Sa3mNqH zCh+;z*badZl)FC_Dw_+f!o7689v>{-1~Z1%bIfaNRE|>Cl%uf!sk3Rtg9(*V9W5T!rRn_DWl`#cZ3Kyf>WZ_>f^iuO!tbOXPl zGs91~U(oGVzA?+DU0tM-h8I;C|NkMzJrpXm6De)cQ)e53KT9uZ`>XUn{mQiow^H>pTES2h1YSOrfsahEvf)qX2R9`Dx$0_R!o~9 zQKW7LLXL}ur@~m`IUr1GT#$ZvzLfc1-ltIgUzp>%=D&vey<=7ss@p_iTF+uHqjFKo zbA}Aei51EFUy zQ!|U?UlPgXB08i#2QB%K-jut@zH-nC%O?q*wsxtMgfA*pyfVKL2D#LUJGWSz40s30 zuYbMz^Sqp4r|W%Pvl z;d@_tPy1!5JW|~m3*mVz-_*PHWUKvZbm!)rQbojCG^#-;!H~t#1e(u&7Nt%12x^99 zUn(O#XOB@St1;Sh`bs>#y?UHd-d^xPz%lA#RqnJ}HK^H8&Y$`0c@WP?- zqF?rQ!e>naVzss$P}{{&xzO5Nps3YdJ?xYF;Fw#7x>?brR6}m`nXx5(iw!J;#QEg~ zwuG>Lb&;1WMPFv3-Z`;<~^x8xv(r z%O^6hHKeOZb{IiB#n?xkTADOx@e;pLpWI>;hahKE{}BhY6i`nQRU`E(4vCn7y!Nr> z&A6rbzAoY~c4^9fkWBnK>RO6j8#uefcg`XUyjW2$J6h_SL2WMBIM(D8%uGr$PvxX*@lU<$x zHQ_2#b|}U#s;Q)-XPO>7*iNaYXfNevW5v(

m?Iw)meuV`5G`wuk545Oz~5%`)c1 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 Apa1{> literal 0 HcmV?d00001 diff --git a/Tests/TestFiles/Volumetric/img_04.png b/Tests/TestFiles/Volumetric/img_04.png new file mode 100644 index 0000000000000000000000000000000000000000..1fc59df14cd9dea84cf8e44dcd01a457e1144299 GIT binary patch literal 88998 zcmXt9Ra~1-u%(4kph%G7#oZ-9uwud8ixm$EQXGmDx8M#5?oK5@p-8b(+}+)!IJC&+ zfA8-;d@tY2?9S|-Idf(fuBD-fheL^jhK7cxtOV9ULqivO`UJ6_Km7sBRF$Hk(V;1W zW%NG2Kg@A*yWofoPy2q{U`K|^n=_J-T0F8y^oZ|{Jkro;)xX9J1CVF2b}rri{rPxL zdwO~K0{7$nK=VA)f-vFZjFgS*IO#!%Fw2q~#4)jZR>UzVXZ1_cGfG1HW6Y*!D*+4s z7QQkm3--y0aAxNQwXZw6@cmrUDouzm^?eq|rZVP@cCtsF95Xfr7* zaHMKJ8#(jW7|m!cA5C30hx`$QfR4_CT`(2)MSh|q)@TAa(@*)SabBP}#|G%#1U`x0 z6Z@CiW7XBi#IrOo)#_UcK2v;mRP{&Gk<~C{K80;a9{9}q)DjDPQ{M!yJ6ezdo<46T zEF6-~=(+9{+R# z%077>Xs%v-8|f*&TVCZD;)GVqUqDl>;K=9Lrc&H!(@Qjt>!c8_80+mU5j6fGTWNqE z8Pr}%hb$v0^hs(wzbZS}tZtg@cco&uJ99Xy#1|l*T#OX7I#+15Mz8*5qY!HxMm|qJ zyrODz(tJaXAAXm?V5h0yFha|Ii%OsMvh@nru%ZffIIPG0YRplgphox7Ua|bUa@kQ_ zGaH^vrn7Wx=T5-_J+g>e;~qX4mN7EOk>GbY9C6J&cMJ#+#gi;hAES*jT*whd7a?o; zmnoS=C+MG0B=Ua}RsEJKV;7Id z+pKh6p^1pzBJHg(=l482%GCxvnCMx_dNDzia!@?%t<1fL{wFhUTaC+{Xc5@E*P*?!^OsRF zM^?Uz@>k6<-pw(HY?Th0020b54o{EZ>yc&qrEZ3S4P&9_-`4aDnsF!N>6`>vggY^V z<2`idCpU&Y7`PwB=A8iC1x$aKNu<`P#mB>RMvjx7*%2Fiar!AWwUKts>B9s+GTyY! zBvMf3WAP`Ng|QOW{x-AuNp#xuN<+2Ef`Io_PD?)i;OD4`Zp4o$?m!x2VWun_BRq55 zx0&qu+t<5?krQG}hhb--%tsQU@S8_s zQz2~Efo!g56yKX4rOmPaPtpHRnyj^Uy&v7M$Zu(r*Sz9~o0ibIXqelg7}jL5g^>R# zITI0fFeUOCfzUDwT4(;V_~Ow2T?ThQuBhXM1z6B_!?9-}kL8t=6J?xJa*cqeAjsXX zMFhbQZ0Ex4#G9JoDOH4nNUS(i(FO+YAtQSAqoj-t&l-C^(9;{JGEe=H z#|x&Efjy51jO}cY0bt^>sbpQ~P!b_tGdp9dN%c{w;&mSc8263LA zeqUdBC|khHn`h7=HaYCe>Zn(<=l*RUBjaQ%h9^S~M6;w@zjHe&zjH04@=A~U5C^r^ z6wOPM9T;8njDG*>YnF}a+_edVoEI^u*>e8SO~85@^Ne2BgUQsqncTT~6_>iutgTzo zBs!r*=SM;2Eo$2K!g49i;^3E%y@RC|j4Vg*RVZbO262Y-auMA)tl=3hCdGx;{BnEjWzn zELULx?Z2)1k1E0hhsAyeSXn$T-0R=$T36@7^LVXqRa-mp1#~or?`?TREeb-V*q0h~ zQp~e-ZTQak%DQa(DtLq_gf&o+-0{rD0Nxx~nPT(*k<0#>(MzYA^vtloetzrweZuSv zo+r`M8qTT};*u~}nx0SYdOXG0YM3U3Zw2jT(0dhkfI3(J4kR1vj`3=y9Lq-YQ0fQ7 z@=H+|hHi3&mJQe-UD0V~e?@j8zE_r&3@vI9=C?b%G{O*VH^Ukm;OR*N6us@f^@HQO zkx|%}m~z5J{I^Eh>b%y<+zGzgx^VZ{qmu0frE7R|dg%8)Sd+K&`La2EV!)I46D^z* zK>uQcXD74F>EDe&B(9V|&$wLSPU8Y*pO~^sCLmK$o^^s*@wAw*A6!cgE}2 zTR%rh8xPJ`2Uo<*KN|wHu=$2Kz*-_h$5)!PJVkJ+-usC})C$ z{)}1|teO;bPyNz9*kj&_eW>PFDye2M^N83Hh&B?cDQbWBE%#U8=X?svG>Mo_1Y_2Y z$Nz;wlT~onl1vVg%}PB^FVG-|I`ZB!elx%MD#!VXaDm*^+IY(d4`i2OPp@^LR@Tur zS_PZYncoK^iOYhaRvN=vU_l_xSYZXPb8Y%S(;|U>YF@1lup%921&QN+Te3QMkfy;4AFkG&h7nQOl-&m-yfZb^W*AOo=J<0tj>cCI73e*%%9sE z>LM5Zb%N)YrCS+WP{aC9co+>GtEEkn{a2Vb8NZ0WyTjhEDMu3iC5*Hk(aeinW@$$p z{b3LY?MCATUeG~3c&TjYz5cdFZp9^acSfvVxZZzYo^= z+Y9;bBUS89v=!P1-cB<->cyfm@p5&8E4$gTP`L|By}I|IJaNZNNQoE@q(n1ob`6uD z>&r{1Kr?sxX*v-wy|Hx^y{^u?_bE026P%gtZ}ZIgUf|u?d=JXE7h$cYN-#^zbDyQ?@sOKA#12^$M16Mc2$anBDwiT8geQ7}q_f*mKn@?Qh09CTL+Hdp zsESSbN~F-BL*u=`u!uOEJJLbdC~mF5EFS6bT3)-wP)3SgEegOBifO{+1qc4|mg+*8@!Q6xOl-&RMfb%LG`j z5LkjyRi%u^Y6fNW7SZI2bSJKg*)c_UM}Rvaq6POs zNmosK!)`@)wGjltACvc$a9)iey*V>D73are5;6IZT@8oTz#8RwBf-3`QB}qZ8F>ck z@;5Tb+VXb)=;Yhfbmd|=c{Sbo71S^oJYPODRx1ZITO&bA9>vLeYz+ah3+6GDo zK1n(Bo>wN-=aueQ71HHniU;K>zb3(0_thaEAZjiG^Hs#55@uVxFklRK51oJ!SqdFC_*`oG9s}Vrodxm&8dPd;Ad0 zq`MYFhC>+&T|%X>;|j~N`QO2F-1a3aab$8U9~g%W&WYocPNv zRfrD=gF>6a#(%_%9~~<&kB3CD;B!}K&rQxIKtnY|U*lP@98liFQ^X$OcD^M6-+x46 zt%J?Qbv>m(f}!T=!stO;^3bWn`en~xhq9MAGYeQajU+oKiZ*B^vT6o6InD;%!mnq> zt1-U=hKW#PRrAbD?3f`kLmtn^pO9wg>Bzn<_h%TQu)u<229)dS18H8WQN@9_a6P?U zpQ~kfz4*DVITG2QdAH0-w9cpBaXTYf^>2bUn_XWta-tWP=QS4Rs6~Dp;2G`uUF&~! z-b))N-l!1{?yh=3Ra%$TC=Nn9zo(I50u~t=YJY)v`w?=d%j!0pD4N-u`}XtQxZLShJZvH=N5%LXXqUQ**0@|to012+oj*DYgkl!Q z0mhEkvs=MlpV&HVzQjD*6KBS7)ML)LReRBDh3?gjhkA86B!$yAbK)SKdu*Ld z!SR2*z{8lMuEjh22lUL&$>Bk!1#O1zfI4KBgdaVuZeWLr@TJ2trXSyr$j?qGyngam z+QvOjEJ+Z8Q5l9Ybfs)h9!20AWozC-*m|=GLiQh@JWX*w?m3)i<9SW9J!W5cF}?w9 zNScITvA7Q)TT~G7hb5p2W`o&LxDr&q_5rVRLRGCSvQUlG?frh1*h=-{j*Anh>Qq@M zzMUMEv8X2S*xUR)F(cx7bKkv zD(4LTCNsv#ajeA2b==P_VggbPOQe76S4=_7TE@KTX`XHlN#r9X$HF-StSN^boQ_hm zI5@{W%KnQ~nh?B=ecxp-f+3VQ-VJXms9O)@(}1hOUL}YtvWy?cLFL|qH|lx970!3v z&1DW+Nb^`P_rtu{r*1S{ARvnCP6VnmvTIJV4_DaEvDc2w?VRZFSPNRO+I>!+skD4< zm$sqw&Q@zt&Yz*ma(8ZsFE|NuvpAv1O!)ExSo&O|%#1i6rXvV=AkYiYku z7#767bY&!4EHV`D3HqqV zK+D_F<`wtuYpJaCRgrp_@1rADEkD6EMYTd(DdsI4wWnUDUIMI|0G1d@F#QE|+T~1t zj62hgD&>66M(DUNxz(cetmQ!KP~cPT$JLn4zDZg60z9>}AFAOEKNQ;$it;js>%${U zy}0jH9Hk{h5)(2k%$slY)x{)IEd^>~u2;Nq{%CDQP+20Uo(I!+ke!!A2@bt;Rw0(z ztNWF@?Y-ZYO6v7-%&2TnDg-L`P!~jR8=F&>O-QO&YrQKiTw`L%_NZ0r85o&T+})Sw zIPaIcE!-*R9V$qG8cdvAZ|ygw$y0&!cBps z{S`#{%rbGaR2RuVVs6D4q6t$af@#VF^`C)tF+V!t)F?`lS89k?EH$#|5Em z4nvR&SVZBghZ$u)KP#|B^z~tWv?N~H?w~#kYy>=jd`E}RhAyrbNk+) zLf}_+#q2+7DqT6oQ7m%Au)Hv+0XdRkb21z%N%=r&q`5GnwesiOiP7hqKQFz!hA_J8 zTe4xI_6tP_D>`&-_#J!CRP773(%R+6!=WVu%!F^%nAe@b%0e`g-}dTi2>^VlrOD9* z`c@u0I>zKHMM#k>=*49%Pn58jRSqj-vhN=&rSsM zR7cU;U=tD>bUu@|kYO}s5>v~I%0>u{BvNeH8R8B=zc(Mg{#WGvptgWyv(<61wJXnh zCF3Me0?+p_4)a{DhjdAlgcHF6Ht*rUfk!N`?i3tK==Q@9$En(C=a(jtkn>&oD9*7{ zJdawg{Hj_8VN2nq3*=jpoRkbmH4)KBc3oi8Q;it-5_{DYWBEK1}g7(k*?Gq#k9 zIyhl2lEy2Ypc7|6_kUnBQbGBq4z*ZT8(0&=?xR>D9zTHp34HkOKp01|@`_zxq9N!g zAmvQ3&y-7b|J%uv!Q$Ikt)v3!a@{qq4mC)&{azKvVvPBe$pMejwvKF}6)BC!H_mpO zPWeZJ)V^YJvg-$AP*$awBnlWDi6RYGDf!cOcCHA9 z1NvWfAl&2JT+*vL>j~%uNe8eDpYlOZY)NmP(@v&)V}zd?3V9%gVc)20_{Y)Jkb!nv z7da9*EUqlP5RNiWRw*8fVj)Z=Bo0Hsx zv^u6n%2_2~!(&}$-mE$bBj9778{N~oJ_8XQRokD98jBIOm^r-|Tv;79CE3>_I*sWN zp+U6`Y3|XAnqiN5Ton_9(m%O6IS({R>WK{5B5=fYS$Ss82FGQX@P>_U+WcRUc7(fU zp;>X&-TVMCWHi(?&ejDhzVUhltkEbOI`v$+-XvuHoSi#eDJIv`IG{6%rQfp*yKfQ~ zY+YZ^Xr-%u_);{D=WL&ni{4AC3#?vWyD8D`-&N}{xVvdor2!Ij3y3!8MAVa+zp#VX z%{?Kb>}wm!T^R-IIRO^V%N0$RmM*Y;4K>wa)Grnu51Pqi71)N9m`fFSK2Z~QG^&9| zm1H+(omC)Q0Y6c)d2`UXgzByF8@WO|u@VJm_b7L~6+>Wsk7ZgfwN_{<%NKDIcea{?B6JM~^{iT6ey{6_Cmvm{O6a73 zGt>lB$|xRHYH&#V0Ma^){ge(R*%)k;jF6g}EUw#{+nwn|xW72!xj6Hm0t$q_BCtXv zawh&^)crd6vgX@W%-w^aW$qCJ1HXZIJscnzfN|sLsgv zRbkz`=Uk~uDA`Y9g|3CS@B=F-PK`dz2IW`Azt9p^;tzW1y)=Dhk;1w$X$>|XBY=_a z%c6pC*5{f%-43aaW9{x1KB|&)Xub15Bfh4F%VdG9x;>_}Y^SA_V6|HHPjbc$KPf!5GBR}pa(0vsCS#ioq41V>@HFX@*QtzR+HqjxQAsz!^@B=o9Jj;nxBead;74mR{> z?)~TbhKX}%T*M@KQKOudWCO9&Wy^6&PaGbgbX0lQ8T`jAk%SywXkqLt+ntAT{5V)b zA|w@}hcHRq7!71px9tF!JwePf*6(1T0d-tbS+-**JCzGf0n(BOvy=+DZjnMJ@1XR9 zL4mufi6vhfih3?wm4?s~bm!VMTAl<=@&6NiiWAj^&LCnVo zik$0teN2qseiY?%@BLL$o_w8hlqmxWuw3;R2@j9G&VeYJV9Ub7M)k|fJ1U>6BE;W(M*CK zHa`EBc33v|z7pEhST)?llaWMW&qGb0RD~p&ux1BgPyMrdWrX*GHO0PJZiT9pZS$85 zwdEbvQ)n-trxOkE?*GeH_iq4k#0k(EUky5KDWCJlHjJ8wG-W`x4&Nw?=$zI z4E7C5oIXZ>H^;IYb1U07u!$ghZAFQh%+oE<`@aY}{2{Z^!0pIJ|+qhaONpH63zKen4+ zE&?*4Gk$M%SR34CYT)IUh}rSix_y~Mfimv39gNyL){5#Y{<5ai4oR}k$p61u^s9$LO0)Z7Mi-v!)G5H<05ntZ@H1h zRm)Av0w~|!IoQ=a_n0CLM{0(m_+T#vezgHa1&FODPdKU+Fp?>Z4FPF99Rg=wpyK(R zWvN%fmW}pga)zCv9)zl4nq?F`#|khMF^nEeJamfzewFPu9#tCkR0QV8GRl{XKBxP~ zYQWjV@!LmD+4$%xLiY`?Hh&!zF@c?vyV)57E#;{Ku4@0Y8EZE`qmxN8qz{WDhaXBc{l~8w8LCg{7taOw< z{T0#oJ@X0!DAW4$O+r>tzrY{C^Q{(>$IO2KE~!j+~7z;AH2?+DLHS(wXj-8=*)g zm8o@MaGEr-V=Yt`OkayCeNh3*_U~_!2=`*FpJ-H@{Dmy}yUwv!0(oCYLZYkV(5um) zy5PsQ<0O7&lM*Qi;RyS{nZ9*o4x-8w&XR@fK3pSUy;d~wwk;*(JxxD<8hz}%xfJe6 z$1qcNrGFE+*;KX>EOr5$=Pd%3F~$^TgOTq)TZFC-t4pl-y3m_3mfaJWhfJlnou{K~vGr z3)prnta~5QI@NrhBoiB!4^;!bxI!5P?-Yv2yz@B2cTV6H=c9XdZ&vr!?KGp!7p zCMQl!7e7AKEEbKLKBFCZSI9Je@qKQ$d^VLJ5?cKI^ET`YDBO!PDdkF;K|5b(q10IZ z$lX*Gi=R0bX#hTp4HndQ5^tnEVd&F&S>3RC>mnRI*nKdQeST@9z=LK-A;1|2W*h%c zkM#0;;uu_29lwDvQH;s_6y?;0gt3A;Kq0(ZsknlVX?_yc6P(c(_V(aVwobhXNX=KG zDf+rzQU_fAB5=BeahM*tc_pS!F<_@Ymhi2G4Oc+rYvf(3#IxZZ=}di^FjNAAph@DO zQZ&O5lNCGiG?3hZBm7;>ApkJD;6_p|`r*z4x#Evmvc#7J5#xWaH~~`s_SRU#)JXDNUQvH2*-vbuj0B^}l~r4vFQ?gW&IQGg*< zD_jYTf>E~X_#8Hjb#pu`jk8h>=TZs_*CSHpPJZ`P))8Xi=%Pq6z!8TQ&qxNgYdUb~nx=UXdt#ALi#(L{Tf#*8D zKfh_@tLCJ%f0roP;KWE*V$>kdpXXR$SnD-IdbGtuM6qT6RY}+>qL=+qDHvODd)vw} zOgJT~q$REi55oB%bE;e)XRXwO>-93!ZX8zW!ZTFKU+D&~Q!*al5Fv)CSmythW^sg) z4)yv8h4)WT*7TVsuNvtU?bCaS;Kc$P+Fz%Gg zh62i*?Q|xDF5q@;2KewI!>{snry@G)SR+TmlrUu}w?xc~e8-IAU1z;u|z>cBahOSsnWznvm=c z?JG=P(dyg~^G6Y9oBmpf0k!_BU+N2jxsTVhGm@`UL8(E7ea;R12`Gu?jK zZptChKefIkD%dR&pc2~6$kw9(MVZB)j-dSf3U;m)+9=P=?m{UuwTm3J%(MJj%QnXk zA;T_2aA51=@sF{fnX$Sg%w+dHE+i>#O3e5aP|tKr2U?TahWx@l@@~=b0;XhqEE2Ps zpws`nzm%DW#OK?b3RRoE!fhZR+ekdF729SU@}s&<8!|9}n0p&;0lDv61D;#4qNrm@V-vNRzo) zwRd7Mr7z@Ky={l2^s4!O;q<0)!;WJU#qniV6!T=F&xQ72O3_|oB)_22vg z=jkO{2bXE+%RAghFks4xCekotDmyy(2wvD*V7@0M=%5Z?%AizsqqtJPSNiJZz8E~Km6DS36BSlLhA zuXP;~7C||zn-=4qCy{s*(#)|DcoY6ZcH!#Nom>OM!arKR80t^5Pg6yo?AgI4s@w3g zr97eN-5t#8%$nb!1~j15;(t~IoR^9qQ%#0KjIK7-Wuy>umxd_3Eg$of3f)8xnfTfW z@vI&sR$R`yH%ObuM_5Jef1OfLS=NrI&za4ADxIgk`sMHCKz_(Z7LzbahX(w2iyh-u zZc%QdgCgP4cm7|{wmI-u+N@cMykhBcG*oxGx}6S0fGBe>)Q}SUf1%PX_Vl$Str6WK zsplpeEcTexi-RN7*&eWHTxCP0=ANJTNK9~+)XEPKGiC$YyO~DFL5x$vlZ0hL&G^IB z9mX!D{eP;>ZL5BR=MO)K3O2gsKZ8B>CS20zZy||O&tK+8TCZ>t*yp6O@HoN=?c&EV zX}npMl@7!Y{5cAR3SG)Pr&8GhjHw-I%u|+SRjEmaL7(p?1el>*UwPg7P@KQM&{3S< zKhgMIU!|V%$d0+s^n%bY4%KtDc!A12-ltzRWDoatt{z?vjyCN?xJAvPy)iXb&xz2e zT68U|tgy?8Yim#!pPATBKQ7BbZ}a@0j*OnM z#VC#$hvk`mn6X4>JCMVt=R!Ut-m6&(ZCIF-Y02qO4!J^_ZPYqHvPV&d_-M^)f6qz^ z1Pl{6H#l%^-qa+D^w1xo_&^R zQtS0iDX@O_hv?{H`nO(qfH4N3=1A3ZHs0_k1YBo8Qb@=TWLCrBK6kMatHfP54^y}~ z6qYu-t9YF)sAP>@BCMS)(QMGa)VEIZBCzgz+tUT8@HLpPP8p<*6KMBlvtv0?_Qb8f z9#Q%IhxzqiTcIn0*M|>x?lVjJe~*A#4&p1;D1|1Y&pz;|v3~!QL8!Gn&EL@=in1%7 zRD;<|vH6Dj4V{M{LHjj6WJmG5h4gs7uhbDeI{jn?OPX+zo!r_N0J+0gYvh?jr8)~% zwr8=hlKqrbN11uGv`E`4S+{^+VY8{Vwz!z{hlO}+T}g^EmMQj==Il3KN)I)|a++FM z{UuLDnsRaYuviUfkM(7iJn@*=I`w{6^{a{tDzz2-$!roz5{-g2Wwe}SDcT6uwdyqw zkbeZ7zC|dgj5uXhR;@9^;Cxjr?W(t9SUxT|koqkA)fyL4cz_y8S=+s|-+bi)<|&r> z8P}rdJkp{3Qu*EvqRWwX-?eg?pt@r>xlH!!-{j6%&DP$m=iukTS@87s_?>}$%0H&@ z24*AR76r~nspe2QT(qT!JBF7!F%O$ zO#C=G+Sbe33#0GuZ|;L+oH#fk+vSHWMMSU`p25Nj{Dq_j2voGSSmFvfm`;RFC~bOF zgl*@maIwIC6Jexh8M#Re%PHr+8+Ex0!H3_zpoyYzMtgBPIjMucoojj)OV9BJno49} zyy>pJkMFm+o|rk$d8!>I2HwSLBC@#&gnx} zfjl`^=5!w64l<@e%`BFyGo1D&`7eJmY^5VH?J7xjI7I6u-88{VT+i){3vQVyYues` zCQ{Y1U~UPDsDJK?+|Fo@%a8dWy62zwC-PZLZ)AT7(dA$=j(mRpyG%d#uSXfr#`MgI z)Nv=AuwdWdAW9yHk1@wPYypUiqDRPv9<*rRP_U@+w$ok8Lv!gE4Wj3zQ~?Q;zYaGZ z3jU_p)$7QtZyL$&)%Ub`U15QqCaQ;I*ohqs-((6mQz4wNO!9+U%J6F2LO;=^!&@ZW zPB^xb?c1W1{Mgkoy0c9PXIRH4tuA{QYG>%<^Cl5S!O$8521*@<@bnuVV3hb1>n8PR zeD^i-zUwtJ74+w(afEeH^H_Pxkb&CSA!1`Pdcu7%=;)IJ0#hh-Z2dAO5=G>8SQw0LtiO_dm{$-Yl=Z@kbK~usu?zr zS9%&jfpQ~COz!8x=o-EX`OPIcMZKb5qb}xfxk10W+Q$bv(7*Whx!F2I<>KJ&*DdX_FP`>t@aJ$tREc1O79hHzQ*Op<7G(k6(F(f+Piaonx+|)DE z)ur_9d=YOp`}~FFXXPxTt>MG*XIi1NZO z+1v7BqOUaZpYA(NG5+`xTx2ZtOe@M@#=VOd@6Mioy9qG%;!}Zqn9EIB_WGTNPMyyM zM`s*q?JIKndexkg#ftKbignOu9_-99m(ol;pEb3K#5$wD(i1u#+#~8!pScFoyZJb5 zEW#ZZB37gpZi?rh*(Xlri-*WQbw29)HH$0adYHy>9qwu5XSM*pHSI0Qo|2)31EA0{ ziC`(EWVpIo<0>XOlA zI~&GP(%@zz+z?%Ti5ttQ6D^(ANoXu(LQi=6nn|Rql=1Hv5#4=8p%+c-nmehiHwF!a7q;lL zFH1lOcqwt|TopStOxOutKd;2>L~K)MMD3e@{U(Ojjwn<=d4lFa4qB5bBhKw7{jO7h zp8Ck(MM@gS!^8GhBcec!)jy#>x&6Hl{w*$vw#CEv9_Tvaq1)zHizX)YAVRTVAN>xg zZrF=26a@PB2^i36`^4=P4rnpH%|fOW-yiu0&)|lb8XByBGomAu*NQKOb+YpBZ7IoI6iH^37CwbJ z&$nZ+!<28}mTLE_5qN(kWt!3g?mt_*oPFuo-wOKeEE=i7#I^IuMrGMyDX7)UCi6!E@NfKUz8A?BDGeAx6l~kr;GT0w zkf1PygZHI~rs`g$e~sw3jPfvwi*F_rbKeZ)AJksw=!yS*{&PqG-`kuo2eLK3d;oq# z<@#l(pLp;LsT9ML$ceczSx=`a{Q|$Cz8WxYKE5kMZZV8otN6+}M?FfjrV;#GuGBB6 zlO5L)*nh!xpxsk074BsKbjEljwNn~feq!Q^xcm+tS`-s;m7rr1*@y&xt$ z#1WH~K4?WYG`a8Zj90s%IFgl6KN<>K|9AqAgTWxw_fjnih|xzd}2wYhXl zTJJyIg<9>ZfC5JeE(Aiy@4&_%Yt&VXPd^v!eHR*1U@8<+VKBCq>mUtfP2a{L5obAI$zs_|6OKll@>GoOS@Myoof7c4fd<1=WA) zNm;;?6vY2HMP=`3O{h-wuRh8kX79&W>B~_xFIQ5J-F=l~QAHa0KB=_I2CpdIwn|CR z5Ab?xq-B*b+GTVdD_*!Fwzg(HKFE5|1|yrjB!UPgSmkd){L{<*GpMu#uL(dAWy|pS zxY02Ads4oFsGLSnOj>HXku9d@p0`tXCKxzo^Xk0 z=(!$!2aD<%_H*f&ZtaSD>4vr`wG|wkWg*eeJW@_Xvdl9yWxYB$k6yI(r9XM5zg3Zs z`}RmaGt7u&AfD#2_0f2|fxkv1qQ*-Vb8@yzeb6&K6>%xrj?M%(9l3 z*aL-WCh07aa<{c89~RJkefAr5c@s8!rst4LZ=Mu^8M zwhYA?GTf>;C&0ej+uN5|tR^v22fUzr?8t&+yfN>#j^%86YO@@5F$e~@RV!9drq$Dn zQ`PI{R=AO|T9o3|(IWWdKJD#f1sBivtfu|R--bz+h`NjLC6%fiUF#C6vv=gOgT*-~ zFeoNzzI@^f-`?ll^L#m_n%`FWp0wZjRg!IfsyG(|v*i)a3R^ynrpB=iakNiRg^sVG z>1Bse(QqB2djzO2y2Y5)I1s@gSQhX){pj!0kU`dSdkskscUl#yv?p!)T@FV$@@v35 z_r!!X$=_i4EXRKrxf45-GynMO4~e(lvsVm!snC;i-kI-+%woMYlarwf zdN}wO1WK*OOC>tQ_@V#HpGErM;Qfske6PveBHLW(VCBOyeY@Z z?mD}zz=4RoxR_61IuN$^g!J=svO|H}$gG@NsYu2l5A~e!L>s_%xtIr zpL0*gT|&1+GYE@`^*T395uw-Vh~9drWA^4273axFEIm|_rvi%*b_kt3!6i(3qFkmM zUe7hz55aXkdU$(oUv8E+Tmq@-sPo`QefV-KT=`)6+MT3NDO*USGMCc zW_M^9hjIs^a$4;tVv6;9+c~+*w9-*8J!?Im9#3r`s=w{qy$!@bZl`&X$Llt%EZ6x% zsx@{9(hhAL)-Hn_f0D5M{ZdQql^D2FsW!O#X2vEH$D@S7(K}*F*(+A*<(!N1wrEFY zo{!wYk$d=n+eY>_zSYVDDwYv@^b)2;cKzgV!53^)C>qd&6y6t#p|o%0j&TfpcGtpI zWWj$n>qsc1Aym7vfb=(KD^iSq=Z?s=7JMgQ?HwvA%}hz9J-sHiiokUr1>2ukV26FG z&~xS~dqSJ>LZ4^q z>n=*+A?x2CAM=X$y-?ZwPwsXWN|kt>1O)O=3LYhv-98Is+#XeAmMo0wAL3{wcOBU_ zBZwH3Xd3pmY#~m%Zcljk03TJCUk*ka;NPpOVpAu+@hE%$fsXQL?UZ);gtJk@z6?;| z9Dqk*u^hrl?PbhqADEsc+uW68&iTmrJdmiP{d7;Pi(182zjB(`)O=Q&y@J6JSBE(k zD8;y@_O)yfqw8#zA)4yU}2y@NEh*I(jRjG>+&M=dpmZt1rG{IAb87YG|2G z9M=s&bzRPRd?-r~7MvFyW0Ti(aDu@_-N^frgAi-;%4Ico{%(i>ROD>J45oUpfAopMz z@TR2maD#=-P2|&yr<`pHwR~V1LKSA;)Tj2;U`=Zq6bGmS2gK8(S;7nqn63#wGH_erUxFf|5lFJhNf=DICMaHze6xm!Q{ zsH}7p;L4-3LoOQUrs^b4FsY8^n7dz3OU+yNIjY#q>7F$!x&sKBn0lLVDH(=b(3gFWijmIjeCRS?~Y{ANKH3)=!20dCr=EJ+BFnWR~U{sx|U|1QA4?gHDOOc6%>H z4oGUR!pxJ5ohL<_;0&imI{sst_9n3Z6tSwtO>O0<{!Qqb&IvL_CvaZplS?5m4;X71 zYTy_)e83f)pl6{@y3UjkTr84ep=xM11u4I(Lh#%0CY5r8LHl#w+;&S>O&=0Q8DMW^ zyQtvSF8`g=#7#HYjSt(s6K};~x4Da7r zWM)wvm_dE;(|xI3PVwA50FO%V16Amgb*T}}=#o*b69?elYvAC-Pvc1lcG_x?T}4|? zhy#u+cDD3v(HTG`$FV^tw>nzey2zPqQVfA%SIK4FYMRw$X5FWDXFi?-0*A2(n&UsA z&9W2~j(wICbTLC}og%fgU!%A_oS`SGCg3()^BWn=OSCZOX~5e=9&fd>mLi6HuSf_Q zq&+U_F>*re6ElB>iE{?lm?9AoQ6E{`{*+?ZZCI**sYXTtvepom!W>q^65O6fx+OkM zc@QF)q0VGXZ}N0E-()4&o?V5$rKMw#ZJ*#FZ^p_FqS8iA^hnq7!+{Nn*1Y4f^xR_% zmXw{XKbP1>&%)pGvt{!#G`tiO@%9c1SIkz9J3C(>VNQ_Si-?oZ_)%6_LTcvw$NE`X z{^K;72uziP)jLekGh^e`uS{x(9uMn{$}MSoOhgCuqyn|Az&n;5pNH%CfwaNGNtisQ=W02Ha~LwbzM&8b|{Zb zib@B#_xtelWxL^=Y3fcA{UX|&bhvoVqs~yg zuhmwm;C*c>yn6zoEI@qHFJp0fv-T!g6GG)m!|||#{)B>@?Rcd?ddyERO7@~z#$yY@ zrGWV)Zr9JARyL;suEMkbuAYk>_lD=T-@*mw$Tx2N^)i9;Evo{IPL{IAmdyHdwv+kpB&-zt~X93}Gn{wT}cFAHEtFBUD$`ntCzAXv}O&2NlA^ zE9`xt^MNjW`@7`JZNGHwN(f^>+(YVQqXRT*vA{&=T5EhnMMy-K3v&H_6L*vg_SRa) zc$_@uEIUHb({A(Cum9ocE90WYMx?3GW zS^GDT|Sm@Kjg9*eKO6=b(E znr%OYEe~;(wEw~xdIcS1sykfH3h#ZlH3`X{D%R^0c$jCI%huO^lcChUS5GOvHpG2` zN8>PnDdciB8%Fz3cou+lNNk~_m1h`sK_)#r`R(m=|0V{2H)<5C7qb66K~`>f1C=00 z!3BNA&R%YwBeu3^EiZ}QwZ<;prb$X#Iq{PVDi+DL*Le)tk1LEfyUwptT*Jd}wYP1vWFm0q0HS+N4}k{O(g~m-3gG={SW3s9+>J&+w<0`fe>a}*9J zJbq-FE(%(2ILSiz4~jmbf8u%EG`q5e$tb-)w^x1C^idOGlp#R?=uUpRo(ZVwzo?G+ zxunMh37;{^IN6ImEQ2?$A$3KNPSqR|MQ^#l7R8C;SH`19$cIYZws;OBh9vfNqebpO z!R`53X>++JIi`GKjOPzV{~)Lx=@v=>iddJ z$Dvbqk-BzY?}aybM&w9-A{u{7IDr}T#>ws=S8o1u_$)1_?tHsC>G%4w+Hzp#VfGkX zw32`qa+7+UKet$~*f95~{_km0Mo(>?)tfDzsZ2#$7OF37vU$`DBtA&HXYb#5ms~Ph z-Io!&Y$H}UFuAAdu2W$dG+R-NR*!ZvvW)ZM8ck~qc=KNjU5M*xZ}v9UU6)1yX09pCQ%M_?XMVo(+HOV zW5?2dEOAQMaaB*sGO0+P&1n&ewwbW|K<8uKH$(y^o{aR#Ct_6KOV&nJ`*WcIg{m5A zQ?+qg<@mby8+&>1vVCgyu3DG*(_3ptDoFJceRyp*(b#|mt=g49k%%;KZz4&EmfLE- zmE+{`!mh=x2KZYU6l5*aJCRqPsyFD=^RDXuMW@2Xa(a>=y6fXnGgNTgke^Yw{?!ja zQ{b`f9F73p(7XTsUL4YIyU98U56bXNT1U3Uvv91yK^%syMDqT z>0Et#a_G+qC*)wlfeksp1}qeu@l8M|U9NZqLw2V!E>$~g9L5SJn7q~O>eibp%uzKc zs@#&TRDvam{lA6KQ3b=t{?RLg8|b9uIElx3@g#n|FFdVff*W$3;LYW;b1SNqF>;by z^C@*TiB~O5UK}T+!7>Vh;YU`kP1OF8xG?+A(G2;8jbBi$WT+A=RYgV*-<4)rg8sjvP>`m zEO#XJT`Gw<<{ZU1Megn)9xN_Pk7Ce=KzhPp~$JHS6rs2ETdXo4Hf_H8i zsSrVZ{^gH`+C24mj~{bPn zts#GnA%IKQvMe2I#c?I8j63@EI8JuO2cQDIRxo>jKsvkLJp8q58iPOwJJUBM3df3}{xlMt91m=}vsgpiViB0l|BfrHAMu=iS-huJ)2nUimxZqn_?CC13M;(2a%?$6D{e8B(BuO#=$ z$o1YtTuQF7;5C!?quK}|GAD%{|HHESMS%V&zQqupkE!`!Q``~U#G8xFiT>K;Zyq(S z8T}bzdRC*)HL2N1mEI*(uz+bs300r=<%)ril`~GxTJc62HJ&TI_@Fo_+Q5{LAzGA}$FbHXB684^CNWLm5tMSbGJEk$FvHf?LWAwV77 z9j>ygg0`FZb6=NrXdjErSTh3@AAbUmp#`(n6cjSQex}33T!&v8ArFR!7^y7^G%XP?;7B(v=2VTGD}xDjJKB`_x$=$tVEA=Yhd^m5DPqlM0%`-x zjZ+IE#T=W{iU-E-12WMx>{NuN1seu~fnR^>!ATLj<)eUEwNnj28r&_9?+-hR(AUDM)zK(p-mG)Px@T)H^QMFpdZ{JMxhN^f9bKy&S<{2)o@Ic{NWEZzD z1;N*oGACSEcp2tf;Srr1U)M4yq9RKx6s2`RJoiDlS0~5Bt@=aiY~92ayD}nd0wJDm z0R?e)$ASa-dWR(wKK}(3FdH~jG1Ek_3f=xmP2YkFvKh(!EV!Hf7ToK_c}77~|7haq zL$KoYd$Mso9?Ix>N+MhJLH{Kjba?cOMGd$vFqT%z<91;6ST}U;EEYcx5p&t8DH|x9E6Nn9oy|yR&5kq9R1WZNf;PZc~s~sSYJOrs5#ddPgRZd8AjX~q<57Oa}jj>%5 z*n<|swJLDhHzS1frM9-K$cB0G1TR*7=7!wP>qK^MquxL6gA{f#$cLCd6mHQ$^#{pf z8=7=`P51H>;iK|nvlz1b+yr6V6@)vI@vs;V%E8{GAH=cFC9}CA5pGl)vUJI5DEFhl z#P72jjIZcU@{VV9umPp`mAx4jrY!AB2etYvY%>G+*VVxE zVRZ`ETer7WJ|{C$m;gJ~1TYs5bQa+X{z4e{dEJW2p z{Zym9eF8MkP-a?AMO(Bm8+O;y6xds|i~uSJq}5s<$qLr$-rc_C3q4Jl&+Nt}~M+ym_;if20H*0HId4d)q&9wW-ZVHF-<5n9`MA z)-d$0T!Kw$SaM#`#zf}Hm_6n?MP9J7j>Jr#s*LJZ*2RfR3yU@f={(aFhRKSSIMk*? zMl*cNEnB5GtB}9*^%5>oddA50uXp_*pFe?ZOQu5e0=(3vz`nE&(Vf%W%Tg~#^P(A1 z=5xzLUvWya+`Kx~Ff>`;P0x}CQWbG|%lSP?08F_Gczh4av`tYA@4l=_53#iOj&V>A z$ww+_a>@ESTDr~z53=)BTZb)xX(fnn7g|-OdTI!TpTS%|_CR;ScvdwtuwYf9IY)LS zXlbXFgA?`s+ki(I+VkJ45i&qaM4zdKpXbS~?LlOJb^!tKSmeIIujxm5Zc*vlfrikV zcLz_G)SG_??&&m>=i`|Qc!x?wWI|D6-kN?ttN7X3NB(|J4ofSRu5xGd{NAxLRP+?5 z{JmR8Hxogov+kTDrUu6NnAoZ6U%^sbDxCK=1MdJ44;~h=mH~$&^FCpW5p9D)k*J}J zt?WZODrk?%C2_bes&v$GaXsdg)$1dYdKOU#$=)A>7AvU<-h7E~H@y?`-<_<%JsYeq z+%uOo&h1AH>1V-<(kHQ+!$GB!VA0%&+iz7^woNw=7c^w8mlIr0m+xQ^br45LG36p2 z#Nh{{sneJ+UHcb>{JuA}+#z}T+7_<5(U<&=ga6gH6V0Qh^5tyt9$iUwpS_H9N6 zs!C6AH;ETfBaK2?JQ%_e><%qskv1^OF%_5t$>SplE z&QOP*wwuO+lj<7qT@vCg{3b{U%o)vbM+EJt)ZTvD3&+^%!-VLGcrZukOuWPEmD7$* za<#yJl{u8kL?KLHo)Mj6NN_0EK};h@BCfPH=1xgRPRBk`a{dk%Pz1LDi@N95!Q9L{ zVcXR4)|9FNfVa-!)eoc1-xoy;Zs2S#@%;OGq*?@ag71=pTs0^dC3fL;wWMmNuz+e64|?4tpjo!7=lc@>svX&kJY-s(p!NPA&~(FA3) zi+)WPU|BM2Ha50t9C(MsXB(-SvwSw%8B0J_!PcmtkJ0mc3KJHWVNsE8n$syV4xbwe z#Y-A`vQYXg>q;@7=m`GTX8 zV9$6|ES5Hj|{~>cuifh3?uL~e>^jv_kZQMiCyKsaP+>$5SAn%5x7YxHqj3X zy430c@XlYua3PLo>8Y(DbEA0}Flgm&Z`BF0{V9bXN0yVzzFg-ijF$Zq1E_qd9NgR@ zCJ0<)gV2&JPzhh+w_W&vavNsRl=Z?i_Lk`HCG=;sM&WVT?rrUQ`4h(nUix=-dw=pz z?YLz|n7@b;=+G8-#w@DhOeWmwV4xln-8wn5*G^U*#S#-u6`*|-ej$&kf z4ErEIH&jKfU}so(eD&x}Ul~AfR~?y@s{u|8GfRrGlJn7UcpSiH?2d84c-BDy1GpZ} zME=cB7>qyk^;3>)J;GzcWG`mxpoRuSpvdD3UlhgsnRt#KjXCmA%i16mb6sCKP^z_t(C)CkFd7 zQPi4LjlI&cycB07#buqT`0t9=Byq}>MAl`?8@{5?>}BfC>M7N65Q1OxM?L6oi?>7T zCT!vsdxczAfKea*oe4z7Un8;5?)m3!x~}#dj@09PqTew}I<|rvr44Xqw8ZXYsrg|J zBaJQBDsgR72sSK#v{Uc-*f;%Qy(1yJe)?f_lDJ0cBc6r$(#O=0ioaF<>5?Y3$n48G ztEt1;&6DI%hhDKy8JI_s}Vl*MX1ovFf5Mz0qaK7pR4%arg{;?rChI%sD>J+Bbh7OPN`I5^{qCLAn{W5G|1Gx+4>q{+TVLI&$YYtw7I^ zL2AR}CObtjyvNt!iO<+E2>EFw-_7OK5u$18GkowRfQzxF%0hU4>0wDS*JUYee2B&& z@f?y({R5y3TRWZf?$pfgCX)Js68;J<$c6PwN^muP94Q(SHb{qCbBRf?^g4fP9u2c> zYhCf(AXblF*E>CsL;ZA8_F9nL`5T2sU7Ed?A-T~O<@wI|SwX+s(x`1-xb`<1Ezi@c zTTbV|O(#ClnB_oHhNgRIJFVvX;79<#R_z|E*ap5c$?PU_=XiKVc4rLFYqpMsYTnww z5-%-0^vi?qF2*TYq7+SlFS*iq)Wb6<;xv;-LGfkEx-Hi`-~My890Kh;!!?1>eCeF> zDwc;|?-k5-tftYcnp}-C6&n}O94CwN%`MCdB^?J0C}y>t3bR()_O|nX)HN9Xn1pYK z4Ch@WGI9XNQA#}sT0qYF$2_3H<#QWxVW`hcaZZE~^jL$&Na9WGK_8o0TnWSY5Q!XJ zFq!n7+6^*O`j5?Tto_2r;U-Dppm+sM%};g+P_rV=r_GdE{xuchv*lul+d??|(kw%|+CWZ!k%23`wIF2;#osE2tQ3Cy9q_*<;k?rC zchpI`OLOtPa~H`Oui>uF5WCl9M$?cdm_Uy_=6{y(G3mjd6-}KV`5Eg*8tIn~NJqiR z*6W8N_Ka9zPXv!^A!%uGn;mt29#%7A6eDB^wpKN|!qiOf%T@N-ddPqG^<}b`!c7zX zL+X=Pa;mUTiC(DGxhtOMi{-LWcKcT3>VE+=5&A!-9 zGzI~Wug%pdHIx;9FGmtzVz^1U0dbxO`WU;3;u^<2##6KHN?n3tqR#5^HP$cmF`hZhEB^=tZMO&iu;yebLz;@O?zLk6T3>eVzP5JZpdJ;PU z_bSs^$!J(+^Ki(`=|eD`sL7Anzv9l}L{Us9&3r0>%|A5S(?S72cpg4+_t|hVkBKk& zLtOojH8Ub&NVxnmf_XgjkgX-N?1G-!x zE`V2wW0qd;BdLpCFZFM_apv+3ok5Ya?ubmifK@+mnnuf&6bskAkbdQsEg3h|ro!TL zU#_EGn-PP#r)VZQFa;8HvYQFjum(2T#pz?Z(yOV1S{tJcQiT20N1bP!;~xkk;bux0 zW1k+k=4|D;87)nhkB%M{Lqjtwdo?U$*l0I){VH_WNKmqHc0Il9k@JV{V*g>Evq^Xep5hghq$a@bQ$5TMtxS+RX8cYz!b zgt7?PHIw<6UAmhX=eC)o^OwB!tOpkIhUk%!O4n&gj%{cpeLVSO zHx>eK76bmLUn6grUuQaedT^asq~Ic2i~7v#yEzy<+EkTa z<}*_H18mjAMH1 zqbdg0z@;FAmeLmlI)%@flf+F>`sD^>8XL~26#(R4Lq59}$F+sNN;qf7bPgn8V-V%> z#a61?CjkBG4u7AiZ2rwrx5!s?XpZ#9uzj`5$<9a7z%Wu+wz!iWC)BP@FL=2!e|*i* zhFI%tGT!-y4$_02L3Sx+X-MSm)($N2wQ?fm@D9Jvl@Ec(dHL6-xVXj>xBXXdwEgcN zx`QU}1axObT5dH`d}}5ww=aJF=0>St)KCBTRmUCoCZh@a+kZm209~ z-k-JX2$9>*nJF+1pvklRM;Ey@rX+FWNJ$WL8#e%}DB=Pbi@3h`A*Y2mSs{(4naw7I_Pbh_@1o_-1T2-pB!qexcuzLF|SbiUnxNhinYFOh9n z*Wsi(qK6DIhSGL76@Y-1x1;33E(9BXSK*r^&|)yuV{tVUR@afLtF4o4nJAOhWzK$) z?N-*G4V!xzxh*_E z=2~VPBi5X2+Y~tXkMBWxO+u3zifRO>lu=e2pEE<0P_-H+lb!~R>TBtzySF3WPw7GY z5m;~m5%Y|_*P)y5_rahKYm}LU1xjxze>}{;0XdkxIIYTX;(JIU>xhq!(XIYN$St5A z(3maBC*(}nH{7qBu90VmC!Jy1mxIE%EqAQG&ThKF_86NCeugx;q5<7)YR+udTKW`h z@A{11`#&sbAqL5SgHH_6cPwY28H1Y4{q@Bl818t4mtSsgYhk_TCb#_|t&TVF8{XaTsvuXzo1ZL> zicSzgU6MlDf8DdwLxUEMPqve@a9~kUC1}FjVKD%hRZXOCK5=HrrmtO%Qw6`gY3C^V z?kBfBRS`r|OLOL~4=+Jpag{|5Jxhp4Es~hMVL21B;d05=(en*di~9nxW@ur)m71zq z>oV&3@US^6y?0Ia|KA9h8Zqt}`ckm+OhOA})LLlRx8HGSZPOAlVYj9=CNDf+8W=?O zlE!mkTQ6H5_JP(Az_+pRbraa5F?+Nk*k@q2>dVSnKEEuUw4#<54-JVpYUzqM8x|>K`q|gb*Ir?z!kQ@Ae7z#8oR9e*mnZ$s1s~aq z@)l*d64WZv4-F=bDeUe%^ct&o!@ zQZH3!_z@>iF7wY|&BlQS3su!Y|lPyi8Kx8kJdaFO-$Q9AT}QGz1a@m>BJZ^PP99aZraNvK=M zj|ZY#Ol+d53Zdxf$n%W`?+L`z`}j1ZyA4_tKsl_8aX!Zh*T31n3AlwVg?%!_Jy0Bq z>Jgld{+3mk*N|15JM`}%I5-HEGhW6zj(ll4c@BXLHdY;OOXf-1B^nS;QU1925cKWI z--LhaanDkb&EvEI_s7EjIB7W3xMvT}p2OE2Z!1Y+Ns>kp%4fB`y$wE6`6hq*O(t$@ z%}mPjV`}Y zm0*M(HMhO9;?X;PJ=!DXlH-B&uTACoj9rt*fK}<7Xe#Lc66!QU**)8Qj0joCDzjJ> zkO&)UD$_VWbish`N**+jA^K6;jlUJa=sZ=hGI6Yh{q$SBv1~ufkR94w8y`J9KJVUs z9AD0*-rElZUdPgktB5NDHc~}~`iVEE9(&JHE|50QFKy*bew_1g`ikm!MpV2JXZF!% znMPdL8#oS@rpG#o1IoS@lh=bzrTxusmoH#r#n4ZV z!3KHJ&Re?Ym{MoOy&hBj>=V$8PNHh9#_mej&3uIE$%GwY*1lr?GAk##8qGd_hW8n^ zMji7(*BvB3^73Ovlt(ncW6#5YEQ*SYm^24r=oUN}n`-IU&iPVXOu?Mv`ye zEqxozam|og7>domI@1^Amh+8Dsi^$rKPWD4Lo<-OqFL`+FQA#@+jz6QoK6r}UmK(I z-_a@_mUM}Nqu0vx;Fo2wQ#jsVounR=LmMv1O$|kWQp&w*HUCpH2D#ZAfaL_b&nG@5 z8J0VDm~<1j4ZNDoow_;!8V&cucfz->fXp-em3sw^@!qcqof)K~BIa*f%2`(~z0#11-#nV0S3|6 z-ED$s?8d!f+zW||h0&JB#l5r0`nI8AI6=VG`*u${&`9`9T*vhG*77T59nsYf%n3Sr zE$KN!p&-zN?R(z9vhAm-CbPGdii}DE8m=4pQ2)CWvmwsRS*nXfLL(n=sw8ACD2-`do7% zrK=K&90Dgjz#Jz!S)MM6@x+o{Hdi zxW!x7?cTK;tKsXxy`|Q8`F~v+*Bq4BuPWVQrFrpWOaunGtq|ex`drl*bo0%2pE?@z zspVY}AjAY#*Jn*e8KX@!c?`XyK=_gnk8gg4{n!(BReRE1WPR03ha)vuv0$aokZh3_ znV9L*Qn;EK9zpHFb(2a8L|eipIDO*fH(|qHK|*-hLq-AXCTJflr}oW}9w!mogZ^F} zqw8of*dR3O*tMAZ^N~78HQAW(*jw?=v8)Zg!7<|M_T7Idp7=9@bNU0&IH?4>i=)=d z(L<8Q71}FXVoXH|IwgVrvEXV&0fX~(BW=~Vt zh9ergq%lTrDuKP6!LsC*HQLU_UDj8qA>Fjax%)*@hWLA7@t>~WvCgr9h z>3PF*B&Bh7aNN}sQQcgQ9K<;EuQlK_m6~XHGGS-2pHsPXg(69}Gn$QU=r!50hUoX^ z6-?PlWx14Zg!-|Px@ZM@j=UQqq>Ee}wPHGudC|w>wwE z{X^9!=IqusP#)VMudlcPRuzEYmDAkZKn*|lavL-!@q!Fv@6jcV|4}b~T^{h!0Sgn@ z(m1fzvpW+mb0U}wEIV=TW6s40JIDA?)k|1zvm$su9VJo~{IgkBxPk%q9Va#OKNSz0 z^*WJq{u<`Fly*Hct`ILyTXt*=GK35=1( zJ}l*cPUXecH}dS_>tm24(CmSgMi>ieI%_MbOe4%LPl=}`*R_URgT&r&>qza2Hq76wyEF&0VCZ8B#A z+Pc9^=Io%2x$__U)5lu5J^x;E49dY0lugs3odN+5mTUnxQB=mM?lMiQiL4b}O64v6XBA)3ij_OqHVM5U%B~G?{ zRhxrC-j_5m zqXgCx=da1wJ#PQ?;A51?(dMqB1w!rQJyE5zPu)H=uaGMHV~*2P|8H99PWqnJV1vEu z{}?IN9VdM*aZFu<$$O-WqCIwc(*_yB?}`&LAwWyB$B*WXg?o!{?9Cd@lh3isJ^1_@ z9+C<_{h7dCYd9j^*K*bLB2927-l;O_>9aA{==@^&L|9t=AK4HnEa^9Cu=+l8OkX{W31dg-oil&Ys6i6VZ8zP#2mU3&6gR|)8QOlBtYmgIV3 z!3r^!Vk1o1+UCoW#6AodPE)-~K}Pa3f)J@#wOEC4)UCd@+<9cUZ+sVVk3PIq4Wv}; z;}93;6Gg{ZmK#BHKR5FrFv)@b>bV3R@TE&05xo!XUZxOf&2{Mi=5^H%`ipmPPg5r{ z&$*-gb+Q-W=jxBdz>-d0YF7b|${HM*(Z|v|o(;p{+N5JEl1s`=rZz7h%pxP4zbp~q zjbZ?XT3cxJB!i=MdoG=kcK1d%{+^KO!}b``&f=kD(Bnhm*tS>8!3K~_-Zt$!DIN^^ zmU3ZGoFAMKuvFE=)Bu{aFS2h27*eL}3O2yh(kk)aQyYYoS^3K)oahwV1d~SkF`5k$ zzRX(S4W)-VC&Oi!m_}jBiC8drSO-#XWy72KU+>jy!#c+}$B0Fj=>V=sxe=W10Q z-ToURjER;IjXSqvLCBx~7^sZC2A9g=<&Wc%7qpj}Q5R|&rK8$$M9Y1li>7apgEsd! zadYZ;XdYj=2E~y}D{BkcoCY7V7I`;Qy_?s3OKz4Y&j>%AOk?Br*kud8Mh;-k$<|<% zWSC>Yo_4k4^6|tU&H(C9ki&awK;eEW|YfF8mWE8G6!m%A8-NuT}s|m;xSR~%g z3^s6|YqzLzGb{GlU7xso&`wDTNz8ok@Fi;5@pb%2V7w@h{WhUPTRB_7y!%@gx7WnP zP+9lvW_$7GIANNoltEYUPu*<&9NFE;L6;DC91Vyqh&?h2q{NwbQ$Bh`70w*3W&u^) zY<8sDZa(6H_lN`x=NCv9$|@k7sf4+dkRDa18>lqDd7O&)8VpG>x*X~1C*cv&GjZ<= z&uc^tFh+;$da_EH5GbWyT|yUX$D;@*8wC>b@o;SM|J0v~Qq z5&3#VRPhq#@Wo$!;E58?jJkfDeS!UY?i9ghm&-eSRY&maJwpX^*f?Qq6*Pm1+EDSF zFhmh@9{1Rhxk$Py7=(2CXM8iiTrVU7a2Ywjy;UK!MfdvJwsIOycur~g!R3-J67z<3 zX!TrJCMHu4O^}h2EHm*^JwGX=M~cYyEJLordK9;8o3eEd)4)q%Y5m-QYDNUdmVk=d zt9B=y&=J z+87dKAmsFPcDQ}G?$H_^^8fgbzGT~e)@6aXiJR?+lK?gsRDE8TaU6UZzz8r|1$aYO z0E_d;rejYUGX!olf0;bZl&)2eyb7%O85-= z_Ji8Diy2#-K*et`V2Mo^(L_tj^`V?jP-Z9E)Bi<7#+f-J0M?DhBQ6d+_H@N+a%kbK zHHXn%-!iCYUGNIPc=)u``EPl>gZ4 zmh}93T-`fm!cszjalK*BoYOH8p;|^Jf=6MXL2~;HIgCaAQsTDZ2zoiuF&T{ZjigYO zEYWbY*+6Fp$v#eTj;EFAe78|;KQ*#9F{1yUa`;YKe4;c99S+hU1PE&8FDx5d*Mz3mXe8?#@P$-o;K2c9fsfypnOJ{wkI5pV9SVHsX~m^B_X zxDkR%(&gYX-A6q7^zmlV)djy^K2*&7z12n4Xl?|3_gHV( z@%14hr=tW@d48!pywRHV6QAIb&oIRFQa-z*F@cbE?dOuz8cy5*6C|_UMeqIopqF^) zYw~gym%D6{rZ~}Up-pn?n~$1$wjoJA6Tw5k>j~>&Bl;Dm$;U~|__Z4Nk|(14f8zX- zD$FuW^mk?ZQPcE(ec!YAhxd$Jn+hq1>72gYosycirR1p522cA+6m4fV^V0!MprCM` z3stgWe4kFCgqx%%vLv&XTl}+_u>@`G>ch4US+5+XTJDFI6ZnIkIn&Tdc)Y6e;t z2?N=oM!kQ{3MoA14tcd*WV#4$q(sQN%RA!Xb&lYuO_5wRfYo;BWuzf@4&^5puk<|& z&zGyR>reE*T_)w6^6f=zuY2h~yp6Q>JFZe3l{LaY1exn53;%C{fHLwNj&*(ebUHfg^2;nI^$3 za?>|x*MuX3p=@-re5Tts;Z2X#%Sig^X-kz-1 z+$HMa0R{j(jIN!N@TIBIM!>83#D>Q6pIhp|iO13(8y*+L>kZzqIRMJE=@1>3$sz3fnSt2!wAa((kCeo&6+AWd5TA9$Tfpj4m~Ro-Kg zB`Q?{DAmbj5Odm;kQ2qIbA}>;4Gerii{93B&JpJmMtT`%Q(xa}5H0I2=V%~}) zKM~yx$EsMC%b@WmP~5I#qO9_;z6<6$(DB+4$oCw6KD#gs1L#91!p7A3(0 zogTVq4>RJviza^FHoU95TMPZ^nC^R`ofnmTB;vqni42mgBsDpN*`CgLKtn zI%_;YnfVlGBS<_vw?3=2;)s%~qL!TC-3aPZQDxpQ{BO;`=xatj_>mZsf!wne@~I0R z2@#7?3)$2&o$QP+iQ>oW|N5=l8We39#%=Q1J2|}NHa@b<*f$vU9;KHiKeBeq@~^R* zo(y~ala)X%?}svB(-vk9A$BA5TUP1ctWBN$i+}a**K*IsKIFNn=)+%Lb-9j({keR3 zr(t%SLGejmtMY|wP6S@pT5NA*3~T?ae(Qc$KoNjy$D zA{_YuRFmX1-40`G z9XMFBxhclZcp!|X`rRd?-Cemy4qDIK{dse5&WoCMMXyBPj4=ID&d%btmXhfrXdW{j ztfS&$yWof0p zkV8N12PVMh~>oB*AVRt&rnHT;^zwAi;C z*=RXX9>^94e>*hwJsSc%$+G&a@ zq+>V}U&%U{Nh@o3o2JwH^CS@eOH zTZ$?CK^iA*OZVLKtAzGCkfD84M7PFATO@h6clyC)Vc;(CO~mg-@^^gc9T)Danu)j6 zD&Sw=l)>&5O2i2kID1^>Wpsd|+^^(2xhbeeSa=>wVYE=|;(q zqrds$TDAq|g^_fhMc#GK8qs*V@4HZj& z64)AQa!L>rM>HU|W1lx^~Ta z1DAc0IFZmVoSuExM(?d_84OO^pwL|SS<$6*0MTv>RcBjcMI*PEyIzcT>0VTwJY(3| zC$=Qh8weWAb&R491w77d8>f$bA!M!qC{-oVdY%BU?bFv*Mn0rjrdi_E{^4s#bBIZe zZcj$G3iE!co&X8^Cs6d!h_sWQAvI1&$-;Qv8|9fW)YMy1S|cgUqWmp(PKzhLNb>jy zq+oKOF$N@Sm=QtJhZtiP$sJx%lN3`}Haen))O2MOO>dbG5`mrBdwsiEOTzc1x)GZ1 zrbjiy&r8mSn<7VZMUh<#H&C10>%R;#j;FIzbhRt^F1~U9WJ_RdZ&z^s!Ic2_@@z2s zc=eISvdX-+kh#Vk#BO&yY3C@)y87ga(tyWe1LLZu#OSzPn%wNrlX?UrGWPV2W~Ih` zFxXmN;7}FpH_im==w&qBWw5Y=6KfVa9mq|lPb9Nw^VDdUNp$cVr6>7e@zwGj89({x z{_XNy2JyS|ti0Kca*a83mq^YTmjD|1UPEYEQ%dv4xfBSw*h@TX`*W3DAb z$XR!QRn>)o8qFY`cRHnx^IZgiwLKd#cG#oQ@Y>XJs+X6o9g7fT`U zF~qElIWM*^QU){J*0IGX*so>Q$(y*`Am2y7siRSO3xh3_Zo zCq8LX`JSG0o=MImM>5>m&AE|kkC8g5r~EmguS>)qZUJj^XQGoH+k8!4xfc=e{n^#)S)_8Q-q~uj^A+2prP4ObK?#tDC zM@X&n1@R_2cvNvzO3WLq>pEu?+`S_|LHm1UMxf<3Kf0k-rcu&W2{8`HgWV?Qw z6CtLl?D(c9^7@Ao{F$3;*^bSM=FXvbD7@B59g@s+6Sk>dhArL_FIVe{hEA*1vs#oXPS zza~aHh4#n~%tje&sq1qqTb~S<+y%(bm~3H^5LoM5d=mI7drLm&+uz#>@0q^DRTqx{ zp7)R{x>s7X1X14J-}9l7^l3&mStOOgWj(9`-u4 zMm*7O%Z3hQIdnXqH*Eeqq3aiZj}-hKOYrPOD4AG4B3a%#!t&9}C!t9s$C8R6D-OMJ zf!G;8|6eWuj(kiJXGCZc@B5^E8zl0QZfoh;KhOQ@H&w0ohUSaaGfQ_9rCTi*rgwV4 zubZyw8B_nL%}>84qMYVh+KP&wbUUolKE68{G;rw?*TV1bs$&0@7OWB4BTbO=1PkqK z!J47(GzYDd)L@?!(a_Sh89DwQldDxN?l8LZUFxA*`05T;4F#(Pmxs*elGZ|B(u)g4 zVE+k#%AaGCFlqOwqxV{{_R+I-K7oE4#&QQQy+-QhdXTLDe%eO3Gj~gkd<{qLeXLY|H7O)MtXR7Vdby|v@^dGH!H;U3%UY3FUZN(W zwiNHMKU}dIAxXw+_rE=7rO_ydRO8NXObSMix(%#DpA!6<$l#k#*k>M?U+be!>~NQJ zh0zUFY@F?HFEc#BZRf>^PZcy2LPv*|5I|@hET}T{v2s&+e$YryYzu_O#NfVJmC6yH z&PBVv^XigY3Z8ZZtX+16O71Zp|IF}J9_Dwrop$36$dwB}JX>5FlIN48wc()AmHM%2 z_^0C?EfVW(uV&h$)mvc|J_4qPsBAi&d#8@8nu$-H3lLjQ>lM@K^_rDgWG?!7FSX2t z7)%3f^K`$)TpRXOi#9WtsX@@-?GfvwqUxxSQtQ-^AAUA%nwVy+xg%Fo<#&Mta$|Pd zgE9L%lQT|9&m4Dmee4l~60noA7xu{iq3JEd+U%OHVcebK(gFoq90I}JikIT<3GVJz zTw0)5aEeph-6;~>U5dLqe7WxLeSYRhj=gj4k-g5DH8ZJ&WC~sI^Mv{ta*D*@r1tCv zE6b;L3X)%zXc1D=oO5e9xxc=D7p4y^dPcBIGi%<@AkmoOY8RJJ1b%zJsZN-IWHwtJ zRuHBQ4g2dcm`YAS!As1NGH)x?Fr*`6Yab_xo%Kr{Juet6EC~6=)G>On6*GJ{Z5=D1 zl~+yrQ5Ts&LbB-_8n%6oOEdu4Ry`eq#Y?H{_7+bI`K>0V<5J1m%}?E+2A(q(Q(;Mi zgXb%%p~6M|<-d)zFqMqz4M7OYQ3SwrO=YArj84umOX@1Jh`oyX^2GVjxLy<;J9lW~ zv-lHd&}?fzf2@;x@GF*yJ~NyqHio^(`OsIRPcR~sq#W18RHPjgGVa(9H?hjl z=1-gukKAI(1ZikNgF34?t-GKbrSX%ki=ddR*QXaXEjxY!Aw-h2u??M6KAWliRy`kF zw=5}0^N5a7sJ042lBY|Ncuk$YXOoGqCpQ9~4S!bW#1% zZum!C36DsqOts8EFdBd!&zERtqy2KS{34Ss&u8#IHNj3D9XrQMKlmK9Yc!yvmysvV z3=g~t;@cH{Rp%_Se?Dk`h&-p*qqLP5Y3-+wQQs?wMLhxsL zq;0R1Yw!DnGfLRRlF|1t(7|wYJoxfg|4q^O^GV{i|DNEr)C^~*kVquQ;=}V{&#Xgs zW3UspT|`9!su2gyw2XtjyD-@gwRZ*aoUGz@SX@5?yKBi|R-NhrG#J@w{N42YQfC;s zySS5tXS@H)l1GE>c(QfkqL78DM<<`YSvmqf21h=#NoaSubG{A1#lR9I1Y6+ z7>K+-;NFm?a*ck5*}z*b6r&QhcKmipn(;57 z{VsLPDXVh$Ncehia`FLAd`WvGp2xPrRES5Rx-9Q+S5N>&-_aKt4G!kor6vxe#5kO* zU}%aZ7p2Ghv|zA+uCt97LB=~wCINW;*A6_}swjZkfB&hfBT_`3@zm{mYF%3W* ze03ucSv-JIlt1~iyq4#D&y z5kB{*B)W(5LCx_f(qG3C{oBg8N|Hli?7&P^`nk@cUA&dcv~>fyP#HhH=Rj~2Mr>Gh z>;~E7i_Gr@3X3g5h}2OT)p38zA+n?;pn-1(7z{;y$#hnkN@s{d}>@|WgZ>RxN zx>!>kS5lCH3jK+i6gHB~Xb4)|Y+QjARoOE``GwXK31!E&A_FsfuZ3E9^)m5BV*k2) zQgXr~S^|Y=>JV(d&?M1!=dU&QryuzCYm2g!D$z=q!7f!tclg(a15I?4eLjUBP2U{SieVDlL-b|;y@*ECl!bU_d zXLgIfA?D^SR91!IFt(m2q+SNXow?Uyq6mi%#mxhYqMHoOj8@FB9=_c_3nJ}Il!mTi z{kcAv?}AKhPRrRG!L@S9u|Az)jZ_KZyA+dctTr3(Ysjrb6_s-E%)JzJOsnUN6Xbmi zuBE2j8OnQS;~r6Bq2Eavxro6%AAmzFWr3t|t67P>ysSyLmeM6MIM`Wkr?x0j07vju z(D^IC%WfL+3+1*u|6cfn>%<>I33NhU)-5zs9ffLM;zhHUp~yHrE(UveamuWAN- zsRpF%g3F*3D5dnnMBbM=%k5)uVyOX}Cor^oD`x4e=-2s)b2_~)w<^&rRI69iI#^X| z9us5zgG#)KuV;BS4SYjR_l9Tg+mBt_Wb*?XqYw3D4<3vQAD8qM^@^&dY%YB>ArNGo zd^S8GfGH7pW(rK`Ahm6RiGiCt>xn8J=7l~|B}@+oaE}I9K4fFg)uHMlW_s8>I3sW3 z=^eS;$fUtWsa5sHQUwFA9aQJNKub&N1L=ezEkW3Ltt(Z7}Ii z?kc?pXedkj&WfBYh@L+wq{glqua{1pkLoB>R5zouUGT)Ud{fNas;U09SEzmV%aQ;X zxodq&81D6c;Yh=SV-`tO+cqUJxT045Ry-ZKTv{3?JW4w+jRxk5fo3ZAQWT5x$iGfa z^~efpKfIWSuj+Yu|I`-`{bWS6ZaPs0nxIn)5t4kWDpWZqvHrc%IT@>N^r51ZV~M?& zm|Hk>01KHXW!BD%=!8`nvEtMwhqsMk3FVzfyY-iECpbLtV}X@y7flB3URvrJ-~^pG ztAlr9g1wbzd14b-XlAN_q9__SbU!+`GzajN$ph=l2ij~AyA;A+I)=7XI&-QMJJJ3{ z<0V#0s#uC%>)WbpY^^9p#Ov5YGQ(%C4;%`-^ib^+Oa?X;$K+XP6LK zj^_1;51s>@5*e!AZ;KcNvEi&1u4ve#c$%XKW6}NJB&X)Pxu4ZpPW`z~eh$pPv#Vt* zAlXfNkNb5*i_kokfKlq;4|karf91ibp_!#t)>K1tQW|2?q@Z$`dc=q*U)D z)acAD5dL(bOgHj%PJFk5qQ(C5!<2y-nQ#smjTHW4L3Y>bNNV^U<2|Czl0sqE!MyzI zAR&;jXgn6X2NOy4DAxOr3^tzzMPFK=LPlf}M(s$+Fze*p;!gR+J~~#rxdI`gDm#|o zE&=L7;ATbR^49!{;)-$k#KU1Icea0Hs{B3{@fe~_(%CK`WbiUcl9yK;n#3jG34$w^ zK_vqBojSz*uwS(kC(9+bz4@; zGYEn$IWc@CO`M+cs$>$nyl$*-0Q0Eum*#=ERT+uFV3hl>q6CLsZ~mkBNW9=ly2dd zzF8xm2{(Z1`WNX>)P*B@HEvybGFy(mWNqZ__L1u}2D zyL>V;79?QWSe@pA@fF@Yxzvy8Od(6IAYPMSUk&s!zI*px0qOECKMTr9H@U$tp#EcA z)l|0IQ@f532|pxSQX1&JRDY!dv+D!WL!0>7sql2&Wxhxw{6{*MAYE`vC5l#h{Qp)1@$f zoA^AJ5>33Y5@Q;>k!C5Gzqx*TM`3j+cq_xLh6aVxqM~c;RuGqb>6n7O!)4Xmi&I3E zu-9eP|GMor+TV^NbtT`Ig-&pnn@TTkjf%Fc*T6FhL4F4vDJ%o`?9sCHo_41;TKSnTO^$dh@Me*r_&lfG4emSRLsVV)IF{imV}(m1)$$Fse&eBRaE$CRA{ z3CoJjgvt3Pl(1Y%M@;fm#jeK)vGhJ(49q|QUWm;m>C7~Bi&VvB8jA@o2$8QkWXL=9 zYk%`K>Nw?Ad3)`{z3k=FzI`NdUQN-+joB5edc!Zcg2#b=GWrAu(m!4Vo1_lXcyY%ON*D)sYncZR#Ced29A2?%uR57zg-4eQq9)#I~}5OtTXMGBRI}7CI2S)yDn_v}T9TZj$7wxv@@$CpX*H zb#I&6#`cptsBc6$uv+!>J^yxbYXB&dK?w#i@N?ENEo*Gcjr4U40BZ`S*{o$j!dZx#T> zgzHt@h6^`yL^kJ?zx3#HgzhAwuM6NW8z4_4`Z6hg4Nv!bE&u%DmMgFdQo96k`nGK6 zSUPr2sDi_`nG6MeR3(|VByQIBu@|WYn(W@K;2+KGZ;*ZNjAwiDxxrfs93u_2ik=qR zCa!B6@VWI+5gqpY)6;!y%wceS80&3~fb+t@Bzv^r;I^{<1%)Jl3dAo&;HJ(N><|2oAy>X1B zJbN(vzFH);)Ric z7@nci*Z04^WDIqO*2V2N0sM+KAdGAA4RBn1&%<4WF+pU*Q&YlpOP{#PE6D!*EvxF# z$?xLCrGfdAp>Dw77z6(5*&PM``x1G=$fCA2c+SuXAf3>3$xyQaA76p-ho)i=e?k}D>k@9Zq$ z;13Pk0pHfr_1NyR?688(?8R*+0&c#WOVlq$W;FNzHwnk~t&i1*sL zbl%!!7$)nkMZpdC-LJKfv@}49TzPdySg$d;2X3@98jzb~V=?rbwt0^Q@eqhw$_5B* z*66cH)aXQ(=@aLCL-*p_m}(-K9lNpCJ&!>d82@seZN+co8m$KCni*i@RtR&_Y)4=a zEw)lB5Wd*4uIW{VIF2p5)#nKdlV ztwsgjy3WxH_e8dtn&E7&%O#uJl#44aFxz^px;@QWH3J}HqYCD)LRv1l>{s;#H zE0n}SiE|6Lf;?041tNNYP~wpc)-ghgdudMxTG!T7@lj^r3R!l>R_~GHwT~x2@gM(| zA>lhPVtBVO5>&&WZ)t*wwK(sAH=DI5bVDbI#$QHhutXWv#KsfKI`(Pnh=+tvBSr?h z{^$7x)7WJbBV67vf5<&&+oC?MBR+g$^XHMq8Bk`HY$LtJC|5tp(t9B~&1?g~P+)bf zPntibZvNlaXU6Ti2{;gHl!!}H>BWuu*XbC8hDeiEZ-z%Vh|FpobGJwP7`QN#E_n;} zg*SWFpU=X@#s56!_q~o}o)TJabziBBd9>P~Cp_|6Ffs0eFUKOcOzRGd=GE0MQ6#y! zZ&j+W=i#o^hehP{XCDyvzIc8QG8o?tn{uymA{HP2}i7=-@zP=inO)Qi&6pRN;S`uqS@*+_wc2RH( zWn#>|%6VZfrOG1F?w7R;I?J-pXrnAUdbd?C`c@}>pd9%Z4RUs4+1Djj`Wq9SGd8>} z#PKH%(8>#-!8?XIp_Q2KS&0Bk{)OfAF z_j%iF=(k+xiz}{3;}QFFaR^TmmNZrU*`56*ZnKt+F}?IvlsauOWy8G1GM2J~8&2kn z<-`9PYYpQkx;ril{tH?#Yn%UcP7P9QsrWwH9ito8H(sunk%{BxdWGmQK(z0go?UyW zB+fR?h`I3O?Ygp7s}olo`Qz;yl-fMbZjSD(XdxU?JuhqrLm^p8A=I~ZJz}^u2SXVv z7a8$7LH3$uD^!#BPNe7I^d7+$0zGn`gt2$V=j4J8g7>xMK8iu~hN=iYxhgfD3ZZD8 znAJm-$lr*d|wnpmO0* z33Y=9m0>v)pgbFUswVre$!xH3Xx=l4=XbfQxtxWPMIl7T;U5-O&K6;oR2=hZI_eC6 zto0ep@CU^UIX!eJ0$Iob&OwW?uy)B`Y^B4BV8$&3ZH{>x2`|{L${9BO6!d*Tqc@M4 zn11HHK=L7$97S*1-NhL83IrCq`e|-jDOwy?!`LFG?@!p3RVP30kT$QwhyMBZFk$tN;#5J_oo59q5BMR>TyF4!qQP~s! z%O`66%?>$*e>(yw*DB0pnmvMu0%;KpKGS%jkgEP60)6)aR_pE7fA8?I-T!{Re)vVOPDZd7#o9zO*^HUKv_}=d@$wG66Q$E9q90w^qU80xfx*@3i*{2w zR3#6D!i!o*K_Jsp<8L6I8rv21N&UVDTi|Uk1bI&I?q;VxuL1%0^j+02Ox|q%GRLc; zI;2l`PcM9?rv?ifE1j$HdcT+HMxsoEmDW2Zp|=L~fjREg{i9i5)?$jr*N4X$c{Trt zv=cP-xs#m-@fu+^ax!7(ntqjVlpvbcvLZG@H-t@l0=v}Kr0ON=cSM*D=m7)uCR`r{ zI$zNCBAYtDfBI5cj7`%ah2_4qfqF!VsaGF3u5ND_=CaP*+U>+5c1sDNF|4(gRWpK^ zq2Oqk+lg@ydkCSYd@e*l?NCS9V0)%9he`>>*Ueb>X`orBwAQX=P_wrOX0zJ~sq7;M zjv7{m%JE+3X#UO&phNOQVM*sHU03)~|4@_KJ_*NO`g4k{+{E~5X#<)uE_S9vx|`=0 zKTkx)Lk`@-_l+D(zIDcGd0;VjNkljk)eCiM?2cvj;z_nKFBiXaa82zUFl$oli&(nL zhVJd0iMo`t^95OeeVSHYz=dI{1eLwgQ2z}y^AEVF+P7uT+LDTM1Kz|;gT!Fb0r$*q zZo*#Xnm8_U(dX5ja6xb_Sr=r5GR!E>VGED2>5fuLsXA`9w{QPaOJ)w7tIXL<+Nm*8 z`EHX5cs58)0f|k^H8pjiEnF2i8sXVBvFf))65oo<=BWxhv+aRm8~<8#ZVCK*#a-Gh zcOrae6$u@Xno;>^_lZy5(Jq+rN(aWrI_-R5`JvVN#`5D_E1GEKY&|Z5BG=b_ZO12@ zoNiKI>75Ehxz-rVt(BaL&T(w?V$C+YGNMeY;u@7F*EUxC1|f$vz2EPz|G{q zZKKThv-IY-Vp1E{+W^5s~r7b14-kM7P#5z~Y;vavW9~p5A0XYcI|= z=z0He%{~P+ydY`SAr%gDwy^NrChWD<|oW+P>imXgs->SWTysOm8Q1=SAemqW^k@Er_3LWaZNHtWY2=*~=qnam^hCqjpKkvaRZSLG+|7Nwd zw*`wpA~jC6r=L}!1-dqUvyaelM9U13)&a}Z_4mXwXa0tH z(Q8OI=uqhHAFs0`M17Tc!wLBr8Eiwi7e&CaWOhkbl&NknX&?~gKDRRz8e*dagg|$P z+fGKQstyfe%j!s@vz0uh0`tMkr^tgVR;&VLYtUV)h2=sBbYzN7n!^tW&sQ}!xd3~v z#n9?|+qNbzh?Z$z^j7jD7$Sy(mE=;r8dU^bS6>3vA_$2xTJ^m)O$(f)hu%8E z+4&XbomH2j!?pzxD$TUIFrJf_g~~}N-4p9qj!pXGu#FA(`->V+k2E^CPD^{4sb>M{ zMC=5h2sr-+amjzjom$Qh)&6~|rs|-yag{5?o#U`_G3ZE6&T3uI?!mO>xaR!s@$u2- zFLPjgH9uWI&)qa^BWT8fNm(y0he!7LB_NP+3!I4`4n@7I?vxg&vV1>6_D=k3eyZu| z-P7OAi(UQeJ6@v)qE@Ss4a4p^`|oK#Bk&wQ6L^mMbfyTLIYgW8-fgia0U@zscS$YH zc$MXAKnNzn;CM%*?&<5vGW^O^T{H32u5hWeYd+2*w_z54@$VQ^T-!9$Br}1wS&(fp|T^u%MCGuwH1-x>#j5@2NPwD zKkgWG*UoViFOEgaM1R9Hbeh&-M&Y%+MZ^c*_M*Wg#2IEqKnQVie<|v6&Aqqrdi&WGaeO46C{~noI3ODvjLnA;bD4VdphUQk&;k?aw`W^@ zF_-^VDs#>?LRhdZ{CQC8fy+-Y>D~jXZRXJ1w*|8I$Y0d{Cx4cq*QJ(4MbOdzKDD7e zu~kDys%{oxU%~zfR9FA<0Xhqx&2B((p!aF2>Z$R`=}D1vCwAsTTU&p?$?SY_6ctzM zDC}&G*%sR<%~C4-DqpzC*)I)>Np9&{U>Z`p2p2O8hA7`wirN7ocjn`M5MJ>A+Ya-{ zmQm3xmo_zxA-c z2E0wNzm0W1I6U9CuFqaREOx%HqHI+#kK0}#IEk|LYv3LnzH4v*Vmdy*zJDGydSicE zIrD!T$MXx{AAg;@^M8e{G##*a_WII!G5_|jRkUnpt$f68lz7jn%?!=XY>&_2_-yA* z`rg}+E28y(juBt!YyR9}N#yeouK&4gz=^|iA8g5Nf)}+sQ5x^(ZI!pvyMW!w7w~n+ zdrM?KFJ?xgkX3p}idnhHvZzW20^^;8?h_8Gy~G2w^I`qv-lOwPCF1qR{#~TM*fnCF z=*LG{sq5DDx3%?WhdPA+j7#;_n?KOy<||(Kc{m>RC|wQ3g|Ux#y9xrSks|JzfbC`~U@MenZy{$0@?*h(>UXR`k6{O#K0&dn{OU~Z1 zl7~kjd=K*f6LXq~;Dby7&w}!TE%Dy+`{xbDx9v`MUyRE25`yRZtM{T8FY8YQZ~LPB z{%^RYA1Nrb(uh6&np|-mceibtI9Lg|#2NNPSO$~VYpTTVy}e|=&Ue1$zkkb3j){21 zpLBS+i0^obe~V6@7!c%pFl`%}SZ^a_Zhyn-_~j$p1cZ3(Wy_SU!)r#)HYO>(R58 zKjr<~+L`F=((r_Y95c_>&$Huc7;mk^Yc~ zhz|T0&dK-qFYuEp&&RJcV^9zPqFfJG>E_r2wQ)oXD01pRMnty}H8QW4o7~^1`~lo1{an7u6}vmH!tS z#Ct&J`Bi+tb5h1G&E%^WE$!owk*CN?GtAA*ZzwQ-$9yke*{Ue`9Z)+H71{*-D=~E1+Yt9C8ZDDVkSx?s;BTE@wKx%NBjXxIC6v<&HLbxqHn#dtULVSHI58 zembpueR`{aS;f=+16Mic;~mK|W2RbuyyY7z33vyK#1KO`;WxvAEpXCzZ?EG?>+S08 zdi?E|(M#_6%YA(0>vQGHPUoZ1vzyd_UBzFgjM9GfgrEoVvOeqFPkwHOWL@`!S-2bg z(zcyUt0}4uua>qBk!lbJCc97R1s~ivZP@iW|F>}EYxrAtC86ILum4q}|F*;1+S^UQ z+Xl?P0RlEj0&b0-cZ{BIIxnL;Z&Mf8Jp)m^LS*v5;jcW0f}8ZL#itkG&oos@)gW1GeOvXUH>=b=tg@C6Lv{UeQjL> z_`B2QUepqOpTF^h+%Fbpr}ez>#kDrpsIGI-=eq2UO;Mik6eWA)NM<^~Y$>uav)M!4 zRHy0%s%2q^Y}|SaC}#O`ugplgux_-RCCv$j{=@JKz2mvnmgBMP|LHAfGtKFV}VX_XYn0 zrJv}#%pt)=y+&(6gHE06h+zlfcY?r`%<;Jbi!%?qHtfNZCZqi{)53jB~1(=sFw!!l7FS_tikbY z)#Uj7#-bsy-w<&-vIL^X!Zoyvc|_AC^=Abc=Ph?A#$Mxw6M#-KmeJtXK3vZ0<-=)(@{z!oj2|M zrF@ry{cqPN>uu9Wu}KV|t#W}d(k&c+3KfavL=g@_ONQ-Vil+!M^`lO-<_B9C`t@b& zpr%VY8gW@$NX=n)+Nh4pqtsH1&DKSjX8_FvN@(71GT*sqw^Zo0bJ}1k4 zoKRmvql_)pE-q3J@5EqydT7U&p898aP+V+gK`Jr+jVH|;vp#N@g*IOm_Ih+x5}@TI zG=fwA01FxzbAs7GW1y=rmRF{xhY^>See-(8w=9R*V3v9Tk0q|n<^6kd&8}HoEwAP< zdq&w_`l((BSb1nqk0Y$b;I_I&Q>7hs`q}n9j>BjNTzYhZI7K&lZ?_#~=y^n7cX^lI zgt_1DH~U@4_~XZ7(HO0ppk9w7!sSodc*lF^vHh?^bYjqd$aVQAX3BVFb^YhuA*8Co z+h4S+GKyo)mv6&Qdu+NEJ6+pIO2d}Sfl@rRdwQ=v`+{VrlXUQaeP5;Bzk}K zK22Q0j>~-A`2lN41+8=FR&0GmNc{_>vDaHJ)+~M&S}GN*)R2)=6A7mQwvPCGA)r5V zj2cHz;T1~QXUHGACtKabkUC#Fuv@q|c~qW+$l;R@Z>UbU(`8__&<6Ab>;Wcxh{Kxq z?Xxj}5GB6u6i-{LGjZ6gQ`OPbBqc5^lAe7##~V*nYMd@8oGQjB#CdmQ{EIW#uiSp|a+&vC6jiH&BAGp7z8S6)~C`p|PtgdW>81+PWyNJLMKy z&*xIrP}*_o0EZQIVlYd^ak#b)!dD;qW;R|;7VJjvaO3upX8=s=+k!wq6csAqrZR?r z*tzOHith}h@B^l1=+^U@Ps><4!Y`CU^V+Iq^K5W;j~meW9=n)f>q@aBqeDOXKpVPK zf+;V-*@ZEQ9-;(Ikg@sB6s3RAH39m zI}iG_JT7^m;+!bRP=fXlS)@!U08-=X3NO@#uYck+0%IeycQi*L2vJU`n5P9vS7$7c zXrlP!nb*NE-I2>=*}pu{pz~ac{eLkvqmWnDF<-kl!xAvti*<^uDdl{jk<6W_0Ny72 zEvWF)9mnj-=VJAE+kKn6ZrMWY`ZaybEn6Cn>}0QYz#y_Q-M*|@B9~8IfMC~i!v=>qY5z}`=T8%l%o&4DD@FBQc>&ScZ1utD zR3v$Mb@EWLK*+e}2Z6lZ&}5ejAb zjL3@+F@NAK6{$hS3<6vL!!dX$xco{W?vHb4aP0M(xGQ803;Rc2VCk@U%8U5nX^wumIV)4gZ zLbD%#`=W@Jg-!Ff;T%};e7;NblF7HPCU}puw>T%)YLH#bJ30SSPo{Koc!bmIhW1sr zmo21D=>NjzE6mGy-t6;Z$M1{vG8FF1T^?lVXL2CpT}vvz@tyRK@`BQAZx3jep&(8+ z@ArDowwdofb>ubRPV8!Ol_T|#s0E^T(&CK->t*nIoR@bqJJ?$*QkYYJF6mzL(p2t6 zJhY=(f(OhSBD%HehsYjOa$-F~FUvTlX9*o+1yTH`K)76kw5h&iZ9-n6N-!FOwYIWh zjbfdorGLCKAuaX5BIx+=3lUF+Dy~qWK#k`Gt_F7Y{#lbd!bO{)T`dzlg>Pl7z``sN zIcQ)2y+*_&E zjkN@p7Ci4DE-#oQY{>V!h06)__9D^Vd>^tp+zafhfy0xSJah6!zhHx65ue4xG?T6g2*t-$50`GL zlm0sG{fMd3{JE+{AVTx|CiBETv+=uZziq>45O75`MXj$ZEn|mJl^(7<9&P5{R$P*` zW2$qbRxpd;hwmv_Z`P}zhYJ7$sv8fMnSMFnwRp4?-y3uuLNT1&g{u2*dym!qtNjDz z8Q zwrSxM!o}q*rK!15ewy2&>q`3+v(a=b<{5Gcz){s)`yR6p8HdXP*-=e~PL`{z1S_(}?-#R(K zzciIf!^NWS#YL@(hZo5Hs^F8Ge}~)RMtXsM%=A-y^WSSBzN&hPo8#HtIWm9$EDj}m zo3IDwl!;^Hj{JEA>Ce6;JiR5f86Fz>>Re2EEh?K}tLR#IYKakj9#&5V8YC)#VDL5v z`NWMqz|0^hN0Rb`P3X0AY}4Ual%dMpg~6%Uw4i$U-+jA50zYPv5CH7>gF+_5G9-$FeD-(ZrKU1I)E&lFc|-2 zV!x9`{juzv=a0l0PvC89UPD8fT$`}IZvCogkpn`HE)gQDhY@-<7TG1;@W;Hu`umJn zSSFo`alK|IzcwvV($eUv=BYaHwct?P;l0;Yyl3q|aGNQFz_87WB9F>K7fTaz>GOfn zAd@EA%3A1~VM7Nknfcfyg;liiF{>qyssaZ&`c^3*y{qWdwO`i$ZVVJ1v9Tx(o62l= zEK!RT)E+L^8bFt0h&+meTY4f=neJ?&q?S$1al6D2rr_fvG0Ki~<4piw{JfetTang+ zVK2B!#!p#VK#c{qa~i|SU3^K}cI1xs{_Gur5#x3z`ve7J^z#y}klt?wZe{pJ4H|!A z=~&Caa`@=MQOd8n1B;0DX|Q2B{#^GMLo*PP~pT8|!CeB)s> z%jARI2aSoA74zQTm1U^v>9UMTqs)Gt-{2dn{;b&}<|cBZF14vFb98Xp5;6JN$oH^q zZKi{BQ-E8BJnmVQyP3pJ4AD_%dz zFPatAUz+dLB6)mEp)#f@rUY->J@wf`;2VfYk{j z-O0JnE}@Gb0@(q9rVaW%lEi+_^wWY|Ljq7e36r{4gaj{p0_2uxvKx58#gy>wcvXml z0z6?b+73_C;C+`Y-!}gcHBXI&p&asIluS7!h^8(~iV#qrxsw`2|Ner+9kySNsK~^? z*R!t^!?Ho|arkOF>0TlxmJQL%s8lE=YlCbk581I?>f&DP2Vd+M9Hqm{@}2RoGv$BN zwLFAh?Wx(@sHjW0)gUZj`S9$T96Io)NIS%J&uV+D zmH;w**{ZM!@-H;pn=;jwDxF`>%X^NCJCZHBG#UwlVQIwucZH>&9j_GH9y<1I$*q(^ z$fleq0#DBI9xJ7tYWBSU3WKp|-3xU8xbZOBJJqldNtn@-C$4nXTKTec&Fn60q$L(R zi>R)ZtNIE?wx=syYh>0-!fqj@1e}o>$(J59nwAt^zQ?(9nE|J?B^SO6w{mupo~DG} zNM4>cv7lFULC0v9J_K@73A1k9+epa_D9TX?EU`)_6Nt(O=Vcxs`&gZ31y^#!A&8|& zno%gnUF>GN9(3HLg1brQ`dQ$;2!{bie%1AaWeDnOq09`1@J1{X#(_@Xx%_*@)YN4b zY6<4)un1-g*it~Q&$=4@5BHQ^bGS61xG@mmp1Z7R&eboBr&|Hj1WH7-gj%rS=~Bo zE>36K%4A&L+M|4BsNF|PpP^f6QzveycEwU>{=P90< zK`2#)4f2z1G2*2OPGtt~m6j?VhWdXat)1f$scj*$zQq2p%pXJbvo%=u7J z2;-<1+)LNe?Wlb==7K-ig!cJtu{#9M8$m>_@EZgc%g5``=B%}P32u#nqzvv@Zn5N{ z0xo6fD}lP_@5Vp;>425N|M+HIzICkIUF+YnRu12Yshk=Tt7(wH7HowiXwZOxT-6 z%R{!kKMEN^ujgDeo+$7!znHqU$0NG9<_|E?p){2tmEdOm=aVtQ58=qW26(-v4rR2P*!DLx!`+n$hIB{ zJKfmIJZ)RewYWhQ z#paZDy^GoQlutgvQ@!xWrJrx9O;R}yKMICW3fG?jiL|c0{uYFA{Gt6mu1p?Kf5cb! zlbr+P=$|!3?EQDz&_3GbE83q(oxF?i)y7O64{lCl(dYItk&N31f&G$Fh@&nf+9xZXn6$LU z7?p(g5|-A|stb~qpwz<9=vtH%Sm}?MI(8Pay?yC`Z>~;1qWdTNf#%dvb=kt&*$#ck z2w{a;52m6CCT?4+0*^>l1-3LfJt1H)S8q2c?)dDB=`}6vJL5$pgyvx4nFq8s~oygRW&yHmW zI!UAl9TK0k8A`|#d+I$bb&>Nt6W3+j>H&R^b_wks&BYq{#8JLa=o2XYc2w;s#>E3C z+%#lD(Ypc0E^7TOol#7e@g@++q_)OqRT0l`BUIADLmi{!!f(>y@E`n_WvVx+*4lnJy)sT~_IJp~nUrH}Sx9Dja2r))3deeW0 zIwRfqh!@gZ0{z)XD?o*l^#C6XK1}@@0=7mFg}w9;miIYf$MnBz)o^O|SvfTf>ey)+ zib&zIp%sGv`u+;rk-Gj9k2snYt1wTYj-b}>v16W7_kMe)(xE|N`Ytxv_F423vX7JY zAGx=qcddlO)Hz+iSECzg@+NYxPBXiOSGxcJHDdT0i)qaux0KHB+eV7N?(kYOFB^}O z+t-cTIS#r65kGPdqip$WGP+{ABh*dOG(N5p7wpMb<@q+|5N&)GRF$-3s^1cWvAk!O zBrFHgz3ru1Z$gFU78j3cX*~xfHW$8l3#9haDdyXWk!e+$3F)KB9t|{mU*#3^UZwSw zndu53Pbd%4e@S-3;0`G$@7JCgEy)9ff-VV;pOQ4QwhN# zw`z5m(5)EZSMu&!tFD{FsOcUKl}=iRjdCkoNtOt@hJVvyl#2Yvj%KZcCe0Mn_hO9o zQO7>(-ER~$Bg~8;`_Qu@@Ngqch}4EOp`cz;3Az+1!myURv_OutYogH7Sn+PauZ}sM zs&}?u9{Z-D`$vckSScs8+(ndlG=3ULohRZ_{SbMQZ}!4{R`##*wGljF68i0q-aIG_KiN# z_^&=PE5VxHEN=@qxj{Yqk(^#6#s;2fN=W6OyFX4|7Fg;y&4s&tbjxKs{m$vsP_H2H zPZZB_!<+p7qv=1K!l=diT(y{fY-stYmQqwu};UiFvMy4l6R2s(<50)|OSlhDnqLlpE zN2Z;y<(IauwTFDWFY%XqXh_v8`ER*4VP~>q@KLg|oj+*IGflOVC}|TCX&j0P0RX(W&>X>;<_K{nD42pISpXbz&@W?mpCa z?mi6zrg$mm%tPl5kDmfL=(&)wm+p~&hC6hw1Y4_lf>!s_td^ZtIfYgR4_KdSIuC8J zD_ZEKo-GLY7(4B#Gn)9mKq)!m`7QVDxXos9mY4St|2&`N#a@m-Z@7b6H z0CC3R%xURJl?M(CKCArnraI$Yspo8ZF($F`O9}(G#dG+CO!V8*hEc6%$6`$&FwNIcktWUw z+*W@%#^BOH6A`#`sIF;Z+6b>gvq=w6<{N8@i-CmIcts-m7{{L*C0Q_ef8U8eJ9=ok_Ye#(?+Dz?aUGGSU*K#isve6?XeYYIvm-9`!5JLe1n z+(Pf@8&i^2TBh7xXvIAx{iI3m#6jxq;d)_e!=;-;j;uAvuPx}b!9$EeQK=qo*9jfe)Gr(F|PET2dt`HWWOz@STktCx%?bw>uu-B_gF94kPxc~cGmN-W{W|erNYOfcv zf`iC$ueT!~pNDTSP&A(z7P42mBpIkdtn%Lb;-xUo0G&(~*%m$!GIAm(wga8QJ812g$hexvo8DnyH*b|j#W3`&-;M2Ftlym>q zben6*Own(mlCZh`no{<6bMY3xQT-=&EQRR^&Eji*n8nLff!I7sheZY z)hy0aXE&j2K-l-g#58 zHl9yqgUj6I#5#xdy0~jXvE|N8*9Pt6cOF+^qoW2c^}Fa{ z)vPI5Y3MXczk6TW{LLUQw@i`>zq~yhB3-Cy7N{jv(dDfH{8HyQ4izzl>t1Q8G|ntd zlI`55hIQa5N#0if({X+2mYy0X$JmxI`nqsiLeFT%2H9*m_FSq5fV0<*YQe|<0H)^K zvTI>dG7vDLSY`tX;gS`1&+yrPIjl04Rq-)oF@qLquaL0hScjMsER2sl3yOEsaxERl`~P?nR7+b%Ea;kjpu z&>a?>@|2JAEy7wYBI(q5LDWLER5BLYsJlUR9rMFZiZM(QsLs?I#kMZ&mVPqi`3 zZG4`Ur^)SX43{L;!r8at&fDj9}qb6D@Arx$vsW!RI9i&?f(o1E3+uVPO_;{tIBx#> z$+$*$%3(jqhAAz?`LE=^1Ti6({{IVfyM*#U=KJ{n;~>jiIU4gO`&lmiMLe3F>}X5D z^x>PuWc-U{}z+9B(lS)bM`M4={Ngw*SrY3y+MFWKH6AJCOXhE z;laqm9G)Sbd|*&HPREF%QkZ5etiu4Ju9k@54vaHwnz-Ymj{kIZea;tK{Xa1cR6Pv8 z*(itICa&jT>#b9lC!5dq0(6Faio1N*A(g2c6`~)6j+%sw_PN#Z5IhUfEF!IGmYNk@ z)S=7uu?Qp;jJ*wHFgYL9R;=A6BcZ4Rx9GhU{D;@ysl~^zA^uUqF!N(4Hn+Bc{ov#5 zw@{|*0-e91oZ7NIFIbiW`K=58rlP?&%w5g3Ow#y#Gz;b|)t{B$F7`3r%eIi_+ z^h`*%y{VimoG0m-abcg%&`D6WrvBXb0Ic802Kh|Xey4!hqHsVo@F2PN0y+%^jIj)~e~mqtcpG48mK!Plno3SU z2UhBdNFz#CeZzWu^XY3RQ0>7xRG#hK_EpPT1^2oIP1N2An911{Luy}>Sxu6`_Tjz$ zYwEchN@vvxzrgE>8`?p4c+;3rkXX?&n++NuYM@` z;JtqIX%VONV^V`rMz;8iXlmXCS7Ek=D;^yA#I+EAs1HsEU068|xtzVKsZmeh>w0;S zITNQgDNb9dv4gcLr_-$5shi#?&veI1Zm;t7E2$;w(C)Pwz3AAj{ve73Aamufkt$!S zv`;hJ(=Zwt;gI=rWBw*AcE~hi$AN1_3)N}gQ7kk7y4y7Xt~@FzEa}ZSomUQ_XVoc6 zAS8v!rMhJ+hY5xc)8DvUn&jeyBU-PY)6Lf**EK7gRL=GSdQ$b@(f{#n1|uy5C5QW5 z%IjqA`_^!hN?6A;jlscS)_=cptN2zsS}CS{*jh2?*)AjuFleMy*u3SLI!czv!7=lu zs)EE3Ed4ghtZ6T4p?$_;7+p? zvkTGP<6bSo2L`Fw_}QKw~t4psH)?E`03 zk$DOFT}>hUM(GwzeYnX&x99*R(;TiTs{#?_bRyp!OsRk_?^oWHcF}8H4oT?>hAOJf53W z8mFB5iW|D17&!z2WVez&h++EMMmHtIR(_dgK(^Q92Fv;`#9dOuO!uw>YKoEKLlaZq z98t3|yZEUpxW1-mYG>Az2QBk`oFw1OY14};pO7rfAd3=T4iR6XDyBS(HElAc> zEj>l=FD9#sqLISP8MA~ED{Wo$?oPFeb_ZGEhdS{vOMWK41x-fW%z^a672 zz@&^Ts3sOAAT(jjxD)MGVKsdePcIEPWlf4x$xe`COt;Y-&%HOhTOE>z^o>7Rs$W>E=#R zy=-M0DGsLS;EQ{)+I+}#!T?|Ij;8!P3R03LOz2j_{ZIh87u6pGlL{Y zA_WX%cQ3iN1)B^OK#y42d@Oj{WT21}a3Sndh3`vBwMJIL!IaJJ%S@x|r;^1W2XMr1 zB@=u)zD!RBpJxS_Z7D+9)a|R5e9<+I^?Inf#`FH7T6Lgni{U4$+HU0Qap-;qRvO4Y zfOfT>-CacW!rfSOl|Bj`3p*&2}9P4fLx8~53r zdTTi31TRe*(4w@MQRaT*^3Hg}bWlQB*?IL&LLE;iFz?op(+oh3if|k=h#H5ZNH#im zJC%f;!SRfvnFSWXEmx5_z|H5^r5|kD_U%^S=Kl3^uVO7^fNnRUnX;ma< zD=v@Pgof>YsDP)%$a%ZG2puJ5MP_gpc z7<8aCOiwP#u~k#FzV%40;QQGV(>c)X^@JvCWUVH@0m>V(0vbrv&q;;=bFsPT@r}tU z4P-`~z`{PObw0VEee^LprGH57LiXR3v~o+0f58u`C@zqj#tr$~92`JK{*Qs>%jW@! z_WdnRTuXrUvt0(=zu!~M=Vj2b<6dUjI#L+9;X3C;b(b_QAOR` zyEQ3ZF6h;D&UJE(Iyw1pcY2k8?CWu{Sdq&jShJ6xnZsay?K^OaHigeh)CUN9y!x(@ z3Fl-P^zA(b5h%naU~{Xizq@dq|8uqDT7>1T!(sNO@$2%fQORMJK#F;4f^)R)(9z@$iQzfx|G z5_Za5^x^2x(KYP2rV~|mDemZ{Q~z)z_s^y8u<=>jBh{@SqegOzB?Bu~H8(A`O(7C$ znQw)TZ2U&CzeP+=<$b@+6?#Ra4fLr864d(N@SOHj3yO45dg& z$%`yK|8BNG^m~X-4l@k9@LI*}9sNL&!lL7)!a@&dqbIYp$9ym&f^veVX3RR7h5ibNC7+tOp( zTqS>BxhXR!!p55GB=i{utaOXeGcE9rJ+~>{p>C*>sEMT;Pyj=JX~me%;E(sxKSO(Q zSydY(WXCj%h7;uEo6}||U$0Rw2a=%k#4LH2ra6Rva)9MZ%^5x6E0j=EoQdqjaOrZM zA9WfIDd61nq=F5i5PUqyZ@9BbSKU=b1w&%6aKxmUE&eqXuKUtYg!VOTVYE+j`|xUn$%AjUyK2x3XIyhO&*+%zF4UkycZJxY+sSJ2Q0K{vtVxca0Dr`6+(| zx7nP8WsrxDu}SUgeN3mH#&j#i5@GPk+`M8P4 zg6;CU(o4|~O~=wk{4?z+JAR%^wQ0HGet@lRYfwPyDIWX6&jyL8EerLEFvf2rg@aKb zSua?J-QW&XgTuCxRM&LKIJ8{zfMR%%A8@(a{>N}w#fJpXfYj6HrnN+$pQPD^umw-Y zv_^k$p%?as7ZIEWBhJ`Cw{C~K#SS5v57WU8p zc3Y8Ik~00&Vi7qQI;Rg8EL(iD1Qo76$wcKj#zrSb8YV2)8o<@vWYL{Wq8#Vlkm6=V z-^zXNmmBfo24nE(K{0{E4jDRtT*MAEL!lV3j3r$e36qZ9p)*zEpfXlag(Y8vGJ3q> zn|1q62ZrRXFXFJDRQWHfZbz;{e&k^3*kA{>L|DI{saD`Klbz$#?Pv=pPlVcv22Jl+ggUUc`~gK^<@ENN#Lun%GL2_s9<4Mz*e7+j@N4R5kDY-Bg&G@? zJW|yNZQN#^NR9Je7RNQ&Y02vMF=g}dM`x_PliRZ8Ac0rW#lni4&>eLlOWW@zPZ%Qx z)OXSIhK7xX8YWTE^QNcCp%a0voZ$?X4P!5u?UB=jeYRI2q<+6 z=yNo1(S$(;JH0ogudEi~OO7WfDW|aMNL|1GvYn5s@j&LaO8YyolXz5eDLxthum^%v zeg8gv>cFIS!^s=R!$Pl_uQ}h7f$uggf(_{S8(bLLd8-xq3$;~EA;LThbtn32tQU>U zs2kHbg2P?a7oPci&v;W~FM0AqdEn>NDBgcFY0iTN$p((FjugHi>zGg zY#BPO)lnb0LXlJH!QbKy!$Uzo5`^w@_K>bf`*QwPKrkX%LI?P z;#QD*6qjd35L=xRF`b)zCDi6653FyIYrhYXNiWkXciOG@UE%8R{MZLJFxt%8T5qH4 z>hr7vQ4Gf}uEQ{TinSk{DqDZEbjtI`9uMq5U7VGA&@dQmUC*PCj>B&n6A50BGj^{; zQ!dU~045}<##jE|3lLNGOZMvl-Vc@Pmuzd33p0u4=YvTz5sKv<#ShFotGo!U`xsDOD53gq^N)`A4@dN=8Ck}bIN713vS^DK)&;+;) zrl0IXQcXC`{*o=LzVt3E^`>u;+cW*f+$6YA*Gun@vp5#HGP`RFsG#-XmVX|e0ALn{ ziv$^0^S+?*TxjWTdF5&v32WxT+&pxs-BAL!eW4pSx%h;D*|QLiZcZSF&FYc&MP77l5`J(yD?cWOZGJAhl&9GzQ-6V@tCV(vxQu1T!j61_y$x|Mo=Y=09m{YXS_xY z;D_+oFPU5gA*}{7<`4qJK9en={%Yd6_jev-)8DnlJcIFU6d-rw_QReVvV@32HSJty z5mx*7?Ms&NeEWyYr*aHhu7;+L26!h5>C9w!oI=!$Q9J(g!I}y(=v$~%>-Ns~My?>m ziE1})-Hy;92M1qNS|%s$#-jO6St?Og7*)5;`gz}8@-P=N@|EPI9g=Y)9pisF(<&c^NX@jN0gj!U1f0)0Y+T3X zQTgl{1KGV?1$^m&_G!7DIdpv6-zZ?`K7A+#iISxZ;w020<^!@&cO?po5bQ*=+gRF5 zO7(lnL$t(Is`|W5C_9pVrGh9YF#We$G~STmQiAYKG%*yz97TGyN0&A6@lQrv5PO7) z*QQsKw74 zlsla7fY8^$A6+$+3o>q#k~+R^xFEnW-${sn%A83Fa}aRY%80_n^F@&iQQ2=YU#Vf} z&g3fw0dKkmqK$30?G(qT--%CXcG8Q{y#i@gkP+cmEx`N=qCA4vlfSv{%?503l>aqU zFp8DQjj%CSb*beG3jAEq?WAGO(qXU%ccSVxmUSsi`8lj4At^UrI|KQY@^G2ARFHkC z;-!0gzYuB*Qwer^Thj<0lsKRUPLkk% z43OB~D!an~Z_RI?KU2OFVH5N|wvWc^N9f+L4fO5Y?)GZ+zXvJ5fuOw~n9VPhh?zHB zK2#BElTWLYX=+#hI}&uc z$+G{pS*nWDK;=s~d(%moL>_S7LdP>lS73^P#x}-I9 zjI%DfRtxE+?+EF%#TQLbol)C5PCPXk`Q{v)oZ0HaEo&6Uaz$u(7lN=kexm0&JCIbN z&OyUsB1h@eN*mMwo^g!+lz@4b$U^k$0@#3hfn3*n!rx7P?DZ-xJ- zK923q{@t7*KX4tl&odED|R@M@S2?FxLWONHMq%3_*N2nNH63 z)EjlG-S*~Y{7w#I)Z*9q-<=Xb-|Xi997a%5zbE*+C`> zIYaYOdfPB^dAD&5bv-s{S)o(NrpV7p;}OO zCEK}7a|wfd@~(}pSqPcFg$&&?N(arPihA(z;N)@bhSTs$5T%BRE7X_>S8ZewE1}c} zcFV=MFZ*B58dGBahR+v(a27g+be{Oo2dF&mjo-}5ZzwqvKE4h>uiwRjhE>T$AFzjw z|CXC@WENTg=PYD97xOpw9!dOmHCz`27vWFLk-`{tubPH3R61(p-fCVom1VR^{~81A zF!MUw77%8=avBp_YkjLsf=ejg%3Z}i|F0F}orWv>MO020-=O2@E~y$ItW^vXQ`&>T zjcMXHud#5KkSj*%`pqGG&^7}<3bl21FS@D&7o7|)t5`iVZ*?414TWy`gql&KJQ%aa zpdP0}VeGBJ!r#d*bXzkU((YlBevn|E_(i*X-wId%+fO@C%$N9aOAOi#KIG;DEI(%E zzF--^q^lBQT1RkAvMr^G-#iLMSVIjhq-{bDEQcE%&k9*ysB>>s8E++4K3QrMQVyw~5aZBVG&qbg$>Dk%PY zW@!t67HRNkP0o?Skhqe=?eJog-z`7g4Gm)!K!=p5{-^?bZ8?CaUx%FIEl$uaRKo0v zzJk_t%dw=QZU3@qfvqLSr*rV%h_;Is_4KR8s*l@WM>bEJpYp@RO&V%UD1JuT_UUu7 zmwy~`yrN7{MTi{{SCQrLU*PZqjEcIDo1;$4p8~o;`@3Uwg}UgpIis&6lXjry($MNJ z6rf%5!a^6ouppjYyN{8a#>~sV7kG4@@p3m6h{izWW0L0)qZE)8L2daM++D4P#yH<{ zUV%l|2IN_zW~a5ZKU(oA^^98}9eAgHF;MS|o-q?bgeX zfb%)fxY8318Yr32-~`m==0UXaAjo)1(5*wbqxf^i7$U^jJcs6sXGw6YEd75mbDb_G zVOp_(dRgQ70|X=9mqlzSCdeJ|MO4jfujOmZ+6q5bm@X(ZXBD@Sv)aw%L1aD+9UlT9 z@MhqvWmgI`WI2DP^}ZaSjxydl$E2p849{uKR%4C)R>!9a$4ASvPZ=um9Sv z|CSKl8>A>UY_9juqwF`9}mpYSle^8(oQ0&X5BkRhh zdp!>KFOuadnB;bP_MH^A?Bkn8RvVLsS?4oRK^wbaDC5upCtd7jJsVD3-?tS7nswTl(*Uyj(8SJdjL@tod zAEEYQj~TCF1rb4&27j|DlFCuF>b&*D7N8eS^ks=t{tupyF^d36bbJTB5oQSEAt*FQGax3(*)z*RLXhBj%Y~xeI5@JQ_$53KBz~*>vuQk*_AQxSECSl zr&53EYT<9EjK(zKyh4g0Cv+Q8XX-$D3Uv;4fPKY|VdcCP{nmoOHzf`Cc;D zkr9kgs~=c6ecPbL7YXy9Irq$~(c(vys=dEDBaYGiBr+Yt;Apvmtf}x1cFLcu-o(B- zEF4Zv!VdQ0FEh(T+g>ScGE#b@32)A_dT}FoTwp*{_)Cox~wVRl&cdo zf^+Cp;t=WsRZUVw2y)oUdO!l;d64mjL4hTMMb)Q9-7$EA{*=UAcX}NA&&WQE<5{7d zsT;>`wbMcNjP{8$))(|H)Iffh$43+cZi_Ls+B0lZ+Jl~SbpLG?n zV~Iv2rmu^lY- zD<%$h`lQ-2z#GT?xxvZp~4hb5x;taGroi>jZr9Ufs-f@cU#r-UPITs`2#Z%pb@zZk@ivYVuA15>>f?A)vk3Oy zwh4K@%*NnGEA*8*hE6P_I0d+bc14Enn)Vy9MElmPPan56#u_`fj-^%LWJUt7B2adK zL;7Im)V|#&ZJF5*j* z^hRDMyDg_rZV;d=&f-ssWqJlz*5+-@@rD4*9Mr6D2TDio4S`be3zy6TXIq!!nH|(? z(egCQeTzNUKzWER6jxxkV~?(axZHuSVlhkS+4>o<3n^Z7CDNf+btWEsMP)-guaa?B zT~hM-mPWJJc!5JUy6er6U)^h$$kpjP%mL(&Ue%DEA(*7l zBvlzlaA0~(lR~<9A+00_Jui}2gVcAcU=oJQ^>$@g!Ka2O@Mxfq2EOLYh_HS}t7dDW zel@EWqELfGN8?aUVe_YU!BYr++`#jAPuqNV;&ugCiQ}mg7w28Kj8@ z%$T0(A@{RoaZ9{Cy{Y)_OTK)yiE`bwBk0%{;=NS%13OnRT-0uVNcE#`Z0S)aPU0!! zy0q^$icbX(z`?D8Cq^_2f^?99vaBn{8S+SaxPvjEC3x?*@jUA_A@6|rfo5+z_=ghO zqx%=E2=J@yXKx7}MIXhn+P_BF>qgqv!uOe4A^7Dd9Umzg?F<~HI2V%fnJtu1dxR+k zzv{lO^Yq!MGFE^9;O#nU7~Q!KU(z@2ERcOF(u^7{v(*;hs?%kd})@fjE zopC0(K(G?ek(-Xa^j$2XZgLuacKRt>+l^d7baxd@=EbT89?ZwmT${5J$6OFCZ_J|ur6a1Fy0NmM?i51 zUyknh&<5v4f_~az`Aje#{6gPabqJ4y@poOTuo($;!z7K2iA$tiQmwE=;b7Q9c2%7^ zeorrDF_VbOZ~Ab1A+TjNP&`6BqfSr-zg*(N-L2_ivOqj6r>y84PE{l4FP$(U@-y=+ zdLMx4;-Ke(7#9S?yEa)%$aCltdbLoBJQZNS1keydLJmVYM5tg?haND^n}(sAN|hoi z*!2z_vHWgVD{$;ZKEYg(ciVo0(Uhp(z0vs>hJdKM9SeOn>=`oR$sSC%P8y5It=N}n zmTL;)#6wU;jM5=_a^7P&rAeOiqE8&SkWQULs~UgbJ5rni$!`nb%QH0j8Ul>xtd38? z6ZA?3HP#y(P>DS^JYsJ=S< z%fI;8C;dE%j*o`|m&(*v$#wG%Z9T6mEBd5Cox>4plzA7pMI0y%stYqOLKSg;|0;9nx+XTG z+vqgzSw`lv>@bqPoqK2trvyWj%9mOx5j$|>H?)UM_3%I7?s+;nw*&p!A>4-8mXkX_ z*aNZttHEB+q|u&b`|v0!>}0)RR2?rxpv#A#F)v;%&RSwD4hWO{74sh#5pt`Yz&sv^i3B`ae^n)Z@kgff=?)%x2Lr94iD z!H&G?%ilsy^MTJUBT?p0qQbD$>dz{)b=1=9=&RG`@r{oDPHA>z0Gx1tcBO)CR#qV6 zkNev2KR7(k+}5I02lG|HMrHBH*f5-~!^&OQEB4leH!=(3RY3XtKBHdL1CK6A^&&A`X_}io@)>#KA{Ue1$8G?(qSbg$ zF~YZInJ}aR>F}w3qMG9vLrO}I42K(nXDIo~?~s8xM5^HAJiroW7(UXd$gvZx_HoDn zdxdaeD;Kx;aOak~piE}(n=`ZbeIqT~g1T_T^DpE^BiG%F^tFp0TF&AGlk}WWqYq-a zreR_llywQ4V*L$@mU^Ru{)ymaYYH+;u`j+L-WFY_40=%TMg+A)q4naoIUS zSxbn7QY-yD`EodBLl>?;4@jCwO$!35!Ib4<$#<|FS40AxJzxd3g!0 zx|BX(Az%A;L{tLZOs0df_d@1b^fA6QjM%c(Vf>y1S7L>Z^%_JX2y4Za)p^|i8$Ish@PS_kKfJKeFs%{xyeFmQxvJb*40CvJuAGHj()DaA$j?eeXprTXDqQpG8khlJ9<0{hMlql zwKw*9d*)rFiJryP<0%hVV~?0wB4u^)hRRsFu*mj#2BGDiGyF|?ca5R=EMW@dqGc4U z^WUGbO4Jp7s$Kde#e_`)IJ`6O;$`n_+tOXi{+Baj3!{N1PJHlkf`3$O7aW z_?VI@U~)F^qHiJ)A#Sr_M^grMtJKG}F{?YM+NePFQz1H;;l6e&KX8w0FY}e0AEA7b z>VEo{Y_w55@>FEfMb-M^=Fa}i#Y#mYYM|nZfM&*r`}T>9G9(#lXmM9Yj&lH2CXkf) z=0my#Cx6m|Rqgpz_w1>m%gRkny)b8rIb5&5YqgC|Pr1lPEv7_Xqev{p7iCt#Z{RS_ zS>pSM#4Dk*YFtnduA+L5F=Mj*m$e%hfeLkD{Cql`QmOh?*g^9r>ROOrPl{HV7(&fM zRg5T@Zu^2YhFFSUrx#j?Z;TwvK3B9lR39m0qYdTP&VwSZUx(_K{$k`2O1Z^PuQ7lp zq};_I*gZl0eIUSBlqwMrtTBglQZz4uIv!>PPLEk4c`)gFi3879lyNi*s@*t02X=2dj8ZA(9m2xk~u_b`SfRtg`J1%Eb<7LaBTyd;>UbQnPVE`M%T2 zsCoyvW|?vDUr<;7JBd>>{$?ii5ZyfQN@WvE^#Z-=WV58se2sZVF{z?!`wqFDM37r0 zbt8RK3KPSosPYu*qIxf(zZX+>NBzw-kgz4FB9)y{?E<#veTBtntO#Ac-&Z^%C!6a8 zFHW;{?loytKvz2C@98Pp)ChKTM3#yL7Ou$E10xNIUt_v}DH|6%;qMnBQ4>MLIUJLD zr)T?W`Jxf=@lM;`s-3Z*vyT_a8fC=!sXI_<8Xf!+szc7p5lmDQEVmTKi?|}Rx;l$j zX^LF6;S&Qw`f-7Mh`vP%3y$1r`ysp`RlTsB_bqL`oXTJnIDHU@Bof=ISv%O#Fuj57V3>e#Ez=Vx=uZv?BvT-79;$7O_dDD!{33EouAgv5HO-900`zj; zeOzHp1j{yjELwCIQY6Z(7Us~eAj_h$piOApy9K?SH;X?Q%H_QFd_|s75m*rOR%ben zS(GC(2YNP8GrKq9^sXyXO@+r6GaX3^!(-zzx3^cp_+g)Kd=s0ULDdB>1zCqsBlt4d zCPxc@T8Tnn4|&7oY|AKHxbC|I<$i3>nBTv6Z;WoEUqm~p-1j!TU&eaMxIyDza2=u| zw_r{H7u#eS6SXh!)^fe1{{o`4el({3l)psvGAO!+{=D<7MuSi_< z&!n{rL5;*3sdmCK!+V6UZ44|ujXJs%^|;$E-3uaNp3}ZNUkPopaVmZNC(WbVe9C(!TPm{^;YQHb$-z#znU93t{<1QjLu04eXEa z+RL3&Rm~`|$?Rx4(;dyNE)zs}`0UeyuV*q$WKKM9miN#-HW5w$Yt}YrEq3q5aUZV5 zX-*aDcC(r=?+IVYf~_P*I9|*k@a3vrgGdtYv<^yx5zPHE1x*ES#x~R)bko&dl-F1t z8>dVzt1U8w;iXu{1Ptgp=0rN92`d9dGMuJG(#TyR-rLOM2?!mCrD~jnXsVmyPz$<| z#D5~ZKF9wmY2IB9`ul$UtILR@0L@L)R7Sov&*+B!FPkj+{=3d>`l`QXXhsFt5<)Y! z-!PcetX_PU`%*L-ZFu;@vZ@ik^VPhC*9)~Th+?@X*@cu+e!}KGIqy1H+cf5??dtV` zM&s-M_X14Xqg{JU7yG`8KY3rov{+77tfEO(StW$#sR9h4>Cz0df7OH`j~^@LtxoQ; ze(B}CU0#!BF(O#RwC`}VnmQ#2mxPqKjNIJ{g4~ieBMFM`?bggO3kcmz`sY79cY411 z{I9yNjm+_a*lUgVguwBsd;%7)hG2#7T2v!4tpeg7)SZsU6OwO(wkVALsxag=Ko?`9 zs?LBCx{ytb9eHq+-`l8jlXnA|>dK%qC%sL1QQOMI{XgQ;DYM}=Qbbd;y$414We1-n2F40K}Vwe6R$1nuDIS{o} z|1=d!Ys9)bUzFr2oh?_7t@G8kNg71iX_%u~#5gA~twa!|v19bbQ@Ffo{+60-Kpz-( z2U{DVaJs@hGmmlz)ZWx8(M)JX4-eT%-VRZo$ePY&a!r4}5o&YOl=0VVw+??}s%L$4 zraHw4!{{v>?4XBOU;V&80LzTyTRe`If60=m489T%n_331`0?W0A zmhX*io14>!y-zQ-T!yQ6P6ajnK80&P$&chUGLLi3+&Rp7a$7JF4!8aI1?Z1(`O>6Z$g@6D&_s!N7 z(4)7(_Nu1L^?tZDN3mRN090A!q@zCMXQE{i%ihDJ7C}nGZ<=10u72b%=caFu_gmR} zlm4M}6(_%iijKnLr7%o*^yoEDfFB-x1V=^T=&+b_$n(L0|_dihhJLUyaqZbTwdwZf0!H#ORtWmi3yASIgigNT?d0kna2*f5xI#ReJlmyZB5k;`5s<&LX1%%%A8W zKv=N%D)qhU@es82OL&QU_Zgk#yb{ykc9vY_%jx%qGbbOR9R47f>6>1EUg?))fJcMY z2LiLo`G41w(Q{W<*PZBTm^GoF<#pUGYl%ZNW?t8iNdlUlv`h_b+QI&jD^q~LAG`Gl zK+(AC&>9?;^Oer;CqMyP9JZ$X+12zHTOwwwr~v^$0T;l&{x2=R{{i+u3BM4|dYN#B z(x2Buq1X20IGkLm3b!HxEH9&pT) z8lm2o2d2=d22VMS>ph|!7YpNnL|N2JCAOJim0+wyBF!1AYZ7U}t&9_C@f@HAh|)?T zmf<=wbFca{J^K3xQ_^Pe=CVy@hOOCg)29b#tyyoxh)0wed~9P(jH87z!S+h_C7C=+ z2IGme;!7V5-{)-65GtMN-$Oq(X8^+whW+2|8O0;WO&BHY{wl3!ErdyRP`jWWeoWItVBW5^ z$A)OXc4{Kt{}5~}>ApNkZyo$ZHKX9&?ggKz8Fjrr7W}7C(6ZpOWI1aPTDRekS#{n% zKf_O*KXAnVrJV$PU_198Xsh&{npI+(Su@%0h-JDg%V*b&I}VnIbusSk*Hy>7zhm)97s!H3;nh(}3vB-J{StsU36y_xe=LaBhOnQNoEZY2>9m<8dt^jxf*twS zr<$#0Z>P0llrZoTZKy@lG@Wd83LPCLlV^t&IQ2WvNb>C1Q2o%wS9;mDxD;sn3B3gfQKk_f4885fRKCO1m zX{MNo72ym{-yP4?dmRnd8)jekq$_vr{Rb_0foxspf|t_5tFGJ40Pw5tZT4ntI|LSi z{%FDsh?84@N80PPINz3svngpaz!@14o8ZG)uLr^zhb=m9m_nMFlWm%LM*}|jj%w`tHbmgJUy@@o073ozl=h!?1CLf~RwC`KR|%5tst$bA{5$85(RPUH~Yn(mwVE zT_U72Fc#5=BAQWX-H|8<)|VB|I;~4_BF)|EZ>2Q&PClsjFX;)hd&ms2TjxSLZDx;^ z$4t(U_ht9MSszFx!6vkxO`fqCNdW6Dbc|UCJN6e^AZip`o0IVjIFgR&-b$AtOaPY~oBc#27Ut`v( zYp8L(|AB|?D3KeHo0tN5?{zeJv6`XT-^8W#38yal+wFJyB+Ig^L&Z#s2?YaHP~$EB zvDd<$L^=o`-FKJ0(+}ly&VGq4{b_*_Gq=zhrM^>NrZB7*=QsY_PT=}MP$hl_mj!UY z#9Wud_#4l_0L=ep^YuRtpV2LI)dn1FVuzP0+s)0HVb}Y%din&C6Oj=-4$ zUW$!!ve}5jS+5pySQD*%*J3lgvA^SOO2J%tE9ugK`9XV_#v$YVHG#AOQ5ty3zye1N z9WK==-J;JVx4jxyZ9@#X8pUDvvfw89>o!mwj;>1Yxy)XonOo=}8oXbeVIdkUf^nU| z9mb#vBP~0I?J7VZj2e8+lNi*Fd?s%U9I61&<>{Q98G`VF{dEeQdDbSJiD!QJAI0`I7=-r z1=)xZ#Z=T@m8sNJ=Zy>nB}?u>LA0Z4DKtDji-sVPX7kg`L>eARX<$u!0Kg)=TZYwe zVZZtxz_R`4D>xsfS3~E;?*LM8=GlAxe=VHRz2%U*6@y5x|zZMU_ zdnrR^aP931PDtvX2Y}UF;t>(ROR>2O&e&p^&O#jrIrZ6QR_xK(>DcbH!%aFGn{*7y zK%Q#(d(_N6WqFLX$kVKxXQCOSnqs$0CWV$&>zsLug8>U3!r&Vzv~HlKEE=TSV?`)u z!mPUJazbVyocZHsvz*x$B+@YNxD$RawyO*LL|0rlWAk;3*M`EC`a}616Zk^b$c!i6 z&dZs3JBO17b87@?GqZx3Hp7SUspiLf!C9w10HszVw!w1(XuHGgL#2{uH-(ZzW`e) zqCNn#o2L{4a1v>$>{l_7hO2XFVAXY-@8y`MxW2V)|M^mKZztu<00e;QA85{jGpAD* z!I_!l>#K^}uyV3l5N*BdSNdf0XfO&BF$;z;6i3dJf}*N^N{3+6GZvb-1a&eAY>A@tFfSOJ!i1qVmX=?|P$dg*$Rm_?19Re#AK0^K5l)!0x-T z9@h}9)2WDN7K&zTVZzub0|K;i$~`cOuwscGo>M6e%){QM-I^TZMq%ex=?Sxkk(oPi z=cUcy^zz5USueIW7;x5iGsoq1n_j^+I zX;a;p75!YP?qSNM(86cYkg@Qv%%ZhcYZ9JWZV?+Pq6VmA7CMoyEZNiSl)#D!f`?p&!MP_h&m-tQ-PNU+)7pY4$I}gqn zOG%TLS#(Y`hmHM-1u3yrGv z#;Ui?X>Vv947yv)tCU_uGbMh}+50zxJgE?{-$*n2*G;WWPKDq-uytL}zLbWzqTi#P zfg94!1_+(JY|Neb^GUj4xE{dnjzYS8g+?gSHcxTBEl5F~ybjRuwtioD~Ke%yH=>CTve{r>pyiJl4Ju!B!rbOu{BlOM{;Ydm);VPJ`v=12IN^8`4+Dbh9OH^y-`$qFQd9 z6r6e8eLFa-DGz6cj4EMPsaIn_Cv%8UytzA6|IHdiRX>j$C8|D6GF|0?X>V{cha{>Q zfu_;!(K#Atz7oi)^~Sp2c7!cF)S#EK;u=ocID4C!Su{(1-NaVo6izU97MF-4obn)R zMX1CJ0syV+cWr0D-%f+&hh;t_-r89bg~Nd7k(pV|>1p~q&FOGvj;)%OaW>)jNoc zZN}>C`e0_knJ|UB64Eq3V&fC|s8f??N9QAlo7bQcA6`wf{9Gbw+q+C}G;l9vk*g5} ztVZm*;32|LuPPi z#5yAQMEjpN03Mkorn!b(uq@4}o(E@~FpNQ1+FQ_GCqA>uv+kZRhaXw>=j)`841U1K z6m*=J(%zX>wo7aJBvMpl)f5+NEmeTynC|<|q*g>r-dY`Rr?0Zo67m zL-P^sxNO<0zq}oJYXUBWWvp7wDi-&a7(LVKMz(kSXtie)}KSOj2 z7e#k^QSDrq@Q8B(GLX#4{ZrGI2F+hk@ak|GN*c9*V?kooz&Z2y}~)=)?lu> zjncx~q~Ma*+0JZPmgS#ug|_f5$&&vLTN-b;e~{V*GJ~HsOC4y!Z(X14aGaR7Pk^(M zBsgQeKcwj`)Y#$X%t(rwIvQ`PW(ag7S&qMFtNHOE`UwA)fbpxjLM_Mf zS)5;*l`vof&OLMnMoD*T`gScprC*8$!+UoZ0B`WEyYXTDiZ63y^un3t0G#`1cKl0z zwH494-$}M^5w2T=0Rh-;GJ%uV(il&_-3E}(ma&~|{3sKs=gbh+4Qd8yvng=qHEkC< zUjy{Eo@KAI;jENA<5Juv4fuxFG|C*dI@-^rw+D)kXHCye@7;1&n>Oz{;>@aPYcPdo z7_bznk?v|j64olC6=BQ-75PtVo3AO-i117R~M8 z^h0N6yHvM*>Hq0?{E7K*6drD#^tokThfXyF#>f2ksmZ3OJLJ#N=YGySFoi}lk-bl) zq?gh3$yqcQe3b0^*XO@9`^3|bxS)72X-QMB>l zX6og$(Ku&_ZG7(}n(}$R;uIQP@*A}inT=20zBQl$(#1m&4Q!RwRu^!;0JjAI?2h%f zLwpwvPAl#P?MU?Vv>il4+WB5X&Gwb&|5p8Yo6k}O=Tti<^`vQBc= z%u+Ml{d0+V(ofk|(IIJh(Rlh9!?9D&UdkGyoN}7F0MU#wG3)x2CKk>ucQ5&4J4k60 z4n5gj=Y9YHOUECYdz^q}{&vWH#9$ZHETql6`3vOIW?s3+Tc!^Y&OSbVFq}zJCTgg3 zRw-+LRO-uscNFL2U#Tur75{ip>J_xPGIGICk1^UP@% zTkPJQUDy8Ty)?L$<5$xVJAWyT55RGQYP?y$U!&8-SO)5*jAgir%;1M%mb-*!7Csx! zG)c)bCJtwv3ROCTtUXcl@Lqb@*BrAF)I0u|?B<^yrH|t_?`@5uIvV(lACsmzfwxF_ z7C8|pG(bwhFQw#6L_>G)0IPu%qFM6z!-*Vl&}~XNxdfm_X&{wFN`vw%Il%sj(0Pma zY%-PsbT8*_P9n2)M>NMSXzMWi=m9!ie07?wH*qS^|-PU`6BztCU(M!nC16H`9~(X5Ue4f&%qu^i8% zGzg$3rPIJB_vWqLDqb&^NpQB%SHo5_@`f28xQRW)^}}Oc_agxKa25pPLYP(V`B?zd z%`blV>dBmGkx|Uxypj{X^lP_-gCwcmtQPq3*|1#rBY+ zjHfLWeNft&-7gZniPnI%X-HYFO!eXQ_3Ujycoz-k?qqEo=GNzaF(5VscgvksUcVIH zW%9~bTp19*^yKuk@V4+8`2>?;8yh-FWh^6}&Lp$+7n(psW~m97O`H9}*-nxlDprLf zATyYpJR8&R{IgCMD85S+Bkodj`?GT`X%7000v#wCp|vV7pFKqhON&xss<(1B4IUM| zJ*r>Sooz7nt2aDKGgT6c5+Qgo0-NU zoS88{0nP+Te%>&7#&z`1@i8NoiksQipRQ7qt4q(gy(m9*Vr<0b6uU0bRcm0Ba3{qQ zYXpn{teEE_8vI0>Rce&sBb@Tf7E5aS%Zqe+@C@< z8$894lUe6VU*OWbXlu2T9rTGcIA9g)yapen5ar zL2bupsnwrvW?z!LQg75tOlGyuGvNnzHkrY(_lzG8XVQtJ;lDi}ko@pea;L6op88@2 z+{01XQon`(0VD^FRCd{Ry`ll zU<20Zcb)JDEhtBxw`!NLP37ROj;GTA(BI0jih|ldy3HI!L28raRq;k0DP-m;xL8P= zMbMUkvy`!mR+jbK!P!xgpBX2c7Ob#&$b3q(eJ|>;)xkbXd!4eapQdcm@jaA-o|Gs6 z#iCHs<@4xGA)OUk z#&6JoW9+8QENe5u_kpvTBsk*}TX1p|O-HdUtrK$?Yhb?yx?!Zf`%{znZS%lm>YV4) zyb?}le|EOg{5Abdp&u^h(vY?AaJNR&!qaa)5Qdr6FCzxqn=xqiqHdJgBWT_!`&Vzk zy$9|_>eyFy(fA{P>emBs#{VTo82~mHaVx_2o~xP`{qF<#ru8kMT>zR->g%M08N%@5 z*T9u#(`msR=IJyDUVv;yt=SbmzW-xdmhbRtH+#dQg~vUStsVO2{L=QNdwMluD7SEO=3;$^kBY?Ca4DY_S%u2!_9m78(O&`kfQMtiFBE43t3R*jY<^ylAE`;2FW5CHMe%gAH# zR$BD~TT7vtvYboz@#ZWVtQ=VCyH3vufP5lt?xoSI+y4Z&F_BIKnX-FC>yv8i_n&P_ zEQ4$}`jX<2k{O|^=;C!`20xN4%;{+}IB`B4&N?#*vpPw&tk#`%=v(Q3^>^Z{ciJbh zAN;cc%0{JYuD5HICXBthni2tc5&>eTT=0}LXaL^9*-PSQiLneq>ZxuLqB*q05zVeB zBN{rGNFf?BXProW*Xi8<5C3U+6h4$kS4Nm+3l#eeznYS3W{8hV{glQ*j0efizrDGg*<|CEhbHj74R?ew4i zG6z_VDu^~qy=M{8dR>5MaBiY$=^`48#&RDGtTIs#K>pXH!J#FEv}#u+gYAE=1hp?d z%Pr9&lR@^&unYis$qa8!X7H;#@J!Pww0C-ejm+*ydAJkdOz?BmP02GFReZfyy278P zNZj~eqIlGau+b$cv{sKgD@fhEkqf{*V{pzP@+N>y|+L+~upG1_z+ zoEehf%u+3RR#E4cl2b1Z6Wk{;pxJ?J*k{|{tEIpWL;9q5aIbvA>;@(-!2*^60-3Svbu8mogFKv9p0AR6+YC<3I+?)ISh5cF%?gYVcVt^ZRMp_HfX1una8nE6EIg zt?S{;#Ygi=GYZvQ*9e^Tg*7-kP0D8hd^@NFOsdd)gaCZZMI+|$w~6voBZ>~x;ld{y zp{p}eXqMVAo_5L!)A=Qc2J6u?@2ul<_^cD|ObQZdFez;G95&2RQdx=A(m z{uy?$D4K|6_#-p8bBD=Cr@;B5?CtjGbAesQUMpjW<{7)3v^wbR7r_19W|iYkTuy0I3|=XKZCLe z-!QzSeWk!Z#$5HW{TFCqUy{bbldILwGYhq%w3#{4hriPV5^!cU_qi+&fiqi1Y-hol zl04%Q8tOz1I`P2rKF4$cQ$Ai~#a_k@_(z(pfpAyaDl`m5#@CenlVLR7*=Q5ldhDcL zn4J|L;zXg@N?+vq{G9MzC)`yb__Q%|-D7Ak$ldV$$BqjXZ%LcM2~}P;RF;A_Caq<{VJGQilg^nl)h|>9C@Cba z#t%2gbwLw@T7rM0mb9=`Q|Tx$r-edaK5<3+)vFIfNugbN%4wSk-wGh%O-`5%XVG9~ zak6Kfn3qTc@Tgqch=FL6Fx&lqVE9km2)`sV836uQm{y4{sW;k@GMOO^vOs2t(`II| zQ=WpeGhR4@S6!ySUZ$CHvMKxTYc@YC3Bvo5XRYQ!#wv;t)L^=jgz!)`qej7^QGxJ; zj{pjvPj+Y}VAFZ(+Y%A2*IOVO97;104HhbSGwmb)MjEomo#m=hOl@f3!To|A-Q{q9jd+DdSu}5QI+G)Pyuno`#CkBL;&Vt zZ!^mb+vx7c*#AC2qp?+-#$FP=Dh_Fn$sMRB%n;TMD$Y94M3T(l1nfV`ec2npnXxWb z;OtTvF?XG1^Soz1nhK#ld+{pFKt<}e5>3gB8x*uq{_1pD3hl~MPE$rjC+&1s77bm} zWks|z&N|_QfjE%{qv7IlXQ>}YJ23f43hzPODqFxC9ZutnIQ>h z!)Y`87&z1P1CwWYQDUG5e>zVEq$}W8zdd^!`CU>F&1N7C(R%g%;oJ@r(a?jJRR}q3 zI3dCF;GcEE3S(WcCLVWUHl@K2et&huK(r~Cfm!}bGueKRp%Yr%kHoE%gBLZpoXim5 zlwZy3NQ%th$1L-fn>Eql3`TlhVIV;M2ZKOMu=^r}p}<)u`eXpp+G=F1e*F1Lw?b8j z{MU%kmBIaysbX&e{066xbY;zKsA*?$wZI&f7IALda zYYv=s8i6x4>()tvv$BMld{XkP;I=?cg(_5q$lpRD4Wv}SuSNVv!cP6Rt)cjcPkQ;3<~zhylos1eH(S*kyL^^oGQ2020oFX&U&-1WZKDQt*wISBhX3N@LEj?wNXCuOVnb-45fXF zT(Xyi8tHaxTDpfK*tugVq}4YEt)gxANJNA6oSIR=aRR4n@a+kuIf#bnX!1l#gHJ`& zK(r~Cfmvc_eBiSanG8@@TVs5{AjPuDb1M@iRyMlgSDyKZ2@rb6sD78A`P>TJK@Iw zL_V;&&kW8b-(NP~qDB$0-5D9zVbJg(=j|Dg~zg}_8J>@49JOYffne1Hz3ko1zaFG^;# z(bz{B%kTg)gCBo}x84TMOsVmR-deL7oL#BXmjPTNyzW)0!VG#9S~)}F27gpbAqAD% z?ZtWM+7y~01<|}@QVr1@a=H%DU~Sl5@URxi^=BhC*SU*F9@Sk`CNhJ!+qq86Mwfm%CEV(8CZH1RrbTaU zNf`ysOP-zde*KIs|4&@~gTmGtE(MA1RUeOX%4zB+AsTcV^AccIbMPmC>nE8=!;O^Y z)O{_B<+syB8{G^UOYDrB-+$IyGEqF*OWfoXGo@YX=22t@>eJGr;H*=^?G2&ej?37 zG}v6|vQbQF9uJ*GX};T45jX1WS&FNqK{~B_~5eRP7G3-Ao1-q zFto~=fmyCH?L$7JG}9=x*@(tU42q|bgc&GB`SpJWnZarIZQ;yTbxsOTpQ>reGwE>i z6kXQPeUi{2E0GKyuMYJDWOT%-5!NVqIV2I$dW|C*tYu9{w7?i9x_K=E@F~qhG&o>% z7o}kU)Lt9TWuS(gB?M#a?2mk=z)+*qTC5u@ktoinAL`@`G6QvMDdvRdgKn%yzXq({LSXcJO3GfMKe7=YbkTQV`=l0%TP zS8xjbb83mYqE5;QGq7G4$P9jug0`GXxwIK_O()O_&x5nB&@t<{$1t+gdlOsy9a4vJ zSmM@xhOE8WfR9_%ag~rl6QyMJFo0+_&B%z>E6Gxcvrf}39O}~1Eh=~TcrEfM&Fd)~ zBnrR|F{L34g(1}Vp(g|uTqS}UGL|^*27CMX{j+3mQ}z_3UQ)a&-l(5;!c8j9M#>z6l{^#u8)_@ol4nm-IluVx)IUkhP4Bl!3v`r{wyiR% z_K0Tf9#Qqu zEm!UBJ3cGyC8;X<=An31yiq?Ko{i6r&iZFf zC6CU(%9kb0I@~mFlh6_6VCzqhQ4fekj5Az0T++yS5lsqA$E;p@U7w8-hz9G?@ZoP# zxrc@T-ip#Nm`;0L83r}%RzZqiSyua(qpO!vwG@h4rF&I;Qg0ldLKkO{8N#k*N$X@d z%Q?Rt&J60xbm}PK;R2vGYN<6-;qOlwE%>h)*hRm&57q-xXoi%i;38V95kxcF_3A=q zDIL*ZMTKp7FcV`QiovnB%fmz(-h|RHE1kw#!8xFYoiTiS`Ta8-{V7rqYL)I-@u_$l zIm!eZiYv*?zm$U~1g+2T|3EmiH1gV6`D9Zh!d}YZX4(0lUb6Pl&t{q#1ki1$79|Lt zi+;-L1CTJz0*Ka?sYOLJ!<&w1z07u9402dXM>LqtIXBMn47iY#EDtHo8@ym(&!sfD zF377EzSIoT|aX|m-Adjw}eUW=}$G|+S!qclteHINmb$GlUP)ynUmC3gb75z({g zkYf{b6ps)0@9Q!$gI~*w!LiSA6*6#^ictIWn()TNDlC5!09eT_tz8jl%E_}b{LPY) znd?76MJI6)_z~*whk^?t;wTc?t5-RNW@@oIE+U$kLW47IX45VM$%qCoFb{gXY}TZN zSwwGlP#PGhl@C23q|>lPh#1tMOkSWl{S??sVKw>vv%-q0_3BHaf6=FeP0ZIVWQMR^ z51aB;06&Z=a5nzJ8Jq}hW20~g&Mc{LW=d;Dnyz7>E!EC~-uM1u*14kuNRD@kwgTZbPoLWe*^X<&5;rC~RxJP(_} z98i(U|)8Hv#L;`qKT2ZY5@7zUby8wc=H#c47)mHgk8}gIR`? zI<>$DC%gn;%|JBR6qR@#4gP%$kSmR1{yhq2QE+$8rZgy^=1-jyL5IeI#o!5g9}aF)xxIYHhFXY4WDBsXnIG%Kt1U)#=2 z-40A@BJ(tr@ko&fJ&G1}G8+ukt52ahvWQ9>G4YfWxF6A6Nfe8!loDwOeF8(2 zh8gKJoB?V=qc3Gyt@QUdp**%nrCJf4tF*-2(S1d2$k9W{41Od|m1ya_9L{jfJ7=&1 zFdsb?2=t~qsmZf0X3>AIa>ZWC*89$q@I{g3MFN*z<)oUN8xzgUjaC}5#d_R+2BN{* z@7JIEMm{kQr)l zmj4zZ2USR(X~OZ7BS@q0W;mlW3V?eDrMd$u`d4;$Q7X~?I!WNtOJuKJ3)#G0k^(bR zXdWxHW-=sQiD)o^$?*V(q8uK&Gm%!gbO)t@RmY@s8uFk9h1HVs-dBs?KZ`EfN--HS zO{l0Oc%+-C+Lo{9kQw}7{3};s&C03OCsM1d_r|-WA(crb1JnKa0A4wFefgLbPX<(o>o=(F} zpoVi;?Vs=umyBs@i*wI$`z z`V_~uk;fvPtew~>5NS+2l&q)FOgU&`I2=YaJ4hYTkck0~6PNQAz(R_EMcj6MHVOzn zz61w%o=<5Aok;0494AhUeLKsuS#8H><<(Pb^jkSL(!7gXORi~0bfC&~Mfb?5WQM20 znO$!AzY@-Djl!8_`IzLHYNj>%YZdH^=ShY(W46n$m#HbV--c-L$KSQTJCTNPqMl7@ zh@$%34BR}C*qY|E?$4cAJ)|BSoslmjEV0dZr@)eB5)~_#hfr$0WTJYZqH@6^}sH!6( zLYpHCr+yit!3rbg1cCkRL>io_QoF>j4p17Hb8O>-kZe+*2Fhx$c7!KRKLA~&q}KHJ z&zM24G!@BhhK^*?ZI&7>Bf^yTjwXwY)x%KTgQH; zWK^{%z=k&pPMeB6nfC=LFzuK*T3_k`vL zdQxrQ6kE1ZNwrm8YAtyG%)JsRjYOGdw7nr8gD<*;(~wRgGsLmE72hgt2Dc+J7$FH~ z=F@ZzoLQDPCC^MLTl=q)j60Iqh=NU*YI=B=rO<#!BN_^R<|Wb)wt^CDl`8^-(y-l| zU>3*zv5gWg1~nX~6?+Vu%`=N@8=s9luxTF3G)4jFrF0m+PR2643z^}@v>DvK$Y6vA zz?mb}(q4H6l4qtasQZiq#HVWnp2q49rOGz*iNGREiw&(-3U>s2_gAf=qxSq^VgR_ZgGq{oe95{0%;tNh8 z7^CU(77pY(UX=0-K1((PGz#`VK~fW@^mETe-C{;Hj%cRF5e-gk9`tx47N8z{cq$~) zFqP7VI4r!1Fr>`@2xp)|S0{lQ6js|es69wZYE66ptjIv>qxGfK>R$}W5#1G(*g_k= zPd|suFcr@H$a8S!`nSvZfbW!mGf!4?r<`ogPM(?4_r+c#b)Ta}U1sY_@kb+%B+3p= zosmNGr6QVlYtBP7_>sVaq>LYI>qjb)hH#b!li^fKiwrbMg8*tVTFnJDoX=`-Qfm&M z)#)d>I;8fMdQ^@mmO+S+8SuTcPG(Wv$`K?=WCq`%7yPooo-4MW><10Ly#+UYQ2=MA z=LDQxCMzVfa3Ib^-Of;6xC|xQy+b3Mv{*c0kCoPfn?mc)_^gJ`Ks1kCOg$XY;0F`< zf%7oBRc0sBuq|5CDUBK|Td)+=D5Zg+RTk919HM*xx{5hp_1c6tKC7dTwn*%iU0dt1 zIhulHg3ZuTCRm))$qZB9HiI9(Tg7R83Y=w*HC@SY=F2dCkL20xR(_jOP|`?elo2!> z*D#_vASHJn&qFkL4CJ{AsyvU{yN@MjnI zbX0;Kf@RRZT< z1vN0A7-u!ueN)~)t3HI;rT+{j0~qV9HbSU^4d3kuKM7do=qY3dw-;$LgWpPuiq3;G zM;T@kCg)RSc5{02hAoVj>YD77(~1Eu!7g6bGKOe+3Jq@j=OG%rm|<<$9(hDu<-`*K zkOzE0l~N)NVdMx~9K0$Sgt2Wl09zBXpay3o_bRg*#&FH#v+4qr*~7kcBa^LCVrDj@ zSOyw!RQ(JxL;Re$*mQo{%(;|$;SBy0o`bVgB(m;Jp51x4sXw;QlFbu$DU&Tb1vgWO z=IClfgA+F3LU8u16QL_OkKXU3G=v+_>%tUJ!#0v|2D6dwc2y;{hObWk8(mon3-?J( z26=rKV;0Q#X3P!lATvB6Z3ee@86LuWz?o&NpKSg(X)D_s%O;5v(p`hniAPVNdB!H9 z`D60lhz2L5U=9Sh9MuYsJ8>VSjTm4H4^u%6464pcs;$bV)|B(johWU1I*-W!hB%wV z-~}^|Wf1%fkQw3_o|hX=X(14l*w!vRAKJi8J`KI z5Y5ySL^HMAhiGtSz86veH`5bo*gAPVrRfI5W*(?PYjIVX)gU-uMRASsS#BTN=~N&C z7~Je6c0n`aWX26>{qEq^<6yzIzymW3`gspBT z6CCYv9!Iq7!Qwdg(NOeW~= z_7yGoufHh^TjEdEV$*}gQi~C1E?Z_Zhvhayw@Kq?AsU>W*o*VBL>i*8x{cB%8pJl( z;sjgVUe`oW18aBH2&+MBV$}!mk5fgU3xEvZShJVY;YT3=02=j4L_t*89nEYGmO<#k zdyyH!9=R1=hdyZ)s!W12(|-=mY$b6}KiN!3Kb@4O_is|- za_TRl!5JI?`tSlZM1vkYqBx_dFqP6`)_FdqjoV-g6>N)qU887pHml*-1XwHVe6!It zKn8H2*-PI-G)r~=qh`DpuW4vs9y-m$r3acI(FP8kO9dD@70w)`-m&vqoN=;gHkas# zE*HPIStF8^o2P2)nw*h z%BIcWKZj{JGod5{XP)F|8K4tGkWN>Z%FGn@MZZaUt}dk{w;6ZA&$n3=m3a{j$RQg1 z?wFC|0cV|X0*jds{zG~frGYiA7^G~tnFeau-Dzc!8DTZ}gWs!Jn|FM6F^#R_9CMVu zImwplhNqbE?hq$DnAo6vnhEClGC1?SW#KG%j&6ao+-qliF70K7$0i$BuGbgo_5cQD zZt5v!GBxftXFTCZ^lcCgei!^uqw(|t!}iQQkkY`KM$|en5N#4>Easi%w*>S`vl_O+ zU!^}aDE)n>G39n00QM%~N;XzkdBsfX6!F93`SE1tUz&KPi6_CCtK3(yZ0795r&&pK z5jpOx2vMoP7UyXie-RB2MKq+kP$R0fD4?_e`@m4?3`zrQ8m#q~!MIJr zY}X+==l7Qt^crL}`1fK}^8K@#Bz!q4wTono)%{5|qg~^Ecu3D9Gmx)pK)rjl-&NMKt*KHzFF6Ukt$SMZg>cr~Fl`Olg!_6iP!7n7}#|!f23Zm|+(@ z=q?H1I1iZbFYQ-K8qZ#PVw=QgxgBMv>~f#6PwXY4rPNLCiU&pw&LcBK-DHvbSLZU& zL*b0wwVkqXmO9x~R-Bho#-_$SXiwG+TIA*UJSBlCL4G;U&QQENqG9S;C!&BuoB|NQ z&;kUc72ZcuH>5PMzz}xo%V4{5J*a_MVvB#3@;K}*nC~w&i#HAFr7EA5*HcO!y)so8 zKpZ6+OP%Geq}Zs<$Y~~+|7VaH;^r=Zvr1rgdG5Wa9Guzm=0M5`pNCAjj{jUG87N`w z0g9=V=Pcr+z7+^`0iwa_!t}FFlyEAD5YafOkaRYsL5Kk%peQ!F88VjG^#aOf+D!|g z1)y78gTORClK{n0ZJ|%rO6)xeORd*}Lw=_PCwGw<0ObE3z^V|l+)D*G3m%LI!r6?y z4DrZ|;?riQ#8ZYT(Y>8Az~t|>y*#H5Evfqi5TJ~6gePx800Oef^4u&$gWrX@XPwv< z5;N@Uk2}8%;_4cuA)Es=2Cy*pHo6(+S+2^m8je#$XyHr!vib_o;xmy;Jf#-#m-4le zyM=5lc3*HP-Bjvl@F)|k2}WkoRln)W$PD3=@J?{{p2;&l{dUsVEF_J8y3!QVYsx97 zr?XEvfeNC*nV*Y4yJ}~h@UbQU@$-&55k8m-rNQqJSa{fCfDi`!NK$4fSwb+zt~-!d zyv9gqrL#^%-Df-$ruuLbr2&LHu^WiTf*NKU zW7i{Ome9sdXa`WwHybHzVX9Oy$7IN~G8M}p-Yx2iVHuQ$0VoyM>h2&j5XN#ZF{GP! zrU^fcN_ckpU2t}4@+{@#Q-894v3%Mv!2b$n^)8kI~ z%bh}L2%Lx2v2_Z5zrZ5gYzQx6xAusj24)G_=c<%v?1p!h{v`HxW@`eUW!7aw`Rb{i z;7h40iOu76ZzCfqV8w=!8NdCsm9X!uBjHuTSnk!iX*1xVaCVox`1xEC<7smrDt{Jf6r6se#pVW~4H4b=HoOhJuO z8p4T6dGX6kh-X#75`r=E_Sp4qRceiGOjk!oJ{w>AsvauKZmLRR4^Z7oF)KC<%b?t8 z+R%HE8KQtIa28QuAws)6fU~=jXE}K=M`xEHZHarFmd8ZyL&gLsoTyodhRPS6a9i;K zCAh^5(cq2z$Z;q9$9XM1iPE5Wkke@hADk?xA&d$cOC*hvw_i1mYybGZ9;;ftxZ-DP z-Gyb)LjA2|hPd6iWQH)3d2kl!E;u_idFJV98N?^ZKR`?@_gQ()^Qp323N6%~h=#B) zaJmzobs}o3dfW*=&h092E2V+;?#l)MnV}7~(WUo6@^Dat#zR?qbc>}}3)U(d*Hzy?8>KP08vqf- zj$WCD=*|9??pDAuh)vT*mGPlYM#v1rf9*gM;S)>VKz}%#&3oC@Niu36^hE*uPWmjtQ~1z z-R85xR?%w2gTfrG_T%bXy-f7*bjvHT41AQdK87~bLz&D#;{SuQo$O1}L=xrkT$1xX z@u56@2hHomxV%3hus9PkebneekG-Y`{8Sj`Y!jZc6bL*A(cn$ES|SYt-wl8ai$rPg zAI4WH1vN@(2v-}0_JA~~L73!9crRtyt4v+ximUe3|7p9ppb==SgG+gm6|OGnCi}ek27r3&n0krz}*>l+%KLPm?dJ{b|$U zU=0G^a*I9Q3bSk0L|AJiewiK~iPORu=zpeiEX=Z7yV;pm&hI?nKZ{gs?J;(hzomwt}r8u(c=)Y6!c( zO6kH&Bdi7%_FmOAVfp7S-Q=E^$vaqSt1Rj-Sa68tP9vJ zpI3q!w(cVwfiKJ5|1+<^E>y5+Un)~qx#CN!hx+f=_?CbXp(+7X_K#E*naLpEY&8I3 zJhko%Hq;L@c;bO(c$E#EU-42nWA~*~;O&CsSw+G;|5Xa$$yc<~n<}(Y$gTlbBO2~V zq@hk}QMeL$_YiF1*w)v|?T1e6!K$s;Z7fFSfHw?7$sos| z4Xic@f(`Y<3`WQd>?!(#GgFCKx2aNv-TGb=PZ+g@>uN3Y0-Kwu@)VJi!z)z|yA;vj z@7C8R(!eIhHI#;Mzn_v$gVq+d=0IEAU8Jz0C)IEqP39Qb1-wds(8{<5YmYLk$A8~x z%9^Y8wpU@F0IaUZ`oprM%{!7Asz`(|q=&$nHa(8YS4m9%O_?R@=PBCtO?l)L%BPvR zR9Cz-8PO0{3=j=ucq3FANu=R?O2hUvPoXrh$CkGBWu}1|c1scWnMtbQIHt_^mu|r| zIP3B2?>kA9z?EP0_tMAWphBZ3F&Q$!C}X~PV@}z1WecYUl9T#@CPESdScLvn7It*? zt>G*;bpi0Pa#X7HKzY9cZLa2$Q$fq(K8#fkOaEyB;4DN#@vIZ1(P2tsFQp;wG8mLl zauS(|_657;mV$`bC^9~=4almKSPi@2A;iB|zm6)MYV=Q{1W&c4e5X{04=OaBVKSs* z(}U4RTk^?mr0rI);eH-TX5f*#SL2YbgtI_JIHPy7QwWIito~NI3cHWDX+Am8r=^uk z6~)X}4bgmNirONG2DfYBFLxa~>qPJ{(&J9}on?tM@YaQsK811=W_n$?5!4{K#co&- zj?7Dqh0p@9i~l9sk-ZAUmU;hdczsNDrd6%=^Oy{okn{~q^~ueo{fyaYPR=AVupsMj z7FN6(&LZWeB~^fQ)d>IO$R($OLNcfzT20p?8ltXMUq=Hd2Zv~gPY7f)Olb%v&y;i; zguY-Gga~TT8eK&vr|x!Dmep_^Wub*{l@CK#nal0Ik0zfvZKMJRFu2^8>z>MF$OI;1 znLJRMnc|JvNFlKf##81#GDAF)cfgr@HB4MpYRy&fH=Uxpe^GQZwXpe|Qb;+{J~Xby z-|$$LsFYyy2awT5gt;SUogiC&*e)ZRc)|#jhRs3LcQ6VOy7|o+Q$P*7wVBRjvFTM8 zvl@h+?lqWTTea`wzga6K+kOO~h?o5a$O9RY z;{qfjWW2JMJbId$=uI%=feGEDGx#0J4EPancA=taAk3m4q{-M+Q?0F9o-Dq)3?Ula z!DMHhV3fuZX$T%wHX49HX^;**qo-R>r-3oeji3g(^_Q}&hHb1?iL3@|^tIN$l_Iu( zwEN-!anXG@PzlIT2tFI6zSHbHvo_fEO>E-_AoWP|!+T0+>Zu2s;2nvs{tP%H3aG9G ze5Ee~{xqao3N6;sZyK*lBZ!uN7Y!iEu(*$BCelEf#wWsuWxWtDl0rJ|buAi%FH-^3 zD9wnd^t#6U$NiT?j|$DBU~plknv%GxmV*UT}yPu zs`;#b8Q|v{y$gIW(+bhS{S|17ALPZ%6spqP5^i91L?c%tL_@SSGEO=@k%p*shBE7g zD=7_(GelHMLDK6o-6^sll?r23vxF$EtQx^JIQK?uJo*0FtW~l~V~}r#p+fKsQ1(i0 zA+oXPRx^`=6nd>pud~SvygRJ=4}vqIfWXQ=pCLZY-d0O7g%&9ytuS?TJ)!}liL@Be z@C-^rI0Bhh(-5zCb3qMT2fu@#Xe6s@sWo(4kl5TyvxqHuzS(FP#gG{?TeS@)zfa_MvW&g%T(eZ8 z6~;lFna?0I#KTU597&sjhZo1@ULArnzi!zr9mXH5MSdc5G178%QpNKS4gS1ZOJho7 zh=$-18$9j=8x{aOhN+Z>cK|i8{;t|vFyFv&RinYYGz-^|X>?UjY!C)q=Cc_nwn`rq zTYQIh#5UJnY`g81u}?YIjMad(p-^U^v{frnF&m+4%mWK`1kMJ-D?b!vIEyt9Pf_KH z@1svTMNJ7<;3;bHJVZk{e;C7!AR0)Qg+v-gk2|sTAR2+qE*gi;CX$v;!_G}KdS`$d zcKwC6u(ZgQ0|IPa2J7`pdn3U;kPqpl5nO|{ z+@@N8X%B7xW&v5YGp?%J20%8^NR>ttRdRb_##r^Njf^;*q^(N{jM-?tV@_DKBWW}6 zAfv1FsVN^p#yZI@lQ3;8u@V0HTB_NsQ^g@HgrpeJz$lHOLj~E8jXnu2ybe z$r!7iweb-r3sUfg#GG0;RBwg-;w_ngwOaezW;V1py4 z)3EczAOBiX4Salnt^2FQwWu)?8u`))uHhK!Dly<*-je(e15P9H-AfSLBZ-PJq-zOV z^-&r7gmZbg#CfPt4xn{Mv5`7U4S3jmRbeAJ7$<$=h7jsBI2%izX>;lQbs{SLL_`A! zW33m004QK7U__nFrZkXv1WLos#l4^gGX7tBtvzgrzEof}ba87<0oKAP#`#iDY{*33 z>oI@d34Bu|8VVy_SJNkk_PA#H-b>g zX#eTA>P|#MICW_nj0eB~OQbY<+=)4q1}UDc({#~TzRZY9pa#08VHljwuwIBT*5B1jL`rm4W-bC7-KO)Vy&~T5x`n6 zP)cKbK&Xg@fefXA@93P;u-oI=2xBuN%77Yn{`l-FC)L2m>RYwc8oCb14Ss0~vEdm1 zUQJ&*KI1!3UToV_H56O1uCOI{N><4=kr_;J<|uIUB{5XNOzt%?Q-T*(2|lnwz%*25 zFu+d$8TL` zyZKtV4rT^cpBoC?0GZwimU73r8I5096ZqI_0TUa#YK-#J0Gv^M;v+GudJQ!miB5p0 zD&hkQF|k;6h9(Tr5N2NM1$f%FaVpM^e$+0bt$D`dt?R3cnYZDNvwu$%@aoQ zTZ0KUSRKo>e~`B}uRZz)@Qtc0y7$N$_EV0eR59K0NWEpfH}_8ceXQGAm@FXtnm}f4zMNnf+vfp#T5?07*qoM6N<$f_>32 A+yDRo literal 0 HcmV?d00001 diff --git a/Tests/TestFiles/Volumetric/img_05.png b/Tests/TestFiles/Volumetric/img_05.png new file mode 100644 index 0000000000000000000000000000000000000000..cf842e7c3b7ba7d8511359684c3f0d1dfede36fb GIT binary patch literal 91667 zcmV*xKt8{TP)vd2 zY9_4ia2-HnXbtOPqs8M+Hx^d}TWXVp9WSS9G<>Kv2kK=$NM~v2MBEj~Bk544eR_-9 zF$RELheLIy@)t^kO%M^j6U3WQB45r_gQ;HFUWCCu>FzUbWBsNDMcggJ4M4)MC8^HM zN^?_#I4TKS^gC{4tP9%K2OOdnK#1e%Dxg7+ zsDgMxgO6vU+@m`7|A-KW_wXFmiz^Lkd~98arG3aD-hw#}?9C7U<2alSIlLp(sRF0F z{*Nyk&xf;2KIF@#Xcj1vQZr$7ABRuT{%`~ETsAh!|B}{R(E5 z5}kQwmR2EQk2N-#g@|n9WNOC#_ft5Jyh@eYsxt4dUWw(UR{(kKAyT52#*-ODgh`&o z$61=dF5SV>T#6=+H$;h~$X!I_Mii|QiQi0s0!4$Zz;%KCgyRT{;}NG@>Q0!YD0T9$ z!4C0^Cub$VgRpR6&X5p0WIUaJ>XB&RzFil zX^X!4P!qz`dJkQ<{S<7$cOz;cOB1PcCXtY(iFmYThNW#5()_?4y=2n8Xr1(XQ#5zH zSQIGQy-*V-Z-dGnJC1h|nKoo4JuWHnLS zDW{EGdJeI)oD^1A+Mtl;P&C1T9ZM*hKAmFX_T(k9MnN{@uEF~kx%?cG^g>AKT%Reou}X-I{l ziRXONMQ4S#T?k%6o54AcpsmH6@HXC9r=u1-tRw5=?aiZ+4e6532z z65i0f7nsvx2YB)9YOry_j@(DiT)G2O{eiC1riHTE82uV%W;ds06ep7`P!ZX~$=Z4= z->*@U*4nsZ&n$T&0zHkWt!8NwFeeEMj|`Q#7eE44NLvG(|h@ zZmuAqO*}_GMZCN*?J-rwKLfIhNHd5H;u&)IFOf5sAyu46U|*EY2AJ8FtWjo`@~W8S zq{W3{W{eZUMzUx-5DuODO;s|jF}?nKfgo2RB!41&g=9$NSv#E9RN=~XSg6=i^U1ol)n^Ir!l99h>+eONY=%34)UbAB{{>9 zpG?knGc&1Iu_Y@Yh+f7cH_T3_U%IC5NXs~H4}9g%pFPkzjl&oa)nbQBh}vr;x5{ZJ zv$PQ*O+1!XtHl@6@LI(@X2s)Z9zzn)tM5Y5EUuE!STl~>%}~$tQQ1h(MtU+mz>J*- z{$`WJ8<8`Y^uR=qY!#VPm7G=mZ^^oXnWdBeG+M@TGNEdGKn4F_?Wr>9Yl_1oxf<&wSk$XbSGwJ`K%)*3^S?HIKM%- zdLW2A{CP4CB!`xT1|hnip#Mt`m8t z!#cb)O1&@>26+PULAq}r&NM(KjMYG_m=J?ZE3611WtQl9S1?=H_g6Ri{^niI{&_4-YnnIvrnEAO6(MgME20~76!jGiUHn0tU>St|Ex9y<55g~2QU1yD=33NNolOPJWoZfI~pyn8mFA9)NBegLA zwo%LQ!ES~pW3UqjyB+P|5Y|7*Kb&KUik247U?fy{@>b-`XF|9?p?SoOT>op*C9d7e zh#l?|%(A7ihL#adBn`De++=jWsY=8f@c>r~{4w4bKP*vmT)aC=i@XKbow$ku3*2_s zS)gd*xJ3YNX$h@B(F|z*v{r3$x+}vljTmmKdq9@Lc-*v|4Ym)-xD$q50JEsUl+vpYqZXmaJ4qLz+Wn=z5E1D5-t_Gcr_fh zI;VgRHn6ls*PV~{YWs)<;+|P?*SVacam-1?sU59QmOr7YQFB0BY!$noLL&=W3>W-O zSjd)!U6BRte9liP5h<9#WKb5VeE>HkXC?krlFg*(d}aD=m|0GDLZWjkTE=s-*7CpZ zQ@XwK#wok{HhcajaF)7Co#b2!Qy}pOio+M(gv?P=Y=#c)aqR)P0<8269-IE zv{0Oha*APBBx6IM3Nq)Dh>+wA;#ZP0Z#+w$ z7p6;4HB5bE1>QyrJKY)!z-&lY@PWlqbrS?eP525|M&g zW+5U@w6^HGkTahTv2}?*f)4Eii9vdh_3N2gK6Qyn%g{1%@(W?<-*561iy@XKytYB~lX7R^4@OplAXD#y+PgngvVIIMN2Y-C{yQ z(^z=LX#t#%(#~^PJC9Gy$<)MbSRcT4p(ish4CztbYUYDYsQ1oAZuXD0;2J zuy|&XA7Bocb4x_XzJezgI(>n+e~O%y8JL&;tC?9ot23&^OmBv7F*Xk<%l|}#y@Gsz z$zwh*P9Bg3_UD;_bbuZ2XxR&ke&4CBDk5P|vn50= z7>oD;wYd23rRNTow&J0*MM4^Gc;T*d&l>{_{}AyUa%_pyrC17ODkXJ0i>(scAMOmK zKjkUIuqPjLn289(KIOT&v>?eDM1ft|B)WKsvfzp;y!0YDD>d_(<>kC9Gh?{a zDw_u$mjC^P9?$#%uEr3xz$_(dY2>koxcKm;=USFF_E6fnLR!u9{NrewDca%((Krgo zG=b%RLtx$#V6HfsQs7J7@-6fa3t&5WSUj^pXAk9y9(v%-#!s>Ge-_AD ziENdO#i>#J{tw86$A?a4X1|P@R(rXWm ziTFa=oaZ;CXa*no4j>|^Qm@17U?eoQb8ZEW5dRAxH}`#*5YIG7NpJX_fD6eP&&;Ie z79>{FtISLy|Bfr)*BCR~Czz$PH(hb5!2^t0Y~$Q-wq@c4m6E4#v!}-sh?-XeBd2*~ z-;|}HstY%gB5UqC?@!ST7C(q)L6JfoKkNJtHvo6o>lB8;SQ{=y<7DxSZ+JHvd4Bv>|yFN=v0T?_5gORpJkW@h3SSZGn(x-NGXry4^$3jO76-n&Dm? zg<5#;W@_YE)XgL`suc!Vz5`Ve^;4wtK*S3*`VOp*Uy`t8h$aa6_GatFJ{lb({&%baZsbd2W-Bz{5tGPm9v?(q&W^_uTB%@ZlT-gf7PS2y1Hzu^UtBJe3;{IA>@gQ`tx z_8$~5jNNzVFA&uhDr)=Ww9~XS@48beT3T@3Nnc+sxa&mK6_hYD4+~{&Jh*QUH4xNI z95f>&wBL$9F^oaH^9}Ly1JhFbOI7oS|q24ABum z-YCvQVIM_X1nqW-JT}~2lepc>6Q_e@Cl|uT!`y6=vI^P!Hzj8-ubL)j%b1zC6~7TP zOBvO?!2_vT`289jSEGoUJUcpAWvhruSlYCZ#@=;eMhN=l z42p&tK2CHP&O}IP`!FV<4PXh`8linFf=_WBpDXr;K=M&`!eF0xW(zUo41(lX7Gyz^ z$H4VoaX6RgG#N+b>`lwanP>0siOZSU4Dm|Y(!2p_BhS`<%8@;#_Q2!0yYQNqdZpla z{tIwqFB8NuC%HrK0f=8PDCIuy@0W4cMEuu64>weH-G3Yh`S`quIQ^+D3l4{07eJ9P z&&5+q0J<_Y+WltVivj~!;ua6bKLm;gv>>TN3vNm#0E10jZr%;d%_gZKk-h5dRc}Df z4lgRFMUWwRN9dQwjhtEs-vIF15Cq`IJfFMJAf0|k-}( zHTiUb1+zHU_Z$c2-XV&JQ^Xa(oHCEd&lJ*}8VjNqch`v@af1%eSJ8kg6xf|WNoaKp zX#H75=9djC*)X_yUtOHCeY`8iiTifBPiO~ zE$6zY(CT1&Bf^?UreQnw1PqWKa#Jn=(Vc<7Y>~1P2CK*!38uPB$Qe($3W+o`6S_Ii zbeLQwXLn#`!=x?EU1A_ni+_-9+y|%1Rc=3hi|0SrfVlMZLXBH7cIi1#B>J*6n2gc~ zz9tPMvim{dUXr`$6zCJTR3{E!bmCT65P@yH<;-C_q%spk1b4+iBnj9K|3@)ML;^4z zCB-W7Y!w*sY`Ebxoud5H-sTc%a^{_Qmt1I`d7GJL1v?XyJ7XZv=B88h(Ubq>>eK^m zos6iqPf<$)euRnzv#0AoPAh3?14XV9(kAXY-Fr!6d6|l4VP!4mmh)Pe9vBd=HoYaF zz>Y$Lw8#gsZQT%QKcog0@fJUZZQ_}B!Vo4#JX=W4sDh~E`;s%1h=&^*-%~S7sE?mJ zT#zwHi%ZnjAJ{%@cJ1Tq=U)tlCDMvoV36=kMot^Z9njJSid0`6z-y=?q*5;&`~Wh*Oso$yxjofRo`)P){?9PVAYRGa@%N2yjGg{YJo*JPC^9YH9eA z6SdiU&p6KEp&OuFaS@2pb*HVq4iX?zw*M1`Nkee7}l}6W04hH_(Uc6;a#rblMJ<7KE{er5S54RQ`!H z7#?(s5~nEI0a^rp1BzoUgA|Q<5DoazDP!+)=3px7G4Nd#giq7ARfDvOBMTdpR^6FT zk`l^;wF6lYsalpf5ZiAlfkTJWlFrW~p=g#ip-Mq4BxeO41`~+|@STW#qTJmv zf+Qol&2-@2ANfVbvf|vFc*UNh%x{!v*$dtGYqUW``|4Vvmda`FC9H_}Z=gn`>JV`P z8(?XVFkmA*(c*CIF~M>wfDGm=A3^ZelC zK^8TZHJK}J<9?7&_|U-J`;P2}RYbm@xH^dE^aDrPHS9Cnsp8AOxE6_G3!;j$ioYUI zwU6E#uxZmzq~X}OE#%44QZrP`sJDE+iwG)cVi;3uW*g>AEAhfZ8Aj?Ho-E5A5V^qJEoWZlgJvrg2QvL3X!|~%(I(Q%tWzFWgjr&GM zY6ur1BJ!E;+DFE(o^~e@H81zKu`~e38U|USXf`%-Bk@QTNZd%#PCfNaJZoMQ$QPJJ zQY3v#fZ%+Yi+>)==~p%;d5xI^NvRcBtC>?q(@MdRGo~V{6xeBU&%(OWDV`Y&a(n7V|<{_1iae3fw$E?d(gPCsQ;cfI$h(q!2{Mres5t`LrN>W(GwpCva7=llJ`G zkg}^PQirKFmKq>rK1~WEo+*Hp_q)g$Fq>`eH3hi@f3FTMKC*5o`lC z@t>n;DQrd1tVLGKDO_Z63|0HPA!R>R*u5&o@&JfBHPSI03eqx(0Vf(@#S@H*1mlX` z2%#BbpJ02!e>fvz2M+{Dm7F7`%*^;2orVPI`?B0zw@u$*X_;>WY1s?G1O7Ep&9}&$ zq%LAPE%@%VpkIQh(!m7j#p}z!-l8g`S@1#{NzqW^FQ;fapJ;yeM-Cx(WnpA-&R=ns zvE1QXq1yT?vq|lX^#f#+Qc{LzV@S?0kySUFV_?LyOUM~8!&MZ>8345OWiyoOI4LqS z@mJ8mu{@k5ZiBv&3uZ^+BBo^zd>!(cg!w?qv7W7sJf%)z7qOg{vNSKSYgrmdbc}f+ z%?t0{C>nruwTPnS08Y4=8{|iE<};;J1n0{PdMv-eRLBEXuV+2s7_l!6)2I&rJmLe4A}UTAvhULRJAjAuRnL7Ya*UbQ^GU!yG$yh8ul-2Io{ zU!Ghysgs8bulyr$^sOApH{3n~gI*8si!l61j>G*L4*oke9s$Ge?6Ahw??{8+zQKI; z28;?iG>P~t7;IV4OS%=<)gGX_Os{$){seI1O@=4(?=8zJb>_+s>R+^xI8;c#1?^Ty z>Bz0Hp<@$=1X)fzL?_QTw1~3@F3nA^3u)HgGoHWeBmqLAYFVhF{f1jkWe{hJ z)5#6eDypbDtlBF~3UYY|?!{#Nlf@HMdp0FT=}@N(a?{PGHXw?iy(A|_oFAP+njM0F zRnvkA9-2vooWVo2B%6H|FEp#^LDu2(g&<4BJ!v1H1hXK&qLx`?f4c|G`nE}kTJ9tB z5S5?2^aSarurvtX7(Y*jngnB;c^nNoG%0UN(Q?FV0V1mNzo)l+`uokE$2t4kY;c+K@51u-9pYRs!y9)l#k6( zW(E;tiQ5j5j5d9j3_NG|nE6$yh#d0y{B`os@JLCPq%}-S*E2px zNW<|PhbHAcC|Zwqkj}K4WibJSkrs5YJM8C7RV@ z@kZnfm~mgCfu*biRI^n!gBVCJow`XD?uKv72xhBj*{hZx{p>D8EiN7xK9i;K>4A{u z)e90q+8;&hz)&;=Q*}nQ4 zY?0i9U0W-P49v&0UJuOnu$-J({2JLTIPHUUH!GZ_^MaX|Tcu?$fcwqGL@mhQB&VIj z(y9|GU}+$c7SiVLIvKnzMbjXvPT5Z~?FkS0-k*6eDB3S2Jvk4qAn%-YsQ##Y3BzYR z#I(0s@pJ;F@epe<<6hU@Y+5ke50x@X&Y++LhiMl%Gx(~=X5|C3u8l=S{83KGQ&3Wb z6wD$VQ5Dhlw1%jiAg4hLvoxH(j-`P_r(T}V%?N3~jH30RZaH(ZlGKuhkyeo_UVRlQ z1yopj#aXTW4#A+8@@UKP?nB1oI1 zXbelks-E#?Qdo)xz}WO)ZaK56bN-PTq#p9)G4o*1+2@2WLACY*G~1gE^(~>F9-Hg$ zxzgnUNZH{I@k|@oWt|tf9XYc=t|)Sb)htxUJIZF&bdgbJc0?s(!E6;RdpT+Kv%Kg^ zqUL4ZoTZ&Fq+wQsEK7Ht77Rrb6gjaurF=!i>60FmgvL-b1ygnYNR~24o1C?-N>ivV z4baCk>n+4q=f4su)reuv+L|{zm!a7U#ONwAns6YJ%Jc>~uhIq}C3iBI!nFvwV#yf* z+~!dgC30pFoPIEINxJw$eE1V4XJ%d|A(**166fM@J9xjDJ1Y=1H#d^g4(8GmXWf;h zfy7ING#Jv!6b+<6e%XQYL;U@2Qqs29jGdkg001BWNkl>++U_Gtb&7Aa9Xw#jLCW@#`Hr_;pC6VfbriU!s?w_V?#qV>4NEoVjn zwS<=WH|XrEf?SNhN6@qgl+liT(08Mr-4Ln+tIUbNjLJMo8`!0sT^2Jpo7#ZbFsPJu zM1 zc*`35hX!gVHx%l;o}9egG?;8iV(*`TPXqPQ*ry>eE%)t&E(rw)Qj}><|QKRG9bC6RQ4a49S3qqcGl&^XN`Q)(WQrLZ>!VNor)vvs2?^n27@m$ZGZ5%j zn}`qrLmNlH&rgJXWp6gW02%Cd@eJnlQRYk zIdkYp9uH5>fEAR@3?`YGmtHcC(s6Pqn0Yzj=q9wx2eB4XgF~c!{!GG0&=wK3>gAtE8>VQ`l6)NPh7?W1I7#`IGp0YtD*ea| zL^H6=zQ;$u*gxcJ-}l;o9MWyk{lLYKpsB7_#(E(7PKb>^liW6k3|CmuL=CLzvU@XQ`#xO|EQ0*)^6EI3n*{MV?y<{x@2o4ab zO%Iu+YFP{wReub8rPrE-U?)e=g5>G6WAM^5Dp$SnbQ(DFb|*-rukK5Cofg)Nd>jpI z3G}zu>Xh6$@qkzEHve*men9hE&g^P6S)&HCPoXLF-r_6H>V@eo@e7);2B{#l4~h@f z7J!L7U-#-`YM&Z_lo}&sQ-;K|t>g?paE7phoOvg0&Dfc85g&2N?6}HIsgu{P#sEb1 zpBtu#h%a|-mD65PLJ{H|E$z`j@4AzbtR$>-t&j#Qf+69%&fX42!U$kLOtSYrqpMt6}3qawcU-()=D|&lNgqv48Rv&t!yMNDg5o)5-H^$JQsCBB( z%o(gI>OQK&K0Z8Bn3JhCC{^-DP^-)!m)}%AmvT#T2J9IB&aB`Qz4V$fNE10zGYhBV zTER@=Gp;;;88hXL0q1=B_j2X%Ip?sJhSSShnoV>Y>IrFVA}5atvV>-1Dw@E8287(D zQmDuLGr=i$0uGQqC0j|8PvS3@&?-nIv=bxwt2f(5*Ise)3@6k(|Lp)jMh3bdV+zu%ZK(8Pv=iZx74}X2%o0fgI1j(T^k$$%vF> z!G=|gUwRI(G{1;ji$l>|mIe}?U#=wQFD|YVzAdepwY;37^~l+kShw0BzbcIEgd)4K~B^i;DEOrsbzmswKadV@We=tS`lDlr%q#LM@X$=!7MKOGWZlpwXSdbc(%U zDx^6q%_dG!G?++oFG00fvzt-0+(5h4206*=QN5K*9`-8MenXU=W*bJ%jDHEvki<^A z+*Gz}#WMxHk}~I-3tEGW-lc0dUCp3U;AA5?(@BB~0wdg5vIk0uI31+K-}M~14VqhJX@QUi3pf;w71A)x;@1Shy-2fRik6~I(egV= zfXqO7Nd6Qt_DkiZl@eOsGwZSG6@g#zJ#8YA(}*!trKUSzt$3zjmO{qfvT;c#GT522 zCZNsiL~@4C9kAE)XU>j9XXxLKnJp2_l!5d7*&?FmkM+z(2rVG%ekk7Hg(1M&*N_Wk@ATpFmrR6c$N~T7SWOoP`2x&HvtZk`6cofe8mI%^9 zW`;fEajN=}>zG-9<2e2kk)N&E``PAa;O@@}{50AzczA%tU%i5zKXO6VgQ9_u9*u_I z#V??Zp1Ef)$3gzyz=NVuKQ;jCf)&|BTozT4+Km0Wz}Qa^fh1NTDw$vw<+^UmZx1+a^vpL3X&@2lOzcu16f(vJ{MsfFz<`QIwrj#5 z*K)o>d%Y_YZM+>+1J^Vm?^p-9Ec&Z4tdLdpp;4$>qDswHr#MhViOv+y(mqeC%MEOb z-bl_RXFb-Ev%-l46H#|Xa+ghWB&&s*nM($qwR_|&C`jZ2&;KFAOiq(0D;ks2Jl(6w zEoo`4kS5PLQqj`R6VhO7pw46~f>kpL8Dk?>5;I0N07gYq$l3+eAXNl5r@@D0B3z8P zx>#h=W!Fh)i|}y>vAv%NfAh)&i&LAC9{DVS_U?iH!|U__1`w-X3_)pOiq{Q7aw$Zw zT7zZejPXpg8m25r1Zf3kCL*h3vjNR45X>YS^eorSj<1})5=HHce2oBQj6a%&eJ0<; zfzyjZ8mVu|oRH>KWK%#Qp^z~)04M;3R7GRj)gxD2w9nMOH;5&)dm=qU#xN=n=3_LE z(b%p=jXk_DK>-z;8TQjb4e)8=S+yUuw~*Ue=LxV{1%-BQ_-8Hh= zux5tyl7hM0*z;%X;%UecH5X1-J@U?BXtk z3#9EbKC4gqt2k%bgRZ@cf96Hb_=`4%vFh8)hWm}@xV+`BM|$vkSjE6J#~O`iE6jRI zq^ua}zM>5>6&HC(y76RkW|6k~k;0g{i6E^;sc?RE=DCrZjj{bt`NKNhygl7w8TyIw5&zBmZKYz*@q~-D6mpO8^)-gGrk3FG`8K?@krke@SJbe&KQ<8}fmaS527?p>$FFhyhh@1SU@gl1tjIhCJq zESg(sXYz?tni;UYz3~isavFcFla99Jd zziuRF7UO2{0HI|wkI+;O{Og(7@r08bm6gVGqn~9&Ep<8}r#am$SF<#mhASMWXd<$g zq6sXR*;s=e6fJF0G}{og!>;&UIK&Y~Rb`nk+@y6G?lKBzfaNYJ19*Y&yK!la4km`4 z*Jp`mYi~B^-wCh=Hz#NCJY>yuf=E#|vx(6;Z%}1s;#4Y0k;vPOV5SVv_n*CvRp;xh z9_8Jyk$N03;ZG4bUw-z83uQgJ-23@~inrtIaK9;y`C_9k}D^wBLj! zy~FdN;SpUDr-8|J2s%i51G{Z!K4m94gGVArL7jt-Wz>o1 z%VwU+6;PTmYw#*F&J~gWUVcBkzqYr@X-A-neGdZ4@)S7N8+LVgevUmtn)PXvKlf(_ zY!!@9XDdxrwA4Td70uS0s%Q$z1MIyP+FpOle;Z!%ivkl8nrO+&_8o^*Q}mE_)Dyf8 z7eIH;5;R-YNB0S=;2>`w)->7Qk=OViMWuGNcd3tZf2bh!$E+(%aWg@CgOr?s{By50 z(-dq5tP0f1BWD0kcX`YV;xx@HUIKCMt3~bipGEhkB9xrw!q?I=^~>o^PXmisH%LEE zNP|96?bPFFq)-P^GUus*Fp^j}kt|YCu>UwNI9-VNH1MHz=si#O2U)C>2)>iwq_hPm zdV1J1;CqS@U7lbq-A%d(z2B&1ah7;iU5;_s7O4SXT47^FP!XNL9Rfos*bG=XvKgoX zP>xly8A^;)E-&5BN;ESMajt5S{u}yuLOg`85gg2=C&VaAgXy6wlN4Ncg2V}mCdd>u zoTX?ft-&do^VC2rMa$~VDP3mJqj<~N<(9r{W9~&x7Q+RjwXVTij$phA|2CFTH=btk zqeL4@>1#EHF+Y4si<)ePx~nFwI1|FRcc;)8 zGdn_R^yPfZg?q=r5;X@wC~H~T1wtB%AGepJPy#0A)Nc&rDH$2M14UECgQ*Cyj-pLq zvWd^ zk0#b0O4EtuC(=yt&=6QcyD#uKntm2dP~ePzkfNTQV%(L(|}8r(#3ZrNhvo=(lvF6{OD&#@*+VZ zrxBN)7`~P^@{Xs+Mb8z|0HDfcO_7Sm-gW8}8!d{z`>6AC6>a(JoVl>qIjr4sss(}t1~loymwy;w(?+$7>K z;+QS;E&?oi1F%nLgpb+U_oe6rkxR*$$1YZpv*nuE7xRVv&s;0dP(;nkJ)NZ?codCh zX_HT+;g-S%T02zlZ=+~2;#b&$zOm@+a;rPzhd2p*&^>t~7WMr`xDoQb z8PFrMC$SweOu5V|*(ILok0Cj;h;KG;LeA`Y1Wza`MJG7tDsTm8gIm@ldZ#x&kR6KR zF%Um}3o~7)FOTK%7b2}D}s?^t0;sAVZ0UFp6xE1 z$XRUgNTJMh0(+KTE}Qwru9M4|*#n=UK=rKCjrE9#+Sm&O=dd&Y-~`u*r}Nxhr^T5R zO&i#hjKihx3Mix$t%4dw8^taOEdcE^KzKVDki4L3-yz?$n_+9*;jQJ!V`QUQUXDg+ z$P%fl7WINz%?0tS1YJ?(W;5qf>T}lq+##`%#~UG^0uprsD}Ax#43%9ao594A6Y-10 zSrIckaI3#FkK;IwZ~ZJ`X%dDIwkl<5PDaGiV7lAZONBJtZIDG-yVEGzfLm)2Q#60_ zU{oZu8v3$lNoYQ3%V__mom__dM>vNWqHsAXmzys55!S1DwChg0*-V?Jw+)@GKI>k+ z6*;p2o4rkf1&up=@S?K3Y!)yx+#F{#&t_&`X49PR_cvce#Cdn}*)r#iu!mFprswPM zHm~nRE+2=qeNFNar~87ZN&h+oHtGxhcITrL`sE5ez|arwy-s8X>`a9CmpW7D*0V|h zMY2DYQv+q8YE0kdR3YhrEAMhzS50907X^GIFLL(i7hv9553G5MGYZU&B={jtKB@)q zcP{@7Ju9{)@b>yhW((k!3f0%Kx;mt+;)RM&_0b*j3sHXTtVd4HGKYwx7^BR9O3?`- z964iUGr@HfBoUMv&?zS!X9T?(WJQ0{gu`URaK0B~`qC3-iMVo_?@wGUEz-cyn4Ko1 zk$0W2UDobCDq3og-dgINEVI7^I>>NIwdngNy6iKjkYk7X{AQT{0f2cAr(sy>c_BSV z?+v#3d`Iz?3Rj6|%O5+_$PChr+@_=kI7KIj>?ddNK=$YXPtF1lCG9QFTB4b?_zdRP zgQev}4d>i}rJ1DQ%WMI#2b<`OJVDWr8L-<&(X>J4HZ@rLAX?>?v-lKRSk^~!9~yzT zbP*k8ek6mBpiSd6;>8c&FTnDL&vsvK>Mf+;bBlPUH-?a$RgvCo>U=e1cJJ>$+TKf3 zQUjc#6WFUsd+xghZDUb);nNin439r}Q?4qTdH!XTnH^8S+^_HZkt5Q>L^wGO=S0;H zeiH}8E+Gwga9mEcK{`LwDRj_bOWu5baAKP8nM%0#j zM0j5eYCKFw1~ewksGCP6gWH*uhh0U=GNZxPa9#3)qIu9QfLL(vZD{@L16 z&uPqQwEm>P7J65sIn5+am(X~hfs=qIjeg5U5U`iC7-Y||=lso}7Nu`C-@Y>+J{u9| z6e^a3vR1sk>5p4)HhbjcOzn$0TLbLe+0I0z=mb)@kYRELk8XUNA|l~Y1t;-6nArp9 z`LiQ@yez)-3|bRJb`nc7NghSx<|BL8i9!X9N{N&pie^{w9Vl8#xm1mp-E#WS5xTQl zgO{EBl@i`a`tVE5gJo2l*&le!cW5vsW0#w$@bdy6JU?-URky8(#j|;GmhahFKQKkC z4}2J^1az`dud=T=l(p!A<-Bob0eH@|713L$eUF8f zZzi6_aJGper+Y!%V~ zxZ-%s??lm<^{NfjM;mJYvGgEXD!B#dU0ood6{?_}bXl&$(JM|4Twk$lbv~Yd9xF)L zd6%2~c=JL=491S$*J`^owVBGoLK>6=K?z`oTFj$Z! zB{BT!2Cq0-tO$M&ezBfMPA*zY8+-Wd2g@%v>Bu9?P2$;kP`jFrDj{e3kJ_vi`7WLr z22;1A*zjfAy^0sz9rB37GSzA`V|4z?mk!{K4I{@j2970L+%pz`E}hKGRN~<8qX)V9 zYo0jSX;Sr}G+#*j5HbHiBJM((qEUC93`MhMw$C9&Q|ZM#kGWqxVYy5rboh# zGqMYr*#n=Cw=rR!h#z~Fn`>z}r^eD;PpCysNKR)%ipI^sVTuOYlHPS%iZ*a5nJ?>% zqQy9kq6N@xq&SVpL={|CbdSkb?Sb=fIl~*EaRWup!U&sTK$0+OEJK8UUk3~?U|n7g zIYUK4{|fPb#`{@|c=%E>mv+>Efi1xtabx5Ro}Vyg>mMGDP9mldPDMEV4$MqM?84X8s)9iS(tY%Whyv11 z9IQBDW@GTMkH-C0T*4UUD-BPUAd9Uxazd|ch1=e2Dx?iuV4xEynl(($EKtng=!b*r zB!X0rXn1qR-Qb<{^~~&e{!{mx-`{MO618I1FiV5!rwVDXgE@wG>Kg;+P&9?up~^i? zLQBJbVTFXYUd0LGCj;htfB{$O`hNIB0_wac=R#;jRkQ?S;+(?pexPtBIWzXr$2A5z zfudQv$r)qjCl-ps^r~#OiQHwuDCe zZ!v$xx%PsRennskWH9#uPZ3@iDUzM#7IYEP%*7ag8d?((W#reiLPhNSmJ< z=md&pts-aev?tk>R~D*nuqR>S4Vl>kpW)Xh-JYcxxHa#fXvFkf`Nlv>N*Ic!EkZ5I zrrhKnQz6}uJf!{eg71@mOF-rMSrpjAmg^0Y;q{4t4#^NDjz7Lqdyl3kHy#kIug?hrWX=Pn zqJ1y9^mGYPl$EeFoD92mR!IA9+_RUS|Gq=-{=tBmNeat?*;l7%)*_{713ndEhwm<- zHA5Z=JfjktnQ3TwMjp6Ur-OJE$iTdAGCk#G+z~;eh<1=788<(KW;~SHnc|rOIibV^ zNte@@B4^of$9q-USa7N+4>~_T!63KLrBGX_L(h@EESyA;$`@ZHo9$p`4`R~XZ+=lk z&C7G=j-TbSG^a=;q?xnatrj+c6Vh%GLlA`6ig8FzCMQc%w`2~{kgcz03 z8u$T|_kiaJU}P{Ye&wTS^={}u)1xVnL2_0?62t&w;+aCwD1HynJC-gOiDwI;w?aC8 zXaLR=WuWsZa;EYD7eR4S#~nW9K?*Dji5*#7f-@hb2Q+IfGy8h#VULgK`Lokm8cg?! zL@dn!*NKEQlA;L=m@9j0ilz`ReUfwRM%oWg6eP5WX{EhZ#jHd2OlvSeuoWV4F#RJy-u#@XFH*G+Cj{mhdMM zOC0LGiY|B>IkV8aZ_(Z&J*f;_Q9-JXSa0$WP-5K27-CYL_5L^QxNN|^TzIWHXf9KE4I@70j zb#+zkw0AZHWX%-5WTz~VNHPj3a^!!NciAEdsA3)>HgH#$Sf?>vuY#xUHi)@@deu} zIAOICVb_1&BvQ>fv(UGgndUyvgH6Irn-9MH6;5w*Dt7rP;?~ziSA`VdS33m$CU5s_ z(G;2HM1So~Ehr{n25E*fXTFw2(+5tl%Y&cUtv6*=rBi)VzeLh8(XG&sN{*9!`US(p z=6VxEUGQC4Dbkc(?qOn7+^OQ-%7_Qv3{4r7`L-~+Q+53HYr@IsE&7odu541-U^260 zw$=T~v?fAI$T}>8F>Mz4uU_n_s^QtYg`9!;R1_PeHkV(WDzg`#HF&5Z1g~}(dnGG| z1b$LVIdHc^M9!G=o8@dS;8%Y61YIu$UMra}cR#_7f7`-Se2Ol?c}G|HRRWi=Az}{K z)n!1#V%Rm<%zJ5hjfBp?VTq!9;~*?iR3?Mwr=V5hHWwz^$Hc5O0gkK`z`%Z0H8e$W z@0!ArV8jMhl-0vggtsZ1obEXO$uRU&G@>9wA2%|U;>{~J{pvuXHSjj+%zy)UAOuIb zJbNlJI66FPLxbm3J@89z??Yfi_wy}P;Aweg9i3GY03fx&I<}jQK=$*b*XP@bEU`zf z9r_++K)^IV3`GasE&?f|HGz@@_<-J7wl!RiDoa9oYHBH?@7lL| zU;oE#TfR<)&jm6WZ^v-SPT<3r8|PmJt>fW<4?8IO9Kw?&pg0$f@+5q12gllttYi6lyY=uT(MgOn}0e?71g4_vbf>%dke#wuFZlm11&%XVgU|;`<@wP;@ zoxTVfc9iwtHoQO6i7AZ+qcsdeu28cQZo?e&0RAYjBDJW+qp; zo+r5fSS4Kv&8Ch2Kb3&F1)8I90bcsp3T!S(5gxlt7i%(;esEnXj3ONmZqFd~2TA;+ zbjy4(SQYFVm9kyJ!c$=l3o}k}*tOMh>SCzOCOVN6wz`DKaii4`cZh{`wKv|vFD>F` zWJ`DBjbw;@3RJwJZTb*6+RoBoFdCZFFy9%0DPyjiuK3ea%?G~=d5t_|GKD+4A#Bkgi^*1k$>nRg1Mcn{P>Sig>^cDeK zNCEV@%A_7iPYQs11$QLO3EbL~194^^I*u~exzSO8Sx!sar2oX?M@B&teZxvXcCDEe zmbXkr_IhUVinQGkicQ~q$v7v7wCz|VqTr@Xy~(1LsU4S~BGtbjMjotA7?biMnhMoz*>PA`tDn@4g zj^?uG5IlAmj{J-B(rYi2>i+m>EslBIl0G}QPGg*VP+R`ylInbU{D<~+I~?`}DqF-s zG^W~B3B}zN^u+4cr(_D=ZKW=J!5~IKGSM@hRLch9K*p?o9dGN9sgroApDza)Y^S)? zP=;8s*b%NOJKpy)#a zl#i#U85VV_?cZy-f@($<9gM_6^l`qKtdAfodD8AKyr7`Qs7}#mW+0;cVJdecz zPQX&IH-gy(6SNR6ug#X9f{k24`uFotFO#DKO7)<40)g^H!m4U8Bbocr-M0Y_xE?X1 z@PGh1OF`#Y>B<#ogxR)-xUtBB!QMce#-R586b(C~X5IDh1L1#C=M(qS5Qb^6LdM}t zY;bYAUQc|e>I=PO=6iPLBGdWy%NSVAJ={nuwhq;d_7>pOjQwEoF z7~CBuOQiqmIp75(NHN~^w!FdiPp%~lUpUh#0YwYV!_q4h-S(2anyc>tQ+BQ?2 z*m&}*UU>8?y$!N34oLwXf~X4m|Y&rHs>?y zJkD>V{>FLKi)alh$+JR^R&vkPMV=5q7TVV|f%xUk4i(N0L>kF8ogmwwOk zXQ6s|KpuYiC}3g7{1g>)JP8ms8d4kzW7+vqu|H*!Vy9yXw8BV%)h#q*DjIk;`DuZRs{WhTE#+)=zoi1 zUGV7~%jd?M`^K08H#?2rDwZl~qvE5e>UP~~KSWi2{&>MA-WBmTZlhF0#I0ikaFGOM z3#fqN{l;uLZ3OFP=z(bxNLZnrKJazH0)i)C6}g$vfM$_D%K(cxM+JJqK6*RC+gRJ@ zIk{ZS94iW0VA4+;PO75-Y_ypdS&Jk38^_>78GhAQn{;{$q2CxCf8*W3VhsfLvcj5A z_`US8g$DFm`1@vmMV|VBkJQw)CVu`#w^Y&_vx*h}{L@EeeEmO^DTq%EzrvU$fiQ)h z*qEI0>D3`e%m6w+v7CJ+NusdNOadOp21)Vi&-f_l(Dl}w4l+5wa)I`6WbiFPuutF3 zarNOZdm1+LKQTnT<&Q!)8Se!l^1Odq&M8C?^tdB7_jJm!6qV@=5r!SZwBmh z=V{AiCz@shAb0`H=@Hn|mWYCl5%IR+ZA!L@8K1VhC^`G*9UuGLO8blATW+0r)XvzM zNNRuRB^x5spP%jOOTRAtZF;BFe-h*fL~6*n3;GYz zH|RZ=5vzFYSF3VJ1)JCithlv(mfOR1@x98n3OgIYQ#K7P7{=8xZiEh&JH zdKhRTe>i~*U5EW%#jqD`OnS`r?slw#9Br?YTBq0AY8d=TY=QEmv0}IA93nVzF$ZMP zYo*BM6HPFP6Ony*-Y~e+)TV-80Hod1?THgPrYJ^gVPkyKGZ-UDf<6)fn;wv1!8lC? z63%&l@}OD@w&)y4`G<-iw_F*(581`;54Gb zNMVMX);%WBMgVvLhCuSm2ED$i0}dW-9gp7jpyHit?hqb4iZ_AG7UBZ%Q4#!w#W8a} zSfso{aui>q`@=B>u6{?Y2mm0!Q9Ol>(Y0OFzmT6w>YHg2rK*OHdb?0&-7DS_%c}Y>-WGPQ!yDSY1TNMIQxg&H*XAKm8A=uwOL3Z z(FynVQ58enc%~Z>DTnTAd+PCBwYD1FB|!>_si)W59*J50gmMCR(5@vqCnxkLfep^M zsvHiE9HX7Yl#p6yg-0fpdTgSd%*RG#$Q`^S2a4k0_y@(t2%1oAk!>{|@8t+3H@Lfz zK6_?;if7SC0{^X~XUKWc!TxGtmwL?LiY_~K-E?6xQsIB2qy=1*J#3gXnbP^q2&kdJ22vhz8KQy zJ0aNKet&L}>`Pk#2d>f1Jr?O8dLvpDpnay>zN1xIeC^iRpX%!dud6bZX>qu#|nI z-rMLcH!Lek(y>ypg}qzo|EWG0&Ug%Ii-_@iLw<@|>XW#QuS-@xunPk6ws}ejZ!h^TR1CZOhNeaoC`AUAANpe zCh5fzZLs-BC)o4nROx!23?Oa-d0)A?3akQrY(=m{^IR-Q*rr}bk~XU8&%i6QsN#`| z6zO5-kT(sVTBQW!oZf<9YS8+$$jSb8imkQ-#$dQ{lkJhn0+jkPde7nN#xgweACG6Q zQbx_v5D78mgR2GU*A&oV`gaJv)r=A6OOWE9a&S>KqD!AKUjrp#|h~=*Dqg9&% zDHwdk#0~8kSeoVJq*6mVRkG=rV1&EhMIv!Z&xuMu`WY$oq^lHyjWDZyi&<|NC!t3j zjDO;n1iufj5SWJQ=95++8PSQodDIH5RgM>C!$98{rN{>&JPKhbFN>Fu{(KeNBk;dy zh3^tQp$sF1IE3*-kxN7>B`$Na+X+s;KEIZ-J*_{J0Rq}OF*T*``cEI#9)!nNU=5*3 z-0^LCd`Z^$C;yP64LxeG=NbM95o+>$@;EhQ(rgO*yZUylsYSP#Qjs?KCt_{+$KNQp zjxZtNar27MN1F&PscL)r?L-pR?tH)vKJ9F zpI-cjm$Tosak=2dc#%Od>2PiV;zFYaa6?gBZtDN}W%d={Uh%KFco&$FLe4&#$98VW zJ;Jyd`*g**8hvSZtMkqfMF*Q?AU149rET4AN1HsL>eH{L&;~ru$%U~D&{qd^tylK3 zjA8l)Vio>ZSzocf<)(ESZE6fU6*ZoKRFi0^Bd!=HryQ{J2(eTz0DEm*!{yu#<^0}j z1^hJ3`RzJJ#+!3A1tKmWD>c)pwfds&Ye0v6w^PWWX12!shjGuSz-!wv)%ottYid6^ zZm4l-YBKz;-BIzZ;W2J6OZH3M-!QCno_oZ7bh?hq^t3Z~yz954zXmjLPrE6<0ct=C zBp0MYW#CLH%S}`WhBH{ric#aiZfyAj#AdQKEmy{f_G$HtL^Ez`NnXv8<5aKZy2?1y zQcBn=?2C>%3G{#FG(2Z$^SQPZGIM(3!!*k?df6(;(T+3e)K9?I9r0_abP3zaLL8d) zQK5}KwV%k?ue!czq^g&k23{V_BqKc)-)rvN;&yLELu%z`?3wrTRzL&Wusiz#yg%`t zbO8@fqoj&pc1*+PrKvrmUBh5RI!naqBb(cAnA=5Z@E!Or|0b0iP@VaWXmSws4Do0R zR3Yi(^nTTMxeFAEr*U=eIJ46s`$~-c?~ahCMK1Tp%+uM(V}Xr(qb%pk%K;MrLXB}8 zm<2G9B1Ay&-qCqrCNA|Nld^JO^T3DMw}E9rMQ;_3iB}H!)A6`24+Bs2yh-N+f4Mdg zZ??p@G73*bE)c(@tw{;&Y0u&gTqDAuj{$Rf4*bBiWc82fA?jE0%=m~N0hH4^bdd*~KX#JhiADD{P>oAL=}6al7)&r@v(8X!dQ-BB-9h3%fMqEr||IR?HyG9b-NB zflbwpA3hJDU-8+T!8@`Ip=hr=Wbw8%Bf(}K#H;RilTGWXt_wa?tG7B9AoV{nkf=6H za*g^;HcFn$(=lQt*LiX)oC&K_*}E5ilaEM}`hZRmNZT|2)Bl4^nQb$sfSd*@cEg2e z8kh&KX|!M4)s35ZJ9{m?Tz{h@OcwRa9GzuQY6pz`qI>+KD8Mb*c+s^MjCDQJ+(vA2 zzR{MNF$6!D+`iR~WLsNMz0iw3{FWfXX}r*1)F|s^`7kz{Bv2| z55`~b@V7@){;nf()mUI;&%|2H%K?#@X480T!Z!eXVFKsBsVD`m@IR*iLE6TV9>e)9 zD|Th5FaUse7HW*5d}+gFY|wkH+RRZfZbq<$`>{8+Jx?chBmv2B2&nRlZ{c*xtO$=~ z!>j5nUTKX$NS%XBei1v@Jt4sOFmjDKr_K(gc!L=q5yKv6P!e@yo>F^JKzh4U!sV?B z(&C)FV%i_?2==47-j~*Tk60~8lg;b~Q(r00BxNt7;;M@q} z*BfUc;nom|y5;j~jBZ)nRFoHq${*mSd|IHpg6Q}#2o8Gv;t`aJXtSd%cx*~fgMEa8n>OMn}yv@E(%A~Ym!r23Pdk{f9ms?NrCcvCpc_IBpfI!09j)j;u&7W zbKIB5d$|0W^j}9{DpZR1SvlxY@gw=@^NaI)`kZNhE{c7JXn>X$h2%PuWqVh8UxnR< z+sO*2@46$}Te}JN>Dn>ezgi&{RUid@d)z8C!nTLdE`+e2*`o(!O#c;&jj|S<5?snf z8#bqI@so89MdS-}KHs;K;rp?(@LQh7IhYNj-(EaoURjMt!i@_LBg--ghybG+(A>g* z7xUD0rircHLz63)bt}G!NK-&tH0yN>UiV+a?I7}f?LENZX*gzML0rb|Y}zUB|0h-6 zU)<01{hQOnpmhqdKCE#p+gKS~BNgj!e6nI?v1&35ESou z7zRI$#yjUV(Q0CWlDkr({brT_sx$HrL5CaPU5xZ%pa^o;AvfWmMx!NhDowlM@<_Q3 z%d^EdR@jw{;Q^t8rZ(8q*x!BK)p%x8r104NurZ2@=CzdOE)l;JfJGAp5Hp-5u^sqEGjmo%3jn zgj_y95Frb1B`{Ya?^ueWL7xc46UBNniDDv|dSpSfnf=9(h^MS}VW7?vo5kCbhf=ojhV;#I zJO^uv2HDrRt^7{#k?QZ=+j%+*F?{gmK7S%$99=mHQNwztYIl!s z+*Vm&P?%+uy?TP>0yF~7$ss)P0uKTt%e|%QO@J$9J1Fh3z_U<;Y<$vdkF*+Je&bt6 zOU5-3u@-8NIR|mqa)=#^a4{0|{27zBdO;95PWjLI0dwxNw}{BHNof1cVF)1=XB64} zcZpvY#>T~luv#n0kn)PTl`^wMBmj{kZllPN3SmP7>{QhjX)ITi_B*o=Ui_hwnTOV? z1^KZ{%!GgiK&WN6QIm3~7jw`e*5Wg2njHAsvB78P+h-#uFGpnf)dS26aqfikv94kf z8z&L=L_K35Ks_Mr6tkb;F9pTV7OKJenn0_vnK|lK3hUhPDZHM?oUi>+*05&IR-y#a zjhZSyexNyrPT8%xubgPJ&OXT22xAR#7PA#4q_$Z~dpHz&C>gxM;9lJ&ZEp0*tBUITdig&z%wTZJ+aOvj?8$BQ#@Bq#Z{rK z^}ogFfcW$b$)+cW+==>Eaz!qp$;dz2wSamuC`3DI>^9S(+z)~58jn6+9@>Nd)dB>(e!5Wqd(7@QhKk;aeL{u2tKJdI z22EaaPoMh!XL(EZ>Mi%$x6p1rNC#VLkNpLvNKefMo4eb^maN0%Ze`z{Qq#GlOB<+R zCNAmeya}nqM);m5W@OcAvPW8Hld~H+o!)=@u@@wf3^nmcxbl;>%p^qPzBSegNo6w{nzuL`CnBl0fhE~Nk^@grfA?0J z&qVER&4OKLi-+xks9e8S!_pzJL_xJ|m!{4oNoq7j;`A$3-lfD0g?I2|UvlD+Y>sH* zpJ*b|){_ft{4Y+df1T$F(wITzJIs%v%MO=O);Owu^C z$hjKizVcT`y+o1u_#8AW_k~b`vx_oXnRunHPNh$Ls%Yig#mPH%!boeJ#$cq8bwH1F z!eHH3B{^+Z;2Gp84IG-Az~8jjEh9%8k+xu^G*?AW1S6cf#E=hu2m&KDBhM*tP=~TI zX#E3EF3>d*Y`E)k^t?aAw?+{$s)=;`5#OVG9!5A4Y8!!Ish$BAR6wX1*3D(QW_5UW zcG*Ve{}i7kk=1A@vd|QEc3izbMdl^1bp(W}%1%?U;y5uzD!-y*TGfil2J@id319aC zNtf>_(WTD(U_p}y1s{R^i94V7RR9Slm4QyJ5^q-NHj6NfX#!(P(w4;mLVHs?|T+J_x}ec&oa-3itP}#J59^{rxJ{ z`;>k3L1Osy=X)PUZyOexQ5I_G)qoQR(as7UJMX)+flcH&@AFp3p*&b#Rb%)Pfo6sbw=C^3O2a{ZxE*Nb#k zpkYTqTun5I3uteU^oY;}HSKJu1%)C1=4RzJ5}*ioJ)`A4J+ZZ=wD(UcPa!-}1{zJ* z5amN`46%p{C7IHY;N9(QCD>fbXwm%2TMPC*_1K6f2u4sM}xTVFM&U z!)$`W>%z+6wVPOxx!z>}2HtW*iJ&yk)eF&1+09?8{< zB%)2ov<9^@(>1r|*Vmh54;WrnDDDe|_4tY3_-yXpBZY*PZW5`bWr1AHIvaP910596 zBdsy!=ez^17!%2KcrVzft&vK7vPM$&tKzH1Gs3;iK&sLfK(Ex`NuPGAt;T~A{bbIR z{4zXZphDRdEc0=!YApxc^_$!hC`EQOJA24=_Gif6Rzm_wDH5?YNl}n_F{giJf7vE+ zr~Dd26?y57>A%$bvLt09NJ43$qtG=0!#b(=#+?IvfHk9Fjm@W#V84EN(jlPtS0Y-lq*o)LfPE1j zBSx^WqM>oVzRLnpLurGADP)7t58~)Bb8|?#K*weuR>L0q~ZP$6wga!8fJhI&+RG?8^C*>re{*#-oBId~YKE9bF~uLA5R$p&E}ut z+_xJl{os3tT!J)3u*F67wlE*e8V=b=SGL|?EJ9d^T&ZhT^6vvw?-xH}u`hWy%4jxh z3|6FNO})v-R}k3{AoPuvu-&LjJ=Fv1?*I=tjUeHq#zDVr^rFbJ*GJb*^FyOUG3mL6 zBLVbNf$U|~b$!XJ?ZwR{@jIBPotC1628Bn2gof1b9O~fed zk=LQXvhcGcX^Awd{Txu32p{*Fk{Tb7oW>F9t9ZIwUkKF-*ec_v*~0TBd6N&UY#|eF z{0M@m2E*KLv3QSPa#c1CgCWF2{8`L`jh@2J1e-Q+-dhfjN>iUGD)68UO?v`;;S_S= zoyi3lU95Te)@FacsP0J=K-Md}ENH%QIu$^!bNn+G6@@wou zjY#5z_c8*ZeTUm8(*Agi#c{zBa6JaW=LZ8T4(^8Eyx!tw@$)CxaApG8Zk&EIRDbfw zU05oO%kHKHSa_OEZ?T@o!MPHPyIOpmsWPkHhudVP__qsqlOoHJq=tFcs z%a7rW)A)of3s?pFaVzx+F^zKOo4&n&mQ%P(ZqJh9C2kZNyp=y~m=W#fyn5C|zL7%h zb4w$wVO^VEMl(H^{3=A*HZ~InYN1s4#C;uEm*)SLjQQbvi-DyCI8`GlU zB^9jl;I3cXa$Skd*D{JQG-!t6rC9taH ziE^N;^eGq>vuFtEf?Ao$n&0B`TtE*(dLqYHkE-2Abb<>9E4ZylkFl(kk`Vn7fY)Y< zUCu2QhVrRAzaHR5GN`oO6@x!%v@#Fs%FV%n2di;O+LZZh9g)PEYbAJ%T*LtcBHu7B14JTAb0+7&TR_Jiq%8uPfc3PCz1AI?`-TD>`Aj@ z+U&UKS)SZd!B)-|L=>YPsDqy&^epksJoGL{v|tgkz-HLu509$9^l_q49!xIuJCO)6|~^8A7r zBo3F~i@MnBNG%P0{;$6Gcf>{##<`Av?m7*dBhhq9JEj9xM;&9}xfVL@v?dADTtBs7aCXKL;V7og7X4$k4|NUp%OgI=84%AR4nijIrdg_v7n$MdMJ}YSPa6=n1@$F zL4suF9X$N1ikfMluR1_S(LHp}0RB&>Kka{zN?Z!!eU;<^SP^4{PBE&F7`m3iSyf*R z4`}b(Kx>>2@8SH!iRfsa;u9IeU8`qEUBS`qMl2Er!dGv4jx{4gjiQxLa;R=_`)D`q zPg*bJj3F$7jV5EnLpDHub7XAX)|M+X$;rF8$M1{(5hQe_8a$-dGSLcH1a@taXh-fNhYdUy((_VOV%U16TAB=-5IJ-y81uMD^X+u1s&Q{Q_&1+z_>C>|D`dXqm*VU;KUCE>$`kboi99iPH$!=|3rV~1Y zCJ0=>V?m2c62NSnMMK(;Y5Pwc2kCyo$1yDz`+kurArUP=wbagihV7F47le?PL5FQ8`%vU@sHQk^LfHTIT~pR)&40?We58PL6RR&|%DnyQauE)Kt}F%-ZU4LV}8A<67n+_O#sTWm6` z@l{yJ4)E&b3kWTiX1Ys)|H8Rf#zj;zxjxGIj1b61{e*A*L4W=$?&&S}t;6rJczs~E zj8M!#L^CW-s3my~&=?SvE3K89_Am=-GUw9hZ+zd$EdcjbKdecRUh96JB&N!0i#5%? zaU-Ld@jHF{!Iqr)4y79CfXuGNZ7DEE_>5x4?6E;u)FT0}?1Q?;kxY)WMa>3}CfJ-m zZ(w6Ni>ir!%ureO2@+0KVE4cH3A}A#IH=N((-XVLgLLT1JzFpjIF(o=wP07=kUG#; zuqMa#&iVY6y*C{m@nY!ZWbtc5bh#RK>Iel~#ZEC$rG3b^fyOmfgtjRqMoy6C6=JD#un>oM5>v`p-su zJQan8TOYMsH1U|5h!j1Ng*st?hj{>0<2%DYlk2k>4B)D~1z}B|kY@>=V~H7j-bJl% zlno zOB2=Q)E}i1u(U(9`H??yO}uRdwy%?|xRS%m9FQ6?aNa~8Nj002jnuEG zvfq8xsIVz@X2sR-Yf4oFzp_A5WH(_0S`soQe5slQ&MNqP+^X z;MtVBZeYIIiH~+e-e&st9O3;AZ+9NnJh#~eK3xkA4qK>ouV``VXL5}_Z$W@9A`ba( zsY6(rFhN2G`}z0nr=)bb}G=Na0Yc6 zARPEkzhy?ccraRjL584;-DTYsfjw=3{l3uF&tg!m9r+)WijusE7`moEpnzF>2O^8_ zf~aEdf~GO*DYN=y&|bWa8oiaU1=i`GFgs@M&I+fK%p1Z5Jo0H~7(Wy#-}Di~HkHM^ zQwu(FZhY8%_Tzu_Dvy+pu~!mV(9@DeGilPJ{PIVAZ0EtzKd>Zgaw;nD?G&k9))A zi=_7v*tUgAsg4i5xtW@Is?QjRwxbgC9L*f3ElWL9DJNFwbln=i3ktqJfBNGfIalVe z4rBD~Q)PJ)RITvsHkZbMKXGXnL6fx#OkuZ#NuQ%}X(S?GeSPgWT`_e2%%eRUD{?HOKrq1Uw5IxL!52-Ib3_hb*2JM zQJ~m{7j~FFQ^{MryBS!Py0|mIb^%A2&`ne6L~vBIcDXGlu%gu;;g7FsTBV9D;F#Q6qp%@&mX4tDpZQZ0n)}ETb@xhW>Z& z*`3JNyd`0|L}ez)yOULXWFfP=)-yHKao60spsF#x_XnV216_4 z!md+C(zZ`8!gJl0KeNNLq9TDniB#G{6ImCvbC>;C_xB-|Ltwzg^cYQ)tudyYQ85z6 z2;2e~(w3G5ee3SEmPZHMF-BPf>9I6GyZHt1xqJzY95+vY0Dhy)09X+Q7onO279ei- z)}*G)F8O{wr3XtX9(|5#QZBzoRgW}<8#gzI!ba1oSGc=-58<#No#K@P0x9m(_!(h^ z?PNiygS3mOYxQ5ehN95h)^1*C7{jf(%el!5?$pRPLbdL6to(y2bCt^H=l@tjSqb$jlDyM zPt}fTc2X|Z=C{AE^upp@B=H~szK3j;s}ICxDPwm0eAri#7VQptGK{O}3+Y zM+GssvWn=2og(*`g_p=kN|MUjkj;~5I;@DSL@iit6bl^Q-hOMVfWmWo<&8;huP(%Y z4BC-t{ylA&M-hf5{+bU37H78+)(;;x`TeP_Ti(*Mpgf7lONrdy|5yWeXpYb|K?*Dt z+1r0VTjJ`6QO>;LTVs6S-M`ItNJh1KkovR-gOnsAXV#~xYjGg?$D>R0A&d}-fe@h= zjzGJO;uGcNY0Zc@R+{vRz{ADXv&;7V2W(9s*Jm;D{E`dOs!ocR!H*Cp4515q^2+#OPB_o*teU11 z4S_GZA7goM|3m?LDl$K zAp|Ss*7#{dfwdW7BPTN;%^&`sC(8XO$sre?4>9_AMKVlwoU5XWa2=1l!CKQ_<#Pc; zgz1xS0AT%&wQh$C1G1w#NsCrWYTWzN`(>{L4+>m=G18}7mTU)Q@A@6xcjFKD1R|v) zI^zxaK;t~d9*WjeSHepZcu4sc+2=JBL@~s3}r6*9#|zE+|2yRlgdKjO1kHq?NZj z?+T%qgydCr9j^W=BaGPaXW)7dlvYm!47d&jc&damA%`d&Q7;NPNvRC>xq{o9CB9KX zlSOm8kL)S#CSPX*>BJ3ooZ4VQ;KK(8e42tEvY;N+*1JA$8J>XyNRddBKrAKj7>CGg zNx#wLyMb9(*RhOTi$jbfEB7Ce9Y4mkd%fs(qceWhA~4z(J`f+T z?Ix%fL9B}+yU&v8Xh7eDl-(F&i&k(UX6&#!d_B_ah zU4=ok7h8PJ((<9JSND@?6&|&}W=P9r;|Ic-iCRP$f<+%g&@?AsJh%E*ZGA!kF+^!D zIv|roKA_w{h2$9c5~KK1rvz9>=z~m$b`g>Y#1aPgm`Hu~TM*WVTOYP7$@pdOsuk=t z&Tz<3LcEg-+;mXALrDk`>taC@Sq8uXvh6!M(B&}i*CJjM{UQ74+2?p0&kYO6tn2m^t;-1MIH1i zk)E~{UYOIS>ICrcjpm%A?jbyhKl7x%q`((W!p{DngvpYL9nWQN%%{;h8Muuo|rX1VOX^X|tG1Ido z4;ikm?2J}wIz3Cdfjb}PRcL(=#sH)lb@f8R2-Hes!J>np%ZIU>SCKJO0zEchoNUOL55HXUC zn6B$wGw$-TQ@F?*@0&xVV@q)WXOFtRsbMbIwK$WZM#k5`+E!&+CLV1ROlC91TXpW9 z?kDhrScWMaV}1w}DmQI2zc$`iWt%6a=;?lQUUMaB^SE^ux9Q%17^X6MBT^~(Iof{k zqxw0iUN|rng`+sTlfBJsu3fL*89o@fshlvmC;8ipGmv>c7eUwFl|&+|FFUb z=`UJ0g?@-$_IdsjJfXxS;ri*YWFurU-UPMgm8Hx8KF@B9M*f-d6B&BzuCJ|2$jIChM^RV z%vwzfoz-n?u}mVD*d@_m7w~>(%VI2>0aNgK_C5V+7^PA0vS{r|e<89A*ED~S<#$x~ z3h{2z07ucD8iV}8p^j*>R?(-E5~X5P*xGe%Pbgzh@)zp3OT5_KXxD5)YwDgiCDu7< z-H4HKVZsO4$pgUN@m6^A8fg6h8lsTy{+R@Q3~~U}L#Wi#RCInwZKn)Nb6vhu3t= zU5Cm_Q-CVv={8lAGA|L_EP#ipwy~q3j*9`iCc;7gq}r3BsOf5a=ds8zG#@jyt72GF zL1;=^QS}MiWjw)jzpun3Z+%^t*yDZrXNO7mA}srViZ17kTaq2`7>~^^`BkJYb+`=Z zDviH}Aet2V#XB@Yw^yhcv*?x1mDu#08uW0i^Syl+Km{pdR#7KaEtBHZO}K6n-<4{3 z6ZO~i-RBicu=RrnDy66o78xxzT%UG^dxD`9!fBMV&b(A7Tc0+YoPnZQkkMREy z^%X#IG*P#~-Gf^Q0fIX$?(V^Y1b26r;O+^wI03eP;T}U*_cWlKxJ^8}EQZ|N^yKj7rd8L-tUbdJy-pPc&40F9}b+$iG1V04C z1w;+xxFE_Gs8Mm%eeZRK6}KX>h?q1%cW{--nnKeRepfD=Z`BCJb`mi`XU0BzOFb{+ z$YAJ7`crErwCC&Q)J)=6S&CCeXCNF8K6JKjVSu>xb?dg4ce9twu;CB}AHmAiyTab! z{ZPqUc#tE)G*BTI991P_3NRwD+>>e0&K8QqPkea;mEu-*eVw|3H+Qu}$&2FZt)=3s z(%dmKlj&P!c>g3fS~3zAHRZk}-rioyuNmHYVGR6(6qDSINv~gjJ7N7{j`X`J0DS{T zi0nX{P{CVrJz87J#O5y5TBJk45FZb(!UJ2R3to~``bun`T(z0YFMOPs%UhNL;66j zSIO98gAjARn6_4wo+Ld+*Sy>oO{L#nf~C@bvTXlsZv={^&S9xx${OQYepV&vkO27a z@4Q;-M$w8zvriYP73`si>M({*+Jz-gj|a3Zj#}!}5aOz~JM|Z9smnz;>WyTfaZKKJ z(QLaD@I!(y|9$$--;%?$T(-wd>p}f0pex8|Jr>r{YaU^H8Zy9=`Xhr>aCGLH+eZB< z--}jM{FlnqGgt#Rj)J^A+ocCG;%_@rfkVZ$K|Qgj`iO{Ec#PVnD3&`YIwSr0n4Z9t975=1*Gar^hTi@vQFTR!gV~r4r+iY%^)d#po1ep$H>9Anj!7aknIGZ z^*n=V<+)%|Btxta`Zz-;KNnFrYjKhFb+i6ncHJ+T9(EyLUcmeEy}YFH31JfTW0lOD z)f%>QVDrGg;+9F{rYt?ew$Me4+pVJf$vzEJ(y||F@L(e};Bce)tfu0{7$VaX`CkCq z)ic;ajw@sumrotJGM+g!RTVgnmNyew($To0*A#XiD43mq+%!`~Yxft%Dlk|b_%_=& z-N*JcAa;iNWoIC}zvfp&AfQW&Fg?m}j?-p&6s>oQcG#wyvp_M?soTaqKA;VV&^aVXslZXAx216IX>iw1Um>z1seN#1f&*e2l-(C; zdWegaITqr5@+<-TX7)<$#y|cLYb2IyzpWT*cS>@Z6HvJ{ecGgN!lP)OY{ge1;Q}N5 zB&{l#^izLM+=t|ttt!N?CN*q@zG18*t3CKTftwMzlc_!8H0O=9xVI!`c1~LEt-j`` zrGLbO%};pP6|POhy+~l)V$neautknt%c{rSCdrXKgTqnV^7qqUcs3s|s^U&W#y?k_ zg=1}b~Q@uwY>vCD}Jg-@897cQIsg(9-?-`-2Fwf=Et~8trL72UL zMWd9j9nr;cg(C;D-&pp8Pn}Y#^Gq*JpkS5nX9DEgOkd7L3Q2iqac6KV`)H@wYFxkN zP=ylU9kaOz>ik=YxZNh@kshN#T18Cxjny~@0={Mv1 z$Hvjd9f4h9%D|=!1NnE?b$K`jsrls(^dG#O32OJ@`e2`O@xT82${d9kHmS=c&1d=N zTFUATQ1uy|TE0Y)daD=3srQ3imjV9?kW-ir(v&nRz#*?c)*usM4*&h?d)H2jh*+3L zgihrj?~NOtW(@(ayQDumX6oIiT5a!&)Kjvwxh{|{7WqSzeD1CQn<>rmPggSjebxw= zUsh#@dR%_~7|qwLcN?nc^(rOw25hg)v2ZB&jjFH;1bw$Q3QqTmb9eiOq|MSydnrI- zJqfpoi>Yw(Hm5)b*mgrn==PBL zU5ReXe@2sa`vn+_l@<I`5-27fq6Mz@cHn>g7%{^tri1@$Rnj>!WN@2 zrc|L&BB6Mp_2bf{nVBhzQ(s2YNb@V^NnVJ} zO}E%zO8sMuF6tb!x;%1XimCt(2cv>8Bc>W%r)o83U-tSBdM}=*zRvqw7K+F4Am`Hh zz`yTND~pPa=IR%*c4i>}w7L5k%tR{*6}}kw)8i_ty48>NqaVc;MCW!($({MTH3!N6 z5kHpb0X-P&eG^X%4T}hU20~`X53%?21#j(la3H}bpKX?H0Z+C1Ip|hSEt|wlH{|Vm zBnz4HY+hKG8}}k#+sAqJ_Yk3Ze(FL)su~`l1OODL`o($5ul<`*h*7a58e3YB^G-bq zqwSEHh4hL@B&omppyHScdfwwN30k^W7(0@XxxN zvq?_gI8R)BmmYo~+itx%T$S9`r1d@&%4u_uhfT7Zh)p8$%QUa3*>x4il52%edm~7> z$D4<;hPs~2A}o#d8tq5T0wQN;TyCxeP@_IJDm_9ni~a3+v3Hzkox_^V3kl4DC`2II z5TXNB$m{W_|IrN&X!K#Vnu{wtIcLqHe}2!lixbqF*OqUnW@}bTMAD}$V`&Y$TVm6#;GRxf95f_Iz(^Hp6zk4y*JxNiC1cT?dO{7e080QE z{R2Q7eznZJ`zBi#d^WTo@T+W8{ZDc^U1+L;50C4p+(d|&Ojf<#ByMp*0qgHTeAPLl zzfA+qn*>hw8W%a9grx3$l`D%Tb>YiX?v+Z2?dnz}OsFCQ^+Sy1_1<$`KHcy*JG#S& zhY6=ncvS~j6GVb&jVm;y;oro1f~YoF9El0vz}8sz3$h1cT5Ad46oNy}j0z=Reiu#{>eQY#zjDGmZ=g&>RJan-THmQcUDc@iwc8`r~Zv zZAo{A#bJUVGZtS|aLEyqQj#+A{win}dL^iub8SBBE)z}be$onHm4*ioVUYL72#anr zt?pQs(eBV>e#lS+CsEbu?`j_dP9r&~9$E0m!HpyP&QHsFJQ`ifjTr>v(d`V&jp!dz zawYz8uhouKPGt4eEgw7{SX(xE{TiCdew$P+NNw&Vlc)-7$c~I12uo~K=%{AF7R38H z1})T4nDhxq(folwR-6?PI>}MHs`@@>MX|Ub#08+_v!cLYDm=ARWOUFMvx`U`uBdU) zxI}KV$COy{HuFgnGfwvnXX4p(fNhjF6UA_EDvkK1-q5RbVfK>}2@x!BM+fw*q9oj{ zeFP~8?|sS(wTYP2FyX2u{Gp^t|9O<$nU*`aUIImtyCn*(et4FC(Qz)&S$X;OhJ#*| zqFLO>Z%C|YY{f83rLn`}i^q1Hgsh%;RbC|^WO>Jv19-Yg4DTW7y~OTC+Z6@E9t1l$ zK0Z5bY(y)dv1<8ceF?RQu#1T0P5_|n8iyFkC`ga<)*4C82{Sdkx_S3Y3vv%f&*HR% zxD|?ZhVfUd+F{h5Y0XSBbe?_DmLqTA`*`yzmosfMPC~z;#gOJHtt@NF%Xtj}k<=l( z-c_sWdpzslKZRH}7@{5UEmi!LpWvk*F9|)-mM#!8BG5!;cJ=F1hlM&vu8rV%p;Wj2 zTeiwPz?~x2{{*HHe?iKQrYKuSm7Rxi- zwFu`TX*G^1b))lw&7$#{jd00|25N(jAfN*kvTqEL3pEyz`5s}KzErzf9KbRWe*GuXAlj%!&bovfq_`?>^+5bl@Mq%p=tgDl^V z9B!GM04m4o-?9Zb;iAM05kW87*~W)I`^8zyLzf_&;w;#h(8+J#_o>_k;1U3>Wd_|o zXe4%W>7vqPE?0h&yb)BRL{H}PnKdeKZMYU{^`%r36ps>HoJ^gP8tMcNX6Oz0AH}PJ zD;Hrmf++#$~W*4qVD}uddich5#;ve4v*?2tnhMhjYtRCK5gqX9xz+61%;BK z#b>`i$lQa`PsWF)9CLN(cyJPeAQO=}Y$C601;Obar9QcRk5mC)S%%3+KaD=%x+NZq z^`3?=kCJ-p?oEXY@OdGs@SOX-1bo;Ufio!ht%#Oyo_I!l(HJW|on0#OWpeF}Us_{u zQpu=%lGKi^Ul7IJ zmRZkVQhp{A=`R64&Hg?W!jeHcg1Ve%=nqeF7RY_$sg-}D)esxQA{4;S$KY6*6QI3pLN#oBGZnIkoME5EojJNAW^~V(SRKS1bxY|Cs zOMMIYKwq=IMFP~M^2uvN#h*jEk&Nq@vTpCX&46AF0LB~r?g+HK3 z_Jae=={hj1c#T)(&7h(Yg_N`og`n@cG-V*Q9mM7XR==zT7@_6-M%JqwR#v1C!4ujc zjj32vqpFL|DTddbO?jelzAD_1-o~|ifj=NpWW%j09n2Tjn=N8JY!r3MP#c19CHBJj zQQE9mL%6HR)4sXTbQa1169bCl->H@H>k*UDh} zeE=~G(s&c0z0to1qf%;RERC}o_pwbZMycm;juoAUvvon7vV37AnS?R+W&~hZgr~te z>%j@P+ls1EgnJ_V@Xf8Y*Op7u(zV$KyUzy*bzRfO`~R#_pT@>JBVAGqzJx-;0t+vD ziPii^!_ijn!x5!nEW6szur_Pj3f)A>E$|K+e=c<*)m!hdC5D(YJ^xbpfEJ8mQdAj9 zyk_eS+gVdiB7<}lBtq)PM&)%U8lOwA%-4*)45%|N&B6T+4GxQ*QZX#LB>Nv%gAu1x z!pD0~)&+3~hs|;>A+a3f^I1X}6E<%tK%8PlRKU(z*S9d;75zOIZe^ZxeeWbvMU(3w zZDfoTi*71jM$}RAQ!VicGD0`=TWxg)We+iBx%;6IkJK~Nj05I5>WcJWIgRtJa6K8Lp<%5t&Zw+_Yz^i3+*#t&Dy+#s-o`i1s z*pX?9v!xp|7I`>IR*lEk@RN@mIwCtZB>(z1iuycN>jY`aNWKgbzc7rb7o|QA#Au4Xc1P{FhdmT7vN-dxuW1E>1{9jM3c-6yuNB z*ToOw?V{pxTSGgE!j&jwhwg|5Myex__)CvwCpa}sHM+v55pu_n{%{vV=MJ!#7rqok zuhoes(K2b?exhRS-&x~fvN-E=r)&I!5&5S@>}2B(N=?4a(rs#60;{^RrQ{3l4;O9kG6 zbYL(=ILWzLrejT(vmQe!ZJ!d`)9W~l?;q`KX4YldsiFj(y~vcYZH(h1azM0EaDLsf zONp)SQ(!QtJHULv)v2Pzgot-S<2Y5I#w|Thx`nRq9j7>{65RY~*Rut=po2pVDGagv ze0VM}Rh)$uKIt+r4n2i(&r{g#H@ABM*ZQt8SP7BW%^j)2JMHxd__!?CH~CaH^wXn@ zA%!{&Ya*$X8(~(2)^E(p zzkqF4Dt!W6o7p_R)P@*xiKUjF(jWz1Xof;g0D0PYW!y5$K5*m!SDzURB?n>ap0_x3 zQhvx8I|NSq&>c#Q{Ti9l>(pdt#U9xm=b6XAq2~c3RJhW1bkw|*$wv)$(xF62EubRv z4w%-REDAJ_|3SNw_-eHwd31ou+e&`1tT$|4PaueP@%R%-h$79ql!a+p)PHWr42yYB z+cWBxr+qCiX9AdEKDSA^wR)g)9edmC?1wO5JH5`2POZ!Jm36{rC&&qfwxoO2FZD~5 zimKi3$F3&Ch4Lfsri@^Wd`tj?7s2kvhFPCFa<@RJg(xZROgr*80Fm72?+TN~+rfZTtz$RkRMpuKhMzK0Z2pgUgUFA>g?i zu0Cn=o-$oFonOyHUbyN_$oR*`+r5Mq!OAk97@9c1o&jCoiKg13^*c96Ae&_st413vCK$vyG}Vr!=k3!mZy0Z`uNmBq5 z8M{c77hT4^*uk@Vvp94dRYH1#n~^DG$0bGfvyP?QaHOjmIL%Kim`G-WY{ZkZqZ6wP8I3|$8Wt&Qz{MudF8x$dIJF%NcI3JqkXkPVp7D$LDp0Am3 zmxXVEB4)=nUsbygdX>I%%8qq|5)VKf*d!U#MB;jgwVC-p(3Xej!kM%l_z`WO1X?-p zd!cuN!ERjjd~lh3Pl5-u-$ycvA|uL&8_yq*_XK%!>o+QcpM&tr+iubk3>| z?QtfXCJvmW;N7=dk`#%xE$@nzzhhbt0S^ z9fZp#l`(M>E`$ao&P}!aRq9;Aj`bz&SJa;u8Aazbi(-oeQb-e8);O*-TiApXeHW|m zD(Rwdh*qm{>b(RRMDC2@$Yi||*eoKNgeYsLL^yojSPhiQn*p=s9g5d5571dkaysOM z<>U3(t!fKrt|7O}E5f+p(nj*xOqXYoMI4Qj*rZ|nu0sTC0FCm&2d$HRYd(2o(y8?_ zS$GG8T$=n$+JRD{2zK_fhB78q?pP5YTb8o$423+uA)bArl||v$hJYxZ%%e`*k+Pw} zTMaDQ(|W<1#-`#z)H1{kCwDXw0525kihMCPF3oo5%w!PWIq+0Z46o#p2 zR`c}&f##WyQpb%e@3x9aB-X+{q@+&_6#^0a!2G1;FtviGk*-GMNTiKML>+vu1cFW( z63gt6ZwFWU!X0xzD1P|+`dvM$Es{m|YOoL)a~h|=&JpOM!IdShPL3^6wp*6wD2yj( zYHo%+MgXxsK8-bE#q(`vVLrBpDh{anOK##%V&$u(+Lp(+pl_T0@{q53g=VA@!PYr= zO>O1#%vPu0wOSvU;2PEeYR0Mne1GZIuk%`76zbF<< z9k%@44315u0o7ED%TiGNb0)u>^w#^QWYJe?O>K8ohg52e90R39$Rsax8UClwIq)}o zFOQ_GWed}}X$em-2Ao&zNTOny^Xq@H0L@k@Iys+^5GkCeduJ9Rwi1wu5Ur51C9JAI zI5Q)EBbGkJubT4C@Y#v?I|-8svL6kJp;mpvxJcXDF`~pQ(eCy;De(b?H~&I{e3uTl z-zm>^oHmH+jeKMdQm1q#(Z>kNu9x0HK2ML#4Y6aIuUx#9h!%lpLBCPFHj>kXB7`H z%$NdAq|hDI4{LgnF)6d8S?CP%#K2+l>k&qTAaN_Ib}RG|QDA=BsvLhV8+yJGMP}HO z^TFih%mgFJj?Z2fU{I=7lF<-~sFH*wVkQpH?~ZlwZpn06Tz>>8o1fPHOuh50v+zxd z2A+ltNm34lC7yJ{nl?-+3a>J$#BJOzMPg@mrBhFM18(Q(vVSXe97_gv_UA$gZ)!;7 z2qY_68=^W0^0qO#qib}5PKOPzQ_TI-Lug-7+`{UW4 z)Gjt4mj~g`iIX#By;;i@N`vWqnXgv+YGluX5UQ^Bfi7g=AjkFAhiccA&1szY2q0PR zlOkq*_H`uQWE(=<$yjx0LT_y%mpgOfr6{Fe;>~&5TIPIJG--Mm~#*&^=~5P z@SlJD^;7U$Odw*O)1j+=$TMO!nKUPrrdLb=nvm6CmhZkro^hKFiipVLM z<1{XDJIlON1>rAjq7(!dEPO29jdcgfmod_b%p6Ga2DzIo5`2o_4kvRpTW~5J z5N~NAM&!&hh?pBNU7?Htr3&WWus*ZcZiPnh{&=yQ+$rNZ?-~lL&4BkG5TOx0D-2Hm zu|-fv^RF%hEz>2z*=03LC+C$GlwKK^6D?FXnD>Jf`fA(;FSmYXIj3fO$riEJ%@8-O zIi$t(;`;cu{;0zApxBLXr#ZU0yYpzCo{}_Ncj&G!YF~B82O&8+Ze6XX`-itQt*x^V zZU|@V0neu8;mWHO?aMHx*S-mHp%w$5|7A$~4z{kX>{C)k#c)M%9t|Q=Xo-{wIyh$E z)#Ig_-t}cxhiUECUy68t849=PL>e2nG`lH#Z3{a;<0d#QIrR=sW<7q8f!czc{*V(B zdz|=eWuGQ*?;*l7$DD*9XIf6$v^um(La%NfO_`tScI>snu7T06m`(YW4_M^YELc(W z23pCRZ&GmqDR0@ShujB@7g4&xp_3(J`L}oxfc^N^sw;yJv+1L0+9WMBoXe*lw7GHb zZ#|qB(`;j}-j^hSIJRi0AT5Lb98+#oGmT{nS@Jb6+6;L_uUf#!+5{ zMTB5FN&0IP-O3^{h8@#V_<(KH+rD{=8>IZkbl=-=inUvT!LhVZ9{ z%V!eKTE*{&awL5n5;b!S7eHL+(!;iQ<=z0wa+9?Fi`xJaWt-g;Yu>s16<7WN=kU_F zs{GcS_CKFP<~8TYpFq$+qDO7-j&uCd8o{0iJXm7M%qtH$$r>94L+tqDB6x=#$5mA3 zB_$?!r68-pMN_5@0KpzU%c6!uhnH~+*UtvV10noXYp@Xee3`R8W{ZEEo*L$1<{T2` zU)_-8{kwo*alPDIGH08WzlfL<-SEnaCrx-pr-t+k6%>C|JzcA>pVvU(k*FRGiG+_4 zBv_!^pZfZHy`?#EEOAqKoCiy+Eh|=#am%fIFuzQ4p#-a>AuwUjYJ-Wo>=d-VZgFi> z!L5LK4?#xK@V%^iuCwE6Hx<(69x8BJ(eWMtocqnhOspS`y+s}3D64FDWChT{NRvnU zuoD~>se=X=OBW@C1r?~jcZgIYbvzy%tY?;iq0gBLbM`@jwYD)v=ddE1=h=0vKxKX@ z0VyG6+?#LepGC-iiPV@Ya~ODRTTF~_sMqA;8R+QfxNxOSzwz~lr|T1yGBZ>wN+_qv zf)>sbGXrCB1%B$Tc0X&T8~pBoy+3!H$kTdgUh#q14kuqtU#{+usZB3tM1s-iY_s+P z7#)mTQqAj(VybSSmIKO^!qdtrBES;|h=I`k_wj)cd_<;ZxQflPq-!5#&h0&tjQ%#{ za~R{B6w(fp=bsP6Sn;*7JEsKk3{N4_x6u1avqU{O#EIDNCb#%fHS&u@5S8n(#bhFXy;d9Qz+H<{D^V_*+%^uH&wYYL>Wwia#HGVd}H=5Q_7%f&f zWh2-k%vqgeALfni1 zHno%(*>)8PU`Q}<^&MD%_=s5;#fld*!ZT!j=W?dJ5<@N`0uNS zNdwW^cCqP5gWI)lmC~kJLgxOw)WnT8*$7~{9V>={K?w&u*RICA90sf&$g~>k!cWg0 zwobB7UGA=@TPQ02Jec1e?Rg|b)$h^$#`5&u2KTWPg(SFnf#cujSK~>+5iDU0xN?V_ z8+wy0{US)=w{h>rwz=J3eD#kHt|varLVlTiaUcded*BNHN%`gxR+lOZ~&Ksv190s+FGfo`ksW@Jyn>)2efKv8HM!d z2#FQRg&E2ZOEsZ3VlRKlGjcJ^se^xAC+mR2nf1x78;Idm;@U$GQc~B+!HB~cn@J0- zuTx}zpkUuD5zI!f^dGf6?de@2$J^hSDs0&CSeh-?=Eu$Vc}c};R9p-s(mYrp@dVJC zp7u~xCzBex!lK2>60NO~#h)r!?0g^39f#=f37VKpdZ+xD_}IV243Wwe-pM05{&Qr* znL$C{9I-eM1rq-E;Kt@V3VED#Z}s?PHRCxMulab)c^YS8@pWmxyDpeVVUijKx+Wk1 z>1u6>HQpVA;+9va6MfneGpQ!c zoOcb{)y^PR&2tumgOm!HqS(K!3@nM$5-2XZsli*^>)8$!&^Z4If-UIdY=QtE`ivC|Na1uPyI0-s|5eo9Hc{$aIqfhJ28-U!JsdJtnz}F_21u1 zc3yYtZ!tAHmLE+!UD3HapaVgdi=7_~4UufA{9Q~luY?zRy-*L2|H=6`Xb((^OAtBQ z+JCKRL)o6%q*TD(e^2|dC)$oe>SYGN9!xt%>wY(U!%1tWIt|6l(H*d(t8@lOx=K?E zid^?5!YeguCsCw6FccWAK<7d#V3H-NaMUy2{XX<=_;^z^HX%$*1oSI{_|U<4Si_p) zvz=OFj@kQPJAnH+HqTaTwLZ^(9p5QCA0`|FFBjgjDgAewi@%&DhoT| z-Z%ayCOXL7E9J|>`772t+~!t2@ay)ifJ!uS2m@#RJ2>3*Z*N%NQ9==j$Z zUX_u(S_vzl+R61eG+rf?= zN05dOJFtM@2MBJLf-ZH?)yn(K`xOZLZ38=is0T~pK@C|1eJeryzbo37@B7aCf8E~n zS!@rZM%VYj!)LtFbC4Aa5DL{x@5XC8WjMC@!(VK1XR33(fxH!q}t&*uSK&mtvXpz8(pSA9#rd(D z@-?IL($JveU4|<3y*L>Hg>PVYJV4(=f9G4SV^o7Tq9CR&?P@t^N9aC{ee3@$&*6uj zjVA$5XOH4vRw6NPZ`=2Q7uD~LfvvK&(D4;O8!D|!cFF^e?|0{KOV|N4p(1hL-k3tq z!!CB-uRZU0r!aPXyq65O1MsUBF6J+7FD+QMOdkF|x>oDriPrM|+M2Lmud zgQ$lPRQcMvfdN%d&8oCf;9)VOdSO)0ZDn)Mr8(myy;+~Nk^P<-bIMYs%ly0pCh$6) zkmCI7L2YM{$`(&~_ItJA+tca$+d5d{K?+#}Yipm%k3Ez%^kNVDtsJ|9tf%uX>FSAU zwgbCICGaur-DUL10+i8ZeoG3^lE$XJ&YfQOCz|w;=6QkA{kXBlTXK>lx71!NKAErOl|iHBZnX#E^^j~+5ql%2?1xe*t8hK~yFDX5!J zi^@YvNP7rMKDN<4s!1h^54l(yGq#lsHhdeX7J7SgK{l-V;#*QD@ILbPyLcSW`GenDqk8_SMzjYTYcCjRy-UbLP2c4QLTo@CG_oiEyn%LD0 z$dw4XeZ&z!(s4EhyN#q;=Q}zD1n%j+OZtb5iMH1%7itlK&(*I;hEL1d6qJMAAOUCO zQw784Bf~e_cjKf!6zA``9r=WtrFt&5!m?mQ|FbBs$D7x%n+(E;Mjde1T2@Fe($ccu zp{?QLc;{oT|6#cyN;07Jn(myw^9lIgzwt1=(4i|=5A`o356Y@;{-0ci3t$&ni^Hr` zsK}jIozou}16j7S=qP9W&lxZ1mtR6kNDQBjv;(gl-)==Hg&0+@_B$Vsd;2p06)GE( zXcx=OhaFW3Mmls0S&@WNOy_I&uWz97kAF)2erA#PxX$*B8PB~#C%w{!8mZmt@QXD^ z|NYjDr#s5mH_Dgm^MG^1H#Ecdk?OaRg}@zB!*@t^gj1d;P?&|$zLH$gD|w3h)fV3LK~df_sNSkn`DoC)$4ss&4)OxDX|sV!{&DngCTXTD`EB$sY7~KwII&Dn`ZGwaCYCwEZ&ch2hvhldnb43rnmT;lG(Z3b!oZNui>sWa1_@VJIA(A9X%e~7qN8DYGZrDtxi|p174d) zyRceJNNv;aschA(PP>@5H#28haPpOi`la8q2jR{k zS7;v2*|sOMB7*#y2KBcf;+9%{D8WC`!23m&#E;VNyFZ(7snaxW#Ueb2JCP(kM3E;Y(YK7(WbsCH$|2+;;0=1 zXZ=%`=G8xEC#QSsFF6(4GDx|t3xND(l=UIw;7cPqZuE0B?J20wop_3$r}m29lhOYh z$H+Uv?IuHHvr0TJ3|u%av2hWOfigB14e{nW&nTSS>RmdTPjET$e%@6D&QHytF2@ED zD}nn^;Zj$eQk~q@d-w6J=rg3!T8l}31@H@h{$ygGZhWIqkh9Y_WtkMd?0wt#_yyKwxmfdYq@up=Gd&&v-Zw?&8zrnqw7?WtA$cGoNuFML~z=kht zg4|$F{bzlJEl$^2Mji`s;m;Qx<7}jXaNm&hqXQB7f4J{lq~-S8pBb2Sc1zXGnwC^< zP0+nExAB?8cGn+2{)!{qC%u9r3y-TAL0kx3yVNWFiYC#$QM-R9`h ze##Werfl!saL8zMDxwm9REvM)P`vQ?dMyv^ZAND8;=@RxOZ>iSMk%RvK^1x#V09OR z!f$p!4ZAS;18EvKdYdfLtg{|Jzb|L>IhCu8Gme1hwW}NP!X{zG9{6K3llAII?xj?V_47%U9d{2^oN;@aL{R>hkpprzV{q+aiIo2snbNZ_E65 zd8F|}>~3puRlypXIda;SJW%t|N3M{YY82%z+V()BlB`6Gn!Rle?*+cMA+9>p!4o@Y z8e%$JeYyrGdfEnqui^80T7cve@r}Nb@qD$ z>+DlE6Ne^qG*~Xs@|~@<_rB3kz%_Fd=~4e}VwW@4C})h1H4nv}HcB19S6asD3NO;! z8%QuEZMS5}-!kh1i4Ax)@#SoZ+fPtgM0pR{-03U&y7>M^X#7J5H{gp&b!|Os{6oZN zknBF$bDp?%bL;0v&26HH2;SQ@9)gy$n4N2-q5dHY>MeXV-$n1#=2l~!OD*OU1sUc# zuQZmj-lmZOLSVA?*TGk(nIg-7&gpp=dZTd^7B3D~cLLKUejmq81Zfp#=e(sTwX1Hq zWZ0SYc^w!oHiiX)_R@v^K}MraAFB3v*lUC#dXthAm6DA@*@@fGG}K-?B9o37M~29M zd*#!!C&2Ng3|jyAt;qUad|89PVs$S2WoK2bhyw^o=D8t+SXr+JCp(Cf9OSp^y`BVD zYDn>)?%4f5%FiVo0a~{C%o?5lXUl%6?aS$-afYB9#XqYid$HApo@K^K%wTuX+elG@ zzpf=k!@)I4^sSs5`Hu_J$-olk961uluJvb{t;uZro4YlAjz(0M4?iel-+N95?a14f z6it>Z3~f;P=39IV1#n$}9(GkE*)&9b;>{(%1VH}*NQ!7BmkM^4+xbkgFs+f`|nG+?rr>5=|d$mU0_YZ-U}6uiC? zTyU|0-kYrbCbL!KuvlE?ky4hE$m*9AvCaE%Z-JuHmArS)Au}{%8_)id^wm#A6Pj#w z{1S1FJQ17hB^aC`h6R%7GjRA{y1HEyHbp>-}2v7W4sbzO0K4n@dTiNbZk4Y z`BB?V*BaxNYOgA^)-O}g;oTJc`TINX6#sy1-6!W-3tJxTY^08EVl)sk8FucR=S9KD zcD)oH&yM=U{JMrId`h~${oy;*S-Zk>+CxN%DvV^#pRxEcc^^$7JWd~OQ4|CQBH&cr z<&DsY(gh#F*{V?APW?ZCFSSbGgpIsY;1Qx@B!K5G(6on!FWa=N7f9cz1&) z7%V`TH-G*qvCh#t&1wm_a@$V^DA-%hJfI*^|Gm)kl^kefSr{$hwROT2On1H3p{BG> zQRKm>EnMg~-({|4Y6dMDF=pWFXv~Nd5e)uYtM`{>;nM}Nlk4F5_&J%@V1@JZ_|#Y{ z878BZgg3B0#;Z6RNZfA~ePv?V6Pekf)nNATSYdAj^s4SKtJ)r?YoSe@dR-{>3X=Kj zD@QO1z=LX7C4n;f70!9gWtYXK;M~!sVRG(qo^f-h`Y>>==(r51)r1JE6NvS%eC4^ z0ygddv+qtjxX-1ZK1SBFF6@#ZB7#%93Ciu*R0nQBwT{H60oJT+ zCs(~RzBZqK+$QQ%4i@HWQ{-k@zO(8bY(n4_VwdPgOex42eB#yL3x9Aq9eACQPq?P`D5`;0tSWIo)a~}%d^@U#L+DX-LCT!@Du$8<$dL$R?BsC?CEYdZH>+HO@ApvN>IK2OhEC~?Kt$o6Uqrh?E z{R-Frb#+ztNy6$EweD1!(FkMRr`nyrjh}v0Qo%&Th+b*ZKea;it~9N`N!arM;dHiW zIXUCcpNA%^8zPLCNTkIb$m7V9tFd)bWwm4j7l%ChmQ-wNt3TA@r}vHr2+HuRUA*$< z@@-f3J^|e%Wx$S$22bP^Q?WqH{6If$Hq!e!Jqun7*z8agllaUV2DZX{2h_YmC!KdD&g3<&J**{+si>)b;**v2Z@wREf^CA-f`qm!obcbdL{W`ty&A5z zED(?OP)qndH;G6>8>MgRAtPeUewHHX&3tH(e4B{}v#$Qtjst08I+4$8PXt_7XdH0! zbR|#mGFg7e7>m%O8uqI56P|gH`qPa|k}j6}mm-?<4M#mIcq$(ev3ZluvA-N65AFd7 zj>72%JAP&^wHme(UkZiifXaq;w!8>?J7 znb8jO(Nt;?l&p+pSUSH6i3O-6AZ+SYr^J}1S$1_Vpgiuy7;UWHDUQXMhG7q!CL)|T zIr7(C{i9_fr!8SO31M5TTMHgYOR0?Pkjbj)*z*zL3-$P0EQ|d6Nx%C408>G%zL!e~ z*}sxSo(vdtxH%To2#zG3f`)H`v8^;kl+?cIHV2~g>Emkaq8ekH_~KioSEn(u1~65Y z^)p#VniSvM*|q4*enRHme3nc zWOr0qMn-!x+Wux;jvDH#y`f{aKT@-cTbXTtb6c(##`czt;^fh-p)x~;BTi-f=N(eQ z!Us7yGa-b^@WK@iAxL>C30NM-B7esnZf3a8HL5}C%zHRM$DC3s99sBtOzQECkzs2U zpnqIwEojq=fH=5E5l6C^{|B~b&k-lYAexyYPA`Ntp;IVm8|Zj)Ff0W9#SnkuXvI^;I85jHngW=Dx$m}vta76cQ-#M{B>wKFb@+=d#rpqZj+ zW5E%nVV;Rcob3=Ay9xOQ&ul{ecYyDOLDZjb~^m%_87LTFfpD8w18b_hW##U*&w zKR0Y>Wg^70B9Uv9Zqq=x2~$W32)pk{Dc!3%2z%^GKQ(xEY{!@WGej>24w?lpPbM?A zS*TmvHEA80b_-etmQ7ZmU9y@ks6uF;o7sri$+&7`Rg_-G>1h;oswZVzWj($YI@U7O6B?MKqlaxb`I0Y1b zMtFzNK<-6?XK-g^<<18O9B$TO?VF4n(SL<{2i659@WN1zAxl51=8d?GboYi%{V5PU*?w9R11Mf@XO2KUpbuN23k8V~EvJN1Pmd2<_Uq)`@Ok*MNgz z=(-o!lLuT2la1DO^I3%vV}L~Q@TSOY&nFj$;Kq!Rp~jzr=Wd~66<+&s3PZ~qvOu8C z{safYZb_>hai*rAU7?y>#dEk28u@bq*HGV>&k{U?C{z?e(Pj0dCeagcV zB&0l*A1aHbU2&IEv_`b)C*v|yHd8pTuSh+2pob;$*F(|8@oqaVmS)Hu%D7^2#zP2M zbL);c5e6;j7(x>%H_EDYZEZ6;v#ZdSwbbEei@0ca<9!hBz!Wfn6RuNeX{a^BJ^qh4&F6n4N#dgv{ZiBL`S2r7?Nb7{tfIE&5E_>%N6sWFfXnrA3nBX_Hi2D0 z!1gMDWwl>>rXtIVm7)@ZZ(cW_B_tDD;}YyXm_R~yLHslsnjGy$v-o>Fvn14Bs_?}BoQ~Cb<|YZ;s-*uya6~Y?-xweM>)w_H=iZIj4;7S z?Dg7gj=`*@4#Z`exxWH!DTeyrd3zSQ{<|D;az#<(ZX+KK51}C!CHdPgIEqK~7wotFXBqw2wGDpAvwn*9oD0rme}Bi}a7gyz%q;=M!a? zp2N)+iliK|ka9QP2{$7Bk(J!lFhEfXE8{G0jz&Am`Z#0QjPkj?n6XjB{b`iKlE0cjkEqJ(@3=7&jfn+krvs`5q z`i~NHjPejF=FyBD#Zl$*bhb9j^6jt^>yMfe(&urnKqDP+02PGw0ZOn4?tbbww+Hr| zA>e|<G|SlhslAnIO@wq0$Fl?#3{|Gv=LVaL_0ulrP9JHGKvby7{ahc|<#v+hgXa z!FH!_glwK3bM)(&fz>Wm?~^z`#1F-_1nxEcR2Jr`_`YRhg(FVbaj;-p2u%h#Q{xJ& zkae$%Z-|W&2~1;MoZeH;24g zg8;R?Gjegf6BAqJcurE;{yXP34E!v~(4Ie<3yNuvU9C&O$*T;wHp4<;f-14DimY5K zpVw|dGXOVSEwCBA$UQG(MgcH7ga##=aJ?$d=-^oinal!eoqob=B6jRAxH*ccF}lswJGPri8@lOA$4ZPdVg#HnhPMM7x4 z4+_N4R%mg?Zn_5r&m5l&fX+NP{%|w-YW4YdQs2%Z-sv{tG_o<%3Q8F*y!!3$-)owM zzbrFLJ?*F=({rgT96Ux*#Z)V{CaovQ{mHOOA%yl`R__v46%?p`>j|TGg9)Lr$a<;# z>@$RxU*w;c~gXS%V<)NYiw9q2(&O5H1e87-=!u{$?GF5>u;9 z$uX-ntAKMLM)aB6mnc-Z$Odeqy#>txxxl+rCnK||dP)GJ>a9NdPdPvH_uqEL#&yVK z5L9=qFtYzD;A%9;tV#;onwM$jv(J2JmKMH z!g$}ru_s58+3+%;J+9EGqZl|eLkOl?Z_a>uG0=_(G9IQi>xEb@?~I&~&RzrVSuvWl zy(C}QxwWTx3w7-ZEBHdltz+S6A!PsTv%djxvRNVw4wMVejia9o zXu;*0dAOO7luNn#0ZOc%Y9WMd)OKJioq_96k^=)yV{aN8YTOUoSUX4EM$+!y_T2Ld zI(iNRapGisjsDgiaT=a&bYBjq1sAj-v=UngO{C|P^BR<`))hSC3WAZa5}2i< ziIi}44D_HOlf_gIH?>5qYBxhSNEQC!03OSL=qr(8a1r)i+$@B-7quD5^hXUV!yL8& z7h%HJ-R?&jNWexDin;BzMF)!GCBdF+(*eUDjIz zaj~Sh8GgjsMD_4uI7JAJkZ5wx==N8V5jH~zg?^F}w6FV->%7K*Zj5NEp?adGW1!r= z0|yw_2E%BV-r*d1K1e1r<6*zw!bXQ#>S;529VXrxHkpnAEnRjJ&E!=|WXJc2(-uN= zeM%tRZMFL$5kjLxVbKnv9^v=v{O+OrUoE00%RT8sZXE33**o=1xGr}hANg@$WZcbX z5OD-vuAgJ~^HcWwO21P%quXEPkV1#yAs;d3GRoohnoQ{>32`3xIaAs5#7`9o*af^v zvdTt(Q@5b$@rrmoP#8=-&+0*`r3f5CQyL6(+oF)s2gn*}rdym9DcK4j77CuFkR8bb zV@?8v#2H7Ts` zw3-?UYO6O`wE@hDJZ)Z?qlTF8sp~r6Jg0M za7dxAj<42P3YV(QnF{ikGF#Cw7fOJ4r8R)cMhkCnW(ZA8k$r$Ngdlb+EGUE!0v|#P zpI<*_i8GPc4W60s43fpVEw0gmH=l_^5$0+mI;ip5mBR{-S?YeW1K-4Z6dkSapr6dx zR|$k_73pC@IhC)>Q<-+enW1<}pbxkw@IF6aA5ADMcb;-y8^064i!&K1C3CXLKuNkh z#jxO63ijl|lN@e-qH9%HM_42Amjme0Z=u7E%gteG$>LF{4%lla$M*XHt3i$nE)}3{ zg!Cjq$|Bm~KZL+FS+)4Z#FkMZEjo`lOh%pMX#^F8GxC0hOcv|QPD z$i$=)V}fTHWftuokr~hh&**vCf4Iqtuw-(w?kPyBtgx>Wa3cK{NXYRTL-x+*xfn6S zUY$dm6s|Eafy_3xt)#nfIQ_i>?C*Od^PXSalGUkhAfZ?!`v%8<^_%?g%E=AM6wlvNDV$g2u%i-6+#Gs384uo28lDT zlg$zwJVU#0W?ahaePJ33Y=+Zh;zE{Ltj#vHNHFz z_`ENK5L!o^jT&*b1=>fPS}cpJDTF4|=lnf;Q;Rg=Pc}v#4mT61 zD%`;XkZX`pVE@Lz)p}v!wX9=Lj_-&Vr$>GLbOFven4reY%K9F0+Cpeqt|thg%{b-E zF4PK8oNP)dNhP*}XLp)kO4z29|DK6v%E3Ouh^2MbogBC^T@~r`)`rsIh4r6;OL#*` zhGV|ZeUL(OG20#;mZ4+G0}!3W<#PM1RX^m?KWr>U#&bfD*I8?hsnKDHkgo z4jd98G!g$(&W8w^Db6f1OQOsLw;PpIcf?k~7O18r+QZE%l@&tQwyFkEC2k|1eiF6r z#zowyUw*dPbTe+u8FZ?cMV!F42?sO5#k{i6u0g!mbI#e0I5XNIG!1 zkQR9gT<$x4673r5t*j7d5~MhjA%bT`0_LOidRi67;F;pJ8uj)h6;INybnieCOQELI9~3>XjhdutHLD~HP)z;&4S{Fuv$WAcvsoOO>zOF z%XOv}f=6I~xnY(g&l%w}jk8U_mesoI5@yq)-a?P#M6Q+`(6!HkJoVY#kXTzJbnA^K zaqLg}_a*vUPQx5=l90dkv_oit?q0q@L^6pcJ6;oKohO?mHgQ%0gJ)1~P70o7Gz1xE zguE$Dd$?KktFktb-U>kf;c!RSpA*<-R|c715Ti`>=v#ASnL4F=VUES+bN zpD|(){E=uS`Ye3d25eK!hBXw|jrKLL+VmS0M+||(m{!^Tg75|up-JnB;fS-5$`(S) zu5^XaQd{}HiWG6V){Z;nl%XYByxkX?X_h#XA%bV6Cs04Y=+2pfXQ;C8M8*{^Ib-z! z^(ZS?XL6KFWVud@kr#&?;~s_K9xN5Axdj>5GZw>Ap2Hszh*32@b9~99sT^alIxNOZ zraUnCa0i6Y5b#|aaHX_`(1Ik<TxMPcn8lcG9{V( z@r>7+itNPoqDMsrp48B?93Dft45-@*%8}+(Sn*;mMDdHm0KCkG+Sp{AlX zZy3<57{a*P87zw}ATK}cCWuEgOrTl}VsEkKF&Gx?)|N#dapG;df_AgcfJcp9r<`RT z_C~Y{HHr5Av09u->B*DLN;EG2fXRsWcOmeYB|s*;KttyNIY!Cg8EI`OwWkwCF`-o8-P;SvEI}<`g5>57Wo;Z^*o@}C4=L(O=m3i`?#|F>H z7}D&6MTp7=Rbr8T3nW~3B!DHV>G`yJ889@(Mgtj^TQeGW?7)Td1|~39Ahz5S9*fiW z9#_<}G`!+NXgsjB?ld`c4As8|4XyiJ?_P|7j5X&_3v5gkrX z=>+JBc^1}gFwri;mx>*OV`R~dRQz$|zz|wNW?WK8$OK7;M3bpYw9gjOinFehO)jrZ zoI#8Y@iJ^ngf(ZHT!iLSIezNSo2tw` zkTZ!xS04Jphiwd5HZO^7L}$1d5iwX6bBuUI0HSix0CBaSzp&B7AdGGyVf zIOD(}g^ooShNrD%+jB#lZ^5R3F2Mu|s>B2}?bQjZlj^A&1`Y|K2{es|ib9HELTECD zWieZiM5}CF6U7;GvS|}%u#xkEV1^VtbSfxkBAA2!6cm|uIBrz7Zt=`mw>fxs9 zv@tS*&vs!Ciq}ylH=uhZ?e=ds2-sjzV;;vrhp?Mo4(_+{rFSfcb4ixo`c7f$Fmnh^ zRh;{S0`QcRWU@p{Thv3Gk=;NB-fZFwx`3U0j^J5z30D~qnTjizRJOB-5Q3t)LJ-G? zGJ%Zb1OIS-r!oLAy@p6)BYi_N&N3gwSMYi6+vJXgFBnAkK=klf{`jct(z5J*x!I zYEK4CBq>)lJE6m{N~+=(V4SjX+2?PgygLD;RAQ6qZ^oDCdC8gD0XW;{1E)9iIZlAm zCe*&JR*w^suh6X_r{cAgDukQ}oNNF9AOJ~3K~&Z@+xehC$-q<2z)G}Q7_TPL zKHQlo&O|72W&+>hhWhmhf@dt%!_8=cAcAK;hno@jaI>EQ4+qFmG4Hy7*c)Gk&Blo# zgHGPUfS`n)zyvW+Bpe8Nl98^>)pTs=DA+@2TE?7m=AZaVv=Ws>yN2s!vN*$nsfHMqwyUl8cl)>ZWT1h%$HF*f-55XWN& z4rba@mRk=L7*0YRv8_+4Mo=Y=sl~CXhYHbu)U+3=1`@a&BSL77%fKS1oFYQgN$!ab zkrGXCq!wNoAj4!Iw0CO{jgPmOMjd^kV`u0*HB zHyU@OOn7Pxy(DIlKNLO-{38Mom`hc=IPGflGFja@-&)D)m$DY)*U_F3TFE-6oS~@8 zJ)MxO{D_lixfhegS(%*?XAESZE}<>IhM@?akuGt`xKsxb^~D7)w*57+$W}Le^~zx8 zxjOEth-tV4nZ}I{gJDCK(ZJ(Z*nluWl_=xr{h}6TYr(lUA%v!CoC&9#XOU=$3oD8< z2_|?}Bq&m3pCBE+a`3DHJ2566ZYD5?nObAVceOACjqFp~y zhzX{OGv;K|CeE-HB=yY)J;AdUF2OUdxFpqT8+O#53jG?0x?^kNz=pY;fc_V(c{aMH zSLb5fm@_D_W2L0n6mZRk4QP-!cWU7=#Zup-<``+e=3XmV2ED!D1=R|aXc=%kl#Rzo zG_iuyB-%BcN1WL(oNTs(XXGRinH)SzTqQ*Y6BzTte7G57&iH_AnGCV-L}z3VyWM8! zZ=4D~&wD;81_7i66*1g_Q1OAE0rIRc2|<`kH4jvYYt%$i^?;$TR5JI8LTC`YB?&4j zPhys6B_kx-^+e*#7Cb9bfKFAm@TmFVNBE8Z@7?rA3c zk8U?s#`m@p&`*>=Rnue{t0$XAyrHlasV5r|LW6;>23pI8Q% z!#EYQ=*<{0IIP87L@hkVuDTywDtXh-14Epwv3|IO&`6g;u@bjKXb>p=3=1du)9KSB zTI^3DXs*|qw3;W*j=Sv)DJo>p%;?}*)Hrk{qQxR^huX@drFOW<&6amm%NP`GJ=IAW z`|zfo<8BB$s@$`Jj_O)hRa57VK8K7v-o+2;Q&9-4uWG*8d}vTxDWTgutj~>|p<#hE zUMy^mr<`!fEVV)YLD5EKqcNwPL2_n7m&h>HnSK6D_T0D70+zL^aC@BnP#Zq~Wi4c+ziBph2!+goapuGK9*s_%V+sQEyy z?dyclI?v@8vILiRy46Z#78l^NYIR?)rGVpK{ zLN`-_m`gUrr_|$RXY&+5;X=}BN1hzQX9O@CN??{>aoSpVEZ!-Y5Sl@I#jtg0><^|~ z8RJ4|C6-f8Cy6HRE#oBGdub;UXQe$HJVWBFr1NA`oBqLJ!84M|dZP}Wxg2iBkX62; zNxL$ZQ%ggqZ#WFSLDIHtDAp@N=6F~s(r-#N-200ghe5_o4x#ldE!tB~_`95pL@QZN zqSbCV3ypr7BF;oC;*3C@r5QZaoorI|4k0v$SK|^qzq?cWqPH3~VF$qjOk?eVv zK}OgtnNv#1QRPkqNg^M?)WflzU@Kkqg-%sOs)y?7yot9DL%FRija|Z&tBopz27&9h z;hcwdAx}3*qLrUkmD%CqY~XEYC^n`$+4N&{@GQ9k$9o7ND`;57OD^FWZsGl(xmcJH zidUF`M{01thc_kY<%gzeusNch?^PO);khb4u8D(4>`OVNoZaFZoQkRwSo7qF^VPo9 z#*1(*P3_2mgp_f|hR{?JtsO!ufj6QtAv8f9$W2z3B_!&UXrU;E)m0&caD75?R-!)H zY!5PX@GKwrbvIhG6Rv3?1l%SPpIO#A+=RLl7J_>m6>$K_=K{r6_7tc#?^9q(7E{6)ppVre<27GEyGo!;8}~$bhtIfaf$xP2{gXZZEHvLN9AO}oQF3zHrm6}g*iPv zvPr1NCcu5a=o-;@&lI-(udmZakpWKAAGe+l^E_EMLS!gKs zV7VX8kmbx6Vo@&OK#>x!=~%h(U;5DR5dm8+6)uu1&R1C%lf9#s#sDefT2*W87<4Yj zcWr1-IotX#gr|~dpSDjV&WtCU`E}5*P`zbE^qg!i7(BC(EFSUDiqpi}E4tvavCz#J zLQ}tz38ZGVh#^O&l)laj$>z{*)V8)8p#0PZ-Bn;ewq}9DE~%+zDomL-3gX3_^sSN1 zCxphi5sGEF9YQOC5-o#~Xf_U)Xx9+J<#Jh5oQW9488VJb&l12zke^Y)#--Yo`m)jDGa2(_fR^f$n`WChBU$k}Xnk1) z+!Q(PVhjBmfpc-=xJCbb!P2B)Xsd~R;#eXy1qTIMo)e%oEwx1y$_^gVQX|>q5So@E zW(G=vE1B0RXP73@g5YAMmYT3xsFZgWaaIBoT+SimH}l5sK@}Tjzu&LGZ82yu4c$!1PIz_S6}n1`k*>KHt8PMV79zI8)tl z7HXT3w>T3@7g`kdZrLknAT|dOP&VytIx8A_@_})3qQ-fr^Gn|$=-kw$7NC17W}27~ z3qt#zh{0h)mL~y<4+(V^Qz>JSzoDRkfUaW;Y;i%4{EC^={)Ib5ZKv-*dA64rbg>IpNw*h0r7pmS`bdYhkkxo?M(22a(7~X(9cj>tr(@{q^B< zL2ky%UctY4z>PYhIBP9@GR*K>?MBNaxr~v?VxoE_4v?GoCHf~PxK#e;>ff6kP7X365Em8CN<+?JPDbA?3X`l`hp~P7+D)R&><4!iofK~_&!Lufx z$rLV$#1)K8`9HZC6B~qQmnzWM5HUvD*1#>~_KX-h)?Gs!Ve2F~tYCr!RpN+b_3HWi^UtdGf;&+OnWK@cafx4SKnN}UFO@`t4_fA1ZBd`H zg3C&@Ao&)MM0?MnJ<|-8!fKnMzc>?`s_Z=6F*#)dG(<8SgJ%tLHx>(?CEg{0vFJh^ zJj>qm@_C_>H~AaMsVY=m-a(}hQU)fFkj(NAZz^7{f&Jec%(O0|#}@|X!iUHjsT!|O zs*Fb>FN!T1t!n(zM{(8;o+YG>)*7$lf@hsvqJQqhHeqaRGLCJy282$1 z9>_5ZB}fmVad8Ioul~0IO~Ijou44;T;^nQL%Acs*c>6Fcu{Pn=+BdRGoJ*nfB>k^; z2n_;HIiWGI zVkKdtw}LoyB)DWzL5UCJ+N8v#T$O-BBgE#0=HY-Nar<#6*o>RSm=KzRgChM_T1y2; z1yIM|pMSF2DrXNXtF9AC(bSxp>9ivGZe4N zvfz_G$KY85UQcuf&yr+lh6r5bQm7{bs_P02G9aba5e}bdrDLa!-@GN;_=wu4yc5LjgORO)^oQ3i~(`)H} zrAZwn8eI5sf^uIj>UC0y7Cu_<{i4^IW~kIwv^`p!l^DcXiT1WL$KY9mRzm(OQUaID zF?beduW7s9G74gY<^Y=r8W=YChc}-Yr?!2uR+Ab1D^D>hv#P{NcubXX3^nb=>{EfR zLc<=H9C>U zn_ESer9F82gGuf<-j4-Mp^=Ug#K7We)P5^HSq?5ve+M-yhR{;Rh0sE=au{wzJDWrc zVmH^c*3}X=tBAAm!%%VESDcAZC!0lz;sZEb(u(+et0!=Or$%wHekHnO2xCNry1n)+ zcDDAp8B|9oxg0<~^deQEBJT!!^6c=xm{j?&{7kmVEt3>bXu_i46oEy=#MVwT9Ft`X zHAe`6?!l%eORhCiwnJ!biI$UIg%T}8dm~!qlK`0`(K^pM<>9Rgn}tfnF4Ci#A^3|k zp?er{hK4^hJM(0doYEmQIxp0QMF?gY_etU)YMFN~(Z9n{9d7d75dy9r*TMz1TpKr* z8ow^AP!YQiQBLEOGLd|3j6S#cP|uQ-QeS_HO@>Wr@iv5@+M7ZMrH5$UWh5FzEMRQ5^`o?cEoNFj^isyfFfbgLQE=36fw4#(MOyH;w8PY62m>`4(|+~QWZi|opP4s zTcseIvJdhSnGl-4M3V{?>#DsS?cr*=(>IivbWMB1nfUVnf_M^ZIZ>RINM>6?ccA!a zi?b62&thuXtE*$2=JU_$=VnxOL8GW2$FtN0U#{U;yFQFMU6ZU+)M9ULMYAOH3SE2=Z1dHvh zx*aWixO#p3hfCNjRGjMyn}ylpEFbzxaVAjAnB>1y!LtUrSJjM%2hWy6b+{R!k`yqp z@!&i54`0G||m!NKGZq#2d~+ZAfwA>~gt42^GX54iRT1X%Riavla^m z&mwD=aQ%F36q$V}e8VMPlXQ| z)g?9GAaN#uMp9l%HbXkZS?+9WP&W%rs9#Ffq+!9cTJ~D$%m{Zs+>B72A;QG)mMmz& zk(p&}R5x{ zD6bTsvI1MDICyrsz7N08LFfVe+SNl`Pqxk>g!^=D)|6}K7SJERmZ?1Q>1O|oxDVtQ zmHI)z8_4<-D1gJZhT9S6qucaGYU=^(Pj|9LL97o&%7GFMxdeS)L86s=;`O2nq=~cx zX&>Gx!)Bpgp6*QZ5OJ0!vxu_-?QLhC!Lt^8(t65d1#%6Z#i&<7$2_V}RAp{~ZOn@++PTF$O7`=KrRN4h$F$J|C>?c)E>Jq!WWrO5# z|Er}HKe4O?NtSw^#ufS!>r#=jCxj-D8wVMlRicUYuAOy`4V#79;FEn6>qE7XTuNz> z=)58U5N86-`9Z253+?$7!>3Hv9xixRr}|orvw%iR4R~*v5?^bFVr|k>;3&nY305#} zv3UU1UW~c7Qw`*F#7R)oUSzp(DzYzJLTF9()=KFp(cs>yy%8;h6G}8uz*HKhlxR}8 zOBpr`K^AA1%jI<9EHloCv)5Es`EY$j}W{4AKqIMJt5?jb5&Uzo%EIw(Avo4x*h!38nSE`p< zj>p&X`bPhf&s~C5}|ra=B8a6)FifCE1>FaRpOX9Uu?wf zh%;WU;*T%#-y}))dNQ{A=|vi_WNtjqAZ(;)8Dma4#Sg^>6D1n? zP-m#MK&5MHJ$4VIT|>Q?P|w^5o9WIpCCSBzryzEKSPP*`uzj^SE6FAR8n#`*vpRXX zbvMQa&uUSw2FW5v1kbe8f@j`(Q72qfiN~OG_^DYlmIM0-T@Uc4F=!zMT8n|s_mD1{ z(dY46qVcv(vP5z9YOS)7iH0QNzvj197cb@@ZHXonly6FT0_d9UMl|t5S+Gc(gDQ|F zaH-yoR;%xIc-Smd8i15smHJN=X9Yrn_EacI6Lg8Q_P3iDK4sniR?XsTNRPgQnp#0z zAal6s&ZSZ)LV3FtNDS4L?d2NQT&k))Gd8K`C??FH0hORhn^;c%Hno*6Ro}Q8rq!v# zuh!h9c3`YQdk5pUjyqVQr9g?s96O#sqJ?Ugh#%LKmiVzLY$g{=wOXjue6~1CKQM^1 zp4-lHG~$du*_;wU+RpJ`4 zcj?TNk2uvKv|3&c!(zaztMpp^O1`~RleSZ~_p!D_g9qWMCjW##+03D*clBCU)-C!MUoi-;TK4$!TJS7Jd$?)s2D_LuG|qfX zPCipmEgsqrRQ>#5iBOq`q7pIBgGDg-pJb^ga}S|qIx=MkWN{nk{Tp$bB!M6pnxKw9PF`;}`mSqPyOHj@Xzr6TkydW#fia>}*E znLs}H()51fj1Qji;k{Pn;%m9V=wGt$Rm2MxS0j;G zRwD;eSq55=SzJPBypeoq&;L`AxV@j0&TAzayb&!(`_F0;&E>4Kx_x?v%{1bSOexru z92h9h+C#W32u|*C!LtN9<)!IQ?OMxV^-4mrym9hwRg%~k8~_!3B^P`Q6BhU4FQ?UV zj!>DVPhDzsahMssFh7^xfUH82teUEIjr1o7n-ZO~6J@zD!4pWd5ajK(B8Y-0VE+I1 z&TYAIT?eAA)c*fZJ~P2QbR$j8ZQAQ>Rk&t0eJGwelW88+JG% z=l&Dex0l!jv3Gh1EwGH&^74-3tMim1TBp|{8r#fCi=9N9RzNghD3JEpL_IP?aA^ zC5}8cpY&h)`o%u1G3|J~$=LSi?KB3f5RIE@2mxm(s%M?GKpL<*Y^L)T*25WX^JQ>G zlp0LIS)&r1=_i{}5B$9Q2G8zvxY?+2Ug=|{CB<-5<~eI;etKJJ{GX~S4es!zXm5+f z+_p(>2u&LVaV3bdPCx6vN9&ed)iHI=7!!rwK%#xdqe-|qqU{T$5yuIcd0EA<*$y}( zRu{rqdSckOaQ3mYa)F1^cDlMOcqZyxBL1UTw^WWVfBKWJ(jAk>Elyez9y?cf<+p5{ z{kJP@Z<%Ue2(44Je2Ntl?&&_NeqfA^tL7tVd{*@h5sgH4C{Z{Bv?-9*dyTH5m$fKt zM(n9)HbU>p3RQ3yt}0Nxp>4mE3J=SYXh@B%gu@M;-y_*UAl%1 zT;9Gn6G;1U={4n%$6Mr(8Jz2}BWwo0E@O5ToEfEX*1OyWXDLUzId=%2&2pQgnZwPl z?18U;E0ofbtL)^l(QqwXYrSpJf&XPDvq}ebNsQ{GlDBg-t5onuSBAuv>D12iqSX(= zar$>o*18#(1zFJ|+7`=pn;#v0`_aqwK$3`Pexgmoz*%P;Nc#XV zLS}HMiHn>Sl6!AB>t}W{wfp?i=2}q#XJXt7&fNUU(VRqUSRKNYKZt&3okwHz>W{q zEi=YHiD>k)c(o4%(muiq?_?FjW^h{Ia^VD=Q6Rk+oK+t?E5*aoTg1~Lx9W&%JV~rP z9|8c*tdDi}th^bpLroigeqMtq;?P-D3KrignAMt*c`NPf@UZ6{IQ6ab?2~?WjyNY3 zh0uO7+D}^b1Dh%;fwAFbzN#vs^~wzHfM{&zC+&9Gh9!HuN;!~blK|jY88)k(X=-pr zt8*%P8JrQNaMrbC9h~VWo4sU$SsXkIbat@tsWNAOP!Bi1?bBsxM*4+owGXqd4&8~9 zVjUxBpJ(au;9fC2H4P&&pNw8>q7|1ZI7fo73l|!6z@vKvlah6t{)gp0p~g z9XCKUFiQ>?9^|k=qvQvm6i8!S;$0#Sp6Gx+(o6OpnXzFahWCTBzMUyaRN!n%{Y{op zqnCGTVLyywW5uOQ-I7mb&YshepV#N<-wL(RBaUXTiM9;Z_@_zLjxxuuQlS=4{uj?K za2}|+F`Rk_My7AJb4QDwqlL}S8ej6=g&DBxef!zuM#fhDp73qaeliZXA{yD=HAI8c zcMs9%I0b<;<<-tM0N`DTkj$!Kvl^U{G+v!C`?xur^(7KG>opZT^Odyftmya3?&Dp9 zXJW&)>Rhil0sBp01QF%zQ$IZI$wC@4+*$GkM@q}Q;LMu66PyvXcgPH!^*5hibsrLQCyDx}&^w8XRz5fnoyr8B6`hJp zhno=WPgi020q8gYjTaOzilp)O-$Q!jw8$AH;{|Fa@8z}6Yw|4t@w;lp*%~cx-5Tte z*}OEG^{r9}EmewWol@|<1ET3~40x2r64eHLrL$&yWqlkU(MX43GoHRGY(@s1c%aqY z4$h4Fd=lsDEt(J8;4EtR5m$Q7a&y8JOIt#dp=FwkvE54N0nDb^a{ZfMe)g7_vbxRZ zD}VXC`;ziSXsS*{Qj&N`T-Bl#E?kMv(gS0$WeL&r=1~J{pY~!aqLFfxy%?gE0%_?hNw;VgY8pi_yr)~Rn;08DKgj$rND8a$i)T8*=3XNi4P zTxZF{XJ<7>ewTD=d5rKM*YGLi`7$hDJd{V!+NnH##5tgIaq+jb`4C#resRr<)on4C zAsUH~WW9SKqJgzXL^ODoycUOuoGa?`9}e3R7P%>s8Q?;LTf|!@oc@zU9nKUpawW}N z+yrM`W2!4?3Fi9yN#-hjnG}D`?6b7RQ*6b#qJ_b;X5HmzSU%izeJ;@8e%`A1ESGqN z%39KwOH^p-aFnZbNqh~~enYjlUAbT4qC2>@4Q0h-<88$Aijga=mu!GxN5FjE9ML>V zV~Or17LPkmRz8`*zcA&n8JxR;b;TVE<3W5I;9+T#(v;W1S(Eablg&r8GCz#VhjAjgN`v9Kd%=K7gFe z0yyL8UJa##HDIP_g_ELf_>BPo7SZ5YI>Y3r)8r(O_AyLm`@&{$oTz7-AaKS5Z0XFRm6FSEr%A>f zIh3^bfd0!A0BfJ#bDrW`?ep}nt6@HP7APIwheR_)=QcN8JHAK2J-GC)o#WGe_-yzh zdRp%Ax62!_^L;R{ffG8b$xzcprGZnc7r(3QzWr#mAW zSRjoK)jXncP;t}UW_Y_LPaY;SUaAr{gEQ?W;f$E2bBb0$=x)!xL5oiEhk z+|~mlc`hDI+$e;0HuEy#bxzLe4E0~kOChvWeXFwK>2`VtL?cBjh_*YBM!29i^2rQv zqc|gE#_Xvdj|j(K)r2scXlKbKH#QsKtaP%u63*hA@;Lp|_v>h(a&sDqQ8Cf%tW(?E zC;dB}2jNaSZ!g7X{Qp$eHM3wzT+P#tN6==DI0w|a(wZ&Sc(nh{IlXB9f$7i>P4 z5Y4oqZ$#Y4)ZS_@qM5YikE1<|Nut9)e!4qWo&TRtDVeP~(1d##c~2ZN8-E)B^b(n= zwh7LxvfpbmINPQps+SM!SDp-cqLZk{_0brO{d~!Zy}c?jwBh9duHi2~8-76T=2$rl zF2e=Sddbk7FJv?C9NyZbfuq}VtAe3ZLukR0CTB&K?Z=q9wjx@m)IROwMnnT~B_bM} zwR3kM&1=cG{|^8&WX21w2%7;eoY_Pb&S(SdB-;mPJsu~sRe-b5zQ0|X+WY3oyZiWS z0q2i_lb|I*RP5|r44yUZ3A#~K(~_T`m2cLN9zI*xRHAc(wPF0zOVv(?1@LzhO-}j6 zAv9k>+k*A4Q*YVk?)$CWw6NV!Ouex^GwAZuO$=aeZ-r>^j6IU^5zCtr4@&!3OlDXX zHroPc%&t$kEu0aB_Wg}gfwL|<`h~IksPU7osL+r@LF(b=Z_#jw%hRi(iEpPRu{2Ku zai*<0w_)KCXX92YF8P4LTFYgqIG&LqLICrRCnl)qY-exp`Uev zwLD9A2btF}PG&p9X8HqXzZ1^F+b)5#lDe|3=jcyuc8XS}7X{DG&Ig95X`A!r=ACu! z@<8_!EpYfYBiZXyxgla**7Np;K66t32wHQedN$20n;DWuUUh-gFWNXS9`R*xmOlMv zDppzTq&vM!f&YTj%x>0JDDU6vhgp5#4z zcHTR-o>9(@)t?--SR=8>uhEfD{77OE@vd0%B4@Ptg_d2pbeWITmW>h3ZgXjmx*~MT z?WAmjcSE#Qfi#iQejEp62EV3+%=mCPXsL(IAj27LgIGJ6qjrkb;f%;s)HNplZOE#> znJRF0gjFByza}g6(`0G!txjU_EYLvk>}+OZesmmmOKkZ*<@33w-vN22>97%}7KWo< zqVtuWe5+vK^fs#Hloer+zX0}&Zm|B17VOm*Y(A$j_tuEUwriV2yp<4bUmz{Z`ugDm z$jK~%GpfTqQ1!^H7B(XoHg%?XDV$}nmBCrB%N{#h^IAZs$cdj7_vVRoV7QAzCz3?fipd(a);oVuh};P&P7g_=FSY~9jb0U82!^uodZie$kZ+yYaT(H z)a;#?89Wqu=J#%*z*6r;XW4&jKCMKww3`FGHBcnmtHL*(I|rXPR&(g-N_SoDsECKeb;MJc|_j30A3~hNyBsPYj;v3+K1aeH_R-IP2fp%o_5eut{px*5KL6gL+1G8VdKR|4kCAP|==Q*9v6_eZKW z9Ho?aKON1TG1W(5)&uRb6cmZPow5wLv|Tt|?*Q`p^-t>vY{53S6hb447JIsXw%Y+Q z=u=Vyvaebv%&mfG)C>o4NY6Uq^vDg2)dOiFrTsYAL1xt9rC~ECQF-7D^cpXNvv$VU z;cV)$vl(@ri#e~!>MR|zIP0?DnP}$ebamd1OIAun-ai3oC-)@NESGY`Imw!hD{bP4 zHI9YQqTi{5buL_(gRJCZ^QnetS#Tgnv`z$m!Uk9an!@))My5u_F#A~F!f)e#*o6p&n(#y1@FJRj?Uj!a*kb->@4I<4W8h22C zA}ydao&g-k;s5=BM|X$9W;}gS*sO4-Y3GOhs^*>GtXK7&fIhzpXU*s4Q^ZyM&6*+O zx1!$odDGuXJMd<}w!=-w?aC@fje0o<^|H=*u!ff06sGVECX;{a-exl*bKyy zkJKySEGyEfZARbD5}d`4oyD#K#eUAZTks6pb4I6O+!RbIe=}{nRsPsCgK%#4nZs~T zl{fqq@@9=PFMg|<$yFbKfiFUvH;X((rP|(|u6nmri7kY&Og=WB666YEGf#`=(|r&P z`A!Hp9d!12no81E1=5xrceb{x$qaCLg2NUnVKX=vmX0r-dSvPtvyYEk!&!efRN!nz zF`R|1in9FK7v+h;Ghg!Y;*XhJJ&KGhH{+hJabXk_orS_^RYm`AkvKpKFt#~*y&(5U+4~>~={P#bvNL|%$*7(y6b>NdujXSHo zVvZA!Q}Zl{!?g%jS3%Es;{W|oF2fW1|n~@A4!q46!Km1nPy5- zqT#q=F5E*~18MM!;MC5KE6EJN>%(SnEXmXm!e+od;fyGbcv(1WJ~y9g!Luf-`{=j1 zAAH~EWx+Gi>@<=q4>wP>s}24wl6Lhw$^9mMrz=_pZIO_}2@(JBG?w%x9XvaYKopA-DeCMY{Y}>B>R_1LcixOu zF9&!;dv*8!q-o)|Yz!0^i$wRXn}a1GG~LP37mPl}>dUsdF>=|R?zbWu?J2_nC(Ojs zfaz8a8uD3+}COS=bD0q5v|Sb)r+?8aQhkQ@Y^+6FfV@$IeQ@ zvp_Mr1$lZEXNjc(v*Y+46A>v!Vr=IkS}i-|#;(q>x~6$QKQ}QjuM4m1+E$(Kn|D!r z_fLi8&R11EuWWvn0$|ZSs(H|}x(gZo@^v)->c6IaX?Q_>=+`5fuweqsKb*@qA4r3L znLJ9<18L76kK{D7N@f5eGUE(38#V*x;B4iqn&__Z%it^~Dhp@L=jKxl&I$z9O8heb z2raeXS)_sBS)j9-==rQuagh%H^ry2X&m}z#xDpR%#c3Xx1rGG+S0J$?NLR|4kI2*) z&q}2Eb_+5|%*LjSl!CWy3jX0E+P**<5CzgwO8W>L2UrFqWL7%R1h6D*rk`nYI5Q&k zNO0EAm$!hkjq2(tpj$Qqiu_V4>xgFc@l+e&=^W4s%>MMNb-tb23AJoeoZX7Cv9rW! zE_x2Uy)uN>Dqg%-er!JFE$sHbbR(jhs!8dSn2k-5N|C*q_L2FwRq!AjYYYHNeyCHL z7f1sVO5=srlNlm1D}>FQ^r^5J2%PbOR^hDuyadjy(lAU6XGT-sM%#bP+V-uk7X3Rl zmIu#*tkbZFr)?wQJUWi5$MMMLu0xJS(z_Q~`z@;?HC40z>1DH={-c_=f z(`yp*pu-u_YvC*dpuWv1A+=SkeC#X^kEIR!kvk6y@+WiQ&4BaBH0fFkn_Wxmep5uN zMbXLCZ0PP!M&2}0wCVg&QTm%;tbx)Z`9(KqkhMI7*2)CN+Ukz>Ut_uKqg9vx?ue!o zcew#V^8T#Tw0_*~{I&ldRddlA4wEotl@=nP*z%D-+_ajmf@+t9&|(>w+x5{Z zMYK-o)|Bo`09GNIV`i>T^buAyJqe^)PKFJDv582FYA z*-V1P=r#?qRzO}b-IEYntNJf)KT6ix?jthw#rqQJ29@qkU~ZX>O(D&v1#Kc9VV1Zr zkOm+)?(}9|N@*W=Co_84@Zm&I^*V3WrGiE33T(|nK%OH zO2r18biu=C%9m^WBf1HPohR1xH81x_tWa#&7+nPl3W+DJK<`Do~W7DIYeat)cmpOP%yZ5TDCgDakC z0vyhmUH|!2aAwt6m?}2D6Og!SbM=szZt0IsA$WEg91%WLv;5-q8Yt3eviQF(@u=>6 zGwoJ^Ei$FMvXuy?ve~Q*sf<8gzg{|KR;3pOl6AE5(W+lrvz;eLG~*%NslePan?40v zK`&9;p8-}2s)01Pvvwh+H3@+@6sdW8&NF=K4 z(pydK*sZR3IiTLbH`4i*n$cwOR#Ov1jM9k>j&43Tr%~jgTa$)DXr0WSL9HAe?Y{{n zt8eB!<*gSY8cn1y#LW0cr)}4OQ&A8|8=y3r&e`KT_xt;4caRx?GMT}hWiJk!L1HY> zb_xY0IBQ!)T0Q`0v0{h)#|b#oUkiw}Ja{&gB?gMrlS*kI8t(9pfuD=;jC&{`!Sv{uHr@X;zMj$SEmU5RMS%%%_+qQk=X zd^&)A!+;mpd` z^4b3D@>AN|rM9B3Ui~{Y{00|*pc^7jLGVniOEN38oNBgsHpiwVqV3J4OqqFJp&GbC z10ycZBiT$k;_S2Jdro&U{9PM4qMhbM|I28&;Kd)UOy7H@ytNO}6w;y{R0?{DE~04_ z!Q20x9zFATa!P5u3&!+g7nynE%F-h;qxQUW%g;1nho86eg>cpxnObHaJL{K$Fg#WZ zp83)(I|Zv++>w(+Hi`%%9o2`lid1io#O`>SEPg}1Z-2zY$Fm0LP^?89#^{c8a|-uy zAlc9?qJ1_tsb7;SABjPqpYzrxL<94jw*Q$(3evJR(E}_G(biDf;m(kN(!jd#Gw~w2 z!Ui&fdt6m;Pz&JtR#eXH2;h-N{ZKGt1O>btU@%hp_wFR zBNc?xcg_NI6zpC4NOs25r;?47_5t8EWJX7PTi6WVR94}P47PTr38^5Nl6&B+`HWsM z>+~PDZK8cgMk@+dFS##KRLr|&5mwzuG82(*5^JW5OO5<@B(jU50d&x&Oru~rpCx+M zZ@wnW%^7sqsWa4l#v!x>(OSib7Jp0)h<*D}h#ruQl^~iK0cl$^N%RuXf_hn-zBP~r z)~{!VJEs*&`!69gUr|AQ)_*5gVrB@2V~)(6X0SvF&Pc(F;LK<-oLP1GvA6U$GEtj? zXZ0-oaMQC>TPR}j*_-J3q{){9)V_E+l@7sVu9hwObX%n~_SD-$3}K!00sJqs>2zpd zeH@>k!kh@&eBjfoC~zK@!lzSNmlZha)U~AZGcdfO`UZy|ty25$x_lh?U+2(Vx#KuK zTQ5o}YeO1iJU>i#{bbn^UZk%r=A^&(3rj(&isX1O^9hq{05R$~fRwNePpD(;SL zb8gUn6!t5!&nl(TEe_1HV`i zEFm+@hRq%$ZGqStUimfvH5q|3eDrsUu$!TjTcWRMQ;lwhAtX;TU&p{y-Rhey6}vNdAu(rh#)nj-P)OZJVbL7y+d)|=84oPGj?CZ;f6%ujVKY9<%ygk`9xhAf&K5W$O5NtSdx&2%aMr1Gvgu7l ztGBIHUYT!!NOQ@7R0EnG}?gY*L9U-(?L^~;8v$GzR z4f=fIiF42Z03ZNKL_t&uwpJk;cngUg?FcO^7WWbnL|PnskGGannk54P%iL;4$&8P0 znap_Q6Jax;1ZO7crEvE3*xC2L)NQ($mEf$Zw02Rgp9OZ`1&5oy#OPOL zG`8zjjaevh5-pS*T9eGe*{vc}lQlH)^~s^nqd0`t`H@GJC`Yu@Ea`u3%{Gm+zqyA# zU)s=y5lz|#*>+ER>Lij>iUb}fM1eG?#x0cAX8z0#iOlM`17rqgxB(tkaox}}&FDIq zBx}iwn~9~ostN3cv&I0uQaJ1H=@8DWI)jBLn`z5E#XUNyM+d)((coElE4f(`gvkS< znTeHNuJO%tR6{YRauK-}$xNIJp_Nq866yRG??uta(eCt1RG*ESLT~9+OV_6~#nvEf zYh+(mN>MY~M~Y~)FD$VZNTccQFDD1@*Lq4rQ`g7TQD&GsOlG|4r2|c%7&bH0V(kNG zpm)qRI6JaG5|D1X{oS0}hxArD*^Cv#S^KdNp*j2~&pHhS&&CwAU)^L@H%U=p*q{1M z$D;?-sr0R3XqeG_rSTTyXQ}myqlaV}h}0PxKM@qhh?a-Y+KFQ9qmKgyHpLE-0$VDg znZ#j4gKJ3>d2!uCz*XLi+(&5{mPO@XPiEZHj<6ZjX?P1bi(o^@ z{8~V(BnB1)&!CQmP8D}J+zcdo7yz$-QYwE`C7!s2*HZHk%~mzU)nv)jU-z$1#=eU1 zlygemN+x%WDqWSU1~$d^eHo&G6r_m88cE#I%k3m`knlXv^oSRn8MA}Z*uCsE`JC$* zTtjB?Zca*OSP?c;rY#tp@d>yM&bnvLK20-Iw`prrhn+4v*$gIar@qZAo;>UHs>4lR zB3;QZ2S|20!roQ2J@p}FHi=;*armlxzg1Y#5O}#cYTqGu9}|l~C*!9QLd#To5DoQC zk;OYLVp5d7jv|^;Pz_%&B;b3g8yh33zA;a~n9|6oc2?mH7v(M{Gq_u|>&zoFk?o;} z&0vcc9yr?yXT42lk-4P}Za((;y*h&uoRt)|Tz`P9lU}e8W{dABM}vo(a!+q7F_`x! zQ8$?pLpMRMYeHyd4X7Ymmz%aQ_GXl>PiYD<=o2K;q8qnTknYL!QhJOfCvv**rj3{G zUc`fq-6Lm+(qIaHJkq}Y`GtbqEo3%-po!_Q8NBI6iW@U}AMj4)X4c5U*^zzKnc}uL z$lxqCsGd}of@j0BLAdjv1qM56p zqHqiG!)bDp^e@`b#tbmSn{vr2l@M+6K{T6^8rT$K&?iWw#X~+qL25?#cUpyG$uF^o zXpS*YkD%&s=jc48eMHmt$d5AbOJ-W!3-H5c+C&?MGu|nMq9~m8N!>@mZGRJIdvi)} zy*mHx#}b_NO>I8vF|ba0NUWD{X~JOP?dE2=gEJp(n)mRh%Osv-hF3J8t3Zp7I6Dv|KV{SIC1iBCR-Wv3RDbP}Hm7EcMx`bh25EwCRfbcz?z?99NX5Q9EJ4O2*n22zmv zr}IPyESd-)pfoDa&vHtG@6(?3+=a~G58SG-S>;uLK2d$(3{c_B%G%u)&N_pIU#J07 zUAW8?_@FBo6J#LWGNL-&$wtX92h2*mOyVXcdRr^8&IRC=8KerDy8MWfTBl@5mee}>52tx!uVCDlRVfD>ZH2VxMz0j)X3lKU0n4L^fb$%Cci!%!w1?Y|sB(-4%n&!? zrDP_D&ER=3Nz$1n=!8=ciZyS++nO|`H%RgYIBPAs8dI3trKTCfkF1%sE$EKwbMSD} zSLiSxyxB{mgY2I=tw6Ux3!LwGOQ3Mug#~LLClIY)%#i3K^ak|RzY5X7Rx5?H=%&vL znnbz@^R2ZQNORI}L1_u7(TpTuhOn`I&w(K_1Kh158WodNcu5mYl{6fn_)AE4g%H$l<4VO+SGD(F`CcrRz98KeabXy7nIjKD7brs_6Z+Bc{7e z6*stVRa$TB?&HA!T6;2*twDDwZH*gK%-pl>|GEghtK-v*i&*xt?wU~oK!%!DTJo_mV1~dskng0>5>;2$byE5(#7m_|jBcnMN1XbA42RHSC9A?{Yac2)jNNM*`0R8;DSFHkEeL{1Iw0^nG97x zNMin9Tb0$*>uyA?>5JW9@t;oLO0e z^qqjN-t=U%lUWqcpK5T{DuJ{1LQIg{XhEG*b)Q2DacU&%-BjK+FPDEh>17yI4)|2d zI3lI%RUtGhQ#`@S6w&(p4AE#X>9Q2C9*B`J$`2((D+SW-NogpC)1Kdd=KD(mW{Aiv z@x6}B04L&wU<$D7Hyt)3ouz#ww=$hi0z&PBvp)D_43@)L819N@y`stDo`!>Gt@MI= zkm-hzs^28}im3{ZI~PcAuxyAFDLnNz_f;XZcu}b`Wr}FMx)qTunfF38lGrB{FpDCZ zNO`~FwDQtDKd+%Q@B7d2Y*UV914o&_ax$xj%}mmcuo;*o9U2=p!^hX#n&*FH z9^VJfjPkXrRSaiF#o*a-9?7eMXRYD}`zmaJvd>6S=x&Aoe?p(<8~3awmncxW!JnjB zMte!CevTJ$$J4?PTB_|2qD6}hK(AoC5m=wnsy~#%&5VtUSvHN;A#c>~uI{wF7D$7C zeP<}m%l(KCJ^AE`u?$hb3}IUV43QbU`+A7X*wxapyc9N5;0YYgn3+jY{L?P!RG6@gCjOp2;A>Uc;m z*r>mW6U?R#&8Lb)uiv(aH>OO?@oy^ zN=tJ+VEOO+r-aFn@2`=Ac)y8$J9EY&VosV>^uw>)MA!_Dsf9CzpTMe+?kd4~YO@2* z)}CyJ-d+(n(#cB`LD7JT}Kx|1>eqQ}&FojVrr%i(|RSw%FuPIQ z6^lB!S8_k#2xqLdzX8syCgIGecCy*#uG}h0!LzJWo(g-UT!jvKFI1u9w^t=Jd9>SAXPMNgO^Y&wADWCr-*u87P?`jV&3h^=>~Np4ows+5hs67LOX zUDZ`MBL zu2sBpq&HKSpWEA2zqc?3nNO=#h$foR-Hf(cWGs(zD*L&MXihiFXOvz#LT?BQrnw)^ zb50VLMYA&?vyb?RIA{3b6V*a8<5y;N*bHPgNq^!l%nUVCRaKo3;?to#AT zztuKRe{QVu&9ntmPkO`t1muWtl5W{)O~Lel?;2%z7k#u!PdSal1ku>9`+dS?h$foR zU5})&@!`8PGhG!(t8MZjRC(#av`Hx~EK6t0)_@sOka9*E!(>LX$_JXIuo(>kS!>n+ z9yTKrTC0Mj2;imI?0~Z{)@4;b*=!9~z826?RNs=gY+F&<3s0j3^&p(yHr?_qRH33k zsuR6BeUz0=ohl`gF~x5CTVx`HmMUIF$O>8Y(9_%uR4Fp z^q`6k*Ey@|@R=Je-e=D%uq+Ok6+!AN?;0}W^NW)i9|tj}1qaTQZ#V<1MZNO`@KS6p zfHPvy_{<5QcX*r!cK3gzWYd)!=wSr5Ut%ltXsat3G26BkR@l^gSps&r0emqIwL-?R0CU4mM$q<(gXfvCi|FwR7?t4lUMY)M{# zXnnp#G{G(1l*AOpj3yqeH>EIGIgrNE7g8FMQi;P9)To-Pd1OGB1k5l?W;APn%m9?X z*zC%%+41q!@bf=%V@Fey7Y$TnM3ARhNYHlr#5WS4v{k8j!`FAzJ&-Ba(p>&rB^# z(h7hT1k!ZQ!#yYsp-()^cKIJ(Mk5i+5{hzqyMfHgVKXK^AbQvgWG1@rY1-0aEhL4q zqfJ=>XI3ekS!D}b9u4aH(%R>do?8ab2DetCtox4gVRw`d_*1&&cx3Ue8XaAI$a-xX z!RUyypW_oDw5qBRxbS8Lvc`jW=-Y37rWZv*G$XomO1p=)$03ypz#`Csw4SE_p|aH@u6-Dk7wdp!z`lg)>P)A zb?}j}$TeE~qJSyx*y#pIKDj#9XMfjO1F{6Ni*7a-vVv!;>7<#PNYZM6RSu-F^Z+Y7 zMgTBIX+my9X#fuI`LhJe5cAVR&Imp7-iyotm&~X&YY87}asz2+nly1dGG}bAfiq$d zPbyE*?t_fXHqgmlPiVC4BB)`cCVs6M}G}7fE zZajqcUx#Q1E7&LSKBgTH%#^YqO#{{i(%zlYJkLLWe-l8yedfW2$iQW?hmts)lM#%x zC#Rddgf}MCnv$6q(}Gi%I{gLe63qtSOi{|6#%GnTa)VCo^(q{EXIxYiGpQU7o!TtAPspBABwe`fL8@hkX;c$gVCp79yYrVobkw5V zXFn4>Td2NO&BuJu1~uw-S9@NmG%Dk1xL~JkW7;$?4s`7cp`|i+K+Rit18D|X`xNhw!h&foTIc`eSe7Umq(~M;>!OpRu2_PK{vrPl&-g|$xw&q|*6pi(zht0HX|g$aEf{8#H)4f`|^npzC$ z?bMC`Q4FDVF{JcrcK#KEv`Mzofm)O(8hAX6MbV6N82_}VFrghUQHi&~DGujKxdE+5 z|A_MgERI$610j|MC+HPCng+l7vB3wRM9Y9L>~w9UfSGGB>iMX}%;1-Z!e&-ZU)+~8 z3H-?4qvmz6Phms&ayaW6AoMOrtBjU%5AC(9ZhJ3#^6X{$eLdQ!$;gnXehLcVlS|Yz zV{Hg6je&JCcWGZ;x=sjH7@yXruO(>)v?v-_e1N~yX+)NLy2)sX-mWDU2i)yH;su)Q zT(GsVH2A#(@O&MUXCGm-%o_YBU|E#qPFF18_zRdbfEnCOa+7VJn@n{eqhHB39SD(0RAGmcCXa9=hakGdaCoqtEJ< z`V~6xdA^})NHVUb(&Ag3ZP`AI*L1-~ac0yxHx2968KjS42|>6lW@Zh9C|alVK{R+# zH1w{eC>rbW2Yaa#CVoRN!F(cEB#Dk&H2@X_v8t|c+AFG$rXg$zo@Egg2PmmOa-aX4 z?BEY&J|qRqcy1mrqx;9&m>DhLh0Q!>vbLqL8A;UOjMrk!E{3ztk8zv76JRxMP<<`n zM!~bBt_xf8Qf;EiO{xZg-cVf!qyDBLw7Pv;oi)hDKfNNPNESt7wU{DymF*J%kSF|e!NVk8I96-bgbC9RSH<0vV6gVvNC0thBw8th7P#XN|1xgF%l0s>80vxA*t}Y0eT}o!vuo=_r(`G2mWfl*! zhEs56)9ic^kV1j8kwr17I)|rpC+R$7HTHwn7tg9|)h(!VZw53<9=%T(w5&9RMh?J{n@`aQJzdO%dDV+A5-@da;Awp!dd=Af994%!m<^#8tj>TJM!A#S=6>o->mW5^?4rE^hu_(I=hwZ z^CBH>FFyLGpgv1?NBoGJRXX_TyPSfD{7I}XMR^d7Igy@4gYZ(Pxe5UDPy7AB9q1Y%)By<dhO9Y2+#BgA(`)WEWQKa!jL(uvr94rCGulBuqcu3Qx)RRv zRnRy|VJnUDW|b}uo>kQqZ$HjDzn`T2 z)ZW}8IV$xA3zni=Aevq6#7pm#3&({%Ad&6^}LkiW5(S?a0c0udm{{ zXSOWHSO_4dN@M{u00CGY(I0LP$_1s|Voo=s15H}{WnnYOmcI$kTALisjPfEG5eBpU zncp@tYf`7un*moUemNk1p07Fxf7+qqTLLxZzrwfb=XLgbO4>ZOqBK6OgES6jC9PYF zqG;4iiK2mB4*tdf6TOt)4n_y0u-(-IY2GE;5lc(LX^v8EI<$xydp|(B&vKhh0W-u! zUllWhUv*)sYP^MthO`<217%OYNXdJCB_$>+i; z(M5)ieD*fAry-ow|ItOWgaBA4;xmuK2{E&6Q8a4CqiE9*d0_2J;f( zc&McV@MCG!hy8s!sN zIPFx(%uCmiOSe=WI0I|X4dD#^FQqv-nd_Usvzec4W*%DQjcir=n*pgxhns)er;KAF z8EUCQQbA@<{d86qE_Z8mG=NjaAf+pFZkYO1@JmU#7|}o~s3DrMq_ybaRi-XyK2#|! zCn{dc*O+WN^hEvKGyVHc59K!dunck0c#jz)Gb*p15}fH|24~boI1|HWU`@IwoVCjR zq;O`H^GfO=HJA&Ywf?K{7pwHmXMZZmY}F0-blXzO95d?nX1>k)s?%ZD(^?3P7^Fz2 z5l>@aK}x|dC1n)R04U$PAtD+`B#ey-yPO`PK?bZP#_%uwqZ_Lz4M6&68s@@jkU=f} z{#~=e5g|0dgpMsOYlp#a|xsJr_afc7TF#tn> z^iqG-G6z^y<5D`F4YxTF5`A};Iy??Ilm;=JhFMVaHu8gCsBeq(seb@R{QO(~?7v&u zFBp~la39zkc?p2qmmZAtoRGAFr3h!VsV|2!E9*xgt$|+~-Ys}mmGI2TI<-x$a_U>? zs9(TMnjGA2-lx~9>v(34bf$MT+JQ~0AVoT#!q;u2PR3J&9y$9)-XzdnoSJD>cyfwY zcD(AV0L6450vCV(kBWKUeDTmn_8ve+Qi+H2l|52t1uP5h@_??wp$EdULCJ+=29(K+ zr&lT!;q2pM{I6`s^PBLHv>9Y%(}Bs`Q^B&)SYa( z3=&PXMBkF1s@V&_9A(6o)kv0{yodlvzYNjX(rB+vdO5!3ZKSoW&zT-UddWX{*S|DI zX#fIBL+ln$&*6PRLG8b!5C9-Q#DqV(KL*kEla!A4wxF=za`!Y7{*VM{sHeM5Xre}D zki%whTD2L@q~Mw2Je2}xncI=q0@{=mck&hS$Z8B#r9GpzJHje4tm&ril0BK)rz1PF zD{1nGvujMMBcIPn1JW986?qYI_?W*dFgfzyBDHG=oq*76X7-^yjt1Zwj}L(W03ZNK zL_t(TJnM91i^FLWoXZp#({%WkJ1PRenVFAWV(p`8IBh<|=bmVtM9-gHfMrM>>>#tp ze!#CAON8GHuK{kl%v-1!&%oI*nSps@9Up`<^uKdTep*RzmQ7Lr3Vr9N2D^i2iL`}R zRkik#vYq~2W%`vMOG(GvxbdyMQPbKKV(1or*2pvaSszIe0nt)1CwU4t(>f(K+nUWF z8iK*G#R1H{+PN@2$pSD;Y2YQ}H$AZq)Cixg!7^YfV1}gl6q!-Igvv@ zX@HeNGo6$oX-90!6(>pxH`|YBkiQ)b?7dC^{G|cYN{WM3x>}W68*!Cmwof)Dm9So`DeB z2uo!}tj10`6(G9+(O}?-R?4p?tELc0V^{kN2W5)#u2+zb3n>k+3a5cr@sU6858%ii z`3G=B?_)yo5f)Dh+b8Rua^C;|aPT=7wZvH(QNU|pi}x(c(px(d0%7R23v&MH3qg8V{_rV0^E%Ci?o4z z%NqvoK!{p8wWL?)Ti*6t+bVO z@GLcGl{KkTH<Kg-?IO_zf=u2!W)A>UiHjo}<4HUs?7IHv%W)FnZ0IZ6r89oyi(`<>)-DDmT z7h?~Z;eE&qj{P-ZGq6@shbD0f&RQ+o+J)MeoNT5I&Ufh4Lu!x$U#ryNS{0Gv)=JSK zQvxfUs?}AGI0a>NWoG!RPB}HS`c;VLS#s>Q)%a(f0Q4u)a92umb01kG2k^=DOL1X9 zd_WCO75@RJ=Eq8j3V`BlU%)J4EH`I_%z~^EY?X{B!)B1-ObnZ`#Bn&YuEc&R!Lv*f zoMkhch5B9}JgaZewE_d9{m<$!d=qj=9mq0=9blyZC!mtSmtq?fDYc07lZtr02cp5? z#U@099!PUW_rswLZ#s=3SIJeH`{+tcY1kG{gHy$S`38{fF+lDE5d8d8WCq9HGoB2a z;mzQTYYfhm2BacRvNqcg9W^^E^O?rF1mMdIT9tRWtc9KO2H#6%w%DpM1PR19@ z;W&JCAnhSm9abE7UYv#J?DVEV{`A=Q2zmaW3uypq==m&VDFDxoB}!eTUPLmZdO4W^ zpe0IVhDz8BP9yIRXGXV!vvjUny&`y)E4?c-;H#?I=6sY|RsG*jJ*mV>!$?OyhDnVB zA+)qr11}0#DIiGEX9=S5D3<_almj?s2_1x2b{^5dDXkDlb0**YDb3A&{@~qHNjMF; zi}TB#meoE0;7Gn2o*LRJ~k$_;409END`c<--;&Q31>!GvIL=It-VIhz!~+)YT-CV5?>8xMuTu>Qc_B=_vVV=S+CsZYRw-x-CQKJ8>)WM5~U5u z4YF@Z5DemcB3mN-bsJ#KAa|bWEV+S|QskZ%JhPz|mWPTN>mco;(gn}b-6UC)yxo{j z8`@j|!M42iyEBHe@?5uDz;lR_8GdA50Q>bE|HUk&-kBNO0fMhh0W*Zni?5iQRUs|Z z?R7GP)6N+(gX5DWN;m~t%c!?>rT3)F(p08B1Fr=TrFREWQe^&cb2)x3cldTnLrr(k z$A%CZlW`)Pat>8QN)gXHqi6*)T7?!!^CDZcB7T)0MXhl)kOt-ifHSpd3-MeRmuC&; zK7a6jp~=rZA$S445sg28maW@QDf>|BE8A|PXa4~+le^sCL1y3uymsCn&ZsxrM-9%T zf_FOE%mZDfUV)`jpP50n?WJuP8Ln%UK5kXj04{XaJpniy)sI0|;}Na=59MIgDQ%UN zZN`#QPAgl{Kx-fR1&9XcYEnxVm{?`O6KM!2&FHIAHaHmNt!mb6?(>J;pw{r2y1M2I zz2IvS%Mjkz=>h9VR*|$&FLGtr3{LYnV3EWZz!{TNa21@HlpI-%2uRhPgwqZ{9z1&w zrHjDrCE(P4gABi{mW0rboD_SFh0tt8QYj5?i1XEm27?0ghz7$<9&^kG(ommcKJ5W@ z-b%CL+?diLgXa&MKM7u_)G>@_r=P;Tmv53T2 zAfqG|WNolU-Dib9m6Oft{sd?hbp~nh%t-J#ZID(Wt}2a$73SSF(8YdtPbXeaSE(2W zC{7v!Z+AcIA4D{oc;FM}E_-~iJq2Tky9CmFT}Ekf?)O49Q1;6JKzP%QftvsQ8V`vJ zXtofiOa@>I%Mdm-ZeEakH!_3cM<+8lEu?N);@iX7g|c_zHNi8Yd>raNf1{3^Z040< zP1=SuU}lwuH>`mWLhHq_sZUW5P0<@68qC%%A{x9}*bEUn0;fr+2hwn3N{e%24)Y9h zjC=mD3e*^%#k!_AQ99E& zQ9@{}57oEfczGb(%9 zNc;q}e1hF~wmonw`UJ2q zkcR4Ur!yJ9s$Pm>ND3|VX6k<8#Ud!EeTc)kSA zRKUV3;B1VU#)4-fvIA0fJH&if6nRq(pi(NjWyTt6Mvg=SA+(D%jA&L2m0p8rZX&J7 zK{PO2s0Pxoo6;P`$A2k`jggj;8yKiI&mU4yGkhklssfV%0+s=0vRQ*Y0W*Z2gK`6< zBBFB2crBlYGtVb^fN!5cn1D%%xphry$_keX|3m+rO%Stql4`< zDEM3oXVS@LdKUnouHG$pw#2Qn7j_yb^1GFi3f-7vDN(B>Vr?^AB`}k>g?Ac5G}?Ei zAUB&sG??vqG7(Ht{PKVqfa2Ka5(bGI6ZHaOiypAjy7D1Y-4 z$B$je5FgKfo{sDfs~_2)XHRlt=P>j9J1h9B>VB!{ubVq%yvCQ{%xkUZoTV2)DuAux49)~8&0Z8d%e4gQMwI@l_A&`f(dwudv0CGV{8{Th#oE{_L0696hNSdj zJB-v#aytsuK`Y43=pP`rNwUKQiOyJg9d|rCPMrJRy)6%3aljGB@#)nbY?T2@#F#J% z5xRkBlbH3-pJg=mE$IXk?)aVz1V3qCV~vHrFk0|ckD9@6uztIjKuQKd6|gV?XG{v^ z0L+_7S;;6ubr(t-@S;`@*Jd5~-xxzr>M#K(iAq|rppg_tx|PNrM57YBe@sNtfIjNO ztI!-)6Jeq+rL#`Bo=Lyp)QB*SfZcOf$;-Q81lI0N~0t^j;9a5j99H%v=o!84&c1uLcC+3=WDwZiSq z86uW)mS<(}m26>JBgQ&84}F;ZnC0t`NMn8-D+^QiOq1b<`_Dys0D(|54$`_15x>Ly4l`RLYDCboF*{#$<0X3C@10#6g?aWfg7G zVfaGM(nHF^n%WGb)t7-^JT5yxX7IaHB{TRfufSO?YzC*&H-$4Q z5zZE#Y)Um68zp#Vq@au)dFgOd@VrFh<6P8nVO^a_=u03EEybeAr6Dw>NsjVXK^rLW zakwL*fdf;;m{kXV*uCo*9Cw1%>ju*Byo^JXh5*!jeeW;>e=SNeSZH%L!_zYU`%Y12 zqx)bPvStrcT>?^mNv}sQA~RIsOeQmw=<0=VW-ZfM_mBo>Qt(WyaZKqw0%Z5epME5U zfBq3^h}J_D)nV?S;Rn&U*_$95Dm3O$6z>AqqWbtun&-CU6Am6-MrjC}kt*~2^}}VL z7MtN|Y5%^HwR9xy0d0!{rDkb$v4deOLkd!U;S0zNel0A$MrLs8rJlWUcuzRn``8)N zzTnyYMOG?pv|p#5Kkmlt|*bsq9ITO;%m%<5pyb)F;z@!e+p8g=tiK zj_n=cjLF_s>T8L{zgVLrX?#orY>I899a5nq#Ira`Z!WuOv7M5nbXQ05qofS$`cux| zglJ$Lthfan8lwa5^#bfp^qPmrKgT1lofxGwEIIV_JOl7w_QbP0@Zl*nINJ=H{ULD&Z_K+FE-n|Q%!K=68oF+P7w)ZkPV_N*!nN}%NU+}jE&;Im6 zDIqjbY)6+|9qQerdDAhAAsWmcSz#%MT`GtMnZ^QRo?fK10J*kM8u&cOjwX3ap4k8r zO2d9o8!!X#`58Qamh#QF#2rX6Qz}i}+$~^+)GgDZ15H%ntVo0fw9><7P}?>OXC_gE zGb;6DQ>rwb<&M-L`qN!xFOLQ*y_68zG3;Cjp*iZIN<<~+K{Vq{dshH*y82c%YUofj^+;-yT7y&IS+7n*lhEj?c7x2xu#b zrC2KUrfyOvv4=l0gI_hXuc4I=XL8$?!x-lB^kN_lzAHGLMOY*WT>0$~9w6h$ zC`$1E^RohBDS^di|K(WoEq%!rEtRTMPpOmC!*3)rtb#L-{B#V$G@MaF+5l(bI|0H5 z1R$FpPYnmp$P$#^3lk#OOY7jjql>vp(L@MM!XPUK5QO%`hRwXrSzxRS5e*KdO`dg* zq_3m2ffqaKb!vun^mZOknB`%Z-=xL_&lB8s!rPwZqE%Mf;U0Lvb# z#IEA3HDm_gzm7q8XE@W zh{k~LmWT$12)r(jmX-v}oOJke=8@!4ngfCfrNL=KPHEsxNhxYFoCcu^WW5_U1Lres z&-jvPoU+tIinG*J>?G%>u>6~n8GLW^VKX@P8{P)Mm2hTHREd!c9O9iK-2+VNec|Zk zhnwMIbr%hz&zO`@+^`OH%zF$HF-~l%&Phz~foSkr<)M$`85QdCTLMsf2MzHYVmd7F zfGe?AP(uh|q8Wbpth6HQ#>$?dI9uXpQ@{+VXJ6~c48gWqA~U%5 z1+GFRYzD{4&ESlR!8%oy0$9*6j!OA z9G*fK{}h=$hQiE}vj5)*XZ9{r;fzV_iyWNO%#4(so6EFc#LY2R_}snuCezJy@P0A_omN(YtrFY4S&w0lm>@~Qc6P#YR)815vl-c z{(W*@bCqxCfYaG;ScJy6A2_CehXPAvDK~wpIeZgWYlW zL^L=cMG*}Q2xxWiubMXv2GUWaw8!TvrNQqzvVt?=G-T(Vcs2|HsAW|=lmjJzXJ?Ut z8lINj_iN;L&W{v|dPwxDI8_@fn~^gSBJA@kD9@+!W$^h|2&*IExaL|sXMw} zwUJzfW@d&<*|Q;=DN=j%wh~Fm>L8pUxtgd^{H;SGDjGr?21+>1dpV+k?X28`OGUM_ zPEbzrT2f3;vOGWp;7p!LN`q52r=OrrLO2c2w!vv0pxgw&xvAmIKkop+JtCiPKBVph z0M!0SJ{4CvIb~k{K{A71i#J>qIIB5%cR15-r9yX%gs=q=&yXeB?f-2gvCBe<#A795 zoD&=CyGhL`qA@X?k|F7}h=!7f1K_k&IO~Le?R*3T>Xhao8k}YPkrYrG+`3#!L)b_x z3a4Qb)HI#k3^q}w;Y=?FPpFoSvLnTE7*D?Z(cJVw?dy zf7S_BX*G}rcjSlYZHUs4G;fyDa4S#?Z=~}YEgpaZ_;mlile*{ws4O6&Tg73HO_`T; zeb1}#RgYJtxr@VQ&iL$wvr0St{>q+pIAhuYXJYNN7G;${p^BAee+uO7l&d7un1mo= z2u;_!BN`|$IUe9pl*cG938Z1H$TmuY!$99FSqy3s@x(1#2x{k?b*%RN{Tf9U(Qj4J zv*=J_rp#Bofk{>Px<8pYMQY(L6v+&=rd|za;w;rws6Csm06aKTn=Mu$nI+TsDTNr` zOCkmh>tJ{xl7ZDsYvnfpq!1e1Hopg=!D)btIJ64~z&PWYKpM>&C<4C$IE_1nZdV~`;?d|^Of!^QZ0^#k21sD5i*0{n4qF6 zR4swC+Lto!b(V@g6wxk} z+D;GAKmo`>G*I;MIB$O-4L)*}Q7p*vDGkrj4=4?8jS&FFW$_A7L&|Eh=<{mv_iIF% zz4TR8bgR-*<}Tf_)QTLv1(`iYiA}h@2b%Ex)Znb*oF$ebXR~ltYCx;P$)xU=1$o&)VdrElUdld)no>5tVSyOgR`?{ z8z4+kPqjngTxwa(Y#0mPP!h6SK~!4V5_u@nLukJP(Liab;sk+xJ&*>U(#pIwmi25} zaOgQhX~;k=xU<%R8de3>&Y9tj_n&Y_x4JWv;d#Yksnt0e#5a6SDf^F0lZz$C0C>@P=Co}k^s$>S=RSnKOCx!G~aJE3gysbzd!{PlK$mV&d zZ6kR{&2W-VDxzjWXp^ELG+%1RkINAa?8c$Zfa3)ImUNO+=W;j9xc6u#SNfPudhig%M7-V8KQzCI8}WQ0KO}~+5ak>-A;wz+3Fr;OV+S_x&2Ef|2Z9+ze{9JGw2F zA#K~^ZXg+hkF~u^*vwDo{=LTV#927=MU3A!c&6+A51$?Q-`Yk_2F9{AJW?fErb3S% zLi2PbqQMQM6%Y+h^E}9Sd}c!jc&y{mUQlH9aVH|&adU?Y;@KYfD^k#xFN4rOupZR# zB37$^zXqyQBv&AAb+y_gQPtOgcZ^ZBgILzSCcT<*(l2=#I- zL*`-m8vqCkt|c?L?SDTNV`BU ziriUV5$&l>`gP(MA&0v_0bRfAPvra2SlZL^OD;@)+ zZUuofJbPHBG$b{C{V>R3Y4HryzEdYb4bRa-2x@2-{#~qwra$TPXT=pi<(0G6G8ynT zSca^rZ$W18dl5B*XI04zzYfmylg*N5gJ*xbnKp&cblmZyHNOqfz&7j=t^(lU(E#uT z4ag|XgNk8F6LV98DA2VO)DYLD1=S$*>svKeLo*pIpQ-ork5U#nYdMnv(jKNXQm~mN zvk5Fiyo26^%n+3F+facaMD_(T16}}Uo=R}02ha5F*_GVot5^%?000G6NklcVpv;f&cr3?q8IipiigRj`@GGNcWDOkSQh^>EvTWEQs5$%-oC zS+{~SUrytvA3MvZVx}wUs_^icct_t?1R(TSmnYefyDgzuDI8UL5UupCz!F4*-|~S# znulm`w&aC@G=vv%hSK1*WSY|U8a!LAfEvO(D6Q*h_LIGk)gXk{((_FKZMC9yFd3jO z;!1-Bn|v?K4blcj9$r9Z2;GjrS>Vmd@*8kBIMYK}2r8w@XUW#7V^$Ol(+mQe0!C6AqzaFD9hW~yt$Z@*J?LydzjoxBY`-3Go@;xW?j)h49LrwyJqk#?{eDsCToYyeL_8(Xzs&Sa2V zE|^JMS89{CJo7M)PQSnIUcu&l(^z1f_~$GvGCF=E=Q_ z(}~omRAa$dn)9J*=ee?Ky^yuyPjD8XgsQ|wR6f%Xm8v^jk|-cr>2*#--6x8r221D%)EW)e#LP~?bp~O||1`BMmrasN^G>ddza?<;&#A*ngXV0H)1u~$v6^ZMz zW+tujl1!BTFhNxd7?*SmJu8cu$^KJ-dwOzkqdNmMLd_!|PqQL_fr~M1hI^j2Xc_0n3&$ysKY4GpX-Ql#AHbqcFwnh!J z8vFtOR=2(yKHCjsKn^r#>HC3ZDQz&4P1=j^xx=&bmc$0bScc5=4af{}T}3#H2Iuzig>)CyJTUoy<=<6;cl`Au}W+>1Wje2ytD-uo(hMsJE@o zNkuqQ=2#|g4ygCSLlxtER-cqDS$EWNk7geZB6u75dxth&MI+kk9Y z*oPELrALCF^ui}jLM%h-|4qmYL3Q=88Soq6tXeOX=Omw&Cl&6jMH1GuAKfNg$3cNA z1P)a$f>fMWLuiL{buK_OxVv2q(ct&u;y@alJMocpH%dd=uxHK;sEKfs`l*>+!fMEx d@zCQc{2$XFIo?N4tB?Qy002ovPDHLkV1fr?IWqtN literal 0 HcmV?d00001 diff --git a/Tests/TestFiles/Volumetric/img_06.png b/Tests/TestFiles/Volumetric/img_06.png new file mode 100644 index 0000000000000000000000000000000000000000..7de23b33630f6486d2a382b3b6a923bdcc031f9f GIT binary patch literal 89694 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 IM6N<$f-ngNng9R* literal 0 HcmV?d00001 diff --git a/Tests/TestFiles/Volumetric/img_07.png b/Tests/TestFiles/Volumetric/img_07.png new file mode 100644 index 0000000000000000000000000000000000000000..c22b5c263e83784fbbfba40090783ef7519413a1 GIT binary patch literal 75264 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�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

yM3QkQ|#BmIU+ziYf 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 UCqs5)2*6KONlUR_-X`*Y0517K4gdfE literal 0 HcmV?d00001 diff --git a/Tests/TestFiles/Volumetric/img_09.png b/Tests/TestFiles/Volumetric/img_09.png new file mode 100644 index 0000000000000000000000000000000000000000..5ecd87a1f3cf6c4403a551f8ae0926fecbd761c7 GIT binary patch literal 46669 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 A{>S4qOms!J=UlDEgCy?RVuo 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 Y!cG4sx7#XVePjSdSv8qjDYMZ31JAQOVE_OC literal 0 HcmV?d00001 diff --git a/Tests/TestFiles/Volumetric/img_11.png b/Tests/TestFiles/Volumetric/img_11.png new file mode 100644 index 0000000000000000000000000000000000000000..f616711d6d16076c292fefe5808cb350bec4ce75 GIT binary patch literal 8323 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 MHP(5mZTrXn0DMhB#{d8T literal 0 HcmV?d00001 diff --git a/Tests/TestFiles/Volumetric/template.3mf b/Tests/TestFiles/Volumetric/template.3mf new file mode 100644 index 0000000000000000000000000000000000000000..b1858e56be79449c2d5d31a16c99a98703d59573 GIT binary patch literal 37160 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 z

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 F{{U#p(Z2uy literal 0 HcmV?d00001 diff --git a/submodules/AutomaticComponentToolkit b/submodules/AutomaticComponentToolkit index 4237585f4..33422936d 160000 --- a/submodules/AutomaticComponentToolkit +++ b/submodules/AutomaticComponentToolkit @@ -1 +1 @@ -Subproject commit 4237585f405bbebfbaf143ade7033777d1491bda +Subproject commit 33422936d34156d0d683e8ab363a8e10b14491c6 diff --git a/submodules/cpp-base64 b/submodules/cpp-base64 index 07ae5045d..951de609d 160000 --- a/submodules/cpp-base64 +++ b/submodules/cpp-base64 @@ -1 +1 @@ -Subproject commit 07ae5045d67b5bf6ffb46646b8ac2370eff1ae3e +Subproject commit 951de609dbe27ce8864dfe47323c4ade96bee86e diff --git a/submodules/googletest b/submodules/googletest index f8d7d77c0..df1544bce 160000 --- a/submodules/googletest +++ b/submodules/googletest @@ -1 +1 @@ -Subproject commit f8d7d77c06936315286eb55f8de22cd23c188571 +Subproject commit df1544bcee0c7ce35cd5ea0b3eb8cc81855a4140 diff --git a/submodules/libzip b/submodules/libzip index 210b09d9d..3091d0424 160000 --- a/submodules/libzip +++ b/submodules/libzip @@ -1 +1 @@ -Subproject commit 210b09d9d2d0f4c0bbc64f92ad45c1ac53598fec +Subproject commit 3091d0424e04f98e051fce5e94bb3a6461a33b91

xOw%w?)?TVSbifj=J2dF{RX;9WHM{# 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 literal 0 HcmV?d00001 diff --git a/Tests/TestFiles/Volumetric/SphereInACage.3mf b/Tests/TestFiles/Volumetric/SphereInACage.3mf new file mode 100644 index 0000000000000000000000000000000000000000..6cb9a078f8c32d5e66f60b99c2af244fd0374717 GIT binary patch literal 61937 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